在 LangChain 中,消息(Message)是模型上下文的基本单元。它们代表了模型的输入和输出,在与LLM交互时,承载着对话状态所需的内容和元数据。
消息具有以下属性:
-
角色(Role):标识消息类型(例如 system、user 等)
-
内容(Content):表示消息的实际内容(如文本、图像、音频、文档等)
- 元数据(Metadata):可选字段,例如响应信息、消息 ID、token 使用量等
消息有四种:
- 系统消息(System Message)通常描述 Agent 的基本角色。比如你是一个 SQL 分析师,等等,然后进一步描述其应执行的任务和限制的命令范围。
- 人类消息(Human Message)通常是初始请求,也可能作为必要的反馈或人为介入。
- AI 消息(AI Message)则是由模型生成的任何消息。在这里可以看到模型提供工具调用的内容。
- 工具执行后,会返回工具消息(Tool Message),其中包含工具调用的结果。
- 最后再有一个 AI 消息作为最终输出。
需要理解的一点是,这些消息不是节点之间直接传递的,而是存储在一个共享的持久“状态”(state)中。所有节点都可以访问它。
随着节点执行,输出会以消息的形式存储在 state 中。因此,模型不仅可以访问工具结果,还能看到整个历史消息记录,包括原始问题、工具调用、工具返回信息等,并基于这些进行推理,产生最终结果。最终输出是来自 Agent 的最后一个 AI 消息,同时有整个历史对话记录辅助支撑。
在 Agent 中,AI 消息中除了 LLM 返回的文本内容 content 之外,还有一个tool_calls 属性存储了要执行的工具调用信息。
随后的工具调用结果生成了工具消息,工具消息中的 tool_call_id 与 AI 消息中的工具调用一一匹配,这样 LLM 就知道如何利用工具调用的结果输出最终的 AI 消息了。

