LangChain的四大消息类型
LangChain的核心消息类型主要用于构建对话系统和链式交互,以下是其四大核心消息类型及其作用:
- HumanMessage —— 用户消息
- AIMessage —— AI 回复
- SystemMessage —— 系统设定
- FunctionMessage —— 函数调用结果
HumanMessage——用户的声音
代表用户输入的信息,通常用于模拟或接收用户的提问、指令或请求。例如:
from langchain.schema import HumanMessage
message = HumanMessage(content="请解释深度学习的基本概念。")
HumanMessage 的其他有用属性
在 LangChain 框架中,HumanMessage 类继承自 BaseMessage,提供了多个有用的属性用于处理消息内容。以下是几个关键属性:
- content:存储消息的文本内容,类型为字符串。这是最常用的属性,用于传递用户输入的信息。
- type:标识消息类型,对于
HumanMessage固定为"human"。可用于区分不同类型的消息(如系统消息、AI消息等)。- additional_kwargs:字典类型,存储与消息相关的额外参数。适用于需要附加元数据或自定义参数的场景。
- example:布尔值,标记消息是否为示例消息(如 few-shot learning 中的示例)。默认为
False。- name:可选属性,指定消息来源的名称(如用户ID)。用于多角色对话中区分不同发送者。
使用场景示例:
from langchain.schema import HumanMessage
# 创建带附加参数的 HumanMessage
message = HumanMessage(
content="你好",
name="用户1",
additional_kwargs={
"user_id":"user_123",
"timestamp": "2023-01-01"
"priority":"high"
}
)
# 访问属性
print(message.type) # 输出: "human"
print(message.additional_kwargs) # 输出: {"timestamp": "2023-01-01"}
addition_kwargs的常见额外属性
additional_kwargs 是自定义附加参数,无固定强制字段,核心根据使用场景(如消息系统、任务调度)灵活扩展。
通用 additional_kwargs 参数配置模板如下:
基础核心参数(必选)
user_id: str - 用户唯一标识(如 "user_123"),用于身份识别
timestamp: str - 时间戳(格式:YYYY-MM-DD HH:MM:SS),记录操作发生时间
priority: str - 优先级(可选值:high/medium/low),用于任务调度排序身份与权限参数(可选)
role: str - 用户角色(如 "admin/operator/visitor"),控制权限范围
department: str - 所属部门(如 "技术部 / 产品部"),用于业务归属划分
permission_level: int - 权限等级(如 1-5 级),适配精细化权限控制业务与任务属性参数(可选)
task_id: str - 关联任务 ID(如 "task_456"),用于任务追踪关联
message_type: str - 消息 / 请求类型(如 "text/code/query/task"),标识内容类型
timeout: int - 处理超时时间(单位:秒,如 30),设置任务最长处理时限
tags: list - 标签列表(如 ["python", "algorithm", "urgent"]),用于分类筛选渠道与设备参数(可选)
channel: str - 来源渠道(如 "app/web/wechat/email"),记录请求入口
device_id: str - 设备唯一标识(如 "device_789"),适配多设备场景
os: str - 设备系统(如 "iOS/Android/Windows/MacOS"),用于适配兼容回调与扩展参数(可选)
callback_url: str - 结果回调地址(如 "https://api.example.com/callback"),用于异步返回结果
ext_data: dict - 自定义扩展字段(如 {"project_id": "proj_001", "remark": "紧急需求"}),适配特殊业务场景
name 与 addition_kwargs 中的 user_id 的区别:
name 通常指代某个实体的名称或标识符,可能是用户、对象或系统的名称。它用于标识或区分不同实体,但具体含义取决于上下文。例如,在用户系统中,name 可能是用户的昵称或全名。
addition_kwargs 中的 user_id 是附加参数中的一个字段,专门用于存储用户的唯一标识符(ID)。user_id 通常是系统内部生成的唯一值(如数据库主键或 UUID),用于精确识别用户身份,尤其是在多系统交互或数据关联时。
关键差异点
-
用途不同
name用于展示或一般性标识,可能允许重复(如多个用户同名)。
user_id是唯一性标识符,用于精确匹配和数据处理。 -
可变性不同
name可能允许用户修改(如昵称变更)。
user_id通常不可变,确保数据一致性。 -
技术场景
name常用于前端显示或用户交互。
user_id用于后端逻辑、数据库关联或 API 调用。
典型示例
在用户系统中:
name: "张三"(用户可见的称呼)。addition_kwargs.user_id: "U123456"(系统内部唯一标识)。
如果需要通过代码区分,可通过字段类型和用途判断:
user_data = {
"name": "Alice",
"addition_kwargs": {"user_id": "user_789"}
}
AIMessage——AI的回复
AIMessage 是 LangChain 中用于表示 AI 模型生成的文本消息的类,属于 LangChain 消息系统的一部分。它通常与 HumanMessage(用户输入)、SystemMessage(系统指令)等配合使用,构成多轮对话的上下文。例如:
from langchain.schema import AIMessage
response = AIMessage(content="深度学习是机器学习的分支,基于神经网络...")
AIMessage 的核心功能
存储 AI 响应:封装 AI 模型生成的文本内容。
支持元数据:可附加额外的元数据(如生成时间、模型名称等)。
结构化交互:与其他消息类型共同维护对话历史,支持链式调用(如
ConversationChain)。
基本用法示例
from langchain.schema import AIMessage
# 创建 AIMessage 实例
ai_message = AIMessage(content="这是 AI 生成的回复。")
# 访问内容
print(ai_message.content) # 输出: "这是 AI 生成的回复。"
# 添加元数据
ai_message_with_meta = AIMessage(
content="回复内容",
metadata={"model": "gpt-4", "timestamp": "2023-01-01"}
)
与其他消息类型结合
AIMessage 通常与 HumanMessage 和 SystemMessage 一起使用,构建完整的对话流程:
from langchain.schema import HumanMessage, SystemMessage
messages = [
SystemMessage(content="你是一个有帮助的助手。"),
HumanMessage(content="你好!"),
AIMessage(content="你好,有什么可以帮您的?")
]
在 Chains 中的应用
在对话链(如 ConversationChain)中,AIMessage 会自动处理并传递:
from langchain.chains import ConversationChain
from langchain.llms import OpenAI
chain = ConversationChain(llm=OpenAI())
response = chain.run(input="你好!")
# 内部会生成 AIMessage 并返回内容
注意事项
内容字段必填:创建时必须提供
content参数。不可变对象:消息实例一旦创建,内容不可直接修改,需新建实例。
序列化支持:可通过
dict()或json()方法转换为字典或 JSON 格式。
通过 AIMessage,LangChain 能够以结构化方式管理 AI 生成的文本,适用于聊天机器人、多轮对话等场景。
SystemMessage——系统设定的规则
SystemMessage 是对话系统中用于设定 AI 助手行为或背景的指令消息,通常由开发者或管理员设置,不会被用户直接看到。它定义了 AI 的角色、回复风格或对话规则,如设置AI的行为规范或对话背景。例如:
from langchain.schema import SystemMessage
system_prompt = SystemMessage(content="你是一个专业的AI助手,回答需简洁准确。")
SystemMessage 的核心作用:
- 角色定义:明确 AI 的身份(如客服、导师、翻译等),确保回复符合场景需求。
- 行为约束:限制回复范围或风格(如避免主观意见、仅提供事实性答案)。
- 上下文引导:为多轮对话设置初始条件或背景信息,提升连贯性。
典型使用场景:
- 客服系统:通过 SystemMessage 设定 AI 为“在线客服”,要求回复礼貌且聚焦解决问题。
- 教育应用:定义 AI 为“数学辅导老师”,指示其分步骤解答习题。
- 内容生成:约束输出格式,如“用 Markdown 列表总结要点”。
注意事项:
优先级:SystemMessage 通常优先于用户输入,直接影响后续交互逻辑。
避免冲突:若同时设置多个 SystemMessage,仅最后一个生效。
测试验证:需通过实际对话测试调整指令,确保效果符合预期。
FunctionMessage——外部函数的回声
FunctionMessage 是 LangChain 中用于传递工具(函数)调用结果的消息类型,通常与 Tool 或 BaseTool 结合使用。当代理(Agent)调用外部工具后,工具返回的结果会封装为 FunctionMessage,并传递给模型进行后续处理。
核心功能
-
传递工具输出:将工具的执行结果(如 API 响应、计算值等)传递给模型。
-
结构化格式:包含工具名称(
name)和输出内容(content),便于模型解析。 -
多轮交互支持:在链式调用中,FunctionMessage 可与其他消息类型(如
HumanMessage、AIMessage)组合,实现复杂对话流程。
使用方法
1. 创建 FunctionMessage
通过 FunctionMessage 类直接实例化,需指定工具名称和输出内容:
from langchain.schema.messages import FunctionMessage
message = FunctionMessage(
name="weather_api", # 工具名称
content="{'temperature': 22, 'unit': 'Celsius'}" # 工具返回结果
)
2. 在代理中使用
与 AgentExecutor 结合时,FunctionMessage 自动由工具生成并传递。例如:
from langchain.agents import AgentExecutor, load_tools
tools = load_tools(["serpapi"])
agent = initialize_agent(tools, llm, agent="chat-conversational")
agent.run("查询纽约的天气") # 工具返回结果会自动转为 FunctionMessage
3. 手动处理消息序列
在自定义链中,可将 FunctionMessage 加入消息历史:
from langchain.schema import AIMessage, HumanMessage
messages = [
HumanMessage(content="有什么推荐的旅游景点?"),
AIMessage(content="建议查询当地天气。正在调用 weather_api..."),
FunctionMessage(name="weather_api", content="{'sunny': true}"),
]
response = llm(messages) # 模型根据消息历史生成回复
注意事项
工具名称一致性:
name需与实际工具名称匹配,否则模型可能无法识别。内容格式化:
content可以是字符串或 JSON,需确保模型能解析其结构。错误处理:若工具调用失败,可通过
content传递错误信息(如{"error": "API timeout"})。
通过上面的四大消息类型,可以构建出一个完整的对话流程
from langchain_core.messages import HumanMessage,AIMessage,SystemMessage,FunctionMessage
human_msg = HumanMessage(
content = "请问今天上海天气如何",
name = "张三",
additional_kwargs = {
"user_id": "user-123",
"timestamp": "2023-01-01",
"priority":"high"
}
)
sys_msg = SystemMessage(
content = "你是一个天气助手,提供各地的天气情况"
)
import json
fun_msg = FunctionMessage(
content = json.dumps(
{
"city":"上海",
"weather":"多云转晴,气温22°C"
}
),
name = "get_weather"
)
ai_msg = AIMessage(
content = "今天上海是多云转晴,气温22°C,记得出门带件薄外套哦!"
)
conversation = [
sys_msg,
human_msg,
fun_msg,
ai_msg
]
print(conversation)
使用Message类型的主要优势包括:
- 明确的角色标识 —— 能够清晰区分消息来源:系统、用户、AI 或函数工具。
- 高效的上下文管理 —— 支持多轮对话的维护与追溯,帮助模型准确理解对话历史。
- 结构化工具调用 —— 原生支持函数调用(如 FunctionMessage),无需手动拼接和处理 JSON,提升开发效率与可靠性。
- 统一的接口规范 —— 模型返回的是结构化的 AIMessage,而非原始字符串,便于日志记录、存储和后续的流程集成与复用。
617

被折叠的 条评论
为什么被折叠?



