wjs-evaling-voicedrop-prompts

$npx mdskill add jianshuo/claude-skills/wjs-evaling-voicedrop-prompts

评估 VoiceDrop 挖矿 prompt 是否改进

  • 用户修改挖矿 prompt 后,使用技能进行数据验证。
  • 依赖本地 eval 调用和盲评子代理。
  • 通过比较冠军 vs 候选者输出来决定是否推广新版本。
  • 将结果写入报告并提供给用户审核

SKILL.md

.github/skills/wjs-evaling-voicedrop-promptsView on GitHub ↗
---
name: wjs-evaling-voicedrop-prompts
description: Use when 王建硕 wants to evaluate whether a change to VoiceDrop's 挖矿 system prompt is actually better than the live version — runs the local eval harness (golden fixtures × champion-vs-candidate, same input), dispatches blind pairwise judge subagents, aggregates a win-rate verdict, and on approval promotes the candidate into agent/src/prompts/mine.js. Triggers — "评估 prompt"、"挖矿 prompt 改好了吗"、"eval prompt"、"比一比两版 prompt"、"/wjs-evaling-voicedrop-prompts".
---

# VoiceDrop 挖矿 prompt 评估

harness = 本 skill(协议)+ jianshuo.dev `agent/eval/`(脚本/数据)。运行时 = 本地 Claude Code。
被测对象 = `agent/src/prompts/mine.js` 的 `MINE_SYSTEM`(git 即版本库)。

## 何时用
用户改了挖矿 prompt(`MINE_SYSTEM`),想用数据判断改好了还是改坏了,而不是凭感觉看一两次。

## 流程(按序)

1. **拿候选 prompt**:把候选版 `MINE_SYSTEM` 文本写到一个临时文件(如 `/tmp/cand-prompt.txt`);冠军 = 当前 `mine.js` 的 `MINE_SYSTEM`(脚本自动读)。
2. **跑产出**:`cd ~/code/jianshuo.dev/agent && CLAUDE_API_KEY=$CLAUDE_API_KEY node eval/run-eval.mjs /tmp/cand-prompt.txt <runId>`。产出落 `eval/runs/<runId>/`。先看终端有没有「确定性回退」警告——有就先停,多半是候选 prompt 破坏了 JSON 输出。
3. **成对盲评**:对每条 fixture,dispatch 一个 subagent,喂 `references/judge-rubric.md` + 该 fixture 的 transcript + 两份产出。**A/B 顺序随机**(一半 fixture 把 candidate 放 A、一半放 B,记录映射,收到结果后还原成 champion/candidate)。裁判模型用与生成(opus)不同家族的模型。收每条的 `{winner, dims, reason}`。
4. **聚合**:把还原后的 `verdicts`(winner ∈ candidate/champion/tie)+ 候选 proxyFails 喂 `aggregate()`,渲染 `renderReport()` → 写 `eval/runs/<runId>/report.md`。
5. **人工终审**:把胜负最接近、分歧最大的 1–2 条产出并排摆给用户。**机器只筛掉明显更差的,文风最后一票是用户。**
6. **晋级**:仅当 `decision==="promote"`(胜率 ≥70% 且无回退)**且用户点「认可」**——把候选写回 `agent/src/prompts/mine.js` 的 `MINE_SYSTEM`,commit(message 附 runId 与胜率),并跑 `npm test` 确认没破坏。否则保留报告、不动生产版。

## 边界
- 只评挖矿 prompt(`MINE_SYSTEM`/`MINE_SYSTEM_FORCE`)。审核/语音编辑 prompt 是不同 eval 模式,不在本 skill。
- 不测成本/缓存/延迟(本地缓存行为≠生产);不做无人值守。
- 真实金标集要 ≥10 条才可信(见 `agent/eval/fixtures/README.md` 的补充流程);种子 2 条只够自测流程。

More from jianshuo/claude-skills

