LangChain Messages:消息使用完全指南
🧾消息(Message) 是LangChain中模型上下文的基本单位 ,代表模型的输入和输出,承载着与大语言模型交互时,表达对话状态所需的内容 和元数据。所有LangChain聊天模型均采用标准化的消息类型,保证调用不同提供商模型时行为一致,是实现多轮对话、多模态交互、工具调用的核心基础。
消息对象的核心组成:
-
Role(角色) :标识消息类型(如
system系统|user人类|assistantAI) -
Content(内容):消息的实际载体(文本|图片|音频|文件等)
-
Metadata(元数据):可选字段(响应信息|消息ID|Token用量|用户标识等)
一、消息的基础用法 📚
LangChain中调用模型时,支持两种输入形式 (文本提示词/消息提示词)+一种兼容格式(字典格式),分别适配不同的业务场景,以下为各方式的用法、代码示例及适用场景解析。
1.1 文本提示词(Text prompts)
直接以字符串作为模型输入,是最简单的调用方式,无需构造复杂的消息对象。
核心特点
-
输入为纯字符串,代码极简
-
无对话历史管理能力
-
仅支持文本类型输入,不支持多模态
适用场景
✅ 单条独立的请求 | ✅ 无需保留对话历史 | ✅ 简单的文本生成任务
代码示例+逐行解析
# 初始化聊天模型(需提前安装对应依赖并配置API密钥)
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 直接传入字符串作为输入,调用模型
response = model.invoke("写一首关于春天的俳句")
print(response) # 返回AIMessage对象,包含模型回复内容
解析:
-
无需导入任何消息类,直接调用
model.invoke()传入字符串即可; -
模型会自动将字符串解析为人类消息(HumanMessage),内部完成封装。
1.2 消息提示词(Message prompts)
以消息对象列表作为模型输入,是LangChain的标准用法,支持组合不同类型的消息(系统|人类|AI)。
核心特点
-
输入为
SystemMessage/HumanMessage/AIMessage对象的列表 -
可灵活管理多轮对话历史,实现上下文交互
-
支持多模态内容、系统指令定制
适用场景
✅ 管理多轮对话 | ✅ 处理图片/音频等多模态内容 | ✅ 需要定制模型行为的系统指令
代码示例+逐行解析
# 导入所需的消息类型
from langchain.messages import SystemMessage, HumanMessage, AIMessage
from langchain.chat_models import init_chat_model
# 初始化模型
model = init_chat_model("gpt-5-nano")
# 构造消息列表:系统指令→人类问题→AI历史回复
messages = [
SystemMessage("你是一位诗歌专家,擅长创作各类诗词"), # 定义模型角色
HumanMessage("写一首关于春天的俳句"), # 用户的初始请求
AIMessage("樱花开遍野,清风拂过枝头软,春意在人间") # 模型的历史回复
]
# 传入消息列表调用模型,模型基于上下文生成新回复
response = model.invoke(messages)
print(response.text) # 提取AI回复的文本内容
解析:
-
消息列表的顺序代表对话的上下文顺序,模型会按顺序解析;
-
可手动插入
AIMessage模拟历史对话,实现自定义上下文的多轮交互。
1.3 字典格式(Dictionary format)
以OpenAI聊天补全兼容的字典列表作为输入,是消息提示词的简化写法,无需导入LangChain的消息类。
核心特点
-
字典的必选键为role和content ,role取值与消息类型对应:
system/user/assistant/tool -
代码更简洁,兼容OpenAI生态的开发习惯
-
支持多轮对话,功能与消息对象列表一致
代码示例+逐行解析
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 构造OpenAI兼容的字典格式消息列表
messages = [
{"role": "system", "content": "你是一位诗歌专家,擅长创作各类诗词"},
{"role": "user", "content": "写一首关于春天的俳句"},
{"role": "assistant", "content": "樱花开遍野,清风拂过枝头软,春意在人间"}
]
# 直接传入字典列表,模型自动解析为对应的消息对象
response = model.invoke(messages)
print(response.text)
解析:
-
LangChain会自动将字典的
role映射为对应的消息类型,content映射为消息内容; -
该格式适合从OpenAI原生代码迁移到LangChain的场景,无需修改大量输入逻辑。
二、核心消息类型 🧬
LangChain定义了四种核心消息类型,分别对应对话中的不同角色,各类型有专属的作用、属性和使用场景,且均支持跨模型提供商的标准化使用。
2.1 系统消息(SystemMessage)🗣️
作用 :为模型设定行为准则、角色定位、回复规范,是模型的初始化指令 ,决定模型的整体交互风格。 核心特点:
-
通常放在消息列表的首位,模型会优先解析并遵循其指令;
-
可简单定义角色,也可详细定制回复要求(如提供代码示例、简洁回答等)。
示例1:简单指令(定义基础角色)
from langchain.messages import SystemMessage, HumanMessage
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 简单的系统消息:定义模型为编程助手
system_msg = SystemMessage("你是一位乐于助人的编程助手")
# 构造消息列表
messages = [
system_msg,
HumanMessage("如何创建一个REST API?")
]
# 调用模型
response = model.invoke(messages)
print(response.text)
示例2:详细人设(定制回复规则)
from langchain.messages import SystemMessage, HumanMessage
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 详细的系统消息:定义角色+回复要求
system_msg = SystemMessage("""
你是一位资深Python开发工程师,精通各类Web框架。
回答时必须提供代码示例,并解释实现思路。
解释需简洁但全面,避免冗余内容。
""")
messages = [
system_msg,
HumanMessage("如何创建一个REST API?")
]
response = model.invoke(messages)
print(response.text)
关键:系统消息的描述越详细,模型的回复越贴合预期,是定制模型行为的核心方式。
2.2 人类消息(HumanMessage)👤
作用 :代表用户的输入和交互 ,是模型的核心推理依据,可包含文本、图片、音频等多模态内容。 核心属性:
-
content:必选,消息内容(字符串/多模态内容块); -
name:可选,用户标识(区分多用户场景,部分提供商忽略该字段); -
id:可选,消息唯一ID(用于链路追踪、日志记录)。
示例1:纯文本内容(基础用法)
from langchain.messages import HumanMessage
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 构造纯文本人类消息
response = model.invoke([HumanMessage("什么是机器学习?")])
print(response.text)
示例2:添加元数据(多用户/追踪场景)
from langchain.messages import HumanMessage
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 构造带元数据的人类消息,标识用户和消息ID
human_msg = HumanMessage(
content="帮我解释一下Python的装饰器",
name="alice", # 标识用户为alice,适用于多用户对话系统
id="msg_123" # 消息唯一ID,用于LangSmith等工具的链路追踪
)
response = model.invoke([human_msg])
print(response.text)
注意 :name字段的兼容性因提供商而异,若需使用该功能,需参考对应模型提供商的官方文档。
2.3 AI消息(AIMessage)🤖
作用 :代表模型的输出结果 ,是model.invoke/stream/batch的返回值,包含模型生成的文本、工具调用、Token用量等核心信息。 核心特点:
-
可由模型自动生成,也可手动构造(用于模拟历史对话、自定义上下文);
-
包含丰富的属性,支持解析工具调用、Token统计、流式块聚合等高级功能。
核心属性
| 属性名 | 类型 | 作用 |
|---|---|---|
text |
字符串 | 模型生成的纯文本内容,快速提取回复核心 |
content |
字符串/字典列表 | 消息原始内容,支持多模态/结构化数据 |
content_blocks |
列表 | 标准化的内容块,跨提供商统一格式 |
tool_calls |
列表/None | 模型的工具调用请求,无调用时为None |
id |
字符串 | 消息唯一ID(自动生成/提供商返回) |
usage_metadata |
字典/None | Token用量元数据,包含输入/输出Token数 |
response_metadata |
字典/None | 提供商专属的响应元数据(如模型名、请求ID) |
示例1:模型自动生成AI消息(基础用法)
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 模型invoke调用后,直接返回AIMessage对象
response = model.invoke("解释一下人工智能的定义")
print(type(response)) # 输出:<class 'langchain.messages.AIMessage'>
print(response.text) # 提取纯文本回复
print(response.usage_metadata) # 查看Token用量统计(部分提供商支持)
示例2:手动构造AI消息(模拟历史对话)
from langchain.messages import AIMessage, SystemMessage, HumanMessage
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 手动构造AI消息,模拟模型的历史回复
ai_msg = AIMessage("我很乐意为你解答这个问题!")
# 将手动构造的AI消息插入消息列表,作为上下文
messages = [
SystemMessage("你是一位乐于助人的助手"),
HumanMessage("你能帮我解决数学问题吗?"),
ai_msg, # 模拟模型的历史回复
HumanMessage("太好了!2+2等于多少?")
]
# 模型基于包含手动AI消息的上下文生成新回复
response = model.invoke(messages)
print(response.text) # 输出:2+2等于4
示例3:解析AI消息的工具调用请求
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 定义一个简单的天气查询工具
def get_weather(location: str) -> str:
"""获取指定地点的天气情况"""
return f"{location}的天气为晴天,气温25℃"
# 将工具绑定到模型,模型可生成工具调用请求
model_with_tools = model.bind_tools([get_weather])
# 调用模型,触发工具调用
response = model_with_tools.invoke("巴黎的天气怎么样?")
# 解析AI消息中的tool_calls属性,获取工具调用信息
for tool_call in response.tool_calls:
print(f"工具名:{tool_call['name']}")
print(f"工具参数:{tool_call['args']}")
print(f"工具调用ID:{tool_call['id']}")
示例4:流式调用的AI消息块聚合
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 流式调用模型,返回AIMessageChunk对象迭代器
chunks = []
full_message = None
for chunk in model.stream("介绍一下LangChain的核心功能"):
chunks.append(chunk) # 保存所有流式块
print(chunk.text, end="", flush=True) # 实时打印流式内容
# 聚合流式块为完整的AIMessage对象
full_message = chunk if full_message is None else full_message + chunk
print("\n")
print(full_message.text) # 输出聚合后的完整回复
关键 :AIMessageChunk是AI消息的流式片段,可通过+运算符聚合为完整的AIMessage,与直接invoke的结果完全一致。
示例5:查看Token用量元数据
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 调用模型并获取Token用量
response = model.invoke("你好!")
print(response.usage_metadata)
典型输出:
{
'input_tokens': 8, # 输入Token数
'output_tokens': 304, # 输出Token数
'total_tokens': 312, # 总Token数
'input_token_details': {'audio': 0, 'cache_read': 0}, # 输入Token详情
'output_token_details': {'audio': 0, 'reasoning': 256} # 输出Token详情
}
注意 :Token用量统计需模型提供商支持,部分开源模型/本地模型可能返回None。
2.4 工具消息(ToolMessage)🛠️
作用 :代表工具调用的执行结果 ,用于将工具的输出传递回模型,模型会基于该结果继续推理并生成最终回复。 核心特点:
-
必须与AI消息中的
tool_call_id一一匹配,模型才能关联工具调用和结果; -
包含
artifact字段,可存储下游处理的附加数据(不传给模型,避免干扰上下文); -
工具执行后会自动生成该消息,也可手动构造。
核心属性
| 属性名 | 类型 | 是否必选 | 作用 |
|---|---|---|---|
content |
字符串 | 是 | 工具执行的结果文本,会传给模型作为上下文 |
tool_call_id |
字符串 | 是 | 工具调用ID,必须匹配AI消息中的对应ID |
name |
字符串 | 是 | 被调用的工具名称 |
artifact |
字典 | 否 | 附加数据,不传给模型,仅用于下游程序处理 |
示例1:基础用法(手动构造工具消息,关联工具调用)
from langchain.messages import AIMessage, HumanMessage, ToolMessage
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
# 1. 手动构造AI消息,包含天气查询的工具调用请求
ai_message = AIMessage(
content=[],
tool_calls=[{
"name": "get_weather",
"args": {"location": "旧金山"},
"id": "call_123" # 工具调用ID
}]
)
# 2. 执行工具,获取结果,并构造ToolMessage(tool_call_id必须匹配)
weather_result = "晴天,气温72华氏度"
tool_message = ToolMessage(
content=weather_result, # 工具执行结果
tool_call_id="call_123", # 与AI消息的tool_call_id一致
name="get_weather" # 工具名称
)
# 3. 将人类消息→AI工具调用→工具结果传入模型,模型生成最终回复
messages = [
HumanMessage("旧金山的天气怎么样?"),
ai_message,
tool_message,
]
response = model.invoke(messages)
print(response.text) # 输出:旧金山目前的天气是晴天,气温72华氏度
示例2:高级用法(使用artifact字段存储下游附加数据)
artifact字段是工具消息的核心高级特性 ,用于存储不传给模型但需下游程序使用的元数据(如文档ID、页码、原始数据等),避免无关数据占用模型的上下文窗口。
from langchain.messages import ToolMessage
# 传给模型的内容:仅包含模型需要的文本信息
message_content = "那是最美好的时代,那是最糟糕的时代。"
# 下游程序使用的附加数据:存储文档ID和页码,不传给模型
artifact = {"document_id": "doc_123", "page": 0}
# 构造带artifact的工具消息
tool_message = ToolMessage(
content=message_content, # 模型可见的内容
tool_call_id="call_123", # 匹配工具调用ID
name="search_books", # 工具名称
artifact=artifact # 下游可见的附加元数据
)
# 下游程序可提取artifact数据,用于渲染页面/日志记录等
print(tool_message.artifact["document_id"]) # 输出:doc_123
适用场景 :RAG(检索增强生成)场景中,检索工具返回的文本传给模型,而文档ID、页码等元数据存储在artifact中,用于前端展示引用来源。
三、消息内容(Message content)📝
消息的content属性是传给模型的核心数据载体 ,LangChain对其做了松散类型设计 ,支持字符串 、提供商原生格式的内容块列表 、LangChain标准内容块列表三种形式,兼顾兼容性和标准化,同时支持多模态、工具调用等复杂内容。
3.1 内容的三种表示形式
形式1:纯字符串(最基础,适合纯文本场景)
from langchain.messages import HumanMessage
# 纯字符串内容的人类消息
human_message = HumanMessage(content="你好,最近怎么样?")
形式2:提供商原生格式(适配特定模型,如OpenAI的多模态格式)
from langchain.messages import HumanMessage
# OpenAI原生格式的多模态内容:文本+图片URL
human_message = HumanMessage(content=[
{"type": "text", "text": "描述这张图片的内容"},
{"type": "image_url", "image_url": {"url": "https://example.com/image.jpg"}}
])
形式3:LangChain标准内容块(跨提供商标准化,推荐)
通过content_blocks属性构造,是类型安全的标准化格式 ,LangChain会自动将其同步到content属性,适配所有模型提供商。
from langchain.messages import HumanMessage
# LangChain标准内容块:文本+图片URL
human_message = HumanMessage(content_blocks=[
{"type": "text", "text": "描述这张图片的内容"},
{"type": "image", "url": "https://example.com/image.jpg"},
])
# content_blocks会自动同步到content属性
print(human_message.content)
关键 :content_blocks是LangChain v1新增的属性,用于跨提供商统一内容格式,解决不同模型对多模态/结构化内容的解析差异问题。
3.2 标准内容块的懒加载解析
所有消息对象都实现了content_blocks属性,会懒加载 将content属性解析为标准化的内容块格式 ,即使content是提供商原生格式,也会自动转换为统一的结构。
示例 :Anthropic模型的thinking块自动转换为LangChain的reasoning块
from langchain.messages import AIMessage
# Anthropic原生格式的内容:thinking块+text块
message = AIMessage(
content=[
{"type": "thinking", "thinking": "用户在问天气,需要调用天气工具", "signature": "WaUjzkyp..."},
{"type": "text", "text": "我需要先查询天气数据"},
],
response_metadata={"model_provider": "anthropic"}
)
# 自动解析为LangChain标准的content_blocks:reasoning块+text块
print(message.content_blocks)
输出结果(标准化格式):
[
{'type': 'reasoning', 'reasoning': '用户在问天气,需要调用天气工具', 'extras': {'signature': 'WaUjzkyp...'}},
{'type': 'text', 'text': '我需要先查询天气数据'}
]
3.3 标准内容块的序列化
若需让LangChain外部的应用也能访问标准化的内容块,可通过两种方式开启内容块序列化:
-
设置环境变量
LC_OUTPUT_VERSION="v1"; -
初始化模型时指定
output_version="v1"(推荐,局部生效,不影响全局)。from langchain.chat_models import init_chat_model
初始化模型时指定output_version,开启标准内容块序列化
model = init_chat_model("gpt-5-nano", output_version="v1")
调用模型后,返回的AIMessage的content为标准内容块格式
response = model.invoke("你好!")
print(response.content_blocks)
四、多模态内容(Multimodal)🧩
多模态指模型处理/生成非文本数据 的能力(图片|音频|视频|PDF等),LangChain通过标准化的内容块 实现多模态数据的传入,支持URL 、Base64编码 、提供商管理的File ID三种数据传入方式,适配不同的使用场景。
4.1 核心注意事项
-
不同模型提供商支持的多模态格式/文件大小不同,需参考对应提供商的官方文档;
-
多模态内容需封装在内容块列表 中,通过
content或content_blocks传入消息; -
Base64编码的内容必须指定MIME类型 (如
image/jpeg、application/pdf)。
4.2 图片输入示例(最常用)
from langchain.messages import HumanMessage
# 方式1:通过URL传入图片(适合公网可访问的图片)
msg_url = HumanMessage(content=[
{"type": "text", "text": "描述这张图片的内容"},
{"type": "image", "url": "https://example.com/path/to/image.jpg"},
])
# 方式2:通过Base64编码传入图片(适合内网/本地图片)
msg_base64 = HumanMessage(content=[
{"type": "text", "text": "描述这张图片的内容"},
{
"type": "image",
"base64": "AAAAIGZ0eXBtcDQyAAAAAGlzb21tcDQyAAACAGlzb2...", # 图片的Base64编码
"mime_type": "image/jpeg", # 必须指定MIME类型
},
])
# 方式3:通过提供商管理的File ID传入图片(适合大文件,如OpenAI的File ID)
msg_fileid = HumanMessage(content=[
{"type": "text", "text": "描述这张图片的内容"},
{"type": "image", "file_id": "file-abc123"}, # 提供商生成的文件ID
])
4.3 PDF/音频/视频输入
与图片输入的格式一致,仅需修改**type和 mime_type**字段:
-
PDF文件:
type="file",mime_type="application/pdf"; -
音频文件:
type="audio",mime_type="audio/mpeg"(MP3)/audio/wav(WAV); -
视频文件:
type="video",mime_type="video/mp4"(MP4)/video/webm(WEBM)。
示例:PDF文件输入
from langchain.messages import HumanMessage
msg_pdf = HumanMessage(content=[
{"type": "text", "text": "总结这份PDF文档的核心内容"},
{
"type": "file",
"base64": "JVBERi0xLjUKJb/3rp6...", # PDF的Base64编码
"mime_type": "application/pdf",
},
])
五、内容块参考手册 📋
LangChain定义了五大类标准化的内容块,每类包含若干具体的块类型,每个块类型有严格的字段规范(必选/可选),适用于所有模型提供商,是实现跨平台内容兼容的核心。
内容块的基本形式为带类型的字典 ,**type字段为必选**,用于标识内容块的类型,其他字段根据类型而定。
5.1 核心内容块(Core)
适用于所有基础场景,包含文本、推理两种核心类型。
5.1.1 TextContentBlock(文本内容块)
用途 :标准化的纯文本输出,是最常用的内容块类型。 必选字段 :type="text"、text(文本内容) 可选字段 :annotations(文本注解)、extras(提供商附加数据) 示例:
{
"type": "text",
"text": "LangChain是一个大语言模型应用开发框架",
"annotations": [],
"extras": {"model": "gpt-5-nano"}
}
5.1.2 ReasoningContentBlock(推理内容块)
用途 :存储模型的思考/推理步骤 ,方便查看模型的决策逻辑。 必选字段 :type="reasoning" 可选字段 :reasoning(推理内容)、extras(提供商附加数据) 示例:
{
"type": "reasoning",
"reasoning": "用户想了解LangChain,需要先介绍其定位,再说明核心功能",
"extras": {"signature": "abc123"}
}
5.2 多模态内容块(Multimodal)
适用于图片、音频、视频、通用文件、纯文本文档等非文本数据,核心字段为url/base64/file_id(三选一)+mime_type(Base64时必选)。
关键通用规则
-
url:公网可访问的资源地址; -
base64:资源的Base64编码,必须指定mime_type; -
file_id:模型提供商管理的资源唯一ID; -
id:可选,内容块的唯一ID。
包含的具体类型:image(图片)、audio(音频)、video(视频)、file(通用文件)、text-plain(纯文本文档),示例参考第四章 多模态内容。
5.3 工具调用内容块(Tool Calling)
适用于模型的工具调用请求,包含工具调用、流式工具调用片段、无效工具调用三种类型。
5.3.1 ToolCall(工具调用块)
用途 :存储模型的完整工具调用请求 ,是工具调用的核心格式。 必选字段 :type="tool_call"、name(工具名)、args(工具参数)、id(工具调用ID) 示例:
{
"type": "tool_call",
"name": "get_weather",
"args": {"location": "北京"},
"id": "call_123"
}
5.3.2 ToolCallChunk(流式工具调用块)
用途 :流式调用时,存储工具调用的片段 (如未完成的参数)。 必选字段 :type="tool_call_chunk" 可选字段 :name、args、id、index(片段位置)
5.3.3 InvalidToolCall(无效工具调用块)
用途 :存储解析失败的工具调用 (如JSON格式错误),方便调试。 必选字段 :type="invalid_tool_call"、error(错误描述) 可选字段 :name、args
5.4 服务端工具执行内容块(Server-Side Tool Execution)
适用于模型提供商服务端的工具调用(如OpenAI的联网搜索),无需客户端执行工具,包含服务端工具调用、流式片段、执行结果三种类型。
核心类型:ServerToolResult(服务端工具结果块)
必选字段 :type="server_tool_result"、tool_call_id(关联的工具调用ID)、status(执行状态:success/error) 示例:
{
"type": "server_tool_result",
"tool_call_id": "ws_abc123",
"status": "success",
"output": "北京今日晴天,气温25℃"
}
5.5 提供商特定内容块(Provider-Specific Blocks)
NonStandardContentBlock(非标准内容块)
用途 :作为提供商专属功能的兼容出口 ,存储实验性/独有的数据结构。 必选字段 :type="non_standard"、value(提供商原生数据) 示例:
{
"type": "non_standard",
"value": {"anthropic_specfic": "xxx", "thinking": "xxx"}
}
注意:该类型仅用于临时兼容,推荐优先使用LangChain的标准化内容块。
六、与聊天模型结合使用 🤝
LangChain的聊天模型 遵循标准化的交互逻辑 :接收消息对象序列作为输入 ,返回AIMessage对象作为输出 ,所有交互均为无状态 ------模型不会保存对话历史,需由开发者维护一个不断增长的消息列表实现多轮对话。
6.1 基础的对话循环实现
from langchain.chat_models import init_chat_model
from langchain.messages import SystemMessage, HumanMessage, AIMessage
# 初始化模型
model = init_chat_model("gpt-5-nano")
# 初始化对话历史,加入系统消息
chat_history = [SystemMessage("你是一位乐于助人的助手,回答简洁明了")]
# 多轮对话循环
while True:
# 获取用户输入
user_input = input("用户:")
if user_input == "退出":
break
# 将用户输入加入对话历史
chat_history.append(HumanMessage(user_input))
# 调用模型,获取AI回复
ai_response = model.invoke(chat_history)
# 将AI回复加入对话历史
chat_history.append(ai_response)
# 输出AI回复
print(f"AI:{ai_response.text}")
解析:
-
对话历史
chat_history是一个消息对象列表,每次对话都会将用户输入和AI回复追加到列表中; -
模型每次调用都会基于完整的对话历史生成回复,实现上下文交互。
6.2 进阶的对话管理指引
在实际开发中,仅维护消息列表会面临上下文窗口溢出 、对话历史过大等问题,LangChain提供了完善的解决方案,可参考官方指南:
-
对话历史的持久化与管理:LangChain内置了对话历史的存储、加载功能,支持内存、数据库等多种存储方式;
-
上下文窗口优化:支持消息裁剪、消息摘要、上下文压缩等策略,避免因消息过多导致Token超限;
-
多会话管理:支持为不同用户/会话维护独立的对话历史,实现多用户的隔离交互。
总结 📖
消息(Message)是LangChain大语言模型应用开发的核心基础组件,其设计的核心优势在于:
-
跨提供商标准化:统一的消息类型和内容块格式,让开发者无需适配不同模型的输入输出;
-
灵活的内容支持 :松散类型的
content属性+标准化的content_blocks,兼顾兼容性和类型安全; -
完善的功能扩展:原生支持多轮对话、多模态、工具调用、Token统计等核心功能;
-
简单的交互逻辑:无状态的模型交互+可手动维护的消息列表,降低多轮对话的开发成本。
掌握消息模块的使用,是开发LangChain各类应用(聊天机器人、RAG、智能体)的基础,后续的工具调用、智能体开发、多模态应用均基于此展开。