Skip to main content
Alpha 版本提示: 本文档涵盖的是 v1-alpha 版本。内容尚不完整,且可能随时变更。如需查阅最新稳定版本,请参阅 v0 版本的 LangChain Python 文档LangChain JavaScript 文档
在 LangChain 中,消息是模型上下文的基本单元。它们代表模型的输入和输出,既包含内容,也包含与大语言模型(LLM)交互时用于表示对话状态所需的元数据。 消息对象包含以下组成部分:
  • 角色 — 标识消息类型(例如 systemuser
  • 内容 — 表示消息的实际内容(如文本、图像、音频、文档等)
  • 元数据 — 可选字段,例如响应信息、消息 ID 和令牌用量
LangChain 提供了一种标准消息类型,可在所有模型提供商之间通用,确保无论调用哪个模型,行为都保持一致。

基本用法

使用消息最简单的方法是创建消息对象,并在调用模型时将其传入。

文本提示

文本提示是字符串,适用于不需要保留对话历史的简单生成任务。
何时使用文本提示:
  • 你有一个独立的单次请求
  • 你不需要对话历史
  • 你希望代码复杂度最低

消息提示

或者,你可以通过提供消息对象列表,将消息列表传递给模型。
何时使用消息提示:
  • 管理多轮对话
  • 处理多模态内容(图像、音频、文件)
  • 包含系统指令

字典格式

你也可以直接使用 OpenAI 聊天补全格式指定消息。

消息类型

  • 系统消息 — 告诉模型如何行为,并为交互提供上下文
  • 人类消息 — 表示用户输入和与模型的交互
  • AI 消息 — 模型生成的响应,包括文本内容、工具调用和元数据
  • 工具消息 — 表示工具调用的输出

系统消息

SystemMessage 代表一组初始指令,用于引导模型的行为。你可以使用系统消息来设定语气、定义模型的角色,并为响应建立准则。
基本指令
详细角色设定

人类消息

HumanMessage 表示用户输入和交互。它们可以包含文本、图像、音频、文件以及其他任意数量的多模态内容

文本内容

消息元数据

添加元数据
name 字段的行为因提供商而异——有些将其用于用户标识,有些则忽略它。要确认,请参考模型提供商的@[reference][参考文档]。

AI 消息

AIMessage 表示模型调用的输出。它们可以包含多模态数据、工具调用和提供商特定的元数据,供你后续访问。
当调用模型时,会返回 AIMessage 对象,其中包含响应中的所有关联元数据。但这并不意味着只能从该处创建或修改它们。 不同的提供商对消息类型的权重/上下文处理方式不同,因此有时手动创建一个新的 AIMessage 对象并将其插入消息历史中(如同它来自模型一样)会很有帮助。
string
消息的文本内容。
string | dict[]
消息的原始内容。
ContentBlock[]
消息的标准化内容块
dict[] | None
模型调用的工具。若未调用工具则为空。
string
消息的唯一标识符(由 LangChain 自动生成或由提供商响应返回)
dict | None
消息的用量元数据,在可用时可包含令牌计数。
ResponseMetadata | None
消息的响应元数据。

工具调用响应

当模型调用工具时,这些调用会包含在 AI 消息中:
工具调用

流式传输与分块

在流式传输过程中,你会收到 AIMessageChunk 对象,可以将它们合并:

工具消息

对于支持工具调用的模型,AI 消息可以包含工具调用。工具消息用于将单个工具执行的结果传递回模型。
string
required
工具调用的字符串化输出。
string
required
此消息所响应的工具调用 ID。(必须与 AI 消息中的工具调用 ID 匹配)
string
required
被调用的工具名称。
dict
不发送给模型但可编程访问的附加数据。
artifact 字段存储不会发送给模型但可编程访问的补充数据。这对于存储原始结果、调试信息或用于下游处理的数据非常有用,而不会使模型上下文变得混乱。

内容

你可以将消息的内容视为发送给模型的数据载荷。消息具有一个 content 属性,其类型较为宽松,支持字符串和未类型化对象(例如字典)的列表。这使得 LangChain 聊天模型可以直接支持提供商原生结构,例如多模态内容和其他数据。 此外,LangChain 为文本、推理、引用、多模态数据、服务器端工具调用及其他消息内容提供了专用的内容类型。请参见下面的标准内容块 LangChain 聊天模型接受消息内容的 .content 属性,可以包含:
  1. 一个字符串
  2. 一个提供商原生格式的内容块列表
  3. 一个 LangChain 标准内容块 列表
请参见以下使用多模态输入的示例:
在初始化消息时指定 content_blocks 仍会填充消息的 content,但提供了类型安全的接口。

标准内容块

LangChain 维护了一组跨提供商的标准消息内容类型(请参见下面的参考部分)。 消息还实现了一个 content_blocks 属性,它会将 content 属性惰性解析为这种标准的类型安全表示。例如,从 ChatAnthropicChatOpenAI 生成的消息将包含各自提供商格式的 thinkingreasoning 块,但这些块可以惰性解析为一致的 ReasoningContentBlock 表示:
请参阅集成指南以开始使用你选择的推理提供商。
序列化标准内容如果 LangChain 之外的应用程序需要访问标准内容块表示,你可以选择将内容块存储在消息内容中。为此,你可以将 LC_OUTPUT_VERSION 环境变量设置为 v1。或者,在初始化任何聊天模型时设置 output_version="v1"

多模态

多模态是指能够处理以不同形式出现的数据,例如文本、音频、图像和视频。LangChain 包含了跨提供商使用的这些数据的标准类型。 聊天模型 可以接受多模态数据作为输入并生成多模态数据作为输出。下面我们展示了一些包含多模态数据的输入消息的简短示例:
并非所有模型都支持所有文件类型。请查阅模型提供商的参考文档以了解支持的格式和大小限制。

内容块参考

内容块(无论是创建消息时还是访问 content_blocks 属性时)均表示为类型化字典列表。列表中的每一项必须符合以下块类型之一:
用途: 标准文本输出
string
required
始终为 "text"
string
required
文本内容
object[]
文本的注释列表
object
额外的提供商特定数据
示例:
用途: 模型推理步骤
string
required
始终为 "reasoning"
string
推理内容
object
额外的提供商特定数据
示例:
用途: 图像数据
string
required
始终为 "image"
string
指向图像位置的 URL。
string
Base64 编码的图像数据。
string
对外部存储图像的引用 ID(例如,在提供商的文件系统或存储桶中)。
string
图像 MIME 类型(例如,image/jpegimage/png
用途: 音频数据
string
required
始终为 "audio"
string
指向音频位置的 URL。
string
Base64 编码的音频数据。
string
对外部存储音频文件的引用 ID(例如,在提供商的文件系统或存储桶中)。
string
音频 MIME 类型(例如,audio/mpegaudio/wav
用途: 视频数据
string
required
始终为 "video"
string
指向视频位置的 URL。
string
Base64 编码的视频数据。
string
对外部存储视频文件的引用 ID(例如,在提供商的文件系统或存储桶中)。
string
视频 MIME 类型(例如,video/mp4video/webm
用途: 通用文件(PDF 等)
string
required
始终为 "file"
string
指向文件位置的 URL。
string
Base64 编码的文件数据。
string
对外部存储文件的引用 ID(例如,在提供商的文件系统或存储桶中)。
string
文件 MIME 类型(例如,application/pdf
用途: 文档文本(.txt.md
string
required
始终为 "text-plain"
string
文本内容
string
文本的 MIME 类型(例如,text/plaintext/markdown
用途: 函数调用
string
required
始终为 "tool_call"
string
required
要调用的工具名称
object
required
传递给工具的参数
string
required
此工具调用的唯一标识符
示例:
用途: 流式工具片段
string
required
始终为 "tool_call_chunk"
string
正在调用的工具名称
string
部分工具参数(可能是不完整的 JSON)
string
工具调用标识符
number
此块在流中的位置
用途: 格式错误的调用,旨在捕获 JSON 解析错误。
string
required
始终为 "invalid_tool_call"
string
调用失败的工具名称
string
未能解析的原始参数
string
错误描述
用途: 内置网页搜索
string
required
始终为 "web_search_call"
string
要执行的搜索查询
用途: 搜索结果
string
required
始终为 "web_search_result"
string[]
搜索结果的 URL
返回: 附带 URL 的顶级搜索结果。
用途: 代码执行
string
required
始终为 "code_interpreter_call"
string
要执行的编程语言(例如 pythonjavascriptsql
string
要执行的代码
用途: 执行结果
string
required
始终为 "code_interpreter_result"
CodeInterpreterOutput[]
代码执行的输出
用途: 提供商特定的转义机制
string
required
始终为 "non_standard"
object
required
提供商特定的数据结构
用法: 用于实验性或提供商独有的功能
其他提供商特定的内容类型可在每个模型提供商的参考文档中找到。
内容块是在 LangChain v1 中作为消息的新属性引入的,旨在跨提供商标准化内容格式,同时保持与现有代码的向后兼容性。内容块并非 content 属性的替代品,而是一个新属性,可用于以标准化格式访问消息内容。

示例

多轮对话

构建对话应用程序需要管理消息历史和上下文: