--- 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` 需要确认:是否写入某个文件,或是否调整设备/标签/正则。 ``` 如果校验失败,先解释失败原因,不要要求用户直接落盘。