外观
上下文、RAG 和长期记忆有什么区别,怎样避免记错?
标准回答
上下文是本次模型请求实际收到的信息,包括指令、对话、检索结果和工具返回。RAG 是先从外部资料检索相关内容,再交给模型生成。长期记忆则是跨会话保存、更新和取用的信息,例如用户明确表达的偏好。三者可以配合,但不能画等号。
我会把当前会话状态和长期信息分开。短期上下文保留正在进行的任务、最近对话和必要摘要;长期记忆只写入有价值、有依据且适合保留的内容,并记录来源、时间、用户范围和有效状态。临时目标、模型猜测、过期的设备状态,不应直接变成长期事实。
使用时,先按用户权限和有效性筛选,再按当前任务检索,必要时结合关键词与向量召回、重排和上下文预算选择内容。向量相似度只表示某种语义接近,不证明事实正确;模型也可能忽略正确材料,所以要分开评估召回、排序和最终回答。
用户纠正信息时,不能只追加一个新向量并保留旧结论继续生效。我会更新版本或有效状态,处理冲突,保证读取时采用合适的最新依据;删除和撤销也要覆盖可检索副本与缓存。设备开关、账号授权这类会变化的状态,在真正执行动作前重新读取,不依赖记忆猜测。
关键机制
- 聊天历史不等于经过管理的记忆;摘要也可能丢失条件或引入错误。
- 检索前确定身份与数据范围,检索后检查来源、时效和任务相关性。
- 记忆既要能写,还要能纠正、失效、撤销和验证。
通俗例子
用户过去说“工作日 7 点起床”,后来改成“改为 7 点半”。新偏好应替代相应范围的旧偏好;但“今天 9 点叫我”可能只是一次性任务,不能自动覆盖长期习惯。
追问与回答
Embedding 和 Rerank 各做什么?
Embedding 把文本转换成向量,用于高效寻找语义相近的候选;Rerank 再对问题与候选进行更细的相关性评分,调整顺序。先召回一批再精排,常用于兼顾覆盖和成本。两者都不保证事实真实,仍要检查资料来源、版本和可见范围。
回答错了,怎样判断是记忆问题还是模型问题?
我会看本次检索和最终上下文:正确记录是否存在且有效,是否被权限或过滤条件排除,是否召回却排在预算之外,是否进入上下文但被错误理解。这样分别定位写入、更新、检索、重排和生成问题,不把所有错误都归为模型不够强。
易混淆点
RAG 不等于向量数据库,记忆不等于无限保存聊天,Embedding 也不是事实判定器。涉及现实状态的工具执行仍需即时校验。
参考资料
内容来源
- Android 技术札记 · 原条目
memory-agent