基本用法
使用消息最简单的方法是创建消息对象,并在调用模型时传递它们。文本提示
文本提示是字符串 - 非常适合不需要保留对话历史的简单生成任务。- 你有一个单一、独立的请求
- 你不需要对话历史
- 你希望代码复杂度最小
消息提示
或者,你可以通过提供一个消息对象列表,将消息列表传递给模型。- 管理多轮对话
- 处理多模态内容(图像、音频、文件)
- 包含系统指令
字典格式
你也可以直接使用 OpenAI 聊天补全格式来指定消息。消息类型
系统消息
SystemMessage 代表一组初始指令,用于引导模型的行为。你可以使用系统消息来设定语气、定义模型的角色并为响应建立准则。
基本指令
详细角色设定
用户消息
HumanMessage 代表用户输入和交互。它们可以包含文本、图像、音频、文件以及任何其他数量的多模态内容。
文本内容
消息元数据
添加元数据
name 字段的行为因提供商而异——有些用于用户识别,有些则忽略。要检查,请参阅模型提供商的参考文档。AI 消息
AIMessage 代表模型调用的输出。它们可以包含多模态数据、工具调用以及后续可以访问的提供商特定元数据。
AIMessage 对象在模型调用时被返回,其中包含响应中的所有关联元数据。
提供商对不同类型的消息有不同的加权/上下文化方式,这意味着有时手动创建一个新的 AIMessage 对象并将其插入到消息历史记录中,就好像它来自模型一样,会很有帮助。
属性
属性
工具调用
当模型发起工具调用时,它们会包含在AIMessage 中:
令牌使用情况
AIMessage 可以在其 usage_metadata 字段中保存令牌计数和其他使用情况元数据:
UsageMetadata。
流式传输与块
在流式传输过程中,你会收到AIMessageChunk 对象,可以将它们组合成一个完整的消息对象:
了解更多:
工具消息
对于支持工具调用的模型,AI 消息可以包含工具调用。工具消息用于将单个工具执行的结果传回给模型。 工具可以直接生成ToolMessage 对象。下面展示一个简单示例。更多内容请阅读工具指南。
属性
属性
消息内容
你可以将消息的内容视为发送给模型的有效载荷数据。消息有一个content 属性,其类型是松散的,支持字符串和未类型化对象的列表(例如字典)。这使得 LangChain 聊天模型能够直接支持提供商原生结构,例如多模态内容和其他数据。
另外,LangChain 为文本、推理、引用、多模态数据、服务器端工具调用和其他消息内容提供了专门的内容类型。请参阅下面的内容块。
LangChain 聊天模型通过 content 属性接受消息内容。
这可以包含以下之一:
- 一个字符串
- 一个提供商原生格式的内容块列表
- 一个 LangChain 标准内容块的列表
标准内容块
LangChain 提供了一种跨提供商通用的消息内容标准表示。 消息对象实现了一个content_blocks 属性,它会延迟地将 content 属性解析为标准、类型安全的表示形式。例如,从 ChatAnthropic 或 ChatOpenAI 生成的消息将以各自提供商的格式包含 thinking 或 reasoning 块,但可以延迟解析为一致的 ReasoningContentBlock 表示:
- Anthropic
- OpenAI
序列化标准内容如果 LangChain 之外的应用程序需要访问标准内容块表示,你可以选择将内容块存储在消息内容中。为此,你可以将
LC_OUTPUT_VERSION 环境变量设置为 v1。或者,用 output_version="v1" 初始化任何聊天模型:多模态
多模态指的是处理不同形式数据的能力,例如文本、音频、图像和视频。LangChain 包含这些数据的标准类型,可在各提供商之间通用。 聊天模型可以接受多模态数据作为输入,并将其作为输出生成。下面我们展示包含多模态数据的输入消息的简短示例。内容块参考
内容块在创建消息或访问content_blocks 属性时表示为一个类型化字典的列表。列表中的每一项必须符合以下块类型之一:
核心
核心
多模态
多模态
ImageContentBlock
ImageContentBlock
AudioContentBlock
AudioContentBlock
VideoContentBlock
VideoContentBlock
FileContentBlock
FileContentBlock
工具调用
工具调用
ToolCall
ToolCall
ToolCallChunk
ToolCallChunk
服务器端工具执行
服务器端工具执行
ServerToolCall
ServerToolCall
ServerToolCallChunk
ServerToolCallChunk
内容块是作为 LangChain v1 中消息的一个新属性引入的,旨在标准化各供应商的内容格式,同时保持与现有代码的向后兼容性。内容块并不是
content 属性的替代品,而是一个新属性,可用于以标准化格式访问消息的内容。与聊天模型一起使用
聊天模型 接受一系列消息对象作为输入,并返回一个AIMessage 作为输出。交互通常是无状态的,因此一个简单的对话循环涉及使用不断增长的消息列表来调用模型。
请参阅以下指南了解更多信息:
- 用于持久化和管理对话历史记录的内置功能
- 管理上下文窗口的策略,包括裁剪和总结消息
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

