$npx -y skills add kweaver-ai/kweaver-dip --skill bkn-anchor将业务规则 Skill 锚定为 BKN 网络中的孤悬对象类。
| 1 | # Skill 锚定 |
| 2 | |
| 3 | 公约:`../../_shared/contract.md` |
| 4 | |
| 5 | ## 做什么 |
| 6 | |
| 7 | 把 `bkn-rules` 生成的业务规则 Skill,作为孤悬对象类写入 BKN 网络, |
| 8 | 让网络与其规则 Skill 自包含——查网络就能看到配套规则。 |
| 9 | |
| 10 | ## 输入 |
| 11 | |
| 12 | - `business_rules_skill`:`bkn-rules` 的输出 |
| 13 | - `network_dir`:网络目录(`.bkn` 文件位于 `{network_dir}/bkn/`) |
| 14 | |
| 15 | ## 锚定方式 |
| 16 | |
| 17 | 为每个业务规则 Skill 创建一个独立 object_type(无关系指向其他业务对象): |
| 18 | |
| 19 | ```yaml |
| 20 | object_type: |
| 21 | name: "{skill_name}" |
| 22 | description: "{规则摘要}" |
| 23 | properties: |
| 24 | - name: skill_path |
| 25 | type: string |
| 26 | description: "Skill 文件路径" |
| 27 | - name: rule_type |
| 28 | type: string |
| 29 | description: "规则类型" |
| 30 | - name: rule_count |
| 31 | type: integer |
| 32 | description: "规则条数" |
| 33 | - name: source |
| 34 | type: string |
| 35 | description: "规则来源" |
| 36 | - name: related_objects |
| 37 | type: string |
| 38 | description: "关联业务对象" |
| 39 | - name: version |
| 40 | type: string |
| 41 | description: "版本" |
| 42 | ``` |
| 43 | |
| 44 | 锚定对象需在 `{network_dir}/bkn/network.bkn` 的 `concept_groups` 中引用,归入「业务规则」分组。若该分组不存在,在 `{network_dir}/bkn/network.bkn` 中创建: |
| 45 | |
| 46 | ```yaml |
| 47 | concept_groups: |
| 48 | - id: business_rules |
| 49 | name: 业务规则 |
| 50 | members: |
| 51 | - "{anchored_object_id}" |
| 52 | ``` |
| 53 | |
| 54 | ## 流程 |
| 55 | |
| 56 | 1. 读取 `bkn-rules` 输出的 `rule_groups` |
| 57 | 2. 为每个 group 生成对应的孤悬 object_type |
| 58 | 3. 写入 `{network_dir}/bkn/object_types/` 下的 .bkn 文件(直接写入,不走 bkn-backfill) |
| 59 | 4. 更新 `{network_dir}/bkn/network.bkn` 的 concept_groups(添加或更新「业务规则」分组) |
| 60 | 5. 回读校验 |
| 61 | |
| 62 | ## 输出 |
| 63 | |
| 64 | ```yaml |
| 65 | anchored_objects: |
| 66 | - object_name: "" |
| 67 | skill_path: "" |
| 68 | rule_count: 0 |
| 69 | anchor_status: success | partial | failed |
| 70 | ``` |
| 71 | |
| 72 | ## 锚定与推送的配合 |
| 73 | |
| 74 | 锚定对象写入 .bkn 文件后随网络整体推送(推送目标为 `{network_dir}/bkn/`)。锚定时需遵守门禁规则: |
| 75 | - 锚定对象的属性类型必须为合法类型(`string`/`integer` 等) |
| 76 | - Display Key 不可为空(建议用 `skill_path`) |
| 77 | - 无需 Data Source(孤悬对象无数据视图绑定) |
| 78 | |
| 79 | ## 约束 |
| 80 | |
| 81 | - 孤悬对象不与业务对象建关系 |
| 82 | - 不修改已有业务对象定义 |
| 83 | - 归入专用 concept_group,便于区分 |
| 84 | - 推送前必须通过门禁自检 |