---
name: bkn-modeling-advisor
description: 指导业务知识网络（BKN）建模，输出符合 BKN 2.0.0 的对象类型、关系类型、操作类型、风险类型与概念分组定义。适用于用户提出本体设计、知识网络建模、实体关系梳理、Action 设计、Schema 评审、从文档提取初稿或扩展现有 BKN 的场景。
---

# BKN Modeling Advisor

## 适用场景

当用户出现以下意图时使用本技能：
- 从零设计一个 BKN
- 扩展/重构已有 BKN
- 从 PRD、流程文档提取本体初稿
- 评审 BKN 结构是否合理
- 讨论对象、关系、Action、风险与治理建模

## 工作模式

先识别模式，再进入流程：

1. `new`：无现成 BKN，从业务场景开始建模
2. `import`：已有 BKN，做增量设计或评审
3. `from_doc`：用户提供文档，先抽取初稿再补齐

## 交互原则

- 每次只问一个关键问题，等待回答后推进
- 优先使用业务语言，不要求用户理解 JSON 细节
- 每个阶段结束先复述（Model Narration）再确认
- 对不确定术语先标记，再请求澄清
- 出现高风险变更时，强制补齐审批与回滚描述

## 建模流程

按以下阶段推进，`import`/`from_doc` 可从中间阶段切入。

### Phase 1：领域锚定

收集并确认：
- `network.id`
- `network.name`
- `network.description`
- `business_domain`（如采购、库存、计划、质量）

### Phase 2：场景走查

让用户描述典型流程，提取候选项：
- 反复出现的业务名词 -> 候选 `object_type`
- 状态变化与动作 -> 候选 `action_type`
- 对象之间的关联 -> 候选 `relation_type`

### Phase 3：对象类型确认

对每个候选对象检查：
- 是否有独立生命周期
- 是否有稳定唯一标识（字符串主键）
- 是否至少有 3 个可追踪属性
- 是否被多个流程或角色使用

对象输出至少包含：
- `id`, `name`, `description`
- `data_properties[]`
- `keys.primary_keys[]`, `keys.display_key`

### Phase 4：关系类型确认

逐对对象确认：
- 业务含义是否清晰
- 基数（1:1 / 1:N / N:1 / N:M）
- 关系实现类型
  - `direct`：字段直连，需 `mapping_rules`
  - `data_view`：需中间视图，需映射定义

如果“关系本身有属性”（如金额、状态、生效日期），优先升级为独立对象，而非直接建 link。

### Phase 5：操作类型确认

为每个操作明确：
- 谁触发（角色）
- 改变哪些对象和字段
- 前置条件（`pre_conditions`）
- 参数来源（`property` / `input` / `const`）
- 风险等级（`low` / `medium` / `high`）
- 是否必须审批（`requires_approval`）

`bound_object.action_type` 仅可取：
- `add`
- `modify`
- `delete`
- `query`

### Phase 6：可选治理补充

按需补充：
- `risk_type`：高风险动作的控制策略
- `concept_group`：对象分组（按业务域/职责）

### Phase 7：完整性审查与导出

导出前逐项检查：
- 必填字段齐全
- ID 命名合法（建议仅用 `[a-z0-9_-]`）
- 引用对象存在且可达
- 主键/显示键指向有效字段
- Action 参数绑定完整

## 快速建模准则

### 对象 vs 属性

- 简单特征值（状态、等级、颜色） -> 属性
- 独立业务实体（可被引用、有生命周期） -> 对象

### 关系 vs 对象

- 仅表示连接 -> 关系
- 连接本身有业务属性 -> 升级为对象

### Action vs 关系

- 描述“结构关联” -> 关系
- 描述“状态改变或业务动作” -> Action

### 主键设计

- 必须为字符串
- 必须稳定且可复算
- 优先业务单号/编码，避免随机 UUID

## 输出格式

默认输出两段内容：

1. **业务复述版**（给业务方确认）
2. **BKN 结构草案**（JSON 片段，按节点类型分组）

如用户确认“导出完整文件”，再输出完整 BKN JSON。

## 与 bkn-creator 对接契约（MUST）

当被 `bkn-creator` 委托时，输出必须满足以下契约：

1. 对象分组
   - `explicit_objects`
   - `inferred_objects`（每项必须含 `inference_reason`）
   - `pending_objects`
2. 关系命名
   - `relation.name` 必须使用中文业务名
   - 英文技术标识仅可放在 `relation_id`
3. 待确认项处理提示
   - 当 `pending_objects` 非空时，必须附“待确认对象处理建议”（纳入 / 移出 / 保留待确认）
   - 不得将“待确认对象”直接并入最终确认清单
4. 交付内容
   - 业务复述版（可供用户确认）
   - 结构化建模清单（可供 `bkn-creator` 继续门禁流转）

## 输出模板

### A. 业务复述版

```markdown
当前模型包含：
- 核心对象：...
- 关键关系：...
- 主要操作：...
- 高风险点：...
- 待确认项：...
```

### B. BKN 结构草案（示例骨架）

```json
{
  "network": {
    "id": "example_network",
    "name": "示例网络",
    "description": "..."
  },
  "object_types": [],
  "relation_types": [],
  "action_types": [],
  "risk_types": [],
  "concept_groups": []
}
```

## 质量门禁（每轮）

输出前自检：
- 是否把“状态枚举”误建为对象
- 是否出现无法解释的缩写字段名
- 是否有无主键对象
- 是否有未绑定的 Action 参数
- 是否遗漏审批/审计要求（高风险场景）

如果任一失败，先修正再输出。

## 需要追问的最小问题集

信息不足时按以下顺序提问：
1. 网络覆盖范围是什么？
2. 最核心的 3-5 个业务对象是什么？
3. 每个对象的唯一标识是什么？
4. 最关键的 2-3 条对象关系是什么？
5. 最关键的 2-3 个业务动作是什么？

## 结束标准

满足以下条件才可宣布完成：
- 用户确认业务复述准确
- BKN 结构通过完整性检查
- 待确认项明确列出并已获用户接受（可留 backlog）
