基本用法
使用消息最简单的方式是创建消息对象,并在调用模型时传递它们。文本提示词
文本提示词是字符串——适用于不需要保留对话历史的简单生成任务。- 你有一个单独的独立请求
- 你不需要对话历史
- 你希望代码复杂度最低
消息提示词
另外,你可以通过提供消息对象列表来向模型传递消息列表。- 管理多轮对话
- 处理多模态内容(图片、音频、文件)
- 包含系统指令
字典格式
你也可以直接使用 OpenAI 聊天补全格式来指定消息。消息类型
系统消息
SystemMessage 表示一组初始指令,用于引导模型的行为。你可以使用系统消息来设定语气、定义模型角色,并建立响应准则。
基本指令
详细角色设定
人类消息
HumanMessage 表示用户输入和交互。它们可以包含文本、图片、音频、文件以及任何多模态内容。
文本内容
消息对象
字符串快捷方式
消息元数据
添加元数据
name 字段的行为因提供商而异——有些使用它进行用户识别,有些则忽略它。要查看具体行为,请参阅模型提供商的参考文档。AI 消息
AIMessage 表示模型调用的输出。它们可以包含多模态数据、工具调用和提供商特定的元数据,你可以在之后访问这些数据。
AIMessage 对象在调用模型时返回,其中包含响应中所有关联的元数据。
不同的提供商对消息类型的权重/上下文化方式不同,这意味着手动创建一个新的 AIMessage 对象并将其插入消息历史中(就像它来自模型一样)有时是有帮助的。
属性
属性
工具调用
当模型进行工具调用时,它们被包含在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" 初始化任何聊天模型:多模态
多模态 指的是处理不同形式数据的能力,例如文本、音频、图片和视频。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 作为输出。交互通常是无状态的,因此简单的对话循环涉及使用不断增长的消息列表调用模型。
参考以下指南了解更多:
- 持久化和管理对话历史的内置功能
- 管理上下文窗口的策略,包括裁剪和总结消息
将这些文档连接到 Claude、VSCode 等工具,通过 MCP 获取实时答案。

