基本用法
使用消息的最简单方法是创建消息对象,并在调用时将它们传递给模型。文本提示
文本提示是字符串——非常适合不需要保留对话历史的直接生成任务。- 您有一个单一的、独立的请求
- 您不需要对话历史
- 您希望代码复杂度最低
消息提示
或者,您可以通过提供消息对象列表将消息列表传递给模型。- 管理多轮对话
- 处理多模态内容(图像、音频、文件)
- 包含系统指令
字典格式
您也可以直接在 OpenAI 聊天补全格式中指定消息。消息类型
系统消息
一个SystemMessage 表示一组初始指令,用于引导模型的行为。您可以使用系统消息来设置语气、定义模型的角色并建立响应指南。
Basic instructions
Detailed persona
人类消息
一个HumanMessage 表示用户输入和交互。它们可以包含文本、图像、音频、文件以及任何其他数量的多模态内容。
文本内容
Message object
String shortcut
消息元数据
Add metadata
name 字段的行为因提供商而异——有些用于用户标识,有些则忽略。要检查,请参阅模型提供商的参考。AI 消息
一个AIMessage 表示模型调用的输出。它们可以包含多模态数据、工具调用以及提供商特定的元数据,您可以稍后访问这些元数据。
AIMessage 对象,其中包含响应中的所有关联元数据。
提供商对不同类型的消息进行加权/上下文化处理,这意味着有时手动创建一个新的 AIMessage 对象并将其插入消息历史记录中(就好像它来自模型)会很有帮助。
属性
属性
消息的文本内容。
消息的原始内容。
模型进行的工具调用。如果未调用任何工具,则为空。
消息的唯一标识符(由 LangChain 自动生成或在提供商响应中返回)
消息的使用元数据,可在可用时包含令牌计数。参见
UsageMetadata。消息的响应元数据。
工具调用
当模型进行工具调用时,它们会包含在AIMessage 中:
令牌使用情况
一个AIMessage 可以在其 usage_metadata 字段中保存令牌计数和其他使用元数据:
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" 初始化任何聊天模型:多模态
多模态性指的是处理不同形式数据的能力,例如文本、音频、图像和视频。LangChain 包含这些数据的标准类型,可在所有提供商中使用。 聊天模型可以接受多模态数据作为输入并生成多模态数据作为输出。下面我们展示了一些包含多模态数据的输入消息的简短示例。额外的键可以包含在内容块的顶层或嵌套在
"extras": {"key": value} 中。例如,OpenAI 和 AWS Bedrock Converse 需要 PDF 的文件名。请参阅您选择的模型的提供商页面以获取具体信息。内容块参考
内容块在创建消息或访问contentBlocks 字段时表示为类型化对象列表。列表中的每个项目必须遵循以下块类型之一:
核心
核心
多模态
多模态
ContentBlock.Multimodal.Image
ContentBlock.Multimodal.Image
ContentBlock.Multimodal.Audio
ContentBlock.Multimodal.Audio
ContentBlock.Multimodal.Video
ContentBlock.Multimodal.Video
ContentBlock.Multimodal.File
ContentBlock.Multimodal.File
工具调用
工具调用
ContentBlock.Tools.ToolCall
ContentBlock.Tools.ToolCall
ContentBlock.Tools.ToolCallChunk
ContentBlock.Tools.ToolCallChunk
服务器端工具执行
服务器端工具执行
ContentBlock.Tools.ServerToolCall
ContentBlock.Tools.ServerToolCall
ContentBlock.Tools.ServerToolCallChunk
ContentBlock.Tools.ServerToolCallChunk
ContentBlock 类型时都可以作为单独的类型进行寻址。
内容块作为消息上的新属性在 LangChain v1 中引入,用于标准化跨提供商的内容格式,同时保持与现有代码的向后兼容性。内容块不是
content 属性的替代品,而是一个新属性,可用于以标准化格式访问消息的内容。与聊天模型一起使用
聊天模型接受消息对象序列作为输入,并返回一个AIMessage 作为输出。交互通常是无状态的,因此一个简单的对话循环涉及使用不断增长的消息列表调用模型。
请参阅以下指南以了解更多信息:
- 用于持久化和管理对话历史的内置功能
- 管理上下文窗口的策略,包括修剪和总结消息
通过 MCP 将这些文档连接到 Claude、VSCode 等,以获取实时答案。

