LangChain Messages:消息使用完全指南

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外部的应用也能访问标准化的内容块,可通过两种方式开启内容块序列化:

  1. 设置环境变量LC_OUTPUT_VERSION="v1"

  2. 初始化模型时指定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通过标准化的内容块 实现多模态数据的传入,支持URLBase64编码提供商管理的File ID三种数据传入方式,适配不同的使用场景。

4.1 核心注意事项

  • 不同模型提供商支持的多模态格式/文件大小不同,需参考对应提供商的官方文档;

  • 多模态内容需封装在内容块列表 中,通过contentcontent_blocks传入消息;

  • Base64编码的内容必须指定MIME类型 (如image/jpegapplication/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" 可选字段nameargsidindex(片段位置)

5.3.3 InvalidToolCall(无效工具调用块)

用途 :存储解析失败的工具调用 (如JSON格式错误),方便调试。 必选字段type="invalid_tool_call"error(错误描述) 可选字段nameargs

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提供了完善的解决方案,可参考官方指南:

  1. 对话历史的持久化与管理:LangChain内置了对话历史的存储、加载功能,支持内存、数据库等多种存储方式;

  2. 上下文窗口优化:支持消息裁剪、消息摘要、上下文压缩等策略,避免因消息过多导致Token超限;

  3. 多会话管理:支持为不同用户/会话维护独立的对话历史,实现多用户的隔离交互。

总结 📖

消息(Message)是LangChain大语言模型应用开发的核心基础组件,其设计的核心优势在于:

  1. 跨提供商标准化:统一的消息类型和内容块格式,让开发者无需适配不同模型的输入输出;

  2. 灵活的内容支持 :松散类型的content属性+标准化的content_blocks,兼顾兼容性和类型安全;

  3. 完善的功能扩展:原生支持多轮对话、多模态、工具调用、Token统计等核心功能;

  4. 简单的交互逻辑:无状态的模型交互+可手动维护的消息列表,降低多轮对话的开发成本。

掌握消息模块的使用,是开发LangChain各类应用(聊天机器人、RAG、智能体)的基础,后续的工具调用、智能体开发、多模态应用均基于此展开。

相关推荐
寂寞旅行10 小时前
向量数据库Milvus的使用
数据库·milvus
闻哥11 小时前
Redis事务详解
java·数据库·spring boot·redis·缓存·面试
道亦无名11 小时前
aiPbMgrSendAck
java·网络·数据库
发现你走远了11 小时前
Windows 下手动安装java JDK 21 并配置环境变量(详细记录)
java·开发语言·windows
love530love13 小时前
【OpenClaw 本地实战 Ep.3】突破瓶颈:强制修改 openclaw.json 解锁 32k 上下文记忆
人工智能·windows·json·cuda·lm studio·openclaw·context length
刮涂层_赢大奖14 小时前
我给MAC做了一个 Windows 任务栏,用了之后再也回不去 Dock 了
windows·macos·ios
面向对象World14 小时前
正点原子Mini Linux 4.3寸800x480触摸屏gt115x驱动
linux·服务器·数据库
dinga1985102614 小时前
mysql之联合索引
数据库·mysql
微风中的麦穗14 小时前
【SQL Server 2019】企业级数据库系统—数据库SQL Server 2019保姆级详细图文下载安装完全指南
大数据·数据库·sqlserver·云计算·个人开发·运维必备·sqlserver2019