This repository has been archived on 2026-07-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
OpenCodeInit/.opencode/skills/skill-tester/SKILL.md
2026-05-03 22:18:56 +08:00

207 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: skill-tester
phases: ["all"]
description: >-
SKILL 体系自动化测试工具。通过 LLM-as-Judge 模式对 SKILL.md 的行为逻辑进行回归测试,
验证阶段守卫、规则遵循、输出格式等维度。触发关键词:"测试Skill"、"测试 [skill名]"、
"回归测试"、"skill test"、"跑测试"。
---
# 相位守卫Phase Guard
**本 Skill 加载后的首个强制动作:**
1. 读取 `.opencode/phase/current.json`
2.`phases` 不包含 `"all"` 且当前 `phase` 值不在 `phases` 列表中:
- 立即中止,输出:"当前阶段为 [phase]skill-tester Skill 不可用。"
- 不得执行本 Skill 的任何后续流程
3. 否则:继续执行
---
# 概述
skill-tester 是元层测试工具,通过 LLM-as-Judge 模式验证 SKILL.md 的行为逻辑。
**核心原理**:将 SKILL.md 内容 + 模拟用户输入注入 sub-agent观察其输出是否符合预期
再用另一个 sub-agent 作为裁判评分。
**不测试什么**opencode 的 Skill 加载机制本身(那是 opencode 的责任)。
**测试什么**SKILL.md 中的指令逻辑——当 LLM 忠实执行这些指令时,产生正确的行为。
---
# 操作 A测试单个 Skill
## 触发
用户说"测试 [Skill 名称]"、如 "测试 game-design"、"测试 dev-changelog"。
## 流程
```
1. 读取目标 Skill 的 SKILL.md
2. 读取 .opencode/skills/skill-tester/test-cases/ 下匹配该 Skill 的测试用例
3. 列出测试用例清单,询问用户确认
4. 用户确认后,逐一执行
5. 汇总报告
```
## 步骤 3测试用例预览
```
Agent 输出:
"找到 [N] 个针对 [Skill名] 的测试用例:
| # | ID | 场景 | 严重度 |
|---|-----|------|--------|
| 1 | phase-guard-001 | 非匹配阶段拒绝加载 | critical |
| 2 | ... | ... | ... |
预计消耗约 [估算token] tokens。是否全部执行(y/n/选择特定用例)"
```
## 步骤 4单用例执行
### 4.1 构造模拟 Sub-agent
将以下内容组装为一个 prompt通过 Task toolsub-agent type = general执行
```
你正在模拟一个 opencode agent该 agent 刚刚加载了以下 Skill
---
[目标 SKILL.md 的完整内容]
---
**当前会话上下文:**
- 当前阶段 (phase)[test_case.phase]
- 用户消息:"[test_case.user_message]"
- state.json 状态:[test_case.state](如适用)
**你的任务**:严格按照上述 Skill 中的指令行事。
你拥有所有 opencode agent 的工具bash/read/write/edit/...)。
用户说了:"[test_case.user_message]"
请输出你的响应。只输出你作为 agent 会输出的内容。
注意:
- 如果是 phase guard 测试,第一个行为应该是检查阶段并可能中止
- 如果 Skill 要求写文件,输出你打算写什么以及写到哪个文件(但不要实际写)
- 如果 Skill 有强制规则(如 Hallucination 防御),务必遵守
```
### 4.2 执行并收集输出
```
Agent 调用 Task tool → 等待 sub-agent 完成 → 收集其文本输出
```
### 4.3 Judge 评估
将模拟 sub-agent 的输出 + 预期行为 + 评分标准传给 Judge sub-agent。
Judge 的详细指令见 [judge-prompt.md](judge-prompt.md)。
调用方式:
```
Agent 调用 Task toolprompt 为 judge-prompt.md 的内容(已填充变量)→ 等待完成
```
### 4.4 记录结果
```json
{
"test_id": "phase-guard-001",
"skill": "game-design",
"timestamp": "...",
"scores": {
"behavior_match": 5,
"output_clarity": 4,
"rule_compliance": 5
},
"overall": 4.7,
"judge_feedback": "Agent 正确识别了阶段不匹配..."
}
```
## 步骤 5汇总报告
```
Agent 输出Markdown
## 测试报告:[Skill 名称]
**执行时间**[timestamp]
**测试用例数**[total] | 通过:[pass] | 失败:[fail] | 跳过:[skip]
| # | ID | 场景 | 行为 | 清晰度 | 合规 | 总分 | 状态 |
|---|-----|------|------|--------|------|------|------|
| 1 | phase-guard-001 | 阶段拒绝 | 5 | 4 | 5 | 4.7 | ✅ |
| 2 | ... | ... | ... | ... | ... | ... | ❌ |
### 失败用例详情
#### [ID] — [场景]
- **预期**[expected 描述]
- **实际**[agent 实际输出摘要]
- **裁判反馈**[judge 的具体反馈]
- **建议**[改进建议]
```
---
# 操作 B回归测试全部 Skill
## 触发
用户说"回归测试"、"跑全部测试"、"test all skills"。
## 流程
```
1. 读取 test-cases/ 下所有测试用例
2. 按 Skill 分组展示
3. 询问用户确认(因为消耗较大)
4. 按 Skill 逐一执行(每个 Skill 内部用例并行执行)
5. 汇总全部报告
```
## 执行策略
- 同一 Skill 内的多个用例可以**并行执行**(无状态依赖)
- 不同 Skill 之间**顺序执行**(避免混淆)
- 单个用例超时 60 秒
- 如有用例执行失败sub-agent 错误),标记为 ERROR 而非 FAIL
---
# 操作 C查看历史报告
## 触发
用户说"查看测试报告"、"上次测试结果"。
## 流程
读取 `.opencode/skills/skill-tester/reports/` 下最新报告,展示摘要。
---
# 评分标准说明
每个测试用例在 3 个维度上评分1-5
| 维度 | 含义 | 5 分标准 |
|------|------|---------|
| **行为匹配 (behavior_match)** | Agent 的输出行为是否符合预期 | 核心决策(如加载/拒绝加载)完全正确 |
| **输出清晰度 (output_clarity)** | 输出是否清晰、无歧义 | 信息完整、结构清楚、用户可直接理解 |
| **规则合规 (rule_compliance)** | 是否遵守了 SKILL.md 中的强制规则 | 所有强制检查点均已执行 |
**通过标准**:总分 >= 4.0(即平均每维度 >= 4.0)。
**警告标准**3.0 <= 总分 < 4.0。
**失败标准**:总分 < 3.0。
---
# 自迭代日志
本节记录使用本 Skill 过程中发现的必要检查项。