LangChain 消息系统提供了一种结构化的方式来表示、操作和交换语言模型、人类和工具之间不同类型的消息。该系统是 LangChain 架构的基础,能够实现基于聊天的交互、工具使用和复杂的对话模式。消息系统旨在为开发者提供灵活性,并与各种模型提供商兼容。
有关使用消息的特定链的信息,请参阅链类型和实现。有关与消息系统集成的工具的详细信息,请参阅工具系统。
LangChain 消息系统围绕消息类层次结构构建,每个类代表对话中不同类型的参与者。
来源
BaseMessage:所有消息的抽象基类。包含以下共同属性:
content:消息的实际内容(字符串或内容块列表)additional_kwargs:与消息关联的额外数据response_metadata:关于响应的元数据(如token计数)type:消息类型的标识符name:消息发送者的可选名称id:消息的可选唯一标识符AIMessage:表示来自 AI 模型的消息。
tool_callsusage_metadata以获取 token 使用信息example用于少样本提示HumanMessage:表示来自人类用户的消息。
SystemMessage:用于指导模型行为的指令/上下文。
ChatMessage:具有可自定义角色的通用消息。
role字段提供灵活性FunctionMessage:返回函数执行结果。
nameToolMessage:返回工具执行结果。
tool_call_id以将响应链接到特定的工具调用来源
每种消息类型都有一个对应的“分块”类(例如,AIMessageChunk、HumanMessageChunk),它们同时继承自常规消息类和BaseMessageChunk。这些类用于流式响应,其中完整消息通过分块逐步构建。
分块类重写了__add__方法,以实现将分块连接成完整消息的功能
来源
LangChain 中的消息可以包含多种格式的内容
字符串内容:简单的文本内容
多模态内容:包含文本和其他媒体类型的列表
内容块的结构取决于模型提供商,但 LangChain 提供了实用函数来处理各种格式。
来源
消息系统在表示工具使用方面采用了复杂的方法
ToolCall:表示使用工具的请求。
name:要调用的工具名称args:工具的参数id:工具调用的唯一标识符ToolCallChunk:用于流式工具调用。包含合并成完整ToolCall的部分信息。
InvalidToolCall:表示无法正确解析或执行的工具调用。
ToolMessage:返回工具执行的结果。
tool_call_id:将响应链接到特定的工具调用content:工具的输出artifact:可选的额外输出数据status:成功或错误状态来源
AIMessage对象可以包含usage_metadata用于跟踪 token 使用情况
此元数据可以与add_usage和subtract_usage等实用函数结合使用,以跟踪多个请求的累计 token 使用情况。
来源
LangChain 提供了许多用于处理消息的实用函数
convert_to_messages:将各种输入格式转换为BaseMessage对象。get_buffer_string:将消息序列转换为格式化字符串。messages_to_dict/messages_from_dict:在消息对象和字典之间进行转换。message_chunk_to_message:将消息分块转换为常规消息。来源
LangChain 提供了用于操作消息集合的实用工具
filter_messages:根据类型、名称或 ID 过滤消息。
merge_message_runs:合并相同类型的连续消息。
trim_messages:缩减消息历史以适应 token 限制。
这些实用工具可帮助有效管理对话历史,尤其适用于需要保持在 token 限制内的长时间对话。
来源
以下是消息系统在 LangChain 中常见的一些用法:
消息系统构成了 LangChain 内部交互的核心。
LLM 和聊天模型集成:消息是聊天模型的主要输入/输出格式。消息通过提示模板生成,然后传递给模型,模型以 AIMessages 形式返回响应。
RAG 系统:消息构成了检索系统和生成组件之间的交互层。检索到的文档通常在发送到模型之前被合并到消息中。
代理框架:代理使用消息系统来维护对话状态、执行工具和做出决策。工具调用机制尤其对代理功能至关重要。
记忆系统:聊天历史以消息序列的形式存储,从而在对话中实现上下文相关的响应。
消息系统的灵活性使其在 LangChain 生态系统中具有广泛的应用,从简单的聊天界面到包含工具使用的复杂多代理系统。
来源
LangChain 消息系统为会话式 AI 应用中不同类型消息的表示和操作提供了全面的框架。主要组成部分包括:
该系统使开发者能够构建复杂的会话式应用程序,这些应用程序可以利用工具、维护上下文并以一致的方式与各种模型提供商进行交互。