Install
openclaw skills install ab-test-agent-workflow-1-1-0多智能体双盲 A/B 测试工作流。对多个 AI 模型/Agent 进行多轮次、双盲对照测试。 核心角色:协调者(Coordinator)、受测者 A/B(Contestant)、评测者(Judge)。 触发场景:"A/B 测试"、"双盲测试"、"比较 AI 模型"、"模型评测"、"测试工作流"、 "compare...
openclaw skills install ab-test-agent-workflow-1-1-0多智能体双盲 A/B 测试工作流 — 协调者主导、受测者并行、评测者盲评。
✅ 用户说以下内容时触发本 Skill:
❌ 不适用:单模型评估、简单问答、快速原型验证。
┌─────────────────────────────────────────────────────────┐
│ 协调者 (Coordinator) │
│ ① 接收任务 + 轮次配置 │
│ ② 向 Contestant A 发送 Prompt │
│ ③ 向 Contestant B 发送 Prompt │
│ ④ 收集输出 → 匿名化为"方案1"/"方案2" │
│ ⑤ 向 Judge 发送匿名方案 │
│ ⑥ 收集评分 → 记录结果 │
│ ⑦ 重复 ④-⑥ N 轮 │
│ ⑧ 汇总 → 揭示身份 → 输出结构化报告 │
└─────────────────────────────────────────────────────────┘
↓ ↓ ↓
┌──────────┐ ┌──────────┐ ┌──────────┐
│Contestant│ │Contestant│ │ Judge │
│ A │ │ B │ │ (盲评) │
└──────────┘ └──────────┘ └──────────┘
sessions_spawn 隔离执行(runtime=subagent)sessions_spawn 隔离执行(runtime=subagent)直接在本会话中按工作流执行,无需脚本。
Prompt 模板(发给 Contestant A — 普通任务):
你是 Contestant A。请完成以下任务,只输出结果,不要说明你是谁、不要加前缀:
[TASK]
输出格式(严格遵守):
[CONTENT_A]
[你的完整输出]
[/CONTENT_A]
Prompt 模板(发给 Contestant B — 普通任务):
你是 Contestant B。请完成以下任务,只输出结果,不要说明你是谁、不要加前缀:
[TASK]
输出格式(严格遵守):
[CONTENT_B]
[你的完整输出]
[/CONTENT_B]
Prompt 模板(发给 Contestant A — 代码生成任务):
你是 Contestant A。请完成以下任务。
任务:[TASK]
⚠️ 重要要求:先输出完整代码,再输出运行结果。代码必须在 [CONTENT_A] 标签内完整呈现,即使超时也优先返回代码。
输出格式(严格遵守):
[CONTENT_A]
【代码】
```python
[你的完整代码]
【运行结果】 [如有,运行结果] [/CONTENT_A]
**Prompt 模板(发给 Contestant B — 代码生成任务):**
你是 Contestant B。请完成以下任务。
任务:[TASK]
⚠️ 重要要求:先输出完整代码,再输出运行结果。代码必须在 [CONTENT_B] 标签内完整呈现,即使超时也优先返回代码。
输出格式(严格遵守): [CONTENT_B] 【代码】
[你的完整代码]
【运行结果】 [如有,运行结果] [/CONTENT_B]
**Prompt 模板(发给 Judge):**
你是一位严格公正的评测专家。请对以下两个匿名方案进行打分。
评测任务:[TASK]
评分维度(满分 10 分):
方案1: [SOLUTION_1]
方案2: [SOLUTION_2]
输出格式(严格遵守): [SCORES] 方案1-准确性: X/10(简短理由) 方案2-准确性: X/10(简短理由) 方案1-完整性: X/10(简短理由) 方案2-完整性: X/10(简短理由) 方案1-表达质量: X/10(简短理由) 方案2-表达质量: X/10(简短理由) 方案1-创意/深度: X/10(简短理由) 方案2-创意/深度: X/10(简短理由) [/SCORES] [TOTAL_A]4项得分之和[/TOTAL_A] [TOTAL_B]4项得分之和[/TOTAL_B] [WINNER]方案1 或 方案2 或 平局[/WINNER] [COMMENT]总体评语(150字以内)[/COMMENT]
### 方式二:脚本驱动
python scripts/runner.py --prompt "写一首关于春天的诗" --rounds 3 --model-a claude-sonnet-4 --model-b gpt-4o
## 执行流程详解
### 第 1 步:接收配置
用户输入:
### 第 2 步:双盲分发
Round N: → 向 Contestant A 发送 Prompt(A 的专属版本) → 向 Contestant B 发送 Prompt(B 的专属版本) 并行等待,两方互不知道对方的存在
### 第 3 步:匿名化
收集 A 的输出 → 记为 S1 收集 B 的输出 → 记为 S2 随机决定展示顺序(防顺序偏见) → 发给 Judge
### 第 4 步:盲评
Judge 收到 S1、S2(无来源信息) 按 Rubric 逐项打分 输出分数 + 评语 + 胜出方
### 第 5 步:结果记录
Round N 结果: S1 = [A 的输出] S2 = [B 的输出] Judge 分数:S1=X, S2=Y 胜出方:Z
### 第 6 步:汇总
所有轮次完成后:
## 结果报告模板
```json
{
"test_summary": {
"task": "...",
"rounds": 3,
"contestant_a": "Model A / Agent A",
"contestant_b": "Model B / Agent B",
"rubric": ["准确性", "完整性", "表达质量", "创意"]
},
"rounds": [
{
"round": 1,
"contestant_a_output": "...",
"contestant_b_output": "...",
"judge_scores": {
"contestant_a": [9, 8, 9, 7],
"contestant_b": [8, 9, 8, 8]
},
"winner": "contestant_a",
"judge_comment": "..."
}
],
"final_result": {
"total_score_a": 83,
"total_score_b": 80,
"wins_a": 2,
"wins_b": 1,
"winner": "Model A",
"confidence": "中(各胜 1 轮,建议增加轮次)"
}
}
ab-test-agent-workflow/
├── SKILL.md ← 本文件(工作流说明)
├── scripts/
│ ├── runner.py ← 多轮驱动引擎 + 自测模式
│ ├── judge_prompts.py ← Judge 提示词构建 + 解析
│ └── anonymizer.py ← 匿名化工具(过滤身份标识)
└── references/
├── rubric_templates.md ← 各任务类型评分模板
└── workflow_guide.md ← 详细执行步骤指南
# 自测模式(无需 subagent,验证工作流逻辑)
python scripts/runner.py --test --rounds 3
# 预览 Prompt(不实际执行)
python scripts/runner.py --prompt "写一首关于春天的诗" --skip-spawn
| 任务类型 | 推荐评分维度 |
|---|---|
| 写作/文案 | 准确性、完整性、表达、创意 |
| 代码生成 | 正确性、可读性、效率、安全性 |
| 逻辑推理 | 准确性、推理深度、解释清晰度 |
| 知识问答 | 准确性、完整性、可信度 |
| 创意写作 | 原创性、文学性、主题契合度 |
scripts/anonymizer.py 预处理,移除身份标识词(Claude/GPT/Gemini/参赛者A/参赛者B 等)。[SCORES] 等标签),解析器会 fallback 到智能提取。[SCORES]...[/SCORES] 严格约束输出格式。