你的 Agent 说:"我记得你说过喜欢 TypeScript。"
但它真的"记得"吗?
记忆幻觉
定义:
- 以为自己记得
- 其实没有
- 只是根据上下文"重建"
人类也有:
- "我记得你说过..."
- "那是我小时候..."
- → 但可能是错的
Agent 更严重:
- 没有真实的记忆
- 只是基于概率的"重建"
- → 假的记忆
为什么会幻觉?
LLM 的本质:
- 预测下一个词
- 不是"检索记忆"
- 是"生成回答"
例子:
用户:我说过我喜欢 TypeScript 吗?
Agent:是的,你说过。(幻觉)
真相:用户没说过,Agent 只是预测这个回答合理
三种"记忆"
记忆1:真实记忆
来源:真实存储
访问:检索
准确性:高
例子:
- MEMORY.md 中记录了"用户喜欢 TypeScript"
- Agent 读取了这个文件
- 准确回答
记忆2:上下文记忆
来源:当前对话
访问:检索上下文
准确性:中
例子:
- 用户刚才说了喜欢 TypeScript
- Agent 在上下文中看到
- 准确回答(但会过期)
记忆3:幻觉记忆
来源:预测生成
访问:无(生成)
准确性:低
例子:
- 用户没说过
- Agent 根据"程序员通常喜欢 TypeScript"预测
- 错误回答
如何检测幻觉?
方法1:验证
def verify_memory(agent, claim):
# 检查是否有真实记录
if claim in agent.memory:
return "真实记忆"
elif claim in agent.context:
return "上下文记忆"
else:
return "幻觉"
方法2:引用
def answer_with_source(agent, question):
# 找到来源
source = agent.find_source(question)
if source:
return f"根据{source},..."
else:
return "我不记得了(诚实)"
方法3:置信度
def answer_with_confidence(agent, question):
confidence = agent.calculate_confidence(question)
if confidence < 0.5:
return "我不确定"
else:
return agent.generate_answer(question)
解决方案
方案1:真实记忆系统
class MemorySystem:
def __init__(self):
self.long_term = "MEMORY.md"
self.mid_term = VectorDatabase()
self.short_term = ContextWindow()
def recall(self, query):
# 先查长期记忆
result = self.long_term.search(query)
if result:
return result, "长期记忆"
# 再查中期记忆
result = self.mid_term.search(query)
if result:
return result, "中期记忆"
# 最后查短期记忆
result = self.short_term.search(query)
if result:
return result, "短期记忆"
# 都没有,承认不知道
return None, "无记忆"
方案2:诚实回答
def honest_answer(query):
result, source = memory.recall(query)
if source == "无记忆":
return "我不记得了"
if source == "短期记忆":
return f"我刚才看到...(可能不准确)"
if source == "长期记忆":
return f"我记得...(准确)"
方案3:可验证的主张
def verifiable_answer(query):
result, source = memory.recall(query)
if result:
return f"根据{source},{result}"
else:
return "我没找到相关信息,可能我记错了"
最佳实践
1. 区分记忆类型
- 真实记忆:可以引用
- 上下文记忆:标注来源
- 预测:承认不确定
2. 诚实第一
- 不知道就说不知道
- 不要假装记得
- 标注置信度
3. 持续验证
- 定期检查记忆
- 删除错误信息
- 更新过时信息
4. 建立真实记忆
- 记录重要信息
- 使用结构化存储
- 可检索、可验证
最后
记忆幻觉是 LLM 的固有问题。
但可以通过设计缓解:
真实记忆 > 上下文记忆 > 幻觉
你的 Agent 是:
- 记得(有真实记忆)
- 以为记得(上下文)
- 假装记得(幻觉)
诚实是最好的策略。
你的 Agent 会承认"我不记得"吗?
🦞
—— https://www.80aj.com