news 2026/9/27 7:40:04

如何复现并验证SimpleEnglish的基准数据:面向开发者的诚实Benchmark完全教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何复现并验证SimpleEnglish的基准数据:面向开发者的诚实Benchmark完全教程

如何复现并验证SimpleEnglish的基准数据:面向开发者的诚实Benchmark完全教程

【免费下载链接】SimpleEnglishAgent skill: make LLMs write docs in ASD-STE100 Simplified Technical项目地址: https://gitcode.com/gh_mirrors/si/SimpleEnglish

SimpleEnglish 是一个 Agent skill,让大语言模型按 ASD-STE100 简化技术英语(STE)规范写文档。它的核心卖点是一组可复现的 Benchmark 数据:开启 skill 后,每百词 STE 违规数平均下降 74.6%(7 个 Claude 模型 × 8 个写作任务,共 112 次生成)。本教程带你从零复现这些数据:无需 API Key,只需登录的 Claude Code CLI;即使只想"验证"数据,一条命令 30 秒搞定。

动手前先看懂:112 次生成在测什么

复现之前,先理解这套 benchmark 的设计,才能判断结果是否可信:

组成内容文件
模型7 个 Claude 模型(opus-5 到 sonnet-4-6)定义在 evals/run_bench.py 的MODELS
任务8 个写作场景:README 简介、快速上手、故障排查、错误消息、事故报告、发布说明、runbook 压缩、架构说明evals/scenarios.json
条件每个任务跑两遍:baseline(无 skill)和skill(把 SKILL.md 全文注入 prompt)同上
评分器确定性正则 linter,数句子超长、缩写词、禁用情态动词、slop 词汇等 12 类违规evals/ste_lint.py

全部 8 个场景都围绕同一个虚构工具 "sqlpipe"(Postgres 同步到 S3 的 CLI),保证 baseline 与 skill 两组输出面对完全相同的输入。

环境准备:3 项检查清单

✅需要:

  1. Python 3(评分器纯标准库,无第三方依赖)
  2. Claude Code CLI 并已登录(claude --version能输出即可)
  3. 仓库代码:
git clone https://gitcode.com/gh_mirrors/si/SimpleEnglish cd SimpleEnglish

✅不需要:API Key、付费额度之外的额外配置。

先花 5 秒确认 linter 自检通过,后面所有数字才有意义:

python3 evals/ste_lint.py --self-test

三步命令:复现 74.6% 的完整流程

第 1 步:冒烟测试(1 个模型 × 2 个场景)

python3 evals/run_bench.py --smoke

这条命令只跑claude-sonnet-4-6的前两个场景,几十秒出结果,用来确认 CLI 登录态和参数没问题。

第 2 步:完整矩阵(7 模型 × 8 任务 × 2 条件 = 112 次生成)

python3 evals/run_bench.py

几个值得注意的工程细节(都写在 evals/run_bench.py 头部注释里):

  • 可断点续跑:evals/results/raw/下已存在的结果文件会自动跳过,中断后重跑即可;
  • 推理力度锁定low:避免继承你本地配置的effortLevel,每个 raw 文件都会记录实际用的力度;
  • 每次调用禁用所有工具(Bash、Read、WebFetch 等),保证输出只来自语言模型本身。

第 3 步:只从原始数据重建报告(不调用任何模型)

python3 evals/run_bench.py --report-only

它扫描evals/results/raw/全部 JSON,重新聚合出 evals/results/RESULTS.md 和 evals/results/results.json。这正是"验证"而非"重跑"的关键:README 里的每一个数字都能从提交的 raw 文件复算出来。

零成本验证:直接给已提交的 raw 文件打分

仓库里已提交 168 个 raw 文件(112 个生成 + 56 个裁判打分),你甚至不必调用任何模型就能验证公开数字:

# 重算主 benchmark 表格 python3 evals/run_bench.py --report-only # 重算其他 harness 的表格(如 OpenAI API 的 gpt-4.1-mini,降幅 95.8%) python3 evals/score_text_dir.py evals/results/openai-2026-09-01/raw

打分工具 evals/score_text_dir.py 会自动按文件名解析模型/条件/场景,输出与 evals/results/openai-2026-09-01/RESULTS.md、evals/results/pi-2026-07-31/RESULTS.md 一致的表格。

盲测裁判:45/56 胜局是怎么来的

除了硬性违规计数,项目还跑了一轮盲测 pairwise 裁判(evals/run_bench.py 的judge()函数):

python3 evals/run_bench.py --judge

方法:裁判模型claude-opus-4-8对每组 baseline/skill 文本按 0–10 分细则打分,两种文本顺序各打一次再取平均(消除位置偏差),裁判看不到任何标签。最终 skill 输出在 56 组中胜出 45 组、平 5 组、输 6 组,平均 8.12 分对 6.04 分。

想复现时用自定义力度或输出目录:

python3 evals/run_bench.py --effort high # 覆盖锁定的 low 力度 python3 evals/run_bench.py --results-dir /tmp/r2 # 结果写到别处,避免污染 raw/

怎么读这些数字:4 个诚实的 caveat

结果报告 evals/results/RESULTS.md 专门有一节 "Honest number warnings",值得原样读一遍:

  1. linter 是正则不是语法分析器:查不出被动语态和词性问题,绝对值偏低;但两组用同一把尺子,相对降幅依然公平;
  2. skill 条件输入 token 更多:因为 SKILL.md 全文进了 prompt,所以报告的是输出 token(7 个模型全部下降);
  3. 每格只生成一次:想看方差就整矩阵重跑(runner 可续跑,删掉results/raw即可重来);
  4. 力度敏感:同一批场景,claude-opus-5 在low力度下是 85.0%,xhigh下是 90.2%——比较结果前先确认effort一致。

核心结论一句话:74.6% 是"用确定性 linter 在同一任务集上测得"的均值,最低的是 claude-opus-4-8(41%),最高的 gpt-4.1-mini(95.8%,OpenAI API 通道)。完整模型表见 evals/results/RESULTS.md。

复现常见问题 FAQ

Q:数字和我跑的不完全一样?正常。每格一次生成,语言模型有随机性,项目文档也明确建议"重跑矩阵看方差"。对比的是量级与方向。

Q:我只想手工体验 skill 效果?安装 skill 后新开会话,粘贴 evals/scenarios.json 里任意一条 prompt,再用 evals/pressure-tests.md 里的清单人工打分即可。

Q:skill 本体在哪里看?53 条编号规则、Pragmatic/Strict 两种模式都在 skills/simple-english/SKILL.md,配套词表在 skills/simple-english/references/word-swaps.md。

按以上流程走完,你就完整复现并独立验证了 SimpleEnglish 公开的全部 benchmark 数据——从 112 次生成到盲测裁判,每一步都可从提交文件重算,这正是"诚实 benchmark"的含义。

【免费下载链接】SimpleEnglishAgent skill: make LLMs write docs in ASD-STE100 Simplified Technical项目地址: https://gitcode.com/gh_mirrors/si/SimpleEnglish

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

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

Spring DI 详解

学习过 IoC 后,就知道我们可以将对象交给 Spring 进行管理,但是我们在一个类会有若干属性,也就是这个类依赖于这若干个属性,那么我们就可以将交给 Spring 管理的对象注入到这个类中,这也就是依赖注入。依赖注入有三种方…

作者头像 李华