EasyCommand 开源:用 1.5B / 0.6B 小模型把英文请求转成本地 Bash 命令
一个业余项目把 1.5B 参数的小模型微调成"英文转 Bash 命令"的本地工具,训练流程大部分已自动化。作者现已开源完整合成数据、两个 GGUF 模型,以及一个内嵌 llama.cpp 的 C++ 命令行工具,并公开了基准测试结果与对比方法。
项目背景:小模型到底能推到什么程度
这原本只是一个副业项目,出发点很直接:看看一个超小模型究竟能被推到什么程度。作者的训练流程大部分已经自动化。项目最初在 Hacker News 发帖后(原始讨论),不少人希望开源,于是有了现在这批成果:
- 完整合成数据:dirac-run/ec-training-data
- 模型:EC 1.5B 和 EC 0.6B,均为 GGUF 格式
- 命令行工具:dirac-run/ec
数据可自由用于训练或其他用途,相关讨论见这里。
EasyCommand 是什么
工具叫 EasyCommand,做的事很单一:把一句英文请求变成一条 Bash 命令,而且整个过程都在本机完成——不上传、不联网。它会先打印生成的命令,执行前再向用户确认一次。
仓库信息如下:
- 仓库:dirac-run/ec
- 开发语言:C++
- 许可证:MIT
它本质上是一个内嵌了 llama.cpp 的 C++ 应用。llama.cpp 是一个在本机运行大模型的推理引擎。运行时只需要一个兼容的 GGUF 模型文件,加上普通的 Linux 系统库;不需要 Python、PyTorch、GPU、Ollama,也不需要联网。Python 只出现在可选的安装、测试和训练工具里。
对习惯在本地跑 AI 编程辅助的开发者来说,"小模型 + 本地推理"正好对应"氛围编程"的典型场景:让模型起草命令,人来确认后再执行,数据不出本机,也不依赖云服务。
基准测试结果
以下是本地实测结果,涵盖已发布的 EC 模型和一个外部参照模型:
| 模型 | 量化 | ALFA-updated(/300) | 通过率 | 内部测试(/1320) |
|---|---|---|---|---|
| EC 1.5B A3 | Q4_K_M | 212/300 | 70.67% | 1119/1320 |
| whatisit / nl2sh-1.5b | Q4_K_M | 191/300 | 63.67% | 82/1320 |
| EC 0.6B A1 | Q8_0 | 174/300 | 58.00% | 922/1320 |
| EC 0.6B A1 | Q4_K_M | 165/300 | 55.00% | 911/1320 |
这里的"量化"指的是把模型权重压缩成占用更小、精度更低的格式。Q4_K_M、Q8_0 是两种常见的压缩档位:数字越大占用空间越多,精度通常也越高。
这些结果基于 ALFA-updated 基准,包含有记录的环境说明与正确性修复,与已发布的 original-ALFA 分数分开统计。基准自身的错误仍然计入 300 项任务的分母:EC Q4 每次运行出现一个错误,EC Q8 两个,whatisit 五个。
内部测试套件拆解
内部测试共 1320 条,构成如下:
- 普通命令 244 条
- 引号 256 条
- 精确操作数 512 条
- 时间谓词 84 条
- 文本处理迁移 160 条
- 英文措辞 64 条
评测结果怎么读:先看那个 832/1320
EasyCommand 内部的 1320 条测试用例,分布并不均匀。其中三类任务合计占了 832 条,也就是 63.0%,分别是引号处理、精确操作数和英文措辞的表述方式。
这三类考的其实是同一件事:模型能不能把输入里的字符串和输出格式原样照搬。说白了,这是一次针对字面检索和输出模式的压力测试。而且不少用例是同一套模板换着参数反复出现,真正不同的题型远少于 1320。
更要紧的一点是:这套测试面板本身就参与过 EC 的开发调优。模型在它上面拿到好成绩,多少带一点“事先见过题”的成分。所以这个总数不能当成成绩单,更不能用来代表它在 1320 个彼此独立、从未见过的新任务上的通用 shell 准确率。
还有一个细节:在对照模型 whatisit 的内部结果中,出现过一次把评测程序自身的错误记成模型失败的情况。这说明内部测试的分数本身也需要谨慎对待。
对做 AI 编程工具、氛围编程(vibe coding)Agent 的开发者来说,自制测试集参与调优、模板反复复用这类问题并不陌生。看基准分数时,最好先确认测试集和训练数据之间有没有重叠,再决定信多少。