ContextAdapt · 实用指南

AI 编程 Agent 的上下文长度怎么选

选择材料 · 验证结果 · 计算完整成本

先选这次修改需要的材料,不要先选最大的窗口。 收集相关代码、当前指令和测试。检查这些材料能否放进当前工具的可用窗口。再运行任务,验证结果。更大的窗口是一个待测选项,不是正确修复的保证。

这篇指南帮助你准备第一次输入,并判断失败后该做什么。内容结合了我们在 ContextAdapt 中的实践。已发表的研究文章比较了不同方法能保留哪些代码证据。它没有证明所有编程 Agent 都适用同一个上下文长度。

AI 编程需要多长的上下文

我们不能给所有编程任务推荐同一个 token 数。你可以用下面的清单准备第一次尝试。这是一套起步方法,不是已经验证的最小值。

按任务选择材料

每个任务都先写清四件事:预期行为、当前约束、允许修改的范围、验收方法。然后补充相关代码和测试:

任务先收集哪些材料
修复一个范围明确的错误失败输入或报错、相关实现、直接调用方,以及能复现错误的测试。
修改多个模块之间的行为上述材料,再加上受影响的接口、配置、依赖关系,以及关联模块的测试。
迁移整个仓库迁移范围、受影响的模块、当前版本和目标版本、兼容要求,以及迁移验收项。处理到哪一部分,再补充对应源码。

例如,假设解析器遇到空输入就出错。先提供解析函数、传入空输入的调用方和失败测试。这是教学示例,不是 ContextAdapt 的实验结果。不要预先认定只给一个函数就够,也不要认定必须把整个仓库放进去。

接着,统计组装后输入的 token 数。工具提供计数功能时,优先使用它。把指令、对话历史和工具返回内容一起计算。按服务商的规则预留输出空间。窗口容量是可用上限。实际输入是你送入的内容。任务证据是完成任务所需的信息。这三者不同。检查当前服务商和工具的限制,不要只看模型名称。窗口概念可参考 Google 的上下文指南。

失败后,先检查原因

  • 缺了必需文件: 先检索并补充,再重试。补充相关材料不一定需要更大的窗口。
  • 必需材料放不下: 测试更大的可用预算。依赖关系允许时,也可以拆分任务。两种做法都要验证结果。
  • 环境或权限阻止了执行: 有授权时修复测试环境;没有所需权限时停止并请求授权。增加 token 不能解决这些问题。

我们的实验能补充什么

在 30 个留出任务中,同样给定 40% 的源代码预算,头尾截断有 10 个任务通过严格证据保留指标,关键词检索有 18 个,ContextAdapt v3 也有 18 个。相关源文件已预先选定。这里的通过是保留了证据,不是修好了问题。这个结果支持我们比较材料选择方法,但不能证明 ContextAdapt 在这个预算下优于关键词检索。完整实验和限制见研究文章。这不是 200K 与 1M 的对比实验。

大模型上下文长度应该怎么选

先规定怎么验收,再选择上下文策略。 策略包括检索什么、保留什么、何时补充材料。窗口上限本身不能回答这些问题。

先填写一张任务卡。下面是一个假设示例:

项目修改 API 适配器的示例
预期结果支持新的响应格式,同时保留旧格式支持。
第一次输入两种格式的说明、适配器代码、直接调用方和相关测试。
验收方法新格式测试、旧格式回归测试,以及修改范围检查。
限制不得修改已保存的客户数据或无关模块。

统计完整请求,不要只统计源码。指令、历史消息和工具结果也会占用上下文。可参考 VS Code 的官方说明。按服务商规则预留输出空间。

准备两个候选。第一个只包含上表中的相关材料。第二个再加入可能解释失败的关联依赖。使用同一初始状态的独立副本运行。固定模型、工具和测试。记录是否完成、是否越界、全部成本和总耗时。

如果精简输入通过验收,再用另一个有代表性的任务检查这套策略。如果失败原因是缺少依赖,先检索补齐,不要直接认定窗口太小。如果必须更换模型才能扩大窗口,就把结果称为两套配置的比较。不能把差异全部归因于上下文长度。

200K 上下文写代码够用吗

必需输入放得下,并且 Agent 能通过验收时,它就可能够用。 这是两个条件。没有超限,不代表材料选对了,也不代表 Agent 会正确使用这些材料。

下面是假设的 token 预算,不是 ContextAdapt 的实测结果。假设当前配置允许输入和输出共用 200K token,并允许分配 16K 输出空间:

内容token 数
指令、工具定义和已有历史12K
选定的源码68K
测试结果和报错细节4K
预留的输出额度16K
合计分配100K

