当前位置: 首页 > news >正文

HoRain云--LangChain 对话记忆

默认情况下,每次 agent.invoke() 都是独立的——Agent 不记得之前聊过什么。Checkpointer(检查点保存器)让 Agent 能够记住对话历史,实现真正的多轮对话。


没有 Checkpointer 的问题

先看看没有 Checkpointer 时的情况:

实例

from dotenv import load_dotenv
load_dotenv()

from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.messages import HumanMessage

model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)
agent = create_agent(
model=model,
system_prompt="你是菜鸟教程 RUNOOB 的助手。",
)

# 第一轮
result1 = agent.invoke({
"messages": [HumanMessage(content="我叫小明")]
})
print(f"第一轮: {result1['messages'][-1].content}")

# 第二轮——Agent 不记得第一轮的内容!
result2 = agent.invoke({
"messages": [HumanMessage(content="我叫什么名字?")]
})
print(f"第二轮: {result2['messages'][-1].content}")

运行结果:

第一轮: 你好小明!很高兴认识你。 第二轮: 抱歉,我没有你的信息,不知道你叫什么名字。

使用 Checkpointer 记住对话

添加 Checkpointer 后,同一 thread_id 下的对话会自动关联:

实例

from langgraph.checkpoint.memory import InMemorySaver
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.messages import HumanMessage

# 创建一个内存 Checkpointer
checkpointer = InMemorySaver()

model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)
agent = create_agent(
model=model,
checkpointer=checkpointer, # 传入 Checkpointer
system_prompt="你是菜鸟教程 RUNOOB 的助手。",
)

# 使用 thread_id 来标识对话线程
config = {"configurable": {"thread_id": "user-001"}}

# 第一轮
result1 = agent.invoke(
{"messages": [HumanMessage(content="我叫小明,我在学 Python")]},
config=config,
)
print(f"第一轮: {result1['messages'][-1].content}")

# 第二轮——使用相同的 thread_id,Agent 记住了!
result2 = agent.invoke(
{"messages": [HumanMessage(content="我叫什么名字?我在学什么?")]},
config=config,
)
print(f"第二轮: {result2['messages'][-1].content}")

运行结果:

第一轮: 你好小明!Python 是一门很好的入门语言,有什么需要帮助的吗? 第二轮: 你叫小明,你正在学习 Python。有什么具体问题我可以帮你吗?

thread_id 是关键。同一个 thread_id 下的对话是连续的,不同 thread_id 之间的对话完全隔离。这让你可以用一个 Agent 实例同时服务多个用户。


Checkpointer 的工作原理

Checkpointer 在每次 Agent 执行后自动保存状态快照(checkpoint)。下一次使用相同 thread_id 调用时,自动从最近的 checkpoint 恢复状态。

具体工作流程:

  1. 调用 agent.invoke(),传入 config(含 thread_id)
  2. Agent 检查是否有该 thread_id 的 checkpoint
  3. 如果有,加载历史消息,追加新消息后继续
  4. 执行完成后,自动保存新的 checkpoint

实例

from langgraph.checkpoint.memory import InMemorySaver
from langchain.agents import create_agent
from langchain.chat_models import init_chat_model
from langchain.messages import HumanMessage

checkpointer = InMemorySaver()
agent = create_agent(
model=init_chat_model("deepseek:deepseek-v4-flash", temperature=0),
checkpointer=checkpointer,
system_prompt="你是菜鸟教程 RUNOOB 的助手。",
)

config = {"configurable": {"thread_id": "demo-001"}}

# 模拟多轮对话
questions = [
"我叫小明",
"我在学 Python",
"帮我总结一下关于我的信息",
]

for i, q in enumerate(questions, 1):
result = agent.invoke(
{"messages": [HumanMessage(content=q)]},
config=config,
)

# 查看 checkpoint 状态
state = agent.get_state(config)
print(f"\n第 {i} 轮后:")
print(f" 消息数: {len(state.values.get('messages', []))}")
print(f" 下一步: {state.next}")
print(f" 回复: {result['messages'][-1].content[:80]}...")

运行结果:

第 1 轮后: 消息数: 2 下一步: () 回复: 你好小明!很高兴认识你。 第 2 轮后: 消息数: 4 下一步: () 回复: Python 是一门非常流行的编程语言,简单易学。 第 3 轮后: 消息数: 6 下一步: () 回复: 根据我们的对话,你的信息如下:你叫小明,正在学习 Python。

Checkpointer 类型

类型存储位置持久化适用场景
InMemorySaver内存否(重启丢失)开发调试、测试
SqliteSaverSQLite 文件单机部署、小规模应用
PostgresSaverPostgreSQL生产环境、多实例共享

SqliteSaver 示例

实例

from langgraph.checkpoint.sqlite import SqliteSaver

# SQLite 持久化——重启后数据不丢失
checkpointer = SqliteSaver.from_conn_string("conversations.db")

agent = create_agent(
model="deepseek:deepseek-v4-flash",
checkpointer=checkpointer,
)

