本地2B模型接管Claude Code代码搜索,省34%token,慢八秒
搜索环节交给本地模型
LightOn 发布了一个开源的代码搜索代理 ColGrep-Agent-2B。
20 亿参数,本地运行。
它夹在编码代理和代码仓库中间,比如 Claude Code。
AI 编程助手处理问题时,找代码这一环吃掉不少 token。
ColGrep-Agent-2B 把这个环节整个接过去。
搜索在本地完成,编码代理只拿到最终定位结果。
代理拿到问题后,先用 ColGrep 做多向量语义搜索。
找出有希望的文件,读取内容,顺着引用继续追。
最后返回文件路径、行范围和代码本身。
底层检索模型 LateOn-Code-edge 只有 17M 参数。
它给每个 token 保留一个向量,匹配更柔和。
代理有三个工具。
colgrep 做语义搜索,terminal 跑只读命令。
finish 返回定位结果。
它有 10 回合预算,最后一回合强制调用 finish。
不会无限跑下去。
省三成 token,准确率基本持平
LightOn 的测试环境是 Claude Code 跑 Sonnet 5.5。
52 个代码搜索问题,13 个模型没见过的代码库。
每个问题在四种设置下各跑三次,共 624 个会话。
相比让云端模型用 grep,把搜索交给本地代理后,token 消耗减少 34%。
缓存感知的 API 成本降低 40%。
缓存感知的意思是把提示词缓存算进去。
token 账面数和实际账单往往对不上。
40% 这个数是在缓存生效后的口径下算的。
质量没有被省钱牺牲掉多少。
SWE-bench Lite 上,行 F1 19.92,排第一。
其中包括不少参数大得多的通用模型。
Multi-SWE-bench Flash 上,文件 F1 62.57。行 F1 15.93。
在 Semble 基准上,它平均只返回 1.7 个文件。
Semble 返回 8.5 个,CodeRankEmbed 返回 9.2 个。
文件少,但相关度不低:Precision@10 0.744,F1 0.776。
轨迹层面的头对头比较里,评判者 75% 更看好它。
准确率从 83.3% 变成 80.8%,差 2.6 个百分点。
统计上没有显著差异。
不过 95% 置信区间是 -10.9 到 +5.1 个百分点。
区间很宽,作者也不排除实际表现明显变差。
还有一个中间选项。
Balanced 设置把两条路径混着用。
它省 21% 的 token,准确率保持 83.3%,和 grep 一样。
省多省少跟代码库规模直接相关。
13 个代码库上,小于 5 万行的省 19%。
5 万到 15 万行的省 29%,15 万到 60 万行的省 40%。
库越大,省得越多。
代价是时间
端到端的问题处理时间从 grep 的 13.0 秒变成 21.6 秒。
单独看本地代理的一次调用。
GPU 服务器上,中位延迟 7 秒,90 百分位 22 秒。
Apple M3 Pro 上,约 20 秒,峰值内存 3–4 GB。
推理能上 GPU 就上 GPU。
Apple Silicon 走 Metal。
NVIDIA、AMD、Intel 的 GPU 走 Vulkan。
没有 GPU 就退回 CPU。
安装与训练
安装门槛不高。
Homebrew 一条命令装完。
再跑 colgrep --install-agent 下载模型。
下载的是 Q8_0 量化版本,约 2.5 GB。
不用配置 Python 环境,不用外部推理服务器,也不用 API key。
还有 macOS/Linux 的 shell 脚本。
Windows 走 PowerShell,Cargo 也能装。
索引只建一次,之后自动检测改动并更新。
模型和 GGUF 权重挂在 Hugging Face 上。
这个 2B 模型不是从零训练的。
底子是 MiniCPM5-2B。
训练分两个阶段。
先用 Qwen3.5-27B 当教师模型,生成搜索轨迹。
筛选后对 MiniCPM5-2B 做监督微调,作为冷启动。
然后上 GRPO 强化学习。
细节包括零优势过滤、在可训练 token 上平均损失、省略 KL 散度惩罚。
奖励是文件 F1 和行 F1 的等权平均。
外加回合惩罚和对 grep 调用的轻微惩罚。
训练数据主要来自两个公开集。
一个是 nebius/SWE-rebench。
另一个是 internlm/SWE-Fixer-Train-110K。
另外还有抓取的代码库。
每个样本含一个仓库、一个 issue 描述和对应的修复提交。
边界
这些结果只针对代码搜索问题。
不是端到端的编码任务。
节省的 token 也只在这个测试场景里成立。
专门训练的 2B 小模型,在代码定位这一件事上能打平此前的搜索方式。
搜索从云端挪到了本地。
API 账单变小,等待变长。
三件事摆在一起,取舍留给开发者自己。