FastContext: Training Efficient Repository Explorer for Coding Agents

论文阅读:FastContext:训练高效的代码仓库探索器以服务 Coding Agent

论文标题:FastContext: Training Efficient Repository Explorer for Coding Agents
中文标题:FastContext:训练高效的代码仓库探索器以服务 Coding Agent
作者:Shaoqiu Zhang, Maoquan Wang, Yuling Shi, Yuling Shi, Yuhang Wang, Xiaodong Gu, Yongqiang Yao, Rao Fu, Shengyu Fu
机构:Microsoft;Shanghai Jiao Tong University
发表位置:arXiv preprint
arXiv 编号:2606.14066v1 [cs.SE]
原文链接:https://arxiv.org/pdf/2606.14066
代码与数据:https://github.com/microsoft/fastcontext
主题:LLM Coding Agent、代码仓库探索、上下文选择、代码定位、子 Agent、SFT/RL
核心问题:在真实软件工程任务中,coding agent 往往要先花大量轮次和 token 在仓库里查找相关代码;论文试图把这部分“探索”从主求解 Agent 中拆出来,交给一个更小、更专门的 FastContext 子 Agent 完成。


1. 论文要解决什么问题?

这篇论文关注的是 coding agent 在代码仓库级任务中的一个基础但容易被混在整体能力里的环节:仓库探索

在 SWE-bench 这类任务中,Agent 并不是直接看到待修改的函数,然后生成补丁。它通常需要先阅读 issue 描述,再在仓库中查找相关文件、搜索符号、阅读上下文、定位可能需要修改的代码区域,之后才进入真正的修复、测试和提交阶段。

论文指出,当前很多 coding agent 里,同一个主模型既负责探索仓库,又负责解决任务。这样会带来两个问题:

  1. 成本问题:大量 readgrepsearch 会消耗主模型 token。
  2. 上下文污染问题:探索过程中读到的无关代码片段会留在主 Agent 的历史中,后续求解时模型需要带着这些噪声继续推理。

FastContext 的基本想法是:不要让昂贵的主模型亲自完成所有探索;可以引入一个专门的仓库探索子 Agent,让它独立地进行只读搜索,并把结果压缩成一组精确的文件路径和行号区间,再交给主 Agent。

也就是说,FastContext 并不是补丁生成器,也不是完整替代 coding agent 的新框架。它更像一个“代码仓库导航员”:先帮主 Agent 找到相关区域,主 Agent 再基于这些区域继续修复、测试或回答问题。


2. 为什么仓库探索值得单独拆出来?

论文首先做了一个 preliminary analysis,用 Mini-SWE-Agent + GPT-5.4-high 在完整 SWE-bench Multilingual 上的 300 条轨迹来分析主 Agent 的时间和 token 花在哪里。

结果显示,读取文件和搜索代码在轨迹中占了很大比例:

指标 论文报告的现象
工具调用轮次 read/search 合计平均占 9.96 / 17.72 个工具轮次
工具轮次比例 read/search 占 56.2%
主 Agent token read/search 消耗 46.5% 的主 Agent 总 token
首次编辑时间 在可识别首次源码编辑的 284 条轨迹中,平均第 8.47 轮才开始编辑
编辑前探索 median 仍需要 6 个顺序探索轮次和 15.5 次探索工具调用
resolved vs unresolved unresolved 轨迹编辑前探索轮次更多,平均 8.34 vs 6.67

这里论文的表述比较谨慎:未解决任务有更多探索轮次,并不证明“探索导致失败”。更合理的解释是,困难任务天然需要更多探索。但这仍然说明,仓库探索是一个足够重、足够结构化的环节,值得作为一个独立模块优化。

image

【Figure 2。该图展示 GPT-5.4-high 在 Mini-SWE-Agent 中的工具轮次与 token 分布,以及首次编辑前的探索轮次/工具调用数量。】

这一分析引出 FastContext 的核心动机:如果能把探索过程放到主 Agent 外部执行,主 Agent 就不必把大量中间搜索历史带进自己的上下文窗口,只需要拿到紧凑、可操作的文件行号证据。


