【免费下载链接】skill
PinchBench is a benchmarking system for evaluating LLM models as OpenClaw coding agents. Made with 🦀 by the humans at https://kilo.ai
PinchBench 是一个开源基准测试系统(benchmark),用于评估 LLM 模型作为 OpenClaw 编码智能体(coding agent)完成真实任务的能力。这篇贡献指南带你走完全流程:编写你的第一个基准任务、在tasks/manifest.yaml中注册、跑通 Lint 检查与单元测试(pytest),最后本地验证并提交 PR。
一、PinchBench 是什么?值得贡献吗?
PinchBench 不做"合成考题",而是把 53 个真实世界任务直接丢给智能体:排会议、写代码、分诊邮件、查股价、分析 CSV……每个任务都有明确的评分标准,由自动化脚本、LLM 评审或两者混合(hybrid)打分。
它考察的不是模型"知道多少",而是:
- 工具调用— 能否用正确参数调用正确的工具
- 多步推理— 能否把一系列动作串起来完成复杂任务
- 真实世界的脏乱— 能否处理模糊指令与不完整信息
上图就是仓库里真实任务使用的照片素材之一——PinchBench 的基准任务覆盖图像识别、数据分析、邮件分诊等几乎全部日常场景。
仓库目录速览:
| 目录 / 文件 | 作用 |
|---|---|
| tasks/ | 基准任务定义(Markdown + YAML frontmatter),贡献主战场 |
| tasks/manifest.yaml | 任务清单:分类、顺序、core 快速集的唯一事实来源 |
| scripts/ | 基准运行器、评分引擎与 Lint 脚本 |
| tests/ | 单元测试(pytest / unittest) |
| assets/ | 任务工作区素材:CSV 数据集、图片、会议记录等 |
二、第一步:克隆仓库并验证运行环境
环境要求:Python 3.10+、uv包管理器、一个运行中的 OpenClaw 实例。
git clone https://gitcode.com/gh_mirrors/skill1/skill cd skill安装开发依赖(pytest、pytest-cov、black、ruff 均配置在 pyproject.toml 的dev可选依赖中):
uv sync --extra dev用最小任务task_sanity冒烟验证环境(--no-upload只保留本地结果,不上传):
./scripts/run.sh --model openrouter/openai/gpt-4o --suite task_sanity --no-upload💡 模型 ID 必须带 provider 前缀;scripts/run.sh 只是 scripts/benchmark.py 的便捷入口。
三、如何编写一个基准任务文件
1. 从官方模板开始
模板是 tasks/TASK_TEMPLATE.md,复制并重命名即可:
cp tasks/TASK_TEMPLATE.md tasks/task_my_first_task.md⚠️ 关键规则:frontmatter 里的id必须与文件名(去掉.md)完全一致,否则 Lint 直接报错。
2. 填写 YAML frontmatter
--- id: task_my_first_task name: My First Task category: csv_analysis # 必须与 manifest.yaml 中的分类一致 grading_type: automated # automated | llm_judge | hybrid timeout_seconds: 120 workspace_files: - source: csvs/apple_stock_2014.csv dest: stock.csv ---grading_type决定后续要写哪些小节:automated必须提供 Python 评分函数;llm_judge提供评分细则(rubric);hybrid两者都要,并通过grading_weights给出权重(总和为 1.0)。workspace_files会把 assets/ 下的素材复制进任务的隔离工作区。仓库自带 8 个小而精的 CSV 数据集,用途说明见 assets/csvs/README.md。
3. 四个必填正文小节
| 小节 | 写什么 |
|---|---|
| Prompt | 逐字发给智能体的指令,要求具体、无歧义、像真实用户的口吻 |
| Expected Behavior | 智能体"应该怎么做",列出可接受的多种解法 |
| Grading Criteria | 原子化 checklist,每项独立可验证、对应 0.0–1.0 的分数 |
| Automated Checks | grade(transcript, workspace_path) -> dict评分函数,只允许 stdlib |
想看最小可用示例,读 tasks/task_sanity.md 即可——完整任务不到 60 行。数据类任务可参考 tasks/task_csv_cities_ranking.md(hybrid 评分 + 工作区 CSV)。
上面三张照片来自 tasks/task_image_identification.md 的真实workspace_files(智能体需把它们分到 phone / food / menu 三类)。注意:答案键 assets/image_classification_answer_key.json 绝不能复制进工作区,否则任务就"泄题"了。
四、在 manifest.yaml 中注册任务(新手最常漏的一步)
tasks/manifest.yaml 是任务顺序与分类的唯一事实来源。新任务必须追加到对应分类列表的末尾:
categories: csv_analysis: - task_csv_cities_growth - task_my_first_task # ← 追加到这里两条硬性约定:
- 一个任务只能出现在一个分类,且
run_first里的任务必须存在于某个分类中 - 如果任务足够"有代表性",也可以加入
core列表——那是约 25 个任务的快速基准集,用--core参数运行
五、跑 Lint 检查:让 CI 一次通过
1. 清单一致性检查(最重要)
uv run scripts/lint_manifest.pyscripts/lint_manifest.py 共检查 7 项,全部通过才返回退出码 0:
- manifest 中每个条目都有对应的
.md文件 - 每个
task_*.md(模板除外)都登记在 manifest 中 - 无重复条目
- frontmatter 的
id与文件名一致 - 任务不跨多个分类
run_first条目存在于某个分类- frontmatter
category与 manifest 分类一致(不一致仅告警,不阻断)
看到Manifest lint: OK (N tasks in M categories, all in sync)即通过 ✅
2. argparse 帮助文案检查
如果你给 scripts/benchmark.py 新增了命令行参数,记得跑:
uv run scripts/lint_argparse_help.pyscripts/lint_argparse_help.py 会扫描所有 Python 文件中的add_argument(..., help=...),揪出未转义的%——argparse 会对 help 文本做旧式%插值,字面量必须写成%%。
3. 代码风格
pyproject.toml 已配置 black 与 ruff(行宽 100,目标 Python 3.10):
uv run black . uv run ruff check .六、单元测试:为你的评分逻辑上保险 🧪
仓库测试位于 tests/,pytest 配置在 pyproject 中:testpaths = ["tests"],文件命名test_*.py、类Test*、方法test_*。现有测试可直接当风格样板:
- tests/test_lib_grading.py:评分归一化、hybrid 加权合并
- tests/test_multi_session.py:多会话 frontmatter 解析
- tests/test_lib_trend.py:多次运行趋势分析
如果你为新任务抽出了可复用的评分辅助函数(例如放进 scripts/lib_grading.py),就为它补一个测试:
# tests/test_lib_grading_mytask.py import sys import unittest from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "scripts")) from lib_grading import my_new_helper # 你新增的辅助函数 class TestMyTaskGrading(unittest.TestCase): def test_partial_credit_between_0_and_1(self): self.assertTrue(0.0 <= my_new_helper("partial") <= 1.0)运行全部测试(或按关键词过滤):
uv run pytest tests/ -v uv run pytest tests/ -k grading七、本地验证与提交清单
提交前,只跑你自己的任务做端到端验证:
./scripts/run.sh --model openrouter/openai/gpt-4o --suite task_my_first_task --no-upload会话转录会自动保存到results/{run_id}_transcripts/task_my_first_task.jsonl,方便复查智能体到底做了什么。
提交前自查(tasks/TASK_TEMPLATE.md 末尾有官方版清单):
- frontmatter 完整,
id与文件名一致 - 任务已登记进 tasks/manifest.yaml,
category对齐 grading_type与实际提供的小节对应;hybrid 权重总和为 1.0- 评分函数本地运行无异常,超时时间合理
uv run scripts/lint_manifest.py输出 OKuv run pytest tests/全部通过,uv run ruff check .无告警
全部打勾后就可以发起 Pull Request 了。如果 CI 需要容器化环境,Dockerfile.benchmark 已预装 OpenClaw 与 uv,可直接复用。
常见问题速查
Q:Lint 报File exists but missing from manifest?A:你创建了任务文件但忘了登记 manifest——把任务 ID 追加到对应分类末尾即可。
Q:frontmatter category 只有告警、不阻断?A:说明 frontmatter 的category与 manifest 分类不一致(含大小写),两者对齐后告警即消失。
Q:想测多轮对话任务怎么办?A:frontmatter 设multi_session: true并写sessions列表(格式见 tasks/TASK_TEMPLATE.md 的 Multi-Session 小节)。会话数控制在 2–5 个,并相应调大timeout_seconds。
走完"写任务 → 注册清单 → Lint → 单元测试 → 本地验证"这条流水线,你就已经具备了和 PinchBench 维护者相同的检查标准。下一个目标:让你的任务进入core快速基准集 🚀
【免费下载链接】skill
PinchBench is a benchmarking system for evaluating LLM models as OpenClaw coding agents. Made with 🦀 by the humans at https://kilo.ai
相关推荐
CoreNet贡献指南:如何提交你的第一个PR
CoreNet贡献指南:如何提交你的第一个PR 你是否曾想为深度学习框架贡献代码但不知从何入手?本文将带你通过6个步骤完成CoreNet项目的首次PR(Pull
深度学习计算机视觉NLP多模态模型训练大模型markmap贡献指南:如何提交你的第一个PR
markmap贡献指南:如何提交你的第一个PR 前言 你是否曾想为开源项目贡献代码,却因不知从何下手而却步?本文将以markmap项目为例,带你一步步完成从环境
数据可视化前端CLIreflect-open 贡献者指南:代码规范、测试与提交你的第一个 PR
reflect open 贡献者指南:代码规范、测试与提交你的第一个 PR reflect open 是一个本地优先(local first)、AI 友好的开源
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考