Forge-skill eval-debate

测试 use-self 替身会议的辩论质量。给定 persona + 3 个决策场景,运行完整三阶段辩论并按 5 个维度评分,输出质量报告。

install
source · Clone the upstream repo
git clone https://github.com/YIKUAIBANZI/forge-skill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/YIKUAIBANZI/forge-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/evals/eval-debate" ~/.claude/skills/yikuaibanzi-forge-skill-eval-debate && rm -rf "$T"
manifest: evals/eval-debate/SKILL.md
source content

/eval-debate — 替身会议辩论质量评测

你的任务是对 use-self 替身会议的输出质量做一次系统性评测,全程在当前对话中完成,不需要调用任何外部 API


Step 0:加载测试资源

  1. 读取测试用例文件:
    evals/test_cases/debate_quality_cases.yaml
  2. 根据
    persona_name
    字段,读取对应 persona:
    personas/self/{persona_name}/persona.json
  3. 提取 decision-card 关键内容:
    • L0 底线(bottom_line)
    • L2 语言风格(language_style + signature_phrases)
    • L3 决策参数(8 个维度的分值)
    • L4 价值观与盲区(blind_spots + emotional_triggers)
正在加载 {persona_name} 的 persona 和测试用例...
共 {N} 个决策场景待测试。

Step 1:逐场景运行辩论

对每个测试用例,执行完整三阶段流程:

Phase 1:并行独立分析(3 个变体)

基于 decision-card 中的 L3 参数,生成 3 个变体并各自独立分析:

变体设置(固定,评测用):

  • 🔵 稳健的你:risk_appetite -3,action_bias -2,loss_aversion +2
  • 🟢 果断的你:risk_appetite +3,action_bias +3,information_need -2
  • 🔴 长线的你:time_horizon +4,loss_aversion -2,action_bias +1

每个变体按

use-self/prompts/phase1_independent.md
的格式输出:

  • 【我的判断】:明确表态,不能含糊
  • 【为什么】:≤3 个具体理由
  • 【我最担心的是】:具体情境
  • 【我最期待的是】:具体情境
  • 【我想问自己】:一个核心问题

信息隔离:每个变体只能看到自己的参数偏移,不知道其他变体说了什么。

Phase 2:质询

将 Phase 1 的所有输出 + persona 的 L4 盲区交给质询视角,按

use-self/prompts/phase2_challenge.md
执行:

  • 对每个变体找出最尖锐的质疑(隐含假设/幻觉/回避)
  • 识别跨变体矛盾
  • 用 L4 盲区做最后一问

Phase 3:综合

use-self/prompts/phase3_synthesis.md
生成综合报告,使用用户的 L2 语言风格。


Step 2:评分

每个场景跑完后,立刻按 5 个维度评分(每项 0-20 分):

维度评分标准
变体区分度Phase 1 的 3 个变体立场是否有实质性差异?都说"两边各有道理"= 0 分;立场明确对立且理由具体 = 满分
质询深度Phase 2 是否指出了具体假设和盲区?"你没考虑到..." = 低分;"你说的 X 假设了 Y,但 Y 不成立,因为 Z" = 高分
参数一致性各变体的发言是否与偏移后的参数一致?稳健变体的发言是否明显更保守?
综合覆盖度Phase 3 是否有代价清单?是否提出了具体的待搞清楚的问题?还是只是 Phase 1 的复述?
用户语言风格所有输出语气是否符合 persona 的 L2?出现"综上所述"、"建议您"等顾问句式扣分

参照测试用例的 expected_variant_stances 和 evaluation_criteria 给分。


Step 3:输出报告

所有场景跑完后,输出评测报告:

===================================
替身会议辩论质量评测报告 — {persona_name}
===================================

## 逐场景结果

### [d01] {场景标题}

**Phase 1 摘要:**
- 🔵 稳健的你:{判断一句话}
- 🟢 果断的你:{判断一句话}
- 🔴 长线的你:{判断一句话}

**Phase 2 质询摘要:**
{最有价值的一条质疑}

**Phase 3 综合摘要:**
{代价清单里最关键的一条}

**评分:{total}/100**
  ✅/⚠️ 变体区分度:{score}/20 — {说明}
  ✅/⚠️ 质询深度:{score}/20 — {说明}
  ✅/⚠️ 参数一致性:{score}/20 — {说明}
  ✅/⚠️ 综合覆盖度:{score}/20 — {说明}
  ✅/⚠️ 用户语言风格:{score}/20 — {说明}

### [d02] ...
### [d03] ...

---

## 汇总

平均分:{avg}/100

各维度平均:
  变体区分度    {avg}/20
  质询深度      {avg}/20
  参数一致性    {avg}/20
  综合覆盖度    {avg}/20
  用户语言风格  {avg}/20

## 主要问题
{失分最多的维度 + 具体表现}

## 建议
{针对失分维度的改进方向,指向哪个 prompt 文件或 persona 层级需要调整}

Step 4:保存结果(可选)

要把这次结果存入 evals/results/ 吗?(y/n)

如果确认,写入

evals/results/debate_{YYYYMMDD}.md


注意

  • 全程不需要 API Key:辩论和评分都是你自己执行的
  • 评分要诚实:变体之间如果其实没有真正的立场差异,变体区分度就应该给低分
  • 辩论内容要认真:不是为了评分才走形式,Phase 1/2/3 每个阶段都要认真执行
  • 用例是基于阿然的,如果用户指定了其他 persona,根据那个 persona 的 L3 基础值计算偏移后的参数