Add intervention data skill

This commit is contained in:
wuyang6
2026-05-19 11:59:49 +08:00
parent 201058dfb2
commit 5684df3caf
7 changed files with 1316 additions and 0 deletions
+136
View File
@@ -0,0 +1,136 @@
---
name: intervention-data
description: 生成和校验单句精确干预、正则干预候选 TSV,复用标签大师的 target 语法校验,并从历史干预表推断 code 到下发 domain 的固定映射。
when_to_use: 当用户希望新增、检查或整理干预规则,例如给某个 query 或多轮正则生成干预条目、确认设备和标签是否合法、推断下发 domain 时使用。
aliases: intervention, rule-intervention, 干预数据
allowed_tools: read_file, write_file, edit_file, grep_search, glob_search, ask_user_question, python_exec
---
使用这个 skill 处理“query/多轮表达 -> 干预 TSV 候选 -> 合法性校验”的任务。
干预数据目前有两类:
- **单句精确干预**:一行四列,格式为 `设备\tquery\tcode\t下发domain`
- **正则干预**:一行三列,格式为 `设备\t正则\t标签`
其中单句精确干预的 `code` 和正则干预的 `标签` 使用同一套 target 语法,和 `label-master` 的输出一致,但不包含复杂度判断。校验时必须复用 `skills/label-master/scripts/validate_label_output.py` 的逻辑。
## 关键约定
- `unify` 表示全部设备。
- 设备必须优先从历史干预文件中归纳,不要随手发明设备名。
- 单句精确干预如果用户没有提供 `下发domain`,必须从历史精确干预表中按 `code -> 下发domain` 的多数映射推断。
- 正则干预支持多轮。多轮正则使用 `beforeQuery#上一轮#query#当前轮` 这种片段表达,最终通常包在 `^...$` 中。
- 默认只生成候选 TSV 和校验结果,不直接追加到历史干预文件。只有用户明确要求“追加到某个文件末尾”或“修改某个文件”时,才使用通用文件编辑能力。
- 所有产物优先写到当前会话的 `output/``scratchpad/` 下,不要写到项目根目录的 `output/`
## 推荐流程
1. 先确认用户要哪种干预方式:
- 单句精确干预:query 必须完全命中。
- 正则干预:适合一类表达、多轮上下文或需要泛化的高频 case。
2. 确认设备。用户没说设备时,必须问设备;可以提示 `unify` 表示全部设备。
3. 确认目标标签/code。它必须是完整 target,例如 `Agent(tag="地图导航")``QA()``Chat()` 或合法 function 调用。
4. 如果是单句精确干预:
- 确认 `query`
- 如果没有 `下发domain`,调用脚本根据历史数据推断。
5. 如果是正则干预:
- 确认当前轮 query。
- 如果有多轮,确认前序 query 顺序。
- 用户给了原始正则就保留;没给时由脚本生成 `^query#...$``^beforeQuery#...#query#...$`
6. 调用 `scripts/generate_intervention_candidate.py` 生成候选 TSV 和校验报告。
7. 展示时只展示必要信息:干预类型、设备、候选 TSV、校验是否通过、需要用户确认的问题。
## 脚本能力
```text
skills/intervention-data/
SKILL.md
knowledge/
type_match_agent.json
scripts/
intervention_common.py
analyze_intervention_sources.py
audit_intervention_sources.py
generate_intervention_candidate.py
validate_intervention_records.py
```
### analyze_intervention_sources.py
读取历史干预文件,输出设备枚举、`code -> 下发domain` 多数映射、常见标签,以及 `knowledge/type_match_agent.json` 中的下发表。
示例:
```bash
python skills/intervention-data/scripts/analyze_intervention_sources.py
```
### generate_intervention_candidate.py
从 JSON 输入生成候选 TSV,并自动校验。输入可以来自文件或 stdin。
### audit_intervention_sources.py
审计现有两个历史干预文件,只输出摘要,不修改文件。适合验证当前 skill 的校验规则和存量数据是否贴合。
示例:
```bash
python skills/intervention-data/scripts/audit_intervention_sources.py
```
单句精确干预示例:
```json
{
"mode": "exact",
"device": "unify",
"query": "播放周杰伦的歌",
"target": "Agent(tag=\"音乐\")"
}
```
正则多轮干预示例:
```json
{
"mode": "regex",
"device": "miCar",
"before_queries": ["第一个"],
"query": "红绿灯少的路线",
"target": "Agent(tag=\"地图导航\")"
}
```
### validate_intervention_records.py
校验候选 TSV。支持 `--mode exact``--mode regex`
规则包括:
- 列数正确。
- 设备合法。
- `code` / `标签` 优先通过 label-master 校验;如果 label-master 未收录但历史干预表中已经稳定出现,允许作为候选通过,并给出 warning 让用户确认知识库是否需要补齐。
- 单句精确干预的 `下发domain` 与历史多数映射一致,默认不一致为 warning,`--strict-domain` 时为 error。
- 单句精确干预还会用 `type_match_agent.json` 做配置校对;配置值可以是更宽泛前缀,例如 `音乐 -> contentCopilot` 可以兼容历史里的 `contentCopilot|music`
- 正则可编译,且包含 `query#` 片段。
- 与历史文件重复或冲突时给出 warning/error。
## 展示格式
生成候选后,优先用这个格式回复:
```text
我生成了一条候选干预,先不写入历史文件。
- 类型:单句精确干预 / 正则干预
- 设备:xxx
- 标签:xxx
- 校验:通过 / 有问题
候选 TSV`设备 query code 下发domain`
需要确认:是否写入某个文件,或是否调整设备/标签/正则。
```
如果校验失败,先解释失败原因,不要要求用户直接落盘。