当前输入为 84K token。按这个假设,共享窗口还剩 100K 空间。但这不保证后续每次工具返回都能放下。会话增长后要重新计数,也要检查单独的输入和输出限制。优先使用当前模型的计数工具。可参考 Google 的请求计数和返回用量说明。

在这个例子中,先用已整理的材料运行测试。不要为了填满窗口而加入无关文件。缺少调用方,就检索该调用方。必需材料仍然放不下,再比较更大的可用预算。缺少环境依赖导致测试无法启动,就先在授权范围内修复环境。缺少权限,就停止并请求授权。单凭其中一种失败,不能认定 200K 不够用。

200K 和 1M 上下文编程怎么选

比较任务结果,不要只比较窗口标签。 这里的 200K、400K 和 1M 是容量示例。只有当前配置支持时才能测试。可用上限是 1M,不代表每次必须输入 1M token。

以跨模块迁移为例。先定位受影响的接口、调用方和测试。如果相关材料能放进较小预算,先测试这个候选。如果必需的关联信息无法一起保留,再测试更大的候选。也可以沿着能独立验收的边界拆分任务。

让下面三种策略处理同一组有代表性的任务:

策略待测试的规则
固定较小上限在较小上限内检索并保留相关材料。
固定较大上限允许保留更多相关材料,但不刻意填满空间。
按条件扩大先用较小预算;记录到缺失证据或材料放不下时,再判断是否扩大。

运行前规定重试次数。第一次尝试、检索、准备和每次重试都要计入成本。尽量固定模型和工具。只有确实需要比较中间档时,才增加 400K 候选。

也要检查工具怎样压缩历史。VS Code 官方文档说明,历史摘要可能压缩或遗漏早期细节。扩大上限与改进摘要策略,是两种不同的修改。

最后选择能满足预定验收和安全标准,且总成本可接受的策略。动态调整只是待测方案,不是预定赢家。我们已发表的证据保留实验没有证明哪个窗口档位更好。

上下文窗口越大代码生成效果越好吗

有时会,但更大的窗口不保证补丁正确。 如果它能补回任务需要的信息,就可能有帮助。信息进入了上下文,不代表 Agent 一定会正确使用。

Google 与 Sourcegraph 在 2024 年公布的案例中,长上下文的 Cody 配置改善了技术问答。这个结果适用于当时的配置和任务,不能直接当作所有错误修复的结论。Google 的上下文指南也指出,检索多条信息可能比只找一条更不稳定。编程助手案例 · 检索限制

增加上下文前,可以在同一任务上比较三份输入:

  1. 当前输入。
  2. 当前输入,加上具体缺失的证据,例如调用方或失败测试。
  3. 包含这些证据及更多周边代码的较大输入。

固定模型、起始代码、工具和验收测试。重复测试每种输入。比较修复是否通过、是否引入回归、是否越权,以及总成本和耗时。如果只有精准补充有效,这支持的是材料选择方法,不是把窗口填满。如果较大输入多次改善结果,再判断改善是否值得额外成本。

下面的已发表实验回答一个更窄的问题:选择上下文后,哪些代码证据被保留下来。它不衡量任务是否修复。

我们的留出实验实际发现了什么

在 2026 年 9 月 2 日冻结的实验中,我们使用来自 12 个仓库的 30 个 SWE-bench Lite 留出任务,比较上下文选择方法。同样给定 40% 的源代码预算,严格证据保留指标的结果如下:

上下文选择方法满足证据保留条件的任务数
头尾截断10 / 30
根据问题关键词检索18 / 30
ContextAdapt v318 / 30

通过这个指标,需要同时满足:不超预算、保留源代码中与问题描述精确匹配的所有行,以及为参考补丁的每个修改块至少保留一行标记为删除的原代码。它不等于 Agent 修好了问题。相关文件已根据参考补丁预先选定;选择器只看到问题和原始源码,补丁内容仅用于评分。这一步没有测试全仓库定位,也没有执行生成补丁。

这个对照给了我们一个实际理由:除了问“上下文有多长”,还要测“留下了什么”。它也对我们自己的设计提出了挑战:在这个预算下,更复杂的方法没有胜过关键词检索。对全部七个压缩预算取平均,ContextAdapt 相对关键词检索的优势为 7.1 个百分点,95% 置信区间为 −2.3 到 +17.9,仍不能确认存在提升。

对正在选方案的开发者,我的建议是先加入一个简单的相关性检索基线,再判断复杂方案是否值得用。仅仅胜过截断,还不足以作出这个判断。这里的百分比是按字符数估算 token 后分配的源代码预算,不是对 200K 和 1M 窗口的直接比较。完整结果见结果账本与冻结协议。

大模型上下文长度的成本延迟和准确率怎么权衡

先定可接受的完成率和安全要求,再比较总成本与耗时。 单次请求便宜,不代表完成一个任务更便宜。

每次任务尝试都保留一条记录:

记录项包含什么
结果独立验收结果、新增回归、约束违反情况,以及失败原因。
用量和费用全部输入与输出 token、缓存用量、准备调用、检索、重试和升级。实际费用与估算费用分开。
耗时从开始到最终结果,包括工具执行和重试。首 token 延迟单独记录。
条件模型、上下文策略、任务版本,以及缓存状态。

Google 指出,Gemini 的较长请求通常会增加首 token 延迟;缓存可以降低重复输入的成本。这两点都不能直接给出你的编程流程总耗时或总费用。仍要检查当前服务商的规则,并测量完整流程。延迟说明 · 缓存文档

一个实用指标是:包含失败尝试的全部实测成本 ÷ 通过验收的任务数。

举一个虚构算例。方案 A 在十个任务上花费 2 美元,完成八个,每个完成任务的成本是 0.25 美元。方案 B 在同样十个任务上花费 1.50 美元,完成五个,每个完成任务的成本是 0.30 美元。A 的总支出更高,但每个完成任务的成本更低。这只是计算示例,不是 ContextAdapt 的实验结果,也不是服务商报价。

在这个比值旁边,同时展示完成率、安全失败,以及常见和较慢运行的耗时。如果没有任务完成,比值就没有定义。违反必需安全条件的方案,即使平均成本低,也不应被选中。

如何评估编程任务需要的最小上下文

测量目标是:在固定验收条件下,找出能通过的最小已测上下文。它不是通用最小值。先选一个边界清楚的小修复,再选一个较难的跨文件修改。

  1. 固定两个任务、初始代码版本、必过测试、受保护文件和成功标准。不要用预期补丁来挑选输入。
  2. 选择几个环境支持的输入预算。每次模型请求都使用对应预算,不只限制第一条提示。固定模型、工具、输出预留空间、检索和摘要规则。同时改变材料选择方法和长度,会混入两个因素。
  3. 每次从干净的初始状态运行。提前规定重复次数、重试上限和升级条件。保留每次失败。
  4. 保存实际上下文和全部尝试。记录检索、准备、审查、重试、输入输出用量、费用和总耗时。
  5. 比较完成情况、约束违规和成本。先在未参与调试的任务上重复验证,再给出更广的建议。

每个任务、候选和重复轮次各记一行:

记录项保存什么
设置任务、代码版本、模型、材料选择方法、输入预算
结果必过测试、受保护文件检查、失败原因
完整尝试实际输入、输出用量、重试、费用、总耗时

不要假设上下文越长,成功率就持续上升。仅靠二分搜索不能证明最小值。一次成功也不能证明稳定可靠。

保留证据和完成修复是两种测量。ContextBench也单独测量过程中的上下文检索,不只看最终成功。

在我们的冻结实验中,ContextAdapt v3 对 30 个留出任务中的 8 个,在已测预算中需要保留预先选定的完整源码,才能覆盖参考补丁每个修改块的原代码行。这不等于 8 个真实 Agent 必须读取整个仓库。它说明需要上面的真实 Agent 实验,不能作为自动停止增加上下文的规则。冻结结果

有哪些开源工具可以测试 AI Agent 上下文长度

先决定要测什么,再选工具。这三个项目都不能自动替你的应用找出最优上下文窗口。

工具测量对象不能据此证明从哪里开始
RULER长度和复杂度可控的合成长上下文任务Agent 能否安全修复你的仓库从 README 指向的当前评测分支开始
SWE-bench将生成补丁应用到真实仓库,再执行测试结果由哪种上下文策略造成,或完整成本是多少阅读 Lite 评测和补丁提交格式
ContextAdapt已发表实验测量固定源代码预算下保留的修改证据真实修复提升、账单节省或通用最小窗口查看证据包和冻结对照

RULER 帮助测试模型的长上下文表现。SWE-bench 检查提交的补丁能否解决其任务。ContextAdapt 的已发表实验比较不同材料选择方法保留源码证据的情况。三者可以配合使用,分数不能互相替代。

我们的实验本身使用了 SWE-bench Lite 任务。它不是 SWE-bench 的替代品,也不存在“胜过其评测框架”的结论。

第一次编程实验,可以使用上一节的两个任务和记录表。让每个候选生成补丁,再运行相同的独立测试。Agent 失败后,分别检查它检索的上下文和它生成的补丁。如果还需要研究长上下文检索,再加入合成基准。

运行上游基准前,先检查硬件、存储、凭证和模型调用费用。阅读结果与亲自复现,是两个不同步骤。