第二轮实测记录:选题类 skill · 网文和短剧共用一道题
这一页把第二轮实测的全过程摆出来:给了 agent 什么、每次运行它做了什么、评审看到了什么、怎么判的。每一步都能点开看原始的输入和输出。页面上的数字都是生成网站时从仓库里的原始数据现算的。
结论和逐个点评见实测页。这里只放过程和证据。
- 1. 需求一道开放题:给一个新的爽文故事定选题,以后能写成网文、也能拍成竖屏短剧;不给题材,不限篇幅
- 2. 运行 36 次11 个 skill 加 1 个不装 skill 的对照组,各跑 3 次,同一个模型、同一条开场指令和固定回复,按 API 价格折算共 $67.98
- 3. 找出选题交付每次运行可能写出好几个文件,先认出哪些是一句话卖点和选题说明,人工核对
- 4. 匿名打包 36 份随机三位编号,抹掉 skill 名、仓库名和作者名
- 5. 故事卡 36 张,分组,查撞题每份选题抽一张故事卡,再按「换个名字就是同一个故事」分组:Opus 分 25 组,GPT 分 26 组
- 6. 盲比 198 对12 个参赛者(含对照组)两两比,第 n 次运行对第 n 次运行,甲乙对调各比一次:Opus(主评) 396 次,GPT(复核) 396 次
- 7. 积分两种顺序都判它赢才算赢,记 1 分;都判对方赢算输;其余算平,记 0.5 分
- 8. 评审体检换序是否一致、偏不偏甲、偏不偏长稿、引文找不找得到、两位评审合不合
- 9. 过程记录安全检查、沙箱自检、试点,按时间排,附原始日志
给 agent 的全部输入
每次运行都在一个新建的空目录里,目录里只有这份需求(premise.md)和装好的 skill。
需求原文(premise.md)
# 002 · 选题 给一个新的爽文故事定选题。这个故事以后可以写成网文,也可以拍成竖屏短剧。 这一步只定选题,不写大纲和正文。 交付(写成文件,放在当前目录): 1. 一句话卖点 2. 选题说明:题材,写给谁看,主角和对手,核心冲突,开篇钩子,爽点从哪来,打算写多长、为什么撑得住
开场指令
- 对照组:
我要给一个新故事定选题,要求在 premise.md 里。 - 有入口 skill 的:
/入口skill名 我要给一个新故事定选题,要求在 premise.md 里。,入口写在 contestants.toml。仓库里有专门做选题的 skill,入口就用它;没有就用仓库的主入口 - 工具箱型、没有单一入口的:
我要用已安装的 skill 给一个新故事定选题,要求在 premise.md 里。
之后每一轮的固定回复
如果要我在几个题材或故事方案里选,就选你最推荐的那个;其他要我定的,都按你推荐的来,不用再问我。请继续,直到 premise.md 列出的交付都写成文件。
第一轮的固定回复是「第 n 次运行选第 n 个方案」,为的是让三次运行写不同的故事。这一轮比的就是选题,从几个方案里挑出最好的那个,本来就是选题 skill 的本事,所以改成让它选自己最推荐的。
什么时候停
一轮结束后,如果 agent 没在提问、这一轮也没再改文件,而且目录里已经有产出,就算写完;连续三轮没改文件也停;最多 12 轮。代码见 evals/run.py。
环境和权限
- agent
- Claude Code 2.1.304,无头模式(claude -p),模型 claude-opus-5-5,推理强度 high
- 设置来源
- 只读工作目录里的项目设置(--setting-sources project),不连任何 MCP,不读运行者本机的个人指令和记忆
- 权限模式
- dontAsk:不在允许清单里的工具一律拒绝,不会停下来问人
- 允许
Bash、Skill、TodoWrite、Agent、Edit(/<工作目录>/**)、Write(/<工作目录>/**)- 拒绝
WebFetch、WebSearch、Read(~/**)、Edit(~/**)、Write(~/**)、Read(/<其他参赛者的工作目录>/**)、Read(/<克隆的仓库>/**)、Read(/<日志目录>/**)- 命令行
- python3 3.14、node 26 可用,没装 matplotlib 之类的第三方库;沙箱里不能联网,装不了包
Bash 全部放行,但每条命令都关在系统沙箱(macOS Seatbelt)里:不能联网,不能读运行者的主目录,不能读别的参赛者的目录,只能写自己的工作目录。沙箱设置(尖括号是每次运行的实际路径):
{
"sandbox": {
"enabled": true,
"failIfUnavailable": true,
"autoAllowBashIfSandboxed": true,
"allowUnsandboxedCommands": false,
"network": {
"allowedDomains": [],
"allowLocalBinding": false
},
"filesystem": {
"denyRead": [
"~/",
"<所有工作目录的上一级>"
],
"allowRead": [
"<工作目录>"
]
}
}
}这套设置是怎么定下来的、试过哪些不行,见过程记录。
36 次运行
点进去能看到这次运行的每一轮、每一次工具调用和它的返回、写出的全部文件。
积分:所有参赛者两两比
每个参赛者和另外 11 个各比 3 次(第 n 次运行对第 n 次运行),一共 33 次。一次比较里,两种先后顺序都判它赢才算赢,记 1 分;都判对方赢算输;其余算平,记 0.5 分。名次以主评审 Opus 为准,GPT 是复核;两位评审结论不同的对子在盲比列表里标「有争议」。
| 名次 | 参赛者 | Opus(主评) 赢-平-输 · 积分 · 名次 | GPT(复核) 赢-平-输 · 积分 · 名次 | 赢的比例(Opus) | 和对照组(Opus) | 有争议 |
|---|---|---|---|---|---|---|
| 1 | Tomsawyerhu/Chinese-WebNovel-Skill | 27-4-2 · 29 · 第 1 | 16-9-8 · 20.5 · 第 4 | 82%(95% 区间 66%–91%) | 2-1-0 | 17 |
| 2 | lingfengQAQ/webnovel-writer | 25-3-5 · 26.5 · 第 2 | 19-9-5 · 23.5 · 第 3 | 76%(95% 区间 59%–87%) | 2-1-0 | 16 |
| 3 | LanyXiaosheng/bookflow-skill | 19-5-9 · 21.5 · 第 3 | 26-6-1 · 29 · 第 1 | 58%(95% 区间 41%–73%) | 1-2-0 | 13 |
| 4 | Hao0321/ai-short-drama | 18-4-11 · 20 · 第 4 | 24-4-5 · 26 · 第 2 | 55%(95% 区间 38%–70%) | 1-1-1 | 11 |
| 5 | xindoo/sumeru | 18-3-12 · 19.5 · 第 5 | 13-3-17 · 14.5 · 第 8 | 55%(95% 区间 38%–70%) | 2-0-1 | 15 |
| 6 | 0xsline/short-drama | 16-2-15 · 17 · 第 6 | 13-4-16 · 15 · 第 7 | 48%(95% 区间 33%–65%) | 2-0-1 | 8 |
| 7 | tance-mang/chinese-webnovel-skills | 13-4-16 · 15 · 第 7 | 14-3-16 · 15.5 · 第 6 | 39%(95% 区间 25%–56%) | 1-0-2 | 10 |
| 7 | 对照组 不装 skill | 11-8-14 · 15 · 第 7 | 8-4-21 · 10 · 第 10 | 33%(95% 区间 20%–50%) | — | 10 |
| 9 | qingyabailu-git/webfiction-write | 11-5-17 · 13.5 · 第 9 | 17-5-11 · 19.5 · 第 5 | 33%(95% 区间 20%–50%) | 2-0-1 | 9 |
| 9 | dama-cyber/Distilled-Novel-Toolbox | 10-7-16 · 13.5 · 第 9 | 7-7-19 · 10.5 · 第 9 | 30%(95% 区间 17%–47%) | 1-0-2 | 17 |
| 11 | xiaofeng-928/chinese-longnovel-skill | 3-5-25 · 5.5 · 第 11 | 6-4-23 · 8 · 第 11 | 9.1%(95% 区间 3%–24%) | 0-2-1 | 8 |
| 12 | zenstory-ai/oh-story-claudecode | 1-2-30 · 2 · 第 12 | 4-4-25 · 6 · 第 12 | 3.0%(95% 区间 1%–15%) | 0-1-2 | 8 |
按 Opus 的积分排,同分并列。「赢的比例」是赢的次数占全部比较的比例,括号里是 95% 置信区间:区间重叠很多的两个参赛者,名次先后说明不了太多。
对阵表(Opus)
每格是行里的参赛者对列里的参赛者,三次比较的「赢-平-输」。每一场的稿子和判决在盲比列表。
| Tomsawyerhu/Chinese-WebNovel-Skill | lingfengQAQ/webnovel-writer | LanyXiaosheng/bookflow-skill | Hao0321/ai-short-drama | xindoo/sumeru | 0xsline/short-drama | tance-mang/chinese-webnovel-skills | 对照组(不装 skill) | qingyabailu-git/webfiction-write | dama-cyber/Distilled-Novel-Toolbox | xiaofeng-928/chinese-longnovel-skill | zenstory-ai/oh-story-claudecode | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Tomsawyerhu/Chinese-WebNovel-Skill | — | 2-1-0 | 2-0-1 | 2-1-0 | 2-0-1 | 3-0-0 | 3-0-0 | 2-1-0 | 2-1-0 | 3-0-0 | 3-0-0 | 3-0-0 |
| lingfengQAQ/webnovel-writer | 0-1-2 | — | 2-0-1 | 3-0-0 | 2-0-1 | 3-0-0 | 2-1-0 | 2-1-0 | 2-0-1 | 3-0-0 | 3-0-0 | 3-0-0 |
| LanyXiaosheng/bookflow-skill | 1-0-2 | 1-0-2 | — | 1-1-1 | 1-1-1 | 2-0-1 | 1-0-2 | 1-2-0 | 3-0-0 | 2-1-0 | 3-0-0 | 3-0-0 |
| Hao0321/ai-short-drama | 0-1-2 | 0-0-3 | 1-1-1 | — | 2-0-1 | 2-0-1 | 2-0-1 | 1-1-1 | 2-0-1 | 2-1-0 | 3-0-0 | 3-0-0 |
| xindoo/sumeru | 1-0-2 | 1-0-2 | 1-1-1 | 1-0-2 | — | 1-0-2 | 1-1-1 | 2-0-1 | 3-0-0 | 1-1-1 | 3-0-0 | 3-0-0 |
| 0xsline/short-drama | 0-0-3 | 0-0-3 | 1-0-2 | 1-0-2 | 2-0-1 | — | 2-0-1 | 2-0-1 | 1-1-1 | 1-1-1 | 3-0-0 | 3-0-0 |
| tance-mang/chinese-webnovel-skills | 0-0-3 | 0-1-2 | 2-0-1 | 1-0-2 | 1-1-1 | 1-0-2 | — | 1-0-2 | 2-0-1 | 1-1-1 | 2-1-0 | 2-0-1 |
| 对照组 不装 skill | 0-1-2 | 0-1-2 | 0-2-1 | 1-1-1 | 1-0-2 | 1-0-2 | 2-0-1 | — | 1-0-2 | 2-0-1 | 1-2-0 | 2-1-0 |
| qingyabailu-git/webfiction-write | 0-1-2 | 1-0-2 | 0-0-3 | 1-0-2 | 0-0-3 | 1-1-1 | 1-0-2 | 2-0-1 | — | 1-1-1 | 2-1-0 | 2-1-0 |
| dama-cyber/Distilled-Novel-Toolbox | 0-0-3 | 0-0-3 | 0-1-2 | 0-1-2 | 1-1-1 | 1-1-1 | 1-1-1 | 1-0-2 | 1-1-1 | — | 2-1-0 | 3-0-0 |
| xiaofeng-928/chinese-longnovel-skill | 0-0-3 | 0-0-3 | 0-0-3 | 0-0-3 | 0-0-3 | 0-0-3 | 0-1-2 | 0-2-1 | 0-1-2 | 0-1-2 | — | 3-0-0 |
| zenstory-ai/oh-story-claudecode | 0-0-3 | 0-0-3 | 0-0-3 | 0-0-3 | 0-0-3 | 0-0-3 | 1-0-2 | 0-1-2 | 0-1-2 | 0-0-3 | 0-0-3 | — |
怎么核对
- 全部原始数据在 GitHub:每次运行的产出、问答记录、原始日志(logs/)、评审看到的匿名稿(blind/)、编号和出处的对应表(blind_key.json)、故事卡、分组和每一场比较的判决。
- 原始日志公开前用 clean_logs.py 清理过:去掉本机路径、用户名、额度用量和 Claude Code 的内部记录,其余原样保留。删了什么写在脚本开头。
- MANIFEST.sha256 记着这一轮每个文件的 sha256 指纹。运行
python3 evals/verify.py 002-topic会逐个核对指纹,重建每一场评审的提示词,和两位评审调用时记下的提示词指纹比对,再把本页的数字重算一遍。 - skill 作者如果觉得自己的 skill 装错了、跑错了或者记录有误,可以在 GitHub 提 issue,我们会对着原始日志核对,公开答复。