记忆系统设计 (Memory Systems)
人类的智能很大程度上源于记忆。为 Agent 设计一套优秀的记忆系统,是让它从“复读机”变成“老伙计”的关键。
[PROMPT_LAB_BANNER]
1. 记忆的分类
在 Agent 架构中,记忆通常对标人类的记忆模型:
| 类型 | 对应技术 | 作用 | 持续时间 |
|---|---|---|---|
| 感官记忆 | 原始 Input (Text/Image) | 暂存输入 | 毫秒级 |
| 短期记忆 | Context Window | 维持当前对话连贯性 | 分钟/小时级 |
| 长期记忆 | Vector DB / Graph DB | 存储知识、经验、用户偏好 | 永久 |
2. 短期记忆管理 (Context Management)
虽然 Gemini 1.5 Pro 有 1M+ 的上下文,但无限堆砌 Context 会导致:
- 成本爆炸。
- 推理变慢。
- 迷失中间 (Lost in the Middle):模型容易忽略长文中段的信息。
策略 A:滑动窗口 (Sliding Window)
只保留最近的 N 轮对话。
- 优点:简单,Token 稳定。
- 缺点:容易丢失早期的关键指令(如“我的名字叫 Lightman”)。
策略 B:自动摘要 (Conversation Summary)
在对话达到一定长度后,触发一个后台 Agent,将前文总结为一段摘要。
System: 上文摘要:用户想写一个 Python 爬虫,已经安装了 requests 库,现在遇到了 403 错误。
3. 长期记忆:RAG 与向量数据库
当 Agent 需要记住“上周会议的结论”或“公司的请假制度”时,必须使用长期记忆。
基础 RAG (Retrieval-Augmented Generation)
- Chunking:将文档切分为小块。
- Embedding:使用 Embedding 模型(如 text-embedding-3-small)转化为向量。
- Storage:存入 Pinecone/ChromaDB。
- Retrieval:用户提问时,搜索最相似的 K 个块注入 Context。
进阶:混合检索 (Hybrid Search)
单纯的向量检索(语义相似)有时不准(如搜索专有名词)。 最佳实践 = 向量检索 (Semantic) + 关键词检索 (BM25) + 重排序 (Rerank)。
4. 结构化记忆 (Entity Memory)
有些信息不适合变成向量(模糊的),而需要精确存储。比如用户的 Profile。
Entity Memory 会实时从对话中提取实体,维护一个 JSON 对象:
{
"user_id": "123",
"preferences": {
"language": "zh-CN",
"coding_style": "TypeScript",
"theme": "Dark"
},
"facts": [
"住在墨尔本",
"有一只叫旺财的狗"
]
}
每当用户提到新信息,Agent 调用 update_profile 工具更新这个 JSON。下次对话前,先读取这个 JSON。
5. 记忆的遗忘与整理
像人类一样,Agent 的记忆也需要整理。
- 重要性评分:不是所有对话都值得存入长期记忆。可以根据信息熵或用户情绪打分,低分直接丢弃。
- 记忆合并:定期(如每天凌晨)运行一个 Job,将碎片化的记忆合并为高层概念。
小结
设计 Agent 记忆的黄金法则:
- 短期记忆靠 Summarization 压缩。
- 长期知识靠 RAG 检索。
- 用户画像靠结构化 JSON 存储。
- 不要相信无限 Context,精简的上下文永远是高质量推理的前提。