3. FastContext 的整体思路

FastContext 是一个专门的 exploration subagent。它接收主 Agent 提出的自然语言查询,例如“定位和某个 bug 相关的代码路径”,然后在代码仓库中使用只读工具进行探索,最后返回一组紧凑的文件路径和行号区间。

论文中的架构可以概括为三层:

组件 作用
主 Coding Agent 负责理解任务、决定是否调用 FastContext、基于返回证据继续编辑和测试
FastContext 子 Agent 负责仓库探索,使用只读工具寻找相关代码
Environment / Repository 提供代码仓库、文件读取、路径匹配和文本搜索能力

FastContext 的输出不是 patch,而是类似下面这样的证据列表:

<final_answer>
/src/router.py:42-58 (Router definition)
/tests/test_router.py:101-119
</final_answer>

这个输出契约很重要。它让子 Agent 的结果可以被主 Agent 直接消费:主 Agent 不需要阅读子 Agent 的完整搜索过程,也不需要继承它所有中间工具输出,只需要看到“哪些文件的哪些行值得看”。

image

【Figure 3。该图左侧展示 FastContext 在端到端 Agent loop 中的位置,右侧展示 FastContext 内部的 query understanding、parallel tool calling、observation 和 final citations。】


4. FastContext 子 Agent 的工具设计

FastContext 暴露的工具非常克制,只有三类只读工具:

工具 作用
READ 读取带行号的文件内容
GLOB 根据路径模式发现文件
GREP 对仓库文本做正则搜索

子 Agent 每一轮可以做两件事之一:

  1. 发起一个或多个工具调用;
  2. 停止探索,并输出最终的文件-行号证据。

论文强调并行工具调用:同一轮中多个工具调用可以并行执行。这样,FastContext 可以同时验证多个搜索假设,例如一边按路径模式找文件,一边按符号名搜索,一边读取某个候选文件的关键区域。

这和主 Agent 顺序地一点点查找相比,有两个潜在好处:

第一,探索本身可以更快覆盖多个方向;第二,中间探索轨迹不会污染主 Agent 的对话历史。主 Agent 只得到最终压缩后的证据块。


5. 训练阶段一:用 SFT 初始化探索行为

FastContext 不是简单写一个提示词让模型去搜索,而是训练了一组专门的探索模型,规模从 4B 到 30B。

第一步是 supervised fine-tuning。论文构建了 2,954 条过滤后的 SFT 样本,这些样本来自 Sonnet 4.6 的仓库探索轨迹,并被拆成三类,以对应 FastContext 实际运行时需要具备的能力:

SFT 数据来源 训练目标
parallel_toolcalls 学习第一轮如何做宽搜索,发起互补且不冗余的并行工具调用
multiturn_traj 学习多轮探索过程:根据工具观察继续细化搜索
linerange 学习最终输出精确的文件路径和行号区间

这种设计说明,论文并不只是训练模型预测“最终相关文件”。它希望模型学会完整的探索流程:先宽搜索,再根据观察缩小范围,最后把证据压缩成行号引用。

SFT 的目标函数只对 assistant token 计算损失,包括普通文本、结构化工具调用参数和最终 citation block;非 assistant token 被 mask 掉。这样训练目标和实际工具调用对话形式保持一致。


6. 训练阶段二:用任务相关 RL 优化最终证据

SFT 可以模仿参考模型的探索轨迹,但它不直接优化“最终返回的行号证据是否覆盖了解决任务所需的代码位置”。因此论文进一步使用 reinforcement learning 来细化探索策略。

RL 阶段使用 400 个 issue-resolution prompts。每个样本包含:

  • explorer instruction;
  • workspace metadata;
  • 顶层目录列表;
  • 自然语言形式的仓库探索查询;
  • 从 reference patch 中解析出的目标文件和目标行号范围。

训练时,模型作为真实 FastContext 子 Agent rollout:它在同样的工具环境中使用 READ、GLOB、GREP 搜索,最后输出 <final_answer>

奖励函数由三部分构成:

奖励/惩罚项 含义
file-level F1 最终引用的文件是否覆盖 reference patch 涉及的文件
line-level F1 最终引用的行号范围是否覆盖 reference patch 涉及的代码区域
parallel bonus 对受限范围内的并行工具调用给予小奖励
format penalty 对空输出、过长输出、格式错误或过度发散的输出进行惩罚

论文使用 GRPO 从 SFT checkpoint 继续优化。RL 的目的不是让子 Agent 输出越多越好,而是让它返回一个小而有效的 citation set:既要覆盖关键位置,又要保持格式规范和上下文紧凑。


7. 实验设置

论文从两个角度评估 FastContext。

第一类是端到端任务表现:把 FastContext 接到 Mini-SWE-Agent 上,看主 Agent 的任务成功率是否提高、主 Agent token 是否下降。

使用的 benchmark 包括:

Benchmark 任务类型
SWE-bench Multilingual 300 个多语言 issue-resolution 实例
SWE-bench Pro 更困难的软件工程任务;论文使用固定随机采样的 200 个实例
SWE-QA 仓库级问答任务,不要求生成 patch,但要求定位和理解相关代码

主 Agent 包括 GPT-5.4、GLM-5.1、Kimi-K2.6。对每个主 Agent,论文比较:

设置 含义
w/o Explore 主 Agent 直接求解,不使用探索子 Agent
same-model exploration 用同一个强主模型执行 delegated exploration
FC-30B-SFT 使用 30B SFT FastContext
FC-4B-SFT 使用 4B SFT FastContext
FC-4B-RL 使用 4B SFT + RL FastContext

第二类是 standalone exploration quality:单独评估 explorer 是否能找回 reference patch 相关位置。该实验使用 SWE-bench Verified,并在 file、module、function 三个粒度上计算 precision、recall 和 F1。


8. 端到端实验结果

论文的主表 Table 1 显示,加入 FastContext 后,每个主 Agent 在每个 benchmark 上的最佳 explorer-augmented 设置都优于直接求解。

为了突出主要趋势,下面整理每个主 Agent 的直接求解 baseline,以及在三个 benchmark 上表现有代表性的 FastContext 结果。

主 Agent 设置 SWE-bench Multilingual Score / Tokens SWE-bench Pro Score / Tokens SWE-QA Score / Tokens
GPT-5.4 w/o Explore 71.7 / 457k 46.0 / 818k 81.3 / 418k
GPT-5.4 same-model 73.3 / 379k 51.5 / 703k 81.4 / 166k
GPT-5.4 FC-30B-SFT 75.0 / 356k 49.0 / 688k 82.0 / 206k
GPT-5.4 FC-4B-SFT 73.3 / 364k 47.0 / 689k 81.9 / 213k
GPT-5.4 FC-4B-RL 74.7 / 338k 48.5 / 701k 82.0 / 210k
GLM-5.1 w/o Explore 72.3 / 2514k 17.5 / 2692k 72.7 / 401k
GLM-5.1 FC-4B-RL 73.7 / 1971k 22.5 / 2210k 73.5 / 302k
Kimi-K2.6 w/o Explore 76.3 / 1553k 31.0 / 2383k 71.6 / 510k
Kimi-K2.6 FC-4B-RL 78.3 / 1384k 33.5 / 2158k 72.6 / 378k

从结果看,最大的准确率提升出现在 SWE-bench Pro:

  • GPT-5.4:46.0 提升到 51.5;
  • GLM-5.1:17.5 提升到 22.5;
  • Kimi-K2.6:31.0 提升到 33.5。

SWE-bench Multilingual 也有稳定提升;SWE-QA 的分数提升相对较小,但 token 节省很明显。

论文特别强调 token 结果:所有 explorer-augmented 设置都比直接求解消耗更少的主 Agent token。最大节省出现在 SWE-QA 上,例如 GPT-5.4 从 418k 降到 166k,下降 60.3%。训练出的 FastContext explorer 在 SWE-QA 上也能带来约 50% 的主 Agent token 节省。

image

【Figure 4。该图展示 GPT-5.4 在三个 benchmark 上加入 FC-4B-RL 前后的主 Agent token 构成变化。】

image

