基本用法
使用消息最简单的方法是创建消息对象,并在调用模型时传递它们。文本提示
文本提示是字符串 - 非常适合不需要保留对话历史的简单生成任务。- 你有一个单一、独立的请求
- 你不需要对话历史
- 你希望代码复杂度最小
消息提示
或者,你可以通过提供一个消息对象列表,将消息列表传递给模型。- 管理多轮对话
- 处理多模态内容(图像、音频、文件)
- 包含系统指令
字典格式
你也可以直接使用 OpenAI 聊天补全格式来指定消息。消息类型
系统消息
SystemMessage 代表一组初始指令,用于引导模型的行为。你可以使用系统消息来设定语气、定义模型的角色并为响应建立准则。
基本指令
详细角色设定
用户消息
HumanMessage 代表用户输入和交互。它们可以包含文本、图像、音频、文件以及任何其他数量的多模态内容。
文本内容
消息对象
字符串快捷方式
消息元数据
添加元数据
name 字段的行为因提供商而异——有些用于用户识别,有些则忽略。要检查,请参阅模型提供商的参考文档。AI 消息
AIMessage 代表模型调用的输出。它们可以包含多模态数据、工具调用以及后续可以访问的提供商特定元数据。
AIMessage 对象在模型调用时被返回,其中包含响应中的所有关联元数据。
提供商对不同类型的消息有不同的加权/上下文化方式,这意味着有时手动创建一个新的 AIMessage 对象并将其插入到消息历史记录中,就好像它来自模型一样,会很有帮助。
属性
属性
工具调用
当模型发起工具调用时,它们会包含在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 包含这些数据的标准类型,可在各提供商之间通用。 聊天模型可以接受多模态数据作为输入,并将其作为输出生成。下面我们展示包含多模态数据的输入消息的简短示例。内容块参考
内容块在创建消息或访问contentBlocks 字段时表示为一个类型化对象的列表。列表中的每一项必须符合以下块类型之一:
核心
核心
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 作为输出。交互通常是无状态的,因此一个简单的对话循环涉及使用不断增长的消息列表来调用模型。
请参阅以下指南了解更多信息:
- 用于持久化和管理对话历史记录的内置功能
- 管理上下文窗口的策略,包括裁剪和总结消息
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