# 用法和 InMemorySaver 完全相同
config = {"configurable": {"thread_id": "user-001"}}
result = agent.invoke(
{"messages": [{"role": "user", "content": "你好"}]},
config=config,
)

# 重启程序后,相同 thread_id 的对话依然存在


管理对话线程

查看对话状态

实例

# 查看对话状态
state = agent.get_state(config)
print(f"下一步: {state.next}") # () 表示空闲
print(f"消息数: {len(state.values.get('messages', []))}")

# 查看对话历史
for msg in state.values.get("messages", []):
print(f" [{msg.type}] {str(msg.content)[:60]}")

创建新线程

实例

# 不同的 thread_id = 不同的独立对话
config_alice = {"configurable": {"thread_id": "alice"}}
config_bob = {"configurable": {"thread_id": "bob"}}

# Alice 的对话
agent.invoke(
{"messages": [HumanMessage(content="我是 Alice")]},
config=config_alice,
)

# Bob 的对话——完全独立,不知道 Alice 说了什么
agent.invoke(
{"messages": [HumanMessage(content="我是 Bob")]},
config=config_bob,
)

# 验证隔离性
alice_state = agent.get_state(config_alice)
bob_state = agent.get_state(config_bob)
print(f"Alice 对话消息数: {len(alice_state.values['messages'])}")
print(f"Bob 对话消息数: {len(bob_state.values['messages'])}")


更新状态——手动修改对话

有时你需要手动修改对话状态,比如清空对话、插入系统消息等:

实例

from langchain.messages import SystemMessage

# 更新状态——插入一条系统消息
agent.update_state(
config,
{
"messages": [
SystemMessage(content="(用户升级到了 VIP 会员)")
]
}
)

# 之后的对话会包含这条插入的消息

update_state() 的参数会通过 add_messages reducer 处理(对 messages 字段而言),所以新消息会追加而不是覆盖。如果需要覆盖整个状态,需要使用不同的方法。

http://www.jsqmd.com/news/1183912/

相关文章:

  • 2026年美国物流专线哪家好 帝航供应链时效专项评测 - 起跑123
  • HarmonyOS APP实战-画图APP - 第14篇:可变帧率与性能优化
  • 2026宁波高复优质高三复读学校盘点 - 起跑123
  • Claude Code Skills:模块化AI技能开发与应用指南
  • 宇舶万国手表售后保养维修服务指南权威公示(2026年7月最新) - 万国中国官方服务中心
  • 2026年主流筷子品牌选购参考排行榜 - 起跑123
  • 2026年可提供上门现场起重设备检验检测服务的公司有哪些 - 热点品牌推荐
  • 2026年7月国内主流eHR系统服务商客观盘点 - 起跑123
  • 叠石桥找外墙漏水检测维修专业的师傅 本地靠谱服务商盘点 - 热点品牌推荐
  • 2026年多商户商城系统哪个好?商家入驻、分账和权限对比
  • Linux(CentOS)系统管理入门笔记:第二期核心知识点自测与详解
  • 永州快递气柱卷材生产厂家高性价比选购实用指南 - 热点品牌推荐
  • 《雷达扫描动画》四、ArkTS常见编译错误修复指南
  • 2026年7月最新贵阳劳力士官方售后客服中心地址电话及服务网点分布 - 劳力士官方服务中心
  • 2026 年现阶段广安有实力的保温管加工厂格局重塑与选型新思路,冬天暖气费暴涨?这套“秘密武器”帮你省下一半! - 实业推荐官【官方】
  • 2026内蒙古发电机组租赁公司口碑排行参考指南 - 起跑123
  • 2026年7月最新天梭北京银泰吉祥大厦维修保养服务电话 - 天梭服务中心
  • 2026解析产品演示动画 梳理长三角相关制作服务选型要点 - 起跑123
  • 2026年短视频矩阵系统合作企业选择实用避坑指南 - 热点品牌推荐
  • 2026年 印刷面板厂家:专业供应与技术解析 - 甄选服务推荐
  • 劳力士中国官方售后服务中心|服务热线与详细地址权威信息通知(2026年7月更新) - 劳力士服务中心
  • AI 电动折叠包智能功率 高频化、低损耗 完整选型方案
  • 阜阳罗浮威尔木纹砖实体店联系电话及本地选购全攻略 - 热点品牌推荐
  • 跨境电商分销直销系统:多语言融合的全球销售引擎
  • 2026年工业机器人回收厂家推荐榜单:二手/报废/闲置ABB库卡发那科品牌回收及精密拆解与绿色再生服务公司精选 - 甄选服务推荐
  • 2026年重庆及西南地区玻璃钢帽怎么选更划算 - 热点品牌推荐
  • 2026年北京名表上门回收平台哪家靠谱 实用选择指南 - 热点品牌推荐
  • 格拉苏蒂售后报价依据是什么及维修费用计算标准权威公示(2026年7月最新) - 亨得利钟表维修中心
  • 2026内蒙古发电机组租赁公司推荐热度排行盘点 - 起跑123
  • 2026年7月最新长沙积家官方售后客户服务热线与维修网点地址汇总 - 积家官方售后服务中心