$npx -y skills add kweaver-ai/kweaver-dip --skill bkn-rules从 PRD/对话/建模中提取业务规则,生成可复用的业务规则 Skill。必执行。
| 1 | # 业务规则提取 |
| 2 | |
| 3 | 公约:`../../_shared/contract.md` |
| 4 | |
| 5 | ## 做什么 |
| 6 | |
| 7 | 从整个建模过程的输入中提取业务规则,组织为结构化的可复用 Skill 产物。 |
| 8 | **这是业务沉淀的核心环节,在 create pipeline 中为必执行步骤。** |
| 9 | |
| 10 | ## 执行模式 |
| 11 | |
| 12 | `bkn-rules` 支持两种模式,由调用方指定: |
| 13 | |
| 14 | | 模式 | 时机 | 输入 | 行为 | |
| 15 | |------|------|------|------| |
| 16 | | `full`(默认) | 阶段五(首次生成) | PRD + 对话 + 提取结果 + 绑定结果 | 完整提取、分组、生成 Skill 文件 | |
| 17 | | `incremental` | 阶段六评审循环结束后 / 阶段七推送后 | 已有 Skill 文件 + 评审调整结果 | 读取已有 Skill,合并新增/变更的规则,更新文件 | |
| 18 | |
| 19 | ## 输入 |
| 20 | |
| 21 | - `mode`:`full` | `incremental`(默认 `full`) |
| 22 | - `network_id`:网络唯一标识(必填) |
| 23 | - `network_dir`:网络目录(`.bkn` 文件位于 `{network_dir}/bkn/`,Skill 文件位于 `{network_dir}/skills/`) |
| 24 | - `network_name`:网络名称 |
| 25 | - `prd_content`:PRD / 产品文档(`incremental` 模式可选) |
| 26 | - `rule_extraction_check`:阶段一末尾提取的结构化规则 |
| 27 | - `network_context`:网络名称、领域 |
| 28 | - `conversation_context`(可选):建模对话中的补充知识 |
| 29 | - `binding_rules`(可选):绑定过程中发现的映射规则 |
| 30 | - `review_adjustment_plan`(可选,`incremental` 模式):`bkn-review` 输出的 `adjustment_plan`(包含规则缺失的诊断和修复建议) |
| 31 | |
| 32 | ## 规则来源与优先级 |
| 33 | |
| 34 | | 来源 | 提取内容 | 冲突时 | |
| 35 | |------|---------|--------| |
| 36 | | PRD / 产品文档 | 需求约束、流程规则、判定条件 | 以用户对话为准 | |
| 37 | | 用户对话 | 补充的业务知识、行业惯例 | 最高优先级 | |
| 38 | | rule_extraction_check | 已结构化的主键/过滤/枚举/计算/层级规则 | — | |
| 39 | | 绑定分析 | 字段语义映射规则、数据质量约束 | — | |
| 40 | | 评审调整(`incremental`) | `review_adjustment_plan` 中标识的规则缺失项,经调整后产生的新规则 | 以调整后为准 | |
| 41 | |
| 42 | ## Skill 自检(生成后必执行) |
| 43 | |
| 44 | Skill 文件生成后,必须执行以下自检,失败则标注警告但不阻断流程: |
| 45 | |
| 46 | | 检查项 | 判定标准 | |
| 47 | |--------|---------| |
| 48 | | frontmatter 完整性 | 必须包含 `name`、`description`、`domain`、`network`、`network_id`、`version`、`lifecycle_state` | |
| 49 | | 文件结构合法性 | 必须包含规则总览表 + 至少一组详细规则 | |
| 50 | | 规则可追溯性 | 每条规则必须标注 `source`(prd / conversation / extraction / binding / adjustment) | |
| 51 | | 规则可执行性 | 高风险规则必须包含明确的判定条件或验证要点 | |
| 52 | | 反例覆盖 | 高风险规则至少有一条反例或验证要点 | |
| 53 | |
| 54 | ## Skill 拆分策略 |
| 55 | |
| 56 | 根据规则数量和复杂度决定拆分粒度: |
| 57 | |
| 58 | | 规则总数 | 策略 | 说明 | |
| 59 | |---------|------|------| |
| 60 | | ≤ 30 | 单 Skill | 一个网络一个规则 Skill,文件名 `{network_id}-rules.md` | |
| 61 | | 31–80 | 按领域分组 | 每个概念分组一个 Skill,文件名 `{network_id}-{group_slug}.md` | |
| 62 | | > 80 | 按对象拆分 | 每个核心对象一个 Skill,文件名 `{network_id}-{object_slug}-rules.md` | |
| 63 | |
| 64 | **拆分策略变化时的处理**(`incremental` 模式): |
| 65 | - 规则数量跨越阈值导致需要重新拆分/合并时,所有被替换的旧文件全部移入 `_archived/` |
| 66 | - 新生成的文件按命名规范创建,版本号延续当前版本并递增 |
| 67 | - 合并场景(如 50→20 条):多个分组合并为单 Skill,旧文件全部归档,生成新的 `{network_id}-rules.md` |
| 68 | - 拆分场景(如 20→50 条):单 Skill 拆分为多个,旧文件归档,生成新的 `{network_id}-{group_slug}.md` 系列 |
| 69 | |
| 70 | ### 命名规范 |
| 71 | |
| 72 | - Skill 文件名统一使用 `network_id` 标识,不使用网络名(中文/特殊字符可能导致路径不稳定) |
| 73 | - 单 Skill 场景:`{network_id}-rules.md` |
| 74 | - 多 Skill 场景(按领域分组):`{network_id}-{group_slug}.md` |
| 75 | - `group_slug` 为概念分组名的英文短标识(如 `sales-rules`、`inventory-rules`) |
| 76 | - 文件名与 skill name 保持一致(`name` frontmatter = 文件名去 `.md`) |
| 77 | - 每个 Skill 文件必须有 YAML frontmatter: |
| 78 | ```yaml |
| 79 | --- |
| 80 | name: "{network_id}-rules" # 单 Skill |
| 81 | # name: "{network_id}-{group_slug}" # 多 Skill 场景 |
| 82 | description: "..." |
| 83 | domain: "" |
| 84 | network: "" |
| 85 | network_id: "" |
| 86 | version: "1.0.0" |
| 87 | lifecycle_state: active | draft | archived |
| 88 | --- |
| 89 | ``` |
| 90 | |
| 91 | **版本规则**: |
| 92 | - `full` 模式首次生成:`version: "1.0.0"`,`lifecycle_state: active` |
| 93 | - `incremental` 模式:读取当前版本的 `version`,递增 minor(如 `1.0.0` → `1.1.0`) |
| 94 | - 语义版本:`major.minor.patch`,minor 增量更新,major 结构性大改时递增 |
| 95 | |
| 96 | **归档机制**(`incremental` 模式): |
| 97 | - 更新前将旧版本移入 `{network_dir}/skills/_archived/` |
| 98 | - 归档命名:`{原文件名}-v{旧版本号}-{YYYYMMDD-HHmmss}.md` |
| 99 | - 例:`mat-master-rules-v1.0.0-20260410-143022.md` |
| 100 | - 写入新版本后,`lifecycle_state: active` |
| 101 | - `full` 模式首次生成无需归档 |
| 102 | |
| 103 | ### Skill 文件结构 |
| 104 | |
| 105 | 每个 Skill 文件遵循标准 SKILL.md 结构: |
| 106 | 1. Frontmatter(name, description, domain, network, network_id, version, lifecycle_state) |
| 107 | 2. 规则总览表(rule_id / 规则名 / 类型 / 关联对象) |
| 108 | 3. 分组详细规则 |
| 109 | 4. 依赖关系图 |
| 110 | |
| 111 | ## 流程 |
| 112 | |
| 113 | 1. 确认执行模式(`full` 或 `incremental`) |
| 114 | 2. **`full` 模式**: |
| 115 | 1. 收集所有规则来源 |
| 116 | 2. 提取规则(每条标注 source) |
| 117 | 3. 去重归并(同规则多来源合并,保留最完整版本) |
| 118 | 4. 按领域/对象分组 |
| 119 | 5. 决定拆分策略(按上表) |
| 120 | 6. 高优先级规则补反例 + 验证要点 |
| 121 | 7. 分析规则间依赖 |
| 122 | 3. **`incremental` 模式**: |
| 123 | 1. 读取 `{network_dir}/skills/` 下已有规则 Skill 文件(排除 `_archived/` 目录) |
| 124 | 2. **降级判定**:若未找到任何已有 Skill 文件,降级为 `full` 模式执行,后续步骤按 `full` 模式处理 |
| 125 | 3. 结合 `review_adjustment_plan` 中标识的规则缺失项和当前建模状态(对象/关系/动作草案),识别新增/变更/废弃的规则 |
| 126 | 4. **归档旧版本**:将已有 Skill 文件移入 `{network_dir}/skills/_archived/`,重命名为 `{原文件名}-v{旧版本号}-{YYYYMMDD-HHmmss}.md`。确保 `_archived/` 目录存在(不存在则创建) |
| 127 | 5. 合并到已有 Skill 文件中(保留原有 source 标注,新增标注 `source: adjustment`),递增版本号 |
| 128 | 6. 重新执行拆分策略判定(规则数量变化可能导致需要重新拆分/合并,见上方拆分策略变化处理规则) |
| 129 | 4. 生成 Skill 产物,落盘到 `{network_dir}/skills/` |
| 130 | 5. **Skill 自检**(见上方自检表),结果输出到 `skill_self_check` |
| 131 | 6. 锚定与分发: |
| 132 | - `full` 模式:每个 Skill 对应一个 `bkn-anchor` 锚定对象,后续由 pipeline 委托 `bkn-distribute` 分发 |
| 133 | - `incremental` 模式:仅新增 Skill 需要锚定,已有 Skill 原地更新 |
| 134 | - **create pipeline 场景**(阶段六评审后/阶段七推送后):**不触发重新分发**(避免覆盖用户手动修改),仅输出差异清单供 pipeline 决定是否重新分发 |
| 135 | - **feedback pipeline 场景**:修复完成后 pipeline 会显式委托 `bkn-distribute` 覆盖各平台副本 |
| 136 | |
| 137 | ## 输出 |
| 138 | |
| 139 | ```yaml |
| 140 | business_rules_skill: |
| 141 | skill_name: "{network_id}-rules" |
| 142 | mode: full | incremental |
| 143 | domain: "" |
| 144 | version: "1.0.0" |
| 145 | lifecycle_state: active |
| 146 | rules_summary: {total, by_type, added, modified, removed} |
| 147 | archived_files: [] # incremental 模式:被归档的旧版本路径列表 |
| 148 | rule_groups: |
| 149 | - group_name: "" |
| 150 | rules: |
| 151 | - rule_id: BR-001 |
| 152 | rule_name: "" |
| 153 | rule_type: 主键规则 | 过滤规则 | 枚举规则 | 计算规则 | 层级规则 | 约束规则 | 映射规则 |
| 154 | description: "" |
| 155 | source: prd | conversation | extraction | binding | adjustment |