TODO: 关于元数据类型(响应和用法)的章节 */}
文本提示
文本提示是字符串 - 适用于不需要保留对话历史的简单生成任务。- 您有一个单独的、独立的需求
- 您不需要会话历史记录
- 您希望代码复杂性最小化
消息提示
或者,您可以通过提供一个消息对象列表来向模型传递一系列消息。- 管理多轮对话
- 与多模态内容(图像、音频、文件)一起工作
- 包含系统指令
字典格式
您还可以直接以 OpenAI 聊天补全格式指定消息。消息类型
系统消息
一个 @[SystemMessage] 代表一组初始指令,用于启动模型的行为。您可以使用系统消息来设定语气、定义模型的角色,并建立响应的指导方针。
Basic instructions
Detailed persona
人类消息
一个 @[HumanMessage] 代表用户输入和交互。它们可以包含文本、图片、音频、文件以及其他任何数量的多模态 内容。
文本内容
Message object
String shortcut
消息元数据
Add metadata
name 字段的行为因提供商而异 - 有些用于用户识别,而有些则忽略它。要进行检查,请参阅模型提供商的参考。人工智能消息
一个AIMessage 代表模型调用的输出。它们可以包括多模态数据、工具调用以及您以后可以访问的提供者特定元数据。
AIMessage对象,其中包含响应中所有相关的元数据。
供应商对消息类型的评估/情境化不同,这意味着有时手动创建一个新的 AIMessage 对象并将其插入到消息历史中,仿佛它来自模型是有帮助的。
Attributes
Attributes
消息的文本内容。
消息的原始内容。
消息的标准内容块。(见 [内容](#message-content))
模型调用的工具。如果没有调用工具,则为空。
消息的唯一标识符(由 LangChain 自动生成或由提供者响应返回)
消息的使用元数据,其中可能包含可用的令牌计数。见 [参考](https://reference.langchain.com/javascript/types/_langchain_core.messages.UsageMetadata.html)。
消息的响应元数据。
工具调用
当模型进行工具调用时,它们被包含在AIMessage中:
令牌使用
一个AIMessage 可以在其 usage_metadata 字段中存储令牌计数和其他使用元数据:
UsageMetadata 获取详细信息。
流式传输和块
在流式传输过程中,您将接收到AIMessageChunk 对象,这些对象可以组合成一个完整的消息对象:
了解更多信息:
工具消息
对于支持工具调用的模型,AI消息可以包含工具调用。工具消息用于将单个工具执行的结果传回模型。 工具 可以直接生成 @[ToolMessage] 对象。下面,我们展示一个简单示例。更多内容请参阅 工具指南。
Attributes
Attributes
消息内容
您可以将消息的内容视为发送给模型的数据的有效负载。消息具有一个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 字段时表示为类型对象的列表。列表中的每个项目必须遵循以下块类型之一:
Core
Core
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][BaseMessage(content)]属性的替代品,而是一个新的属性,可以用来以标准化格式访问消息的内容。与聊天模型一起使用
聊天模型 接受一系列消息对象作为输入,并返回一个AIMessage 作为输出。交互通常是无状态的,因此一个简单的对话循环涉及调用一个模型,并传递一个不断增长的消息列表。
参考以下指南以获取更多信息:
- 内置功能,用于持久化和管理对话历史
- 管理上下文窗口的策略,包括修剪和总结消息