Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pick-one · 几选一

你让 AI 做了五版,然后呢?

一个 Agent Skill:让 AI 用不同的 skill / prompt 跑同一个需求,产出 N 个版本,然后并排盲评、逼出一个赢家

生成从来不是瓶颈,挑选才是。实际发生的情况是:你打开五个标签页来回切,看到第四个的时候已经忘了第一个长什么样,最后选的往往不是最好的那个,而是最后看的那个


它做什么

你说要做什么  →  找候选 / 你指定  →  隔离生成 N 版  →  并排盲评  →  一个赢家 + 评语
  • 隔离生成:每个候选一个独立子 agent,只允许读它被指定的那一份 skill,互相看不见
  • 统一呈现:HTML 直接内嵌真实页面(动效交互都在),pptx / pdf / 图片自动转成逐页图
  • 盲评:编号随机打乱,评完才揭晓
  • 必须落到一个:排名只是过程,最后强制二选一

安装

git clone <repo> ~/.claude/skills/pick-one
npm i --prefix ~/.claude/skills/pick-one puppeteer-core

依赖:Node、puppeteer-core(驱动系统 Chrome)、ImageMagick(magick)。 只有需要评 pptx / pdf 时才要 LibreOffice:brew install --cask libreoffice

Chrome 路径可用 CHROME_PATH 覆盖,puppeteer 位置可用 PUPPETEER_CORE_PATH 覆盖。

怎么用

对 Claude 说:

帮我对比几个 PPT skill,做一份季度经营汇报

它会先问你评什么,然后列出候选让你确认,接着隔离生成、建评审页。

也可以跳过生成,直接评手上已有的东西

<run>/candidates/
  01-方案A/index.html
  02-方案B/deck.html
  03-方案C/slides/…          多文件也行
  04-方案D/report.pptx        自动转图
  05-方案E/                   一堆 png 也行

然后:

~/.claude/skills/pick-one/scripts/prepare.sh <run_dir> "课题名"
<run_dir>/开始评.sh

⚠️ 必须用 开始评.sh 打开,不能双击 html。 file:// 下浏览器会拦掉「网页里再嵌网页」,多文件候选会白屏。

评审页怎么用

不打 1–10 分。 档位太多反而分不清,还容易一堆并列——实测七个产物打出 8/8/7/5/5/5/4,挤成四档;换一批又出现三个并列 8 分,排序直接失效。

改成四档标签 + 归并对比

步骤 做什么 次数(7 个候选实测)
① 逐个看并分档 全屏看完一个,当场定档 + 写评语 7 次
② 档内两两对比 归并排序驱动,只排前两档 3 次
③ 边界确认 上一档末位 vs 下一档头名 1 次
④ 定下赢家 最后必须落到一个 1 次

约 12 次操作排完。对照:全量两两对比要 21 次。

只排前两档的理由很简单:后两档你本来就不会从里面选。

三条设计原则

判断必须发生在「正看着」的时候。 评判条钉在全屏浏览页底部,而不是关掉之后回缩略图上选。用户原话:「你出来之后,就没有那么强的一个感知了。」

评语比名次有用。 名次基本可以预测,「乱」「排版不容易读」这种一句话不能——它们才是整个评测里信息量最大的产出。所以评语框放在最显眼的位置,导出的 markdown 里评语单独成节。

必须有裸跑对照组。 一个什么都不装、只拿到同样 brief 的候选。没有它你分不清「这个 skill 让结果变好了」和「模型本来就能做到」。实测中裸跑对照组两轮都进了前二,七个 skill 里只有一个真正赢过它。

目录约定

<run>/
  brief.md                  事实底稿(数字、结论都定死)
  assets/                   统一素材
  candidates/<名字>/        每个候选一个目录,里面放什么都行
              _pages/       prepare.sh 生成的逐页 PNG
              contact-sheet.png
  review.html               盲评页(编号已打乱)
  _key.json                 编号 ↔ 候选名,**评完再看**
  开始评.sh

命令

命令 作用
scripts/prepare.sh <run> [标题] 全流程:产物 → 逐页图 → 拼图 → 评审页
scripts/build_review.py <run> [--reshuffle] 只重建评审页(默认沿用编号,不重洗牌)
scripts/shoot.mjs <deck.html> <out> 单文件 deck 逐页截图
scripts/shoot_multifile.mjs <slidesDir> <out> 多文件 deck 逐页截图
scripts/office2png.sh <file.pptx|pdf> <out> Office/PDF → 逐页 PNG + 翻页壳
scripts/verify_review.mjs <review.html> 评审页自检(卡片数 / 图加载 / 翻页 / 定档 / 回写)

踩过的坑

这些都是真出过事的,写在这里省得你再踩一遍。

后果 处理
截图前不量舞台宽度 deck 按 1920 画,用 1600 拍会切掉右边一条,而且看起来像「排版满」 自适应画布
只按「画面不变 = 翻到底」 有分步动画的页让它提前收工,15 页只拍到 3 页 双判据 + 换键重试
只按「当前可见第几页」 容器整体位移的 deck 索引恒为 0,只拍到 1 页 拿不到就退回帧序列
卡住时按 PageDown 救场 一次翻两页,中间那页被跳过 缺页自动补拍
去重用 md5 抗锯齿差几个像素就骗过去 改用 RMSE
全序列去重 会误删版式相近的幻灯片 只从末尾往回砍
重建页面时重新洗牌 评到一半的档位挂到别的候选上,整轮作废 默认沿用编号
上次跑挂留下空 _pages 被当成「已完成」跳过,永远补不上 按图片数判断
LibreOffice 共享 profile 已有实例在跑时新的静默退出,什么都不产出 每次转换独立 profile
候选同时导出了 pdf 副本 按时间取最新会选到 pdf 再去转 pdf 有 pptx 优先用 pptx
file:// 下嵌套 iframe 多文件候选白屏 走本地 http

一条元教训:最容易被工具链坑的,是那个「结构跟别人不一样」的候选。 每次出现「某个候选看起来内容缺失 / 排版崩了」,先怀疑自己的工具,再怀疑它。

方法论的边界

  • 客观指标预测不了人的判断。 实测中按中文排版专业属性排名第一的那个,实际盲评只得 5 分,而裸跑对照组得 8 分。量化只能用来解释结果,不能用来预测结果。
  • 评测方式本身有倾向。 我们的流程奖励视觉完整度,惩罚事实克制——唯一严格执行「不许编造内容」的候选(遇到缺失信息就留占位符)两轮都垫底。如果你的场景更看重准确性,得改评审维度。
  • 方差比均值更重要。 一个每次都给你 7 分的工具,比一个在 4 分和 9 分之间跳的工具更值得依赖。想测方差就用「同一配置跑 N 次」模式。

License

MIT

About

让 AI 用不同 skill/prompt 跑同一个需求,产出 N 版,然后并排盲评、逼出一个赢家。An agent skill for side-by-side blind review of N AI-generated variants.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages