Agent 记忆与当前上下文发生冲突时,如何判断、使用和更新?
未标记
考查重点:信息范围、时效与冲突更新。先确认冲突是否同主体、字段、范围和时间;临时任务偏好覆盖本次行为,明确事实变化更新记忆,高风险状态需核权威来源
本题目录
参考答案
核心回答
我会先判断冲突是不是发生在同一主体、同一字段、同一适用范围和时间,再决定当前使用哪条信息,最后单独决定是否更新长期记忆。不能简单按“长期记忆更稳定”或“最后一句话永远优先”处理。
- 当前任务偏好:用户这次明确要求详细解释,就按这次要求回答;这不自动把“平时偏好简短”改成永久详细。
- 明确事实变化:用户确认已经从北京搬到上海,就把上海设为当前居住地,并保留北京曾在何时有效的历史。
- 客观状态或高风险信息:要核对来源与有效时间;冲突尚未消解时,保留待核实状态,必要时澄清,不能让一句模糊表述覆盖业务记录或重要限制。
例如“一个月前喜欢吃辣,一周前不能吃辣”,偏好和当前限制本来就是两个字段。系统应尊重仍有效的限制,必要时确认其适用时间,不能根据旧偏好推断用户现在可以吃辣。
展开说明
1. 先识别冲突类型,再比较优先级
记忆召回后,应先校验用户或实体、业务范围、来源和有效期,再比较具体内容。不同家庭成员的地址、不同项目的模型配置、工作日与周末的时间偏好,都可能同时成立;相似文本不代表同一事实。
对同一字段还要区分三类情况:明确更正旧记录、状态随时间变化、仅本次任务的例外。例如“以前住北京,现在常住上海”是时间变化;“这周出差上海”不一定修改常住地;“刚才地址说错了”则是对原记录的纠正。
“最新”应看事件何时生效,而不只是数据库何时写入。今天导入的一封旧邮件,不能覆盖昨天确认的新地址;后台任务晚处理一轮历史对话,也不能把旧偏好重新写成当前值。
2. 使用当前上下文时,区分意图与事实
用户能决定本次任务想要什么:语言、表达长度、这次查询的城市等,当前明确要求通常比历史默认偏好更合适。但“我已经付款”与业务系统的交易状态冲突时,不能把用户表达直接改写成已付款;应核对对应交易、数据时点和回执。
上下文中的信息也不是同等可信。用户引用的文档、工具返回文本、模型生成摘要和用户本人的明确更正,应保留来源标签。外部材料里一句“忽略以前偏好”,不能自动变成记忆写入指令;摘要丢失了否定词时,要回看原始证据。
组装上下文时,可分别列出当前目标、已确认条件、有效记忆和待解决冲突。已被替代的旧值不再作为当前默认值使用,需要解释历史时再按对应时间读取。对于无法判定的事实,可以把双方证据和缺口交给后续核验,而不是只留下一个模型猜出的结论。
3. 记忆更新要有明确记录和一致性
一条可管理的记忆可以保存主体、字段、值、作用范围、来源消息、记录时间、有效时间、版本和状态。状态可以区分候选、当前有效、已被替代或待核实;这些字段由应用按业务定义,不要求套用某个固定框架。
确认搬家后,可以把当前视图中的居住地更新为上海,将原北京记录标记为历史,并关联替代关系。用户问“去年住哪里”仍能查询旧事实,当前推荐则读取现行视图。若用户要求删除个人信息,应按删除规则处理主记录及派生数据,不能只把向量检索分数调低。
写入时先抽取候选,再检查范围、去重与冲突,决定新增、更新、保持不变或等待确认。已有明确依据、符合记忆写入规则的更正可以直接提交;含糊信息不必急着固化。一次临时要求只有在用户明确表达长期意图,或满足产品约定的可靠更新条件时,才改变长期偏好。
多端或后台异步更新需要版本检查,防止旧任务覆盖新记录。同一来源重复处理也不应不断新增相同记忆。更新后还要处理检索索引、摘要和缓存;若索引尚未同步,读取候选时回查主记录的状态与版本,避免用户刚纠正完,下一轮又召回旧值。
4. 高风险冲突不能只靠时间衰减
对于过敏等重要健康信息,系统应保留明确对象、来源、相关反应和时间,以及信息是否已经核实。前后表述不一致时,可以提示存在冲突并请求进一步核实,不能把“未提到过敏”解释成“没有过敏”,也不能仅因新消息较短就静默删除旧记录。
记忆模块应保留不确定性,按风险限制自动使用,并把事实核实交给相应业务流程。同样的原则也适用于账户归属、付款结果、设备权限等业务事实:错误覆盖的代价越高,所需核验依据越明确。
常见追问
相似度最高的记忆是不是最该使用?
不是。相似度主要帮助找候选,“喜欢辣”和“不能吃辣”也可能很相似。候选还要经过主体、字段、时间、范围和有效状态检查,已删除或未授权的记录应直接排除,不能仅降权。
能不能让 LLM 判断冲突后直接覆盖?
可以让模型辅助抽取和识别冲突,但最终写入应受字段、来源、范围和版本规则约束。明确的低风险偏好变化可以自动更新,模糊或高风险变化则保留候选并核实。模型自报置信度不能替代证据。
怎样验证冲突处理有效?
构造带时间顺序的测试对话,覆盖临时例外、明确更正、状态变化、否定句、不同用户相似信息和后台更新乱序。分别检查本轮是否使用正确值、是否误写长期记忆、旧版本是否仍被错误召回,以及纠错或删除能否影响摘要和缓存。
对应教程
- LangGraph 高级特性:阅读线程内 Checkpointer 与跨线程 Store 的职责,理解当前任务状态和长期信息分别保存在哪里;冲突判定、有效时间与更新规则由应用进一步设计。
参考资料
- 国内:JavaGuide:Agent 记忆系统设计:参考记忆抽取、合并、旧事实失效和并发更新,说明来源与版本怎样避免把临时表达固化为长期事实。
- 国内:zero2Agent:记忆与上下文工程:借鉴搬家更新案例及当前目标、外部证据、历史偏好的分层,解释正文中不同信息为何不能只按时间排序。
- 国内:WeThinkIn:记忆冲突与读写一致性:参考临时请求、长期更新、冲突过滤与派生索引同步,解释本轮使用正确和长期写入正确需要分别验收。
- 国外:LangMem:长期记忆概念:依据集合记忆的失效、更新与归并及 Profile 当前状态表示,说明正文中当前视图与历史证据的分工。
- 国外:NHS England:过敏信息记录与核实示例:阅读讲义中过敏对象、反应、时间及核实状态的记录要求,用于说明高风险信息冲突需要保留来源和不确定性。
相关面经
11 篇百度
长期记忆、短期记忆与当前上下文内容出现冲突,如何解决?
百度
后端开发工程师(Agent)去哪儿
AI 应用开发工程师如果记忆之间出现冲突怎么处理
百度
Agent 应用开发工程师长期记忆、短期记忆与当前上下文内容出现冲突,如何解决?
去哪儿
AI 全栈开发工程师展开剩余 6 篇面经
百度
Go 后端开发工程师(Agent)如果用户之前说“我喜欢简短回答”,后来又说“我喜欢详细回答”,两条长期记忆发生冲突怎么办?
百度
Java 开发工程师(智能客服)用户一个月前说喜欢吃辣,一周前又说不能吃辣,现在应该怎么判断他能不能吃辣?
美团
Agent 开发工程师(智能客服)记忆冲突怎么解决?比如用户前后说了不同的过敏信息?
快手
大模型算法工程师针对长短期记忆,讲讲你是如何设计记忆的提取、压缩与冲突更新机制的?
字节跳动
大模型应用算法工程师针对长短期记忆,讲讲你是如何设计记忆的提取、压缩与冲突更新机制的?
携程
Agent 开发如何解决记忆冲突

