- Role (角色) - 标识消息类型(例如
system,user) - Content (内容) - 表示消息的实际内容(如文本、图像、音频、文件等)
- Metadata (元数据) - 可选字段,例如响应信息、消息 ID 和 token 使用情况
基本用法
使用消息的最简单方法是创建消息对象并在 调用 时将其传递给模型。文本提示
文本提示是字符串 - 适用于不需要保留对话历史记录的简单生成任务。- 您有一个单一的、独立的请求
- 您不需要对话历史记录
- 您希望代码复杂性最小化
消息提示
或者,您可以通过提供消息对象列表将消息列表传递给模型。- 管理多轮对话
- 处理多模态内容(图像、音频、文件)
- 包含系统指令
字典格式
您也可以直接以 OpenAI 聊天完成格式指定消息。消息类型
系统消息
SystemMessage 表示一组初始指令,用于以此为基础设定模型的行为。您可以使用系统消息来设定基调、定义模型的角色并建立响应准则。
Basic instructions
Detailed persona
人类消息
HumanMessage 表示用户输入和交互。它们可以包含文本、图像、音频、文件和任何其他数量的多模态 内容。
文本内容
Message object
String shortcut
消息元数据
Add metadata
name 字段的行为因提供商而异——有些用于用户标识,有些则忽略它。要检查,请参考模型提供商的 参考资料。AI 消息
AIMessage 表示模型调用的输出。它们可以包含多模态数据、工具调用和提供商特定的元数据,您稍后可以访问这些数据。
AIMessage 对象是在调用模型时返回的,其中包含响应中的所有相关元数据。
提供商对消息类型的权衡/上下文处理不同,这意味着有时手动创建一个新的 AIMessage 对象并将其插入消息历史记录(就像它来自模型一样)是有帮助的。
属性
属性
消息的文本内容。
消息的原始内容。
模型进行的工具调用。如果未调用任何工具,则为空。
消息的唯一标识符(由 LangChain 自动生成或在提供商响应中返回)
消息的使用元数据,如果可用,可以包含 token 计数。见
UsageMetadata。消息的响应元数据。
工具调用
当模型进行 工具调用 时,它们包含在AIMessage 中:
Token 使用
AIMessage 可以在其 usage_metadata 字段中保存 token 计数和其他使用元数据:
UsageMetadata。
流式传输和块
在流式传输期间,您将收到AIMessageChunk 对象,可以将它们组合成完整的消息对象:
工具消息
对于支持 工具调用 的模型,AI 消息可以包含工具调用。工具消息用于将单个工具执行的结果传递回模型。 工具 可以直接生成ToolMessage 对象。下面,我们展示一个简单的例子。在 工具指南 中阅读更多内容。
属性
属性
消息内容
您可以将消息的内容视为发送给模型的数据有效负载。消息具有content 属性,该属性是松散类型的,支持字符串和非类型化对象列表(例如字典)。这允许直接在 LangChain 聊天模型中支持提供商原生结构,例如 多模态 内容和其他数据。
另外,LangChain 为文本、推理、引用、多模态数据、服务器端工具调用和其他消息内容提供了专用内容类型。请参阅下面的 标准内容块。
LangChain 聊天模型接受 content 属性中的消息内容。
这可能包含:
- 一个字符串
- 提供商原生格式的内容块列表
- LangChain 的标准内容块 列表
标准内容块
LangChain 为消息内容提供了一种标准表示形式,适用于各个提供商。 消息对象实现了一个contentBlocks 属性,该属性将 content 属性延迟解析为标准的、类型安全的表示形式。例如,从 ChatAnthropic 或 ChatOpenAI 生成的消息将包含相应提供商格式的 thinking 或 reasoning 块,但可以延迟解析为一致的 ReasoningContentBlock 表示形式:
- Anthropic
- OpenAI
序列化标准内容如果 LangChain 之外的应用程序需要访问标准内容块表示形式,您可以选择将内容块存储在消息内容中。为此,您可以设置
LC_OUTPUT_VERSION 环境变量为 v1。或者,使用 outputVersion: "v1" 初始化任何聊天模型:多模态
多模态 (Multimodality) 是指处理不同形式数据的能力,例如文本、音频、图像和视频。LangChain 包含这些数据的标准类型,可以在各个提供商之间使用。 聊天模型 可以接受多模态数据作为输入并将其生成为输出。下面我们展示包含多模态数据的输入消息的简短示例。额外的键可以包含在内容块的顶层或嵌套在
"extras": {"key": value} 中。例如,OpenAI 和 AWS Bedrock Converse 需要 PDF 的文件名。有关具体信息,请参阅您选择的模型的 提供商页面。内容块参考
内容块表示为(在创建消息或访问contentBlocks 字段时)类型化对象列表。列表中的每一项都必须遵守以下块类型之一:
Core (核心)
Core (核心)
Multimodal (多模态)
Multimodal (多模态)
ContentBlock.Multimodal.Image
ContentBlock.Multimodal.Image
ContentBlock.Multimodal.Audio
ContentBlock.Multimodal.Audio
ContentBlock.Multimodal.Video
ContentBlock.Multimodal.Video
ContentBlock.Multimodal.File
ContentBlock.Multimodal.File
Tool Calling (工具调用)
Tool Calling (工具调用)
ContentBlock.Tools.ToolCall
ContentBlock.Tools.ToolCall
ContentBlock.Tools.ToolCallChunk
ContentBlock.Tools.ToolCallChunk
Server-Side Tool Execution (服务器端工具执行)
Server-Side Tool Execution (服务器端工具执行)
ContentBlock.Tools.ServerToolCall
ContentBlock.Tools.ServerToolCall
ContentBlock.Tools.ServerToolCallChunk
ContentBlock.Tools.ServerToolCallChunk
ContentBlock 类型时都可以作为单独的类型进行寻址。
内容块在 LangChain v1 中作为消息的新属性引入,以便在各个提供商之间标准化内容格式,同时保持与现有代码的向后兼容性。内容块不是
content 属性的替代品,而是一个新属性,用于以标准化格式访问消息的内容。与聊天模型一起使用
聊天模型 接受一系列消息对象作为输入,并返回一个AIMessage 作为输出。交互通常是无状态的,因此简单的对话循环涉及使用不断增长的消息列表调用模型。
请参阅以下指南以了解更多信息:
- 用于 持久化和管理对话历史记录 的内置功能
- 管理上下文窗口的策略,包括 修剪和总结消息
将这些文档连接 到 Claude、VSCode 等,通过 MCP 获得实时解答。

