$npx -y skills add kweaver-ai/kweaver-dip --skill bkn-bind为 BKN 对象匹配数据视图,输出绑定决议。
| 1 | # 视图绑定 |
| 2 | |
| 3 | 公约:`../_shared/contract.md` | 绑定规则:`references/binding-rules.md` | 语义服务:`references/semantic-guide.md` |
| 4 | |
| 5 | ## 做什么 |
| 6 | |
| 7 | 给定对象草案和候选视图,为每个对象找到最佳绑定视图,输出 bound / pending / rejected。 |
| 8 | |
| 9 | ## 输入 |
| 10 | |
| 11 | - `object_draft_list`:对象清单(含属性和 `存储位置` 标记) |
| 12 | - `candidate_views`:候选视图(空则使用 `bkn-env` 输出的 `dataview_availability.available_views` 进行匹配) |
| 13 | - `dataview_availability`:可选,`bkn-env` 输出的完整信封(含 `total_views`、`fetched_views`、`truncated`、`available_views`) |
| 14 | - `network_context`:网络名、领域 |
| 15 | |
| 16 | ## 流程 |
| 17 | |
| 18 | 1. **存储位置过滤**: |
| 19 | - 跳过 `存储位置: local` 的对象(本地对象无需数据视图绑定) |
| 20 | - 在输出中记录被跳过的 local 对象列表 |
| 21 | - 仅对 `platform` 对象执行后续步骤 |
| 22 | 2. 从对象描述提取数据源线索 |
| 23 | 3. 委托 `bkn-kweaver` 查视图存在性 + 字段 schema(`kweaver dataview get`) |
| 24 | 4. **字段 schema 输出**:将每个已绑定对象的视图字段 schema 写入 `view_schema_map`,供 `bkn-map` 做属性回灌和 `bkn-draft` 做属性命名预对齐 |
| 25 | 5. 字段兼容性验证:逐属性比对,`not_found > 50%` 降级为 ambiguous |
| 26 | 6. 补充匹配:语义服务(`references/semantic-api.md`)+ GKN 复用 |
| 27 | 7. 逐对象决议:bound / pending / rejected |
| 28 | 8. 数据源一致性校验:不同 datasource_id 标记风险 |
| 29 | |
| 30 | 判定规则见 `references/binding-rules.md` |
| 31 | |
| 32 | ## 输出 |
| 33 | |
| 34 | ```yaml |
| 35 | binding_decision_list: |
| 36 | bound: [{object_id, object_name, selected_view_id, confidence, reason}] |
| 37 | pending: [{object_id, object_name, candidates, blocking_points}] |
| 38 | rejected: [{object_id, object_name, reason}] |
| 39 | skipped_local_objects: [对象名] |
| 40 | binding_summary: |
| 41 | total_objects: 0 # 仅计算 platform 对象 |
| 42 | bound_objects: 0 |
| 43 | binding_rate: 0.0 # bound_objects / total_objects(不含 local 对象) |
| 44 | view_schema_map: |
| 45 | {object_name}: |
| 46 | view_id: "" |
| 47 | view_name: "" |
| 48 | datasource_id: "" # 数据源 ID(用于跨数据源判断) |
| 49 | fields: [{name, type, description}] |
| 50 | foreign_keys: # 外键信息(用于关系类型判定) |
| 51 | - field: "" # 本视图中的外键字段名 |
| 52 | references_view_id: "" # 引用的视图 ID(如有) |
| 53 | references_table: "" # 引用的物理表名(如有) |
| 54 | references_field: "" # 引用的字段名 |
| 55 | ``` |
| 56 | |
| 57 | ## 视图匹配职责 |
| 58 | |
| 59 | `bkn-bind` 是对象-视图匹配的唯一决策点。`bkn-env` 仅提供可用视图列表(`dataview_availability`),不做匹配推荐。 |
| 60 | |
| 61 | **候选视图来源**: |
| 62 | 1. `candidate_views` 非空 → 使用用户传入的候选列表(`dataview_availability` 仅用于截断风险检查) |
| 63 | 2. `candidate_views` 为空 + `dataview_availability` 存在 → 使用 `dataview_availability.available_views` |
| 64 | 3. `candidate_views` 为空 + `dataview_availability` 不存在(如 update pipeline 跳过了 bkn-env)→ warn 用户"无候选视图列表,请手动指定 view_id 或 view_name 辅助匹配" |
| 65 | |
| 66 | **截断风险处理**:当 `dataview_availability.truncated == true` 时: |
| 67 | - 向用户发出 warning:"平台视图列表可能存在截断,自动匹配可能遗漏目标视图。建议手动指定 view_id 或 view_name 辅助匹配。" |
| 68 | - 继续用已获取的候选列表执行匹配,不阻断流程 |
| 69 | - 匹配结果为 pending 时,提示用户可能需要手动确认 view_id |
| 70 | |
| 71 | ## 约束 |
| 72 | |
| 73 | - 只做对象级绑定,属性映射交 `bkn-map` |
| 74 | - 绑定值必须是 `view_id`,不用名称替代 |
| 75 | - 多候选无法裁决时输出 pending,不强选 |
| 76 | - 不静默忽略数据源不一致 |