多轮对话上下文为何越来越长,跨月怎么解
来自夹夹 QQ 群讨论,审核后公开 · 。查看原始讨论
每轮重塞全历史是对话式 agent 的默认做法,但长上下文不等于必爆;跨月上下文靠的不是更大窗口,而是把上下文当投影、真相放在外部状态里。
要点
- 对话式 agent 默认每轮把完整历史拼成请求,模型无状态;轮数越多上下文越长,成本延迟上升、注意力被稀释。
- 真正出问题的是工具返回超大内容、反复塞同样的系统提示与 skill 描述、agent 自己跑太久的 session,而非日常多轮。
- 工程上靠前缀缓存、按 token 预算截断或滚动摘要、Inline & Spill 只留摘要加 ID、以及不把整段会话喂给所有子 agent 来控制。
- 注意 lost in the middle:窗口中间的内容召回率明显低,重要信息应放在开头或结尾。
- 跨月场景把会话级上下文与长期记忆分开,会话结束时落摘要加分结论加产物 ID,之后读摘要、按 ID 回捞而非塞窗口。
- 以事件日志而非对话史当记忆,并用确定性事实库加模型语义摘要的双轨检索;长期状态设 owner 与租约,避免多实例各拿过期副本。