菜单

消息系统

相关源文件

LangChain 消息系统提供了一种结构化的方式来表示、操作和交换语言模型、人类和工具之间不同类型的消息。该系统是 LangChain 架构的基础,能够实现基于聊天的交互、工具使用和复杂的对话模式。消息系统旨在为开发者提供灵活性,并与各种模型提供商兼容。

有关使用消息的特定链的信息,请参阅链类型和实现。有关与消息系统集成的工具的详细信息,请参阅工具系统

消息类型和类层次结构

LangChain 消息系统围绕消息类层次结构构建,每个类代表对话中不同类型的参与者。

来源

核心消息类型

  1. BaseMessage:所有消息的抽象基类。包含以下共同属性:

    • content:消息的实际内容(字符串或内容块列表)
    • additional_kwargs:与消息关联的额外数据
    • response_metadata:关于响应的元数据(如token计数)
    • type:消息类型的标识符
    • name:消息发送者的可选名称
    • id:消息的可选唯一标识符
  2. AIMessage:表示来自 AI 模型的消息。

    • 包含模型用于工具调用的tool_calls
    • 跟踪usage_metadata以获取 token 使用信息
    • 可以将消息标记为example用于少样本提示
  3. HumanMessage:表示来自人类用户的消息。

    • 人类提供内容的简单封装
  4. SystemMessage:用于指导模型行为的指令/上下文。

    • 通常在对话开始时使用
    • 为模型设置初始上下文和指令
  5. ChatMessage:具有可自定义角色的通用消息。

    • 通过role字段提供灵活性
    • 适用于自定义对话模式
  6. FunctionMessage:返回函数执行结果。

    • 遗留的工具使用方法
    • 包含已执行函数的name
  7. ToolMessage:返回工具执行结果。

    • 现代的工具使用方法
    • 包含tool_call_id以将响应链接到特定的工具调用

来源

消息分块类

每种消息类型都有一个对应的“分块”类(例如,AIMessageChunkHumanMessageChunk),它们同时继承自常规消息类和BaseMessageChunk。这些类用于流式响应,其中完整消息通过分块逐步构建。

分块类重写了__add__方法,以实现将分块连接成完整消息的功能

来源

消息内容类型

LangChain 中的消息可以包含多种格式的内容

  1. 字符串内容:简单的文本内容

  2. 多模态内容:包含文本和其他媒体类型的列表

内容块的结构取决于模型提供商,但 LangChain 提供了实用函数来处理各种格式。

来源

工具调用和工具消息

消息系统在表示工具使用方面采用了复杂的方法

  1. ToolCall:表示使用工具的请求。

    • name:要调用的工具名称
    • args:工具的参数
    • id:工具调用的唯一标识符
  2. ToolCallChunk:用于流式工具调用。包含合并成完整ToolCall的部分信息。

  3. InvalidToolCall:表示无法正确解析或执行的工具调用。

  4. ToolMessage:返回工具执行的结果。

    • tool_call_id:将响应链接到特定的工具调用
    • content:工具的输出
    • artifact:可选的额外输出数据
    • status:成功或错误状态

来源

使用元数据

AIMessage对象可以包含usage_metadata用于跟踪 token 使用情况

此元数据可以与add_usagesubtract_usage等实用函数结合使用,以跟踪多个请求的累计 token 使用情况。

来源

消息实用工具

LangChain 提供了许多用于处理消息的实用函数

消息转换与格式化

  1. convert_to_messages:将各种输入格式转换为BaseMessage对象。
  2. get_buffer_string:将消息序列转换为格式化字符串。
  3. messages_to_dict/messages_from_dict:在消息对象和字典之间进行转换。
  4. message_chunk_to_message:将消息分块转换为常规消息。

来源

消息操作

LangChain 提供了用于操作消息集合的实用工具

  1. filter_messages:根据类型、名称或 ID 过滤消息。

  2. merge_message_runs:合并相同类型的连续消息。

  3. trim_messages:缩减消息历史以适应 token 限制。

这些实用工具可帮助有效管理对话历史,尤其适用于需要保持在 token 限制内的长时间对话。

来源

常见使用模式

以下是消息系统在 LangChain 中常见的一些用法:

基本对话

使用工具

流式响应

与 LangChain 框架集成

消息系统构成了 LangChain 内部交互的核心。

  1. LLM 和聊天模型集成:消息是聊天模型的主要输入/输出格式。消息通过提示模板生成,然后传递给模型,模型以 AIMessages 形式返回响应。

  2. RAG 系统:消息构成了检索系统和生成组件之间的交互层。检索到的文档通常在发送到模型之前被合并到消息中。

  3. 代理框架:代理使用消息系统来维护对话状态、执行工具和做出决策。工具调用机制尤其对代理功能至关重要。

  4. 记忆系统:聊天历史以消息序列的形式存储,从而在对话中实现上下文相关的响应。

消息系统的灵活性使其在 LangChain 生态系统中具有广泛的应用,从简单的聊天界面到包含工具使用的复杂多代理系统。

来源

总结

LangChain 消息系统为会话式 AI 应用中不同类型消息的表示和操作提供了全面的框架。主要组成部分包括:

  1. 针对不同对话参与者(AI、人类、系统等)的消息类层次结构
  2. 通过消息分块支持流式传输
  3. 复杂的工具使用机制
  4. 操作消息历史的实用工具
  5. Token 使用跟踪

该系统使开发者能够构建复杂的会话式应用程序,这些应用程序可以利用工具、维护上下文并以一致的方式与各种模型提供商进行交互。