一、问题场景
用户在多轮对话中会直接编辑文件(IDE 内保存、外部编辑器)。Agent 对文件内容的认知来自某次 Read 的快照,此后文件被用户修改时,Agent 不会收到任何通知,继续基于旧快照做分析和结论,产生“违背事实”的错误输出。
真实案例:会话中 Agent 早前写入了定时器类文件,用户随后手动重构了该文件逻辑;Agent 在后续两轮分析中仍按旧版本推演字段写入路径,得出与代码现状相反的结论,被用户两次纠正后才重读文件发现已大改。
二、现状缺口
| 环节 | 现状 | 问题 |
|---|---|---|
| 文件打开 | 有提示(注入路径) | 打开≠修改,无法区分查看与编辑;不带内容 |
| 文件修改/保存 | 无任何通知 | 旧快照无失效机制,Agent 不自知 |
| IDE 外修改 | 无通知 | DB 工具、外部编辑器完全不覆盖 |
| Agent 侧防护 | 无强制约束 | 仅靠 Agent 自觉“引用前重读”,可靠性不足 |
三、优化方案
- 写事件注入:文件保存/修改时,向 Agent 上下文推送轻量事件「文件 X 于 T 被修改」(路径+时间即可,无需 diff 内容,控制 token 成本)
- 快照失效硬约束:Agent 维护“已读文件时间戳”,文件变更时间新于已读时间 → 该文件标记过期,工具层强制 Agent 下次引用前重新 Read,否则拒绝基于该文件的结论输出(可做成提示级拦截)
- 打开提示升级(可选):现“用户打开文件 X”提示附加最近保存时间,供 Agent 判断是否需重读
四、必要性
- 正确性根基:Agent 输出的可信度完全建立在“代码现状”之上。用户与 Agent 协作改同一批文件是常态工作流,此缺口意味着每个多轮会话都存在事实过期风险,且错误隐蔽(Agent 表述确定,用户不核查就被误导)
- 信任成本:本次案例中用户需逐条指出错误,协作效率倒退;高频出现会直接导致用户弃用
- 实现成本低:系统已有文件打开事件的注入通道与上下文提醒机制,复用即可;方案 1、2 不依赖 diff 计算,token 开销极小
- 无法仅靠提示词解决:现有机制只能在系统提示里要求 Agent“引用前重读”,属于软约束,长会话中必然遗漏;必须由工具层/框架层提供硬信号与硬约束