这道题其实是在问:当[[Agent]]系统跑多轮对话时,标准Attention机制在长程依赖上到底哪里会崩。我先说本质,就是Transformer的Self-Attention虽然擅长捕捉局部关系,但在Agent这种需要持续几十上百轮交互的场景里,它有几个硬伤。
首个硬伤是上下文窗口的物理限制。标准Attention的复杂度是O(n²),所以实际部署的窗口通常卡在4K到128K tokens。Agent的多轮对话里,工具调用记录、API返回结果、用户偏好这些信息很快就把窗口塞满了。一旦触发截断或[[滑动窗口]],早期信息就丢了。这导致什么?举个例子,客服退款场景里,用户前几轮已经确认了订单号和退款原因,但十几轮后Agent又在问同样的问题,这就是窗口把关键信息挤出去了。
再看历史信息稀释效应。就算窗口没满,随着序列变长,Softmax归一化会让Attention权重越来越平均。早期的重要信息,比如任务目标、用户强调的约束,会被大量无关token淹没。我见过一个实验,超过20轮后首轮系统指令的Attention权重掉到1%以下。说白了,模型不是不想记住,而是它注意力被均匀摊平了,抓不住重点。
还要看推理一致性断裂。Agent需要跨多轮维持逻辑链条,比如“如果用户是VIP,运费全免,现在确认他是VIP”,这个推理过程可能分散在不同轮次。标准Attention没有显式的[[KV Cache]]管理机制来标记“这是关键记忆”,所以模型很容易忘记中间步骤,导致前后矛盾。比如计划变更后没有同步更新,或者重复调用已经失效的API。
那怎么优化?我觉得有三个方向,但要分场景用。先说架构层面,可以用稀疏Attention,比如Longformer的全局加局部模式,或者BigBird的随机加窗口加全局,复杂度降到O(n)。但稀疏Attention的问题是,如果信息分布比较散,全局token太少会漏掉关键内容。所以真正落地时,我更倾向于把架构优化和记忆增强结合起来。
记忆增强这块,我把它分成三层:工作记忆就是当前上下文,短期记忆用会话摘要压缩,长期记忆用[[Vector Database]]检索。关键信息比如实体、用户约束、中间结果,我会显式结构化存储,按需检索注入。举个例子,在商家满减政策咨询场景里,用户可能问了好几种优惠叠加规则,Agent需要记住哪些组合已经确认过。我会把“满200减30”、“可叠加店铺券”这些约束写进长期记忆,每次回复前检索当前会话最相关的几条,注入到[[系统提示]]里。
工程策略上,还有一个方向是动态上下文压缩。比如基于重要性分数剪枝token,或者做分层摘要,把历史对话先压缩成摘要,再保留最近几轮完整对话。这里有个坑:摘要本身也会丢失细节,所以压缩比例要动态调。上线前我会特别关注压缩后关键信息的召回率,用一批历史对话回放,看任务完成率有没有下降。
其实还有一个前沿方向是状态空间模型,比如Mamba,它用RNN式隐状态替代了Attention,理论上支持无限长上下文。但这类模型在Agent场景下的工具调用和结构化推理能力还没充分验证,我目前更倾向在现有Transformer架构上做记忆增强,因为工程成熟度更高。
所以我的判断是:没有银弹。稀疏Attention适合长文档理解,但Agent需要动态记忆;[[RAG]]适合知识检索,但维护推理一致性还得靠结构化记忆。我会把标准Attention看成基础引擎,往上叠加分层记忆和动态压缩,同时用[[Self-RAG]]让模型自己学会什么时候该查记忆、什么时候该信任当前上下文。