Skip to content

86. AI Agent 上下文窗口溢出如何解决? ​

难度 P1 高频 · 岗位 应用 · 频率 ★★★ · 预计阅读 6 min

本题阅读地图 ​

  1. 💡 简要回答
  2. 📝 详细解析
  3. 🎯 面试总结

👔 面试官:Agent 执行长任务时,上下文窗口撑满了怎么办?

🙋 我:可以用滑动窗口,把最早的对话丢掉?

👔 面试官:只有滑动窗口?这个策略有什么缺陷?还有其他方案吗?

这道题考查你对上下文工程的系统性认知,不能只答一招。

💡 简要回答 ​

上下文溢出有八种主流解决方案,从「舍弃」到「压缩」到「外化」到「多模型分工」,复杂度依次递增。没有一个银弹方案,实际系统通常是分层组合使用:轻量任务用滑动窗口,中等任务用摘要压缩,重型任务用外部记忆检索。

📝 详细解析 ​

八种解决方案 ​

方案一:滑动窗口(Sliding Window)

只保留最近 N 轮对话,超出窗口的内容直接丢弃。

优点:实现简单,对计算资源零额外消耗。 缺点:永久丢失早期信息,任务越长、丢的越多,可能导致 Agent 「忘记了最初的目标」。

适合:短到中等长度的任务,对历史一致性要求不高的场景。

方案二:摘要压缩(Summarization)

不直接丢弃早期对话,而是用 LLM 把它们压缩成摘要,摘要代替原始对话留在上下文里。

优点:保留了关键信息的语义,比滑动窗口「丢失少」。 缺点:摘要本身需要额外 LLM 调用(成本增加),且压缩有损失,细节无法还原。

方案三:语义压缩(Semantic Compression)

比摘要更精细:先对每段内容做重要性评分,只压缩低重要性内容,保留高重要性内容的完整原文。

优点:在压缩率和信息保留之间取得更好的平衡。 缺点:实现复杂度高,重要性评分本身需要额外推理。

方案四:选择性保留(Selective Retention)

预先定义哪些类型的内容「必须保留」(如:任务目标、关键决策点、工具调用错误),其余内容可以丢弃或压缩。

优点:对特定任务类型效果很好(因为你知道什么最重要)。 缺点:需要领域知识来设计保留规则,泛化性差。

方案五:内容修剪(Content Trimming)

对工具返回的内容(往往很长)做自动截断或提取关键字段,减少工具结果占用的 token。

优点:针对工具调用场景效果显著(工具返回的 JSON 往往有大量冗余字段)。 缺点:可能截掉模型需要的信息,需要精心设计截断策略。

方案六:层级记忆(Hierarchical Memory)

将信息按重要性分层:工作记忆(上下文窗口内)→ 会话摘要(压缩版中期记忆)→ 长期记忆(向量库),信息按层流转,需要时从下层检索。

优点:理论上信息不丢失,只是粒度变粗。 缺点:系统复杂度高,需要完整的记忆管理模块配合。

方案七:外部记忆检索(External Memory)

重要信息主动存入向量数据库,上下文只保留「索引」,需要时再检索。这是目前主流 Agent 框架推荐的主要方案之一。

优点:理论上信息容量无上限,检索灵活。 缺点:检索延迟(每次都要做向量搜索)+ 检索质量不稳定(相关的未必被检索到)。

方案八:多 Agent 协作(Multi-Agent Collaboration)

把长任务拆给多个 Agent 并行处理,每个 Agent 只负责一小段,上下文不超限。

优点:从根本上规避单 Agent 的上下文上限问题,还能提升效率。 缺点:多 Agent 的协调成本高,需要完善的任务分解和结果整合机制。

方案选型参考 ​

任务长度推荐方案
短任务(< 20 轮)滑动窗口就够了
中等任务(20-100 轮)摘要压缩 + 关键内容选择性保留
长任务(100+ 轮)层级记忆 + 外部向量检索
超长/复杂任务多 Agent 协作 + 每个 Agent 用外部记忆

🎯 面试总结 ​

答这道题展示「分层选型」思维,而不是只说一个方案。八种方案里,摘要压缩、外部记忆检索、多 Agent 协作是最重要的三个,其余是细粒度补充。最后说一句「实际系统通常组合使用,没有银弹」,展示工程成熟度。


章节首页 · ← Q85 · Q87 →

最后更新2026-05-01
难度P1
频率medium
阅读6 min
主题agent
觉得有帮助?把这个链接转给正在求职的朋友 · 用 Ctrl + K 全站搜索其它题