SkillDescription
wangjianshuo-perspective|
wjs-auditing-projectUse when the user asks to audit what's wrong with a project, "make it right", "看看项目出了什么问题", "为什么用户的需求还没上线", "为什么没提交App Store", "为什么没新build", or wants a holistic state-of-the-project check covering unmerged branches, stalled PRs, failed GitHub Actions, stale builds, plan drift (TODOS.md / ROADMAP), unreleased commits, and log errors. Runs read-only investigation, presents a grouped checklist, fixes only after explicit user confirmation. Aware of the Cathier iOS app workflow (Xcode + fastlane + auto-merge @claude PRs from in-app feedback).
wjs-burning-subtitlesUse when the user has a video + an SRT and wants the subtitles either burned into the pixels (libass, always-visible) or soft-muxed as a togglable track. Also handles the final composite step for the localization pipeline — burn subs, mix a dub track, and keep the original audio as a low-volume bed, all in ONE ffmpeg encode (no cascade). Verifies libass availability and auto-downloads a static evermeet ffmpeg build when Homebrew's stripped binary lacks it. Triggers — "烧字幕", "硬字幕", "burn subtitles", "burn-in subs", "embed subtitle", "soft mux SRT", "把字幕烧进视频", "做最终合成".
wjs-cleaning-spamUse when the user complains about spam on his X/Twitter posts — 同城面付 / 寻固炮 / 线下上门 / 免费破处 这类引流号在他推文下刷的 emoji 垃圾回复 — and wants them removed. Covers the last 7 days (X recent-search window). Triggers — "把这些spam删掉", "清理X垃圾回复", "推文下面好多引流号", "clean spam replies", "/wjs-cleaning-spam".
wjs-converting-text-to-videoUse when the user wants a 王建硕-style WeChat article (article.md) turned into a narrated short MP4 video — TTS voiceover via 火山引擎 Volcano TTS, HyperFrames CSS/GSAP animation per scene, subtle SFX, abstract watercolor background, full pipeline rendering to 1080×1920 portrait MP4 (30-90s). Triggers — "把这篇文章做成视频", "做一个解说视频", "讲解视频", "/wjs-converting-text-to-video".
wjs-converting-wp-to-hugoUse when migrating a WordPress site to a Hugo static site on GitHub Pages from a WXR export (.xml) plus the wp-content/uploads folder — preserving /archives/<id>/ URLs, localizing images, and deploying via GitHub Actions. Triggers — "把 WordPress 迁成 Hugo", "wordpress 转静态站", "migrate WordPress to Hugo", "WXR to Hugo", "publish WordPress to GitHub Pages", "/wjs-converting-wp-to-hugo".
wjs-distilling-styleUse when the user wants to capture a writer's voice from a few sample articles and rewrite text to sound like that author — "蒸馏文风", "提炼XX的风格", "把这篇改成XX的味儿", "学某某笔法改写", "mimic this writer", "match this author's style", "style transfer". Works for any author, 王建硕 included.
wjs-dubbing-videoUse when the user has a video + a target-language SRT and wants the video to actually speak that language — generates a time-aligned TTS voice dub. Routes by voice ID — Volcano (豆包) TTS for Chinese, edge-tts neural for any language. Defaults to one voice (single-speaker); opt-in multi-speaker via visual diarization. Outputs `*_<lang>_dub.mp4` with the dub audio in place of the original. Final mixing (audio bed + burn-in) is handed off to `/wjs-burning-subtitles`. Triggers — "配音", "中文配音", "Chinese dub", "voice over this", "dub the video", "TTS this SRT", "different voice for each speaker".
wjs-eating-and-growing吃一堑长一智 — 走完 5 步交互式反思(堑 → 自动输出 → 旧权重 → 新参数 → 替代动作),从「情绪复盘」推进到「行为训练」,把第一反应这一层 L3 权重练新。Use when 王建硕 reflects on a personal setback, mistake, or recurring pattern (反思, 复盘, 回顾, 总结教训, 吃一堑, 长一智, "这次又栽了", "怎么又这样", "为什么我总是…", "想开点都做不到", "知道道理但做不到"). For the user as a human, not for Claude's task post-mortems.
wjs-editing-multicamUse when the user has 2+ recordings of the same event (each with a `.sync.json` sidecar from wjs-syncing-multicam) and wants them combined into a single MP4 — auto-switching between cams second-by-second on audio energy, with optional picture-in-picture inset. Triggers — "auto-edit multicam", "做个剪辑", "切几个机位", "把这几个视频合成一个", "combine these angles", "PiP overlay".