【Figure 5。该图展示 SWE-bench Multilingual 上每个实例的 GPT-5.4 主 Agent token 分布,说明 token 节省不是只来自少数异常样本。】


9. 几个消融结论

论文的 ablation analysis 主要回答三个问题。

9.1 用同一个强模型探索不一定是最好选择

same-model exploration 看似自然:既然主模型能力强,就让它自己作为 explorer 搜索。但实验显示,训练过的 FastContext 模型经常在 score 和 token 两方面都优于 same-model exploration。

例如在 GPT-5.4 + SWE-bench Multilingual 上:

设置 Score Tokens
same-model exploration 73.3 379k
FC-30B-SFT 75.0 356k
FC-4B-RL 74.7 338k

这说明,“更强的通用模型”不一定等于“更好的探索组件”。如果探索任务本身有明确输出契约和训练信号,小模型也可以成为更划算的专门模块。

9.2 4B-RL 有时能超过 30B-SFT

论文报告,FC-4B-RL 在部分设置中超过 FC-30B-SFT。例如在 GLM-5.1 + SWE-bench Pro 上,4B-RL 得到 22.5,而 30B-SFT 是 20.0,并且 4B-RL 使用更少 token。

这不是说 4B 模型整体强于 30B 模型,而是说明 task-grounded RL 对这种有明确目标的探索任务很有效。只做 SFT 的大模型可以作为 scaling reference,而经过 RL 对齐的小模型可能更符合最终任务目标。

9.3 RL 稳定改善 compact explorer

和 FC-4B-SFT 相比,FC-4B-RL 在九个端到端设置中都提升或持平。明显提升包括 GPT-5.4 + SWE-bench Pro、GLM-5.1 + SWE-bench Pro,以及 Kimi-K2.6 的两个 issue-resolution benchmark。

这与奖励设计一致:RL 直接优化最终 citation 是否覆盖 patch-relevant locations,并约束输出格式和大小,因此更适合训练一个“返回短证据列表”的探索器。


10. 单独评估探索质量

除了端到端结果,论文还用 SWE-bench Verified 评估 FastContext 的 standalone localization 能力。这里的目标不是看最终 patch 是否通过测试,而是看 explorer 输出的文件和行号是否能覆盖 reference patch 相关位置。

论文在 file、module、function 三个粒度上计算 F1、precision、recall。关键结果包括:

模型/设置 File F1 Module F1 Function F1
FastContext GPT-5.4 72.34 55.16 35.91
FastContext GLM-5.1 73.88 59.31 43.50
FastContext Kimi-K2.6 71.34 59.34 43.87
FC-30B-SFT 73.71 60.35 40.74
FC-4B-SFT 70.55 55.26 37.48
FC-4B-RL 71.48 56.26 38.45

论文指出,在非 frontier 模型比较中,训练过的 FastContext checkpoint 在 file 和 module 粒度上形成了最强的一组结果。FC-30B-SFT 达到 73.71 的 file-level F1 和 60.35 的 module-level F1;作为小模型部署目标的 FC-4B-RL 也达到 71.48 / 56.26 / 38.45。

论文还观察到,从 4B-SFT 到 4B-RL,提升主要来自 recall 提高,而 precision 接近。这和奖励目标一致:RL 鼓励模型覆盖 patch-relevant locations,同时通过格式惩罚避免输出失控。


11. token 节省该如何理解?

一个容易误解的地方是:Table 1 中的 token 是主 Agent token,不包括 FastContext 子 Agent 内部探索消耗。论文在 Appendix B 中专门解释了这个 accounting 方式。

FastContext 的设计目标之一是减少强主模型必须携带的上下文和调用成本。因此主表报告的是主 Agent 轨迹中的 token:主模型调用、shell observation、solver turns 等,不把子 Agent 内部模型调用加进去。

但论文并没有忽略子 Agent 成本。它额外审计了 GPT-5.4 + SWE-bench Multilingual + 4B-RL 的运行:

项目 数值
任务数 300
FastContext 调用次数 162
4B-RL 子 Agent 总 token 22.58M
按 $0.20 / 1M token 估算的子 Agent API 成本 $4.52
直接主 Agent 成本估算 $282.47
加入 4B-RL 后主 Agent 成本估算 $208.92
augmented total $213.44
net saving $69.03

