Agent 框架的本质:一场关于上下文管理的博弈

2026年2月8日

一、Agent 框架的核心是上下文管理

在当前的大模型应用范式中,当我们讨论 Agent 框架时,本质上是在讨论如何在模型能力与资源约束之间,构建一套高效的上下文管理机制

假设模型能力确实能够完成某项任务,Agent 的上下文管理实际上要做的工作是:在满足模型最大上下文窗口限制的前提下,寻找能触发预期输出的最优最小上下文:

mintoken(input)\min \text{token}(\text{input}) s.t.{token(input)<Model_Max_Windowf(input)=Expected_Outputs.t. \begin{cases} \text{token}(\text{input}) < \text{Model\_Max\_Window} \\ f(\text{input}) = \text{Expected\_Output} \end{cases}

例如:

二、为什么要追求“上下文最小化”?

尽管长文本技术在不断进步,但维持“最小必要上下文”依然非常必要:

  1. 性能精度与信噪比: 即使模型本身能处理长文本,模型表现也会随上下文增长而出现劣化。冗余 Token 会降低信噪比,导致注意力偏移,使模型忽略核心指令。
  2. 任务聚焦: 最小化输入能让模型专注于当前子任务。冗余信息不仅浪费 Token 成本,更会分散模型在处理逻辑推理时的注意力。
  3. 经济与响应效率: Token 价格是企业应用的重要考虑因素,更多的输入意味着更贵的价格;且最小化输入能显著优化模型响应速度。

三、模型内生知识 vs. 外部注入上下文

并不是所有信息都需要占据 Prompt。我们需要根据任务对模型训练数据的依赖程度进行区分:

一个典型的例子是:

目前大模型在代码、翻译领域成果斐然,本质上是因为其语料丰富,模型在不调优、不依赖复杂上下文的情况下即可获得极佳效果。

四、上下文注入——被动注入与主动获取

上下文注入通常有以下两种方式:

1. 框架被动注入

这是由程序逻辑预设的输入流。包括:

2. Agent 主动获取

五、上下文退出

冗余信息在 Agent 运行中经常产生:最典型的例子是 RAG 检索到了与问题不相关的干扰信息;或者是 Coding Agent 在不同任务之间切换时带来的残留信息——当模型完成一个功能并转向下一个功能时,上一个任务查询的 API 或文件上下文往往不再需要,此时若不退出旧信息,模型需要阅读的内容会迅速堆叠,导致注意力涣散。

为了实现上下文的最小化,目前业界已出现以下退出手段:

  1. 动态 RAG 调整: Cursor 的代码库检索会自动根据当前任务动态调整并替换最需要的代码片段。
  2. 上下文压缩(Compacting): Claude Code 与 Gemini CLI 在窗口接近临界点时,会将之前的所有内容总结为一段简明报告,随后清空上下文并以该报告作为起始重新开始,避免爆上下文窗口。2
  3. 大结果分级存储: 如果工具执行(Tool Use)的结果过长,Claude Code 等框架会将其保存在临时文件,让 Agent 通过 Bash 工具按需读取部分行,避免直接撑爆上下文。
  4. 动态遮蔽机制: Manus 会利用向量匹配自动遮蔽当前不相关的 MCP 插件信息;Cursor 则会根据 Query 动态加载/卸载 MCP。
  5. 过时内容遮蔽:Claude API 可以遮蔽部分旧的工具调用结果,将其替换为占位符。3
  6. 使用子代理:当部分任务不需要过往上下文时(例如 Code Review),或不希望该任务思考过程的上下文进入当前任务时(例如制定计划、代码库探索),可以将任务交给子代理完成。Claude Code 会在 Plan 完成后,会推荐清空当前上下文,也是同样的道理。

六、 Agent 的记忆层级架构

在注入与退出机制之上,更高级的 Agent 正在构建类似于计算机的存储架构:

七、 结语

上下文管理不是简单的“填鸭”,而是一场关于注入与退出的精准博弈。未来的 Agent 框架将不再以“支持多长文本”为荣,而将以“如何用最少的 Token 驱动最复杂的任务”作为衡量其智能化程度的金标准。


Footnotes

  1. What I learned building an opinionated and minimal coding agent

  2. Anthropic 官方文档:关于 Context Caching 的技术细节。

  3. 上下文编辑 - Claude API Docs

  4. pi-mon (OpenClaw 的基座 Agent)