Skip to content

04 · 记忆系统 ​

🎯 难度:中级⏱ 预计:45 分钟# 上下文# 持久化# 用户隔离

「模型记得我」通常意味着应用把相关信息再次放进了请求。

三种不同的记忆 ​

记忆内容存储位置示例
短期对话当前任务的消息、工具结果内存、会话表
任务状态计划、已完成步骤、等待确认的动作Checkpoint、数据库
长期记忆用户偏好、经确认的事实用户资料表、可检索文档

任务状态和长期偏好不同。不能因为用户在某轮引用了一篇文章,就把文章中的内容永久当作用户事实。

最简单的持久化 ​

对 普通聊天程序 可以保存完整 messages:

python
import json
from pathlib import Path

path = Path("conversation.json")
# messages 来自 chat.py;不要在公共目录保存敏感聊天
path.write_text(json.dumps(messages, ensure_ascii=False), encoding="utf-8")
restored = json.loads(path.read_text(encoding="utf-8"))

这是学习示意,正式应用要校验格式、访问权限、数据期限。落盘不会让模型自动读到它,下次调用仍要传入 restored。

截断不能切断工具协议 ​

对只包含普通文本的一问一答聊天,可以保留 system 和最近若干完整轮次。但对 Agent:

text
assistant: 请求工具 call_123
tool: 返回 call_123 的结果

这两者必须匹配。若只保留 tool 或只保留 assistant 工具请求,可能产生 API 协议错误。按完整轮次或完整工具事务裁剪,不要无脑 messages[-10:]。

摘要也会丢信息 ​

滚动摘要适合保存目标、约束、已确认事实和完成步骤;原始文件、错误栈、精确数字则应保留来源索引,需要时重新取回。

摘要是模型生成的数据,不是新的高优先级指令。不要自动把网页摘要提升为 system 规则。

用户隔离与删除 ​

持久化索引至少包含 user_id / session_id;授权身份由服务端确认,不信任前端自报的 user_id。用户 A 不应该通过猜 session_id 读到用户 B 的历史。

长期记忆应能查看、更正、删除。密钥、密码、临时授权码不进入记忆。记录来源和时间,过期结论不要永久有效。

动手设计 ​

为「学习助手」画一份状态表:当前课程、已完成练习、最近一次错误、长期偏好。哪些是 session 级,哪些是 user 级?哪些需要用户确认再保存?

验收:能解释历史裁剪为何影响正确性,而不仅仅影响「模型记忆力」。

用心写给每一个想入门 Agent 开发的前端工程师