论文同时说明,目标部署中 4B explorer 是本地服务的,因此这个 API 成本估计主要是为了说明:即便按保守的 serverless 价格计算,子 Agent 开销仍然较小。

这个细节很重要。FastContext 并不是让所有计算消失,而是把昂贵主模型的探索负担转移给便宜、专门的小模型,并通过只返回最终证据来降低主模型上下文负担。


12. 与相关工作的关系

论文将相关工作放在几个方向中讨论。

第一类是 coding agents,例如 SWE-agent、AutoCodeRover、Agentless、OpenHands 等。这些系统通常通过工具使用和环境交互来完成真实软件工程任务,但它们对工作流组织方式不同,有些采用通用 shell/editor loop,有些将 issue resolution 拆成多个阶段。

第二类是代码定位和上下文选择方法,包括基于图结构、程序结构、检索、压缩或 workflow 的方法。这些方法说明更好的上下文选择能帮助软件工程 Agent,但很多工作更关注 standalone localization、上下文压缩或专门 pipeline。

FastContext 的区别在于,它把仓库探索做成一个可委托、可训练、轻量的子 Agent,并通过明确的文件-行号输出契约与标准主 Agent 协作。它不要求主 Agent 完全换成一个新的专门系统,而是尝试成为一个可复用的探索组件。


13. 论文指出的局限性

论文在 Limitations 中列出几个限制。

第一,当前端到端实验只把 FastContext 集成到 Mini-SWE-Agent 中。未来还需要把它适配到更多 coding-agent 框架中,因为不同框架的工具接口、记忆策略和 subagent orchestration 机制可能不同。

第二,主 Agent 实验主要使用较强模型,包括 GPT-5.4、GLM-5.1 和 Kimi-K2.6。论文尚未充分研究 FastContext 与更小主模型,例如 30B 级 coding agent 搭配时的效果。

第三,和其他公开 Agent benchmark 一样,部分任务可能与 frontier 模型预训练或产品调优数据重叠。因此这些结果应被视为受控 benchmark 证据,而不是实际部署保证。

第四,论文中最小的 explorer 是 4B 参数。作者计划继续研究同样的 SFT + RL 方案是否可以支持更小的 explorer,例如 1.7B 或 0.6B 模型。


14. 总结

FastContext 的核心观点是:在代码仓库级任务中,仓库探索不应只是主 Agent 求解轨迹里的隐性成本,而可以被抽象成一个独立、可训练、可评估的模块。

论文的设计可以概括为:

  1. 主 Agent 在需要时调用 FastContext;
  2. FastContext 使用 READ、GLOB、GREP 进行只读、可并行的仓库探索;
  3. 子 Agent 不返回完整搜索轨迹,只返回紧凑的文件路径和行号区间;
  4. 训练上先用 SFT 学探索过程,再用 task-grounded RL 优化最终 citation 与 reference patch 的匹配;
  5. 端到端实验显示,FastContext 能在 SWE-bench Multilingual、SWE-bench Pro 和 SWE-QA 上提升任务表现,并降低主 Agent token 消耗;
  6. standalone localization 结果说明,训练过的 FastContext explorer 确实更擅长找回 patch-relevant 的代码区域。

这篇论文的主要意义不只是提出一个具体的子 Agent,而是强调一种更模块化的 coding-agent 视角:仓库导航、补丁生成、测试验证不一定都要由同一个上下文里的同一个模型完成。把仓库探索变成一个显式接口后,就可以用更小、更专门的模型承担这部分工作,让强主模型集中在真正的修复和推理上。

参考

  • Shaoqiu Zhang, Maoquan Wang, Yuling Shi, Yuhang Wang, Xiaodong Gu, Yongqiang Yao, Rao Fu, Shengyu Fu. FastContext: Training Efficient Repository Explorer for Coding Agents. arXiv:2606.14066v1, 2026.
posted @ 2026-06-16 10:22  YourF4u1t  阅读(96)  评论(0)    收藏  举报