noahjohnson0/lemon-squeezer
GitHub: noahjohnson0/lemon-squeezer
在消费级 GPU 上对本地 LLM 编码 Agent 进行可复现基准测试,帮你找到模型、框架和提示词的最优组合。
Stars: 0 | Forks: 0
# lemon-squeezer
在单张消费级 GPU 上运行的**本地 LLM 编程 Agent** 的可复现基准测试。
核心目的:找出哪种 `(模型, 运行框架, 提示词配置)` 组合,能为你提供一个完全在你自有硬件上运行的可用编程 Agent。云端顶级模型的结果并不能告诉你,在 4070 上运行的 qwen3-coder 是否真的能完成一项任务。
硬件:通过局域网从 Mac 访问运行 Ollama 的 RTX 4070 (12 GB) 的。测试的模型包括 qwen3:14b、qwen3-coder:30b-a3b (MoE)、gpt-oss:20b (MoE)、devstral:24b、gemma4:e4b。测试的运行框架:[pi](https://pi.dev) 和 [aider](https://aider.chat)。
## 核心发现
**运行框架的影响比模型更大。** 同样的 qwen3:14b 在 `bug-fix` 任务中:
- pi → 27%(模型搞砸了精确字符串匹配的编辑)
- aider → 100%
Aider 的全文件重写格式,避开了会导致小型本地模型在 pi 中崩溃的失败模式。
## 包含内容
```
lemon-squeezer/
├── bin/ # Runner + analysis scripts
│ ├── eval-run # Run a single (harness, eval, model, tag) combo
│ ├── eval-list # Tabular history
│ ├── eval-diff # Side-by-side check pass/fail between two runs
│ ├── eval-export # Regenerate runs.csv + RUNS.md
│ ├── serve # Local web dashboard
│ └── harnesses/ # Per-harness shims (pi.sh, aider.sh)
├── evals/ # One dir per eval
│ ├── bug-fix/ # Fix a CSV totaller with hidden bugs
│ ├── cli-tool/ # Build a `wc` clone
│ ├── refactor/ # Extract function from duplicated code
│ ├── wifi-stats/ # Build Next.js + FastAPI dashboard
│ ├── chem-balance/ # Balance chemical equations via linear algebra
│ └── projectile-sim/ # 2D motion w/ quadratic drag, RK4 integrator
├── configs/ # System-prompt augments (--read'd by aider)
├── runs/ # One dir per run: workspace + session log + score
├── runs.jsonl # One JSON per run (source of truth)
├── runs.csv # Same data, spreadsheet-friendly
├── RUNS.md # Auto-generated leaderboard + chronological log
└── dashboard.html # Live web view served by bin/serve
```
## 评测结构
每项评测由三个文件组成:
- `prompt.md` — 下达给 Agent 的自然语言任务
- `setup.sh` *(可选)* — 在 Agent 运行前将初始文件放入工作区
- `rubric.sh` — 运行 Agent 的输出并打印 `{checks: [...], score_pct: N}` JSON
评分标准侧重于**运行时正确性**(生成的代码是否真正运行并产生正确的结果?)而非结构性检查。如果模型幻想出一个看似正常但在真实输入上失败的程序,将会失去大部分分数。
## 运行评测
```
bin/eval-run aider bug-fix qwen3-coder:30b-a3b-q4_K_M baseline
# ✓ 21s | exit=0 | tok in/out=728/148 | tools=0 | score=100%
# /Users/.../runs/2026-05-10T..._bug-fix_aider_qwen3_coder_30b_a3b_q4_K_M_baseline
```
`bin/eval-run` 会为每次运行写入一个专属目录,包含生成的工作区、聊天记录、token 计数、实际耗费时间以及评分结果。`runs.csv` 和 `RUNS.md` 会在每次运行后重新生成。
对比两次运行:`bin/eval-diff `。
实时监控:运行 `bin/serve` 然后打开 `http://localhost:8765/dashboard.html`。
## 当前进展
查看 [RUNS.md](RUNS.md) 获取实时排行榜。当前最佳得分:
| 评测 | 最佳得分 | 最佳配置 |
|---|---|---|
| bug-fix | 100% | aider × 任何 14B+ 模型 |
| cli-tool | 100% | aider × qwen3:14b / gpt-oss / qwen3-coder |
| refactor | 100% | aider × qwen3:14b 或 pi × gpt-oss |
| wifi-stats | 94% | aider × gpt-oss:20b × `sysprompt` |
更难的评测(chem-balance、projectile-sim)以及安全评测套件正在开发中。
## 为什么叫 "lemon-squeezer" 而不是 "pi-evals"
最初仅作为 pi 的基准测试。加入 aider 后发现 pi 的特性主导了结果,因此现在已不局限于特定的运行框架。
## 许可证
MIT。
标签:Aider, AI基准测试, AI编程, AI自动化测试, AI风险缓解, Cutter, Devstral, Gemma, LLM评估, Mac开发环境, MoE模型, Ollama, Qwen, RTX 4070, 代码助手, 代码重构, 多模态安全, 开源大模型, 性能评测, 提示词工程, 时序数据库, 本地AI开发, 本地大语言模型, 本地推理, 本地部署LLM, 模型基准测试, 消费级GPU, 漏洞修复, 科学计算, 策略决策点, 编码智能体, 网络安全培训, 自然语言编程