基本用法
使用消息最简单的方法是创建消息对象,并在调用时将它们传递给模型。文本提示
文本提示是字符串 - 非常适合不需要保留对话历史的简单生成任务。- 你有一个单一的、独立的请求
- 你不需要对话历史
- 你希望代码复杂度最小
消息提示
或者,你可以通过提供消息对象列表来向模型传递消息列表。- 管理多轮对话
- 处理多模态内容(图像、音频、文件)
- 包含系统指令
字典格式
你也可以直接在 OpenAI 聊天补全格式中指定消息。消息类型
系统消息
SystemMessage 代表一组初始指令,用于引导模型的行为。你可以使用系统消息来设定基调、定义模型的角色,并建立响应的准则。
基本指令
详细角色设定
人类消息
HumanMessage 代表用户输入和交互。它们可以包含文本、图像、音频、文件以及任何其他数量的多模态内容。
文本内容
消息对象
字符串快捷方式
消息元数据
添加元数据
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 等,以获取实时答案。

