复现little-coder论文数据:9.7B Qwen在Aider Polyglot拿下45.56%,领先基线2.4倍
【免费下载链接】little-coderA harness optimized to smaller LLMs项目地址: https://gitcode.com/gh_mirrors/li/little-coder
little-coder 是一个专为本地小参数模型优化的编码智能体(coding agent)框架。在它的论文数据中,9.7B 的 Qwen3.5 模型在 225 道题的 Aider Polyglot 多语言编程基准上平均拿下45.56%,而同一模型用原版 Aider 只得到19.11%——框架差距达2.4 倍。这篇教程带你拆解论文数据的生产过程:硬件、配置、跑分方法与关键结论,新手也能照着复现。
一、45.56% 是什么水平?先看论文成绩单
| 系统 | 模型 | Aider Polyglot 成绩 |
|---|---|---|
| little-coder + Qwen3.5-9B(两次跑分均值) | 9.7B 本地模型 | 45.56% |
| 原版 Aider + Qwen3.5-9B(同权重同协议) | 9.7B 本地模型 | 19.11% |
| GPT-4.5 preview(公开基准参考线) | 云端大模型 | 44.9% |
| gpt-oss-120b(公开基准参考线) | 云端 120B 模型 | 41.8% |
一个 8GB 显存笔记本上跑的 9.7B 量化模型,追平了云端前沿模型在公开榜单上的成绩——这就是论文标题 "Honey, I Shrunk the Coding Agent" 的底气。
论文级跑分环境(全部来自官方报告):
| 配置项 | 值 |
|---|---|
| CPU | Intel Core i9-14900HX |
| GPU | RTX 5070 Laptop,8 GB 显存 |
| 内存 | 31 GiB |
| 模型 | ollama/qwen3.5(9.7B,Q4_K_M,约 6.6 GB) |
| 推理后端 | Ollama 0.20.5(Docker) |
| 上下文窗口 | 32,768 tokens |
| 思考预算 | 2,048 tokens / 轮 |
| 温度 | 0.3 |
全程离线、零云端推理,一台消费级笔记本就是全部算力。
二、一键安装与复现环境准备 🚀
第 1 步:拿到论文版代码。45.56% 产生于 v0.0.2(commit1d62bde),复现必须切到该 tag:
git clone https://gitcode.com/gh_mirrors/li/little-coder cd little-coder git checkout v0.0.2 # 按该版本 README 完成 Python 环境安装第 2 步:起本地模型。ollama pull qwen3.5拉取 9.7B 权重,保持num_ctx=32768与论文一致。
第 3 步:跑基准。测试驱动脚本在 benchmarks/aider_polyglot.py,对 225 道练习逐题起 agent 会话(读文件→写代码→跑测试→失败重试一次),用各语言原生测试器判分。
💡 每轮完整跑分约20–23 小时。论文数字 45.56% 是两轮(46.22% / 44.89%)的均值,波动仅 ±0.94 pp——建议至少跑两轮再下结论。
三、逐语言拆解:Python 与 Java 是强项,Rust 是硬顶
| 语言 | 题数 | little-coder | 原版 Aider | 差距 |
|---|---|---|---|---|
| Python | 34 | 52.9% | 17.6% | −35 pp |
| Java | 47 | 52.1% | 23.4% | −28 pp |
| C++ | 26 | 50.0% | 26.9% | −23 pp |
| JavaScript | 49 | 46.9% | 18.4% | −27 pp |
| Go | 39 | 38.5% | 12.8% | −26 pp |
| Rust | 30 | 30.0% | 16.7% | −13 pp(最窄) |
三个值得记住的结论:
- Python 差距最大(−35 pp):little-coder 的工作区发现 + 技能注入在 Python 这种语法简洁、测试驱动的语言上收益最明显。
- Rust 差距最窄:借用检查器是"模型能力天花板",架构再怎么优化也推不动——9.7B 模型在 Rust 上就是会撞到语义理解的墙。
- 跨语言难度高度一致:
book-store、bowling等组合优化/状态机题在所有语言下双系统全灭,瓶颈在算法推理深度而非语言语法。
四、2.4 倍领先从哪来?5 个"反小模型缺陷"机制
小模型不是"笨",而是失败模式高度确定——同一个坑反复踩。little-coder 的思路就是:用确定性的架构对策,堵确定性的坑。
1️⃣ Write-guard(读写不变量):Write 工具对已存在文件一律拒绝,结构化报错强制模型改用 Edit 做局部修改。实测每轮在57% 的练习上拦截过整文件重写——这是开发期观察到的第一大失败模式。
2️⃣ 思考预算上限(2,048 tokens):实时监控推理 token 流,超限即截断,把已产生的部分思考回注上下文后关闭思考重试。每轮触发约 200 次——意味着大量练习上模型本来会把思考跑到上下文爆炸。
3️⃣ 测试输出引导的重试:第一次失败后把测试输出喂回上下文再试一次,救回17.6%的通过题(约 +8 pp)。
4️⃣ 工作区发现 + 知识注入:编码类关键词触发时注入技能卡片,指导模型先 Glob 出.docs/instructions.md、README.md再动手。67% 的练习用到了 Glob,100% 用到了 Read——"先读规范再写代码"直接翻盘了 affine-cipher 等具体题目。
5️⃣ 质量监控 + 20 轮上限:检测空响应/幻觉工具名/死循环;通过的题平均 11.6 轮收敛,失败的题烧满 19 轮——41% 的练习触顶被截断,而不是无限烧显卡。
📁 机制对应的技能与知识文件见 skills/(skills/knowledge/dynamic_programming.md、skills/protocols/research_protocol.md),架构总览见 docs/architecture.md。
五、时间经济学:慢一点,但赢面大得多
| 指标 | little-coder | 原版 Aider |
|---|---|---|
| 通过题平均耗时 | 176s | 141s |
| 失败题平均耗时 | 491s | 224s |
| 每小时通过题数 | 4.74 | 2.75 |
Aider 失败得快(2 次全文件重写就放弃),但 little-coder 在难题上多探索的那 20 轮换来1.72 倍的"通过吞吐"。代价是失败题消耗 2.8 倍于通过题的时间——约56% 的总跑分时长花在了最终失败的题上,这也是作者提出"预测性提前终止"优化方向的原因。
六、复现避坑清单 📌
论文跑分时踩过的三个坑,比数据本身更有参考价值(详见 docs/benchmark-reproduction.md):
- Ollama runner 会静默崩溃:长跑 6–10 小时后推理子进程死掉被替换,崩溃后的语言赛道通过率从 ~52% 掉到 ~32%,且不报错。对策:每个 API 请求加
"keep_alive": -1。 - 测试进程必须沙箱化:一道 Go 题的 buggy 测试二进制吃掉 27.7 GB 内存拖垮整机。用
systemd-run --scope -p MemoryMax=4G给每道题套内存上限。 - 别信单次跑分:runner 污染、热降频都会系统性压低成绩;两轮均值 ± SEM 才是可信口径。
七、结论:脚手架与模型匹配,是小模型的杠杆
| 关键数字 | 含义 |
|---|---|
| 45.56% vs 19.11% | 同一 9.7B 权重,架构差 2.4 倍 |
| 69 题 | little-coder 解出而 Aider 失败的"架构增量题"(净贡献 +58 题) |
| +8 pp | 仅"测试输出重试"一个机制的贡献 |
| 8 GB 显存 | 全部数据的生产硬件 |
想继续深入?完整叙事读 docs/benchmark-reproduction.md,基线对照读 docs/benchmark-baseline-aider.md,后续 35B-A3B 冲上 78.67% 的进阶数据见 docs/benchmark-qwen3.6-35b-a3b.md。
给新手的一句话总结:模型选不选得动是能力问题,但用不用得上是工程问题——little-coder 证明,在本地小模型上,后者恰恰是你最能发力的地方。
【免费下载链接】little-coderA harness optimized to smaller LLMs项目地址: https://gitcode.com/gh_mirrors/li/little-coder
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考