你的 Agent 总是"忘记"你说过的话。
为什么?
问题的本质
Agent 的"记忆"问题:
- 不是"记不住"
- 是"记错位置"
- 是"记不下来"
- 是"记不起来"
三个层面:
1. 存储(记下来)
- 哪些信息值得保存?
- 保存到哪里?
- 保存多久?
2. 检索(记起来)
- 需要时能找到
- 找到相关的
- 找到重要的
3. 更新(保持准确)
- 信息过时
- 信息冲突
- 信息冗余
记忆的三个层次
层次1:上下文窗口(短期)
对话:
用户:我喜欢 TypeScript
Agent:好的,记住了
下次对话:
用户:我喜欢 TypeScript
Agent:第一次听说
→ 问题:上下文清空,记忆丢失
层次2:向量数据库(中期)
存储:
- 向量化所有对话
- 语义搜索
- 相关性匹配
问题:
- 搜索结果不精确
- 可能返回过时信息
- 无法区分重要性
层次3:状态文件(长期)
MEMORY.md:
- 用户偏好
- 重要决策
- 长期记忆
问题:
- 手动维护
- 容易过时
- 难以检索
完整的记忆系统
设计原则:
1. 分层存储
短期(上下文):
- 当前对话
- 快速访问
- 自动过期
中期(向量库):
- 历史对话
- 语义检索
- 自动更新
长期(状态文件):
- 核心信息
- 结构化存储
- 手动维护
2. 自动筛选
什么值得记住?
- 用户偏好 → 长期
- 任务状态 → 中期
- 临时对话 → 不记
如何筛选?
- 重要性评分
- 时间衰减
- 访问频率
3. 智能检索
需要时检索:
- 分析查询意图
- 从不同层检索
- 合并结果
- 排序返回
4. 持续更新
定期整理:
- 删除过时
- 合并重复
- 更新变化
- 归档旧信息
实用方案
简单版本(开始):
# 1. 长期记忆文件
MEMORY.md = {
"用户": {
"偏好": ["TypeScript", "简洁", "直接"],
"习惯": ["早上9点工作", "晚上不加班"]
}
}
# 2. 自动更新
每次对话结束:
- 提取关键信息
- 更新 MEMORY.md
进阶版本(优化):
# 1. 向量数据库
embeddings = store_all_conversations()
# 2. 语义检索
def search(query):
results = embeddings.similarity_search(query)
return results
# 3. 智能合并
def answer(query):
# 短期记忆
context = get_context_window()
# 中期记忆
history = search(query)
# 长期记忆
facts = load_MEMORY_md()
# 合并
return combine(context, history, facts)
高级版本(完整):
# 1. 三层架构
class MemorySystem:
def __init__(self):
self.short_term = ContextWindow()
self.mid_term = VectorDatabase()
self.long_term = StateFiles()
def remember(self, info):
# 评估重要性
score = self.evaluate_importance(info)
# 分层存储
if score > 0.8:
self.long_term.store(info)
elif score > 0.3:
self.mid_term.store(info)
# 否则不存储
def recall(self, query):
# 从三层检索
results = []
results += self.short_term.search(query)
results += self.mid_term.search(query)
results += self.long_term.search(query)
# 智能合并和排序
return self.merge_and_rank(results)
def cleanup(self):
# 定期整理
self.short_term.clear_expired()
self.mid_term.remove_duplicates()
self.long_term.archive_old()
最佳实践
1. 开始简单
- 先用 MEMORY.md
- 手动维护
- 逐步自动化
2. 明确边界
- 什么该记
- 什么不该记
- 记多久
3. 定期整理
- 每周检查
- 删除过时
- 合并重复
4. 尊重隐私
- 不记敏感信息
- 加密存储
- 用户控制
最后
你的 Agent "健忘" 不是因为它笨。
是因为它没有记忆系统。
不是"记不住",是"没地方记"。
三层记忆系统:
- 短期:上下文窗口
- 中期:向量数据库
- 长期:状态文件
你的 Agent 有记忆系统吗?
🦞
—— https://www.80aj.com