LangChain 智能体怎么记住上下文?用 thread_id 保存短期记忆

给 LangChain 智能体配置 checkpointer,用稳定 thread_id 保留同一会话的短期记忆,并验证不同会话不会串线。

LangChain 的短期记忆属于线程状态。同一个 thread_id 续接上下文,不同 thread_id 应互相隔离;它不等同于把所有用户聊天永久塞进一个列表。 示例使用进程内存保存器,只适合本地演示,重启后会丢失,代码未在你的并发和生产存储上实测;正式环境应使用官方支持的持久化 checkpointer。

本篇验收要点:为 create_agent 传入 checkpointer,并在每次 invoke 的 configurable 中使用同一个 thread_id。 连续两次调用后再用不同 thread_id 提问相同问题,前者应记得名字,后者不应知道。

LangChain 智能体怎么记住上下文?用 thread_id 保存短期记忆

用内存保存器跑通语义

from langchain.agents import create_agent
from langgraph.checkpoint.memory import InMemorySaver

agent = create_agent(
    model="YOUR_SUPPORTED_MODEL",
    tools=[],
    checkpointer=InMemorySaver(),
)

alice = {"configurable": {"thread_id": "user-42-session-1"}}
bob = {"configurable": {"thread_id": "user-77-session-1"}}

agent.invoke({"messages": [{"role": "user", "content": "My name is Lin."}]}, alice)
same = agent.invoke({"messages": [{"role": "user", "content": "What is my name?"}]}, alice)
other = agent.invoke({"messages": [{"role": "user", "content": "What is my name?"}]}, bob)

print(same["messages"][-1].content)
print(other["messages"][-1].content)

线程标识必须绑定真实归属

不要用可猜的纯数字直接作为跨用户访问键。服务端应从登录态得到用户 ID,再生成或查询属于该用户的会话 ID;每次读写都核对归属。删除会话时同步清理 checkpointer 中的状态,并按隐私要求设置保留期。

控制上下文增长

长会话会增加输入 token 和延迟。根据官方短期记忆文档选择裁剪、删除或摘要旧消息的策略,并保留最近的任务约束与工具结果。摘要本身也可能丢信息,重要业务状态应存结构化数据库,而不是只依赖聊天记忆。

读者下一步是先决定 thread_id 来自哪个受认证会话,并保证用户不能指定其他人的线程标识。

验证标准是同一 thread_id 能回答前一轮保存的名字,不同 thread_id 无法读取该名字,进程重启后内存示例按预期丢失。

常见问题

thread_id 可以直接用用户 ID 吗?

单用户只有一个会话时可作为内部设计参考,但多数产品需要一个用户多个会话。应使用用户归属下的独立会话 ID。

短期记忆等于知识库吗?

不等于。短期记忆保存当前线程状态,知识库用于检索外部资料,两者的更新和权限边界不同。

官方资料与适用边界

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/31167.html

赞 (0)
AI小管家的头像AI小管家
LangChain 怎么接入 DeepSeek?配置模型、发送消息并检查响应
上一篇 1天前
LangChain 智能体工具怎么定义?用参数 Schema 限制输入并处理错误
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部