news 2026/9/10 15:28:33

Ponytail如何跑本地模型基准测试:Ollama拉取模型并用benchmark-local.py复现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ponytail如何跑本地模型基准测试:Ollama拉取模型并用benchmark-local.py复现

Ponytail如何跑本地模型基准测试:Ollama拉取模型并用benchmark-local.py复现

【免费下载链接】ponytailMakes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.项目地址: https://gitcode.com/GitHub_Trending/po/ponytail

Ponytail 的收益数据(LOC 缩减、耗时降低)主要在 Claude 系列模型上测出,但很多开发者手边只有本地小模型。仓库自带一条不依赖 promptfoo 和本地 API key 的复现路径:用 Ollama 拉取 llama3.2,运行 benchmarks/benchmark-local.py,得到 baseline / caveman / ponytail 三个 arm 在 5 个日常任务上的代码行数(LOC)与墙钟耗时对比。前提:本地已安装并启动 Ollama、Python 3 可用,命令在仓库根目录执行。

这个基准测试测什么

按 benchmarks/README.md 和脚本源码,一次运行覆盖:

  • 三个 arm:baseline(不加载 skill,system prompt 为空)、caveman(加载 benchmarks/arms/caveman-SKILL.md)、ponytail(加载 skills/ponytail/SKILL.md)。benchmark-local.py 的load_arms()会直接读取这两个文件。
  • 五个任务:email validator、JS debounce、CSV sum、React countdown、FastAPI rate-limit,均为单轮(single-shot)生成。
  • 两个指标:代码 LOC(围栏代码块,或模型输出裸代码时的整段响应,计非空非注释行)和每次请求的耗时。2026-06-15 起 LOC 计数同时统计裸代码——此前只数围栏代码块,小模型经常不输出围栏,会把这类输出误判为 0。

脚本以 temperature 0.7 非流式调用 Ollama 的/api/chat接口,每个请求 180 秒超时;--repeat N表示每个 arm × 任务格子跑 N 次,报告中位数。

准备条件

  • Ollama 已安装并在本地运行,模型已拉取(脚本 docstring 写明前置条件:Ollama running locally, model pulled)。
  • Python 3。benchmarks/README.md 的 Prerequisites 一节说运行基准套件需要 Python 3、pandas 和 Node.js ≥ 22.22.0,其中 Node.js 版本是 promptfoo 引擎的约束;Ollama 一节明确写着 "No API key or promptfoo required",且benchmark-local.py只使用 Python 标准库,所以这条路径不需要 API key、promptfoo 或 Node.js。
  • 在仓库根目录执行下面的命令。

拉取模型并运行

ollama pull llama3.2 python benchmarks/benchmark-local.py --model llama3.2 --repeat 5

--repeat的取值两处文档不一致:benchmarks/README.md 的示例用--repeat 3,benchmarks/results/2026-06-15-llama3.2-local.md 的 Reproduce 一节用--repeat 5。该结果文档同时报告了 n=3 和 n=5 的中位数,两个值只是采样量不同,不是冲突的配置。文档明确建议:这类小模型上 LOC 信号噪声大,读总量之前先加大--repeat(或在脚本里调低采样温度)。

可选参数(来自脚本的 argparse 定义):

参数默认值说明
--modelllama3.2Ollama 模型名,可换成你ollama pull过的任意模型
--repeat1每个格子的运行次数,报告中位数
--ollama-urlhttp://localhost:11434Ollama 基础地址,Ollama 服务不在本机时用

一个副作用要提前知道:运行结束时脚本会把所有 arm、所有任务的完整原始响应写入benchmarks/benchmark-local-results.json,这是它向仓库目录写入的唯一产物。

结果验证:成功长什么样、数字怎么读

运行中每完成一个格子打印一行进度(--repeat 5时共 3 × 5 × 5 = 75 个格子,形如[1/75] run1 baseline / email),随后输出三块内容:

  1. Code LOC per task (median):每个 arm 在 5 个任务及 TOTAL 上的中位数 LOC 表;
  2. Time seconds per task (median):同样结构的耗时表;
  3. LOC vs baseline (median totals):caveman 与 ponytail 相对 baseline 的总 LOC 百分比(less/more than baseline),最后一行打印Full responses -> benchmarks/benchmark-local-results.json

看到这三块输出且最后一行指向 JSON 文件,说明本次运行完成;完整响应可在该 JSON 里逐条核对。

下面是 results/2026-06-15-llama3.2-local.md 记录的示例结果(llama3.2:latest,3.2B,Q4_K_M,Windows 11,n=5 中位数;仅示例,不是你应该得到的固定值):

armTOTAL LOCTOTAL 时间(秒)
baseline10919.4
caveman13321.1
ponytail13721.8

解读你自己跑出的表格时,文档给了三条判断依据:

  • 小模型上 LOC 差异在噪声范围内。llama3.2 在 temperature 0.7 下逐次摆动很大:ponytail 五次运行的总量落在 baseline 的 17% 以下到 50% 以上之间;n=5 中位数为 +26%,另一组 n=3 中位数为 −17%。文档结论是"没有稳定的 LOC 缩减可以报告"。
  • 耗时方向相反。ponytail 比 baseline 慢约 10–15%(system prompt 多了 token 要处理),不会出现 Claude 上的 3–6 倍加速。
  • 只在同一次运行内比较 arm。绝对耗时反映当时的机器(示例机器为 GPU 加速),不要跨机器、更不要和更早的 CPU 机器上的数字直接比。

限制与下一步

文档的 Takeaway 一句话:README 中的基准声明在 Haiku、Sonnet、Opus 上成立;本地小模型上,收益会缩进噪声里,直到模型的指令遵循能力达到 Claude Haiku 或更高水平。所以这条路径的合理预期是确认"小模型上 ponytail 没有稳定 LOC 收益、且略慢",而不是复现 Claude 上的 80–94% 缩减。若需要与 Claude 系列模型对照,benchmarks/README.md 的 Reproduce 一节提供了 promptfoo 路径(需要 Anthropic API key 和 Node.js ≥ 22.22.0),与本文的 Ollama 路径互不依赖。

【免费下载链接】ponytailMakes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.项目地址: https://gitcode.com/GitHub_Trending/po/ponytail

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!