小于20亿参数的小型智能体用语义检索做代码定位,在SWE-bench Lite与Multi-SWE-bench Flash上超过grep并降低44.1% CPU延迟
相关研究与后续进展核心概要
作者提出围绕本地语义检索工具colgrep的两阶段训练框架(按检索结果加权的监督微调加基于定位质量的强化学习),训练三个1–1.7B参数模型完成代码文件定位;在SWE-bench Lite与Multi-SWE-bench Flash上,colgrep智能体在各训练阶段均优于对应的grep智能体,Qwen3-1.7B经加权SFT加RL后文件F1达67.29与54.00,并减少29.1%的token、在CPU上降低44.1%端到端延迟,同时对微调未见过的七种语言迁移更好。
Figure 2: File-localization performance and latency for Qwen3-1.7B after RL with the turn penalty. The latency breakdown separates LLM inference, search ( grep / colgrep calls), and other runtime overhead.
arXiv深度剖析
语义检索接口在小型定位智能体上稳定优于词法检索接口。 此前工作分别研究词法检索智能体(如CodeScout、CodeGrep)与语义检索器,但未在低于20亿参数、且对两种接口做对称训练的条件下系统比较;本文用同一harness、同一训练流程分别生成grep与colgrep教师轨迹。 表1显示colgrep在SWE-bench Lite与Multi-SWE-bench Flash的每个训练阶段文件F1都更高;表5显示加权SFT后三个模型家族均保持该优势,其中MiniCPM5-1B在Multi-SWE-bench Flash上从18.84提升到40.77。
按检索结果给助手轮次分配权重的监督微调,在相同微调算力下提升文件F1。 不同于整条轨迹的筛选(unfiltered或F1阈值过滤),该方法对每一轮按是否发现新gold文件、重复查看、仅检索到无关文件、空结果或错误分别赋权1.0、0.6、0.3、0.05,并按提交轮的召回率加权。 表3显示加权SFT在三个学生模型和两个基准上文件F1均为最高,例如Qwen3-1.7B在SWE-bench Lite为55.09,高于unfiltered的54.87与F1过滤的53.50。
智能体式多轮检索优于单次直接检索,且额外检索开销很小。 作者将策略与BM25及colgrep的直接检索上界(用gold文件选出的top-10 oracle子集)对比,区分单轮与多轮设置。 表2中单轮智能体在SWE-bench Lite超出BM25 8.19分、超出colgrep基线2.19分,在Multi-SWE-bench Flash分别超出16.48与4.46分;多轮达到67.34与53.37,平均检索调用仅2.06次,而单轮为2.00次。
语义检索降低推理成本并改善对未见编程语言的迁移。 作者在GPU与CPU两种部署下测量端到端延迟与token长度,并用仅Python的SFT与多语言SFT对照,隔离评测语言被排除的影响。 平均轨迹长度从7,857降至5,574 token(29.1%),CPU延迟从36.08降至20.18秒(44.1%),GPU从2.15降至1.92秒(10.6%);仅Python训练时colgrep平均下降2.13分,grep下降14.90分,且colgrep在七种语言上平均领先28.82分。
启示与展望
该结果面向需要在本地或消费级硬件上运行定位步骤的场景:作者把研究范围限定在低于20亿参数的模型,并说明这是为了快速、廉价的本地智能体。方法上,它适用于以自然语言issue描述为输入、以文件(可选行范围或符号)为输出的检索式定位任务,且依赖预先构建的仓库索引与本地colgrep二进制。对下游使用者而言,这意味着可以把定位交给小型语义检索智能体,再把候选文件交给更大模型编辑;作者也指出多轮交互优于单轮与直接检索,因此保留少量交互轮次是有价值的。效率收益在CPU-only部署下最明显,因为此时LLM推理占grep延迟的99.2%。
作者列出的开放问题包括:更大模型上这些收益是否持续尚未评估;所有实验只用单一harness,因此对提示策略与工具接口的敏感性未知;评测以参考补丁修改的文件为gold,只代表一种可能解法,可能遗漏有用的上下文文件;实验限于代码仓库,向文档检索等其他检索密集领域扩展仍待研究。此外,作者提到colgrep每次调用会启动新进程并重新加载检索模型,这部分可避免的开销已计入所报延迟,保持模型常驻可能进一步降低延迟。读者在迁移到自有仓库时,还需注意索引需在实例base commit上预先构建,且训练数据经过按实例ID与仓库/base-commit/patch哈希去重及长n-gram去污染。
