基本用法
使用消息最简单的方法是创建消息对象,并在调用模型时将其传入。文本提示
文本提示是字符串,适用于不需要保留对话历史的简单生成任务。- 你有一个独立的单次请求
- 你不需要对话历史
- 你希望代码复杂度最低
消息提示
或者,你可以通过提供消息对象列表,将消息列表传递给模型。- 管理多轮对话
- 处理多模态内容(图像、音频、文件)
- 包含系统指令
字典格式
你也可以直接使用 OpenAI 聊天补全格式指定消息。消息类型
系统消息
SystemMessage 代表一组初始指令,用于引导模型的行为。你可以使用系统消息来设定语气、定义模型的角色,并为响应建立准则。
基本指令
详细角色设定
人类消息
HumanMessage 表示用户输入和交互。它们可以包含文本、图像、音频、文件以及其他任意数量的多模态内容。
文本内容
消息元数据
添加元数据
name 字段的行为因提供商而异——有些将其用于用户标识,有些则忽略它。要确认,请参考模型提供商的@[reference][参考文档]。AI 消息
AIMessage 表示模型调用的输出。它们可以包含多模态数据、工具调用和提供商特定的元数据,供你后续访问。
AIMessage 对象,其中包含响应中的所有关联元数据。但这并不意味着只能从该处创建或修改它们。
不同的提供商对消息类型的权重/上下文处理方式不同,因此有时手动创建一个新的 AIMessage 对象并将其插入消息历史中(如同它来自模型一样)会很有帮助。
属性
属性
工具调用响应
当模型调用工具时,这些调用会包含在 AI 消息中:工具调用
流式传输与分块
在流式传输过程中,你会收到AIMessageChunk 对象,可以将它们合并:
工具消息
对于支持工具调用的模型,AI 消息可以包含工具调用。工具消息用于将单个工具执行的结果传递回模型。属性
属性
内容
你可以将消息的内容视为发送给模型的数据载荷。消息具有一个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
服务器端工具执行
服务器端工具执行
CodeInterpreterCall
CodeInterpreterCall
内容块是在 LangChain v1 中作为消息的新属性引入的,旨在跨提供商标准化内容格式,同时保持与现有代码的向后兼容性。内容块并非
content 属性的替代品,而是一个新属性,可用于以标准化格式访问消息内容。