원클릭으로
bkn-test
生成测试集与验证用例。三种模式:schema_review / rules_verification / qa_verify。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
生成测试集与验证用例。三种模式:schema_review / rules_verification / qa_verify。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
数据权限管理技能:支持资源权限查询与权限申请。 先判定“查询权限”还是“申请权限”,再按资源类型执行对应接口。 当用户提出“申请权限”、“查是否有权限”、“给某资源授权”时使用。
Guides creation of BKN (Business Knowledge Network) definition files following v2.0.1 spec. Covers network, object_type, relation_type, action_type, concept_group. Use when creating knowledge networks, BKN files, object types, relation types, action types, concept groups, or when user asks to model business knowledge in BKN format. When kweaver-core is also loaded, use it to run kweaver CLI (auth, bkn push) after files exist.
数据分析员工(Data Analyst Agent)的唯一总入口:凡与数据资产、取数、指标、表/视图、 治理职责、知识网络等相关的问题,必须先经本 skill 做编排与路由,再进入找表或问数等子流程。 当用户提出数据类问题、需要知识网络选择、或需要在找表与问数之间切换时使用。
向飞书指定用户(通过 user_id)推送消息。 支持文本、卡片、图片、文件等多种消息类型。当用户需要给飞书用户发送推送消息时自动使用。
全局归档协议。只要任务需要写入任何文件(含 PLAN.md、报告、JSON 等归档物),必须按本技能执行 Session→ARCHIVE_ID、TIMESTAMP、双轨路径(根段须为 archives/)、回读校验与状态回执;WebUI 的 archive_grid 必须用 Markdown 中语言标识为 json 的围栏代码块输出。
KWeaver CLI 操作层 — 内化自 kweaver-core。 覆盖认证、平台业务域(config)、知识网络管理与查询、Agent CRUD 与对话、 数据源管理、数据视图、Skill 注册、Vega 可观测、context-loader 语义搜索、通用 API 调用。 仅由 bkn-creator pipeline 内部读取,不独立注册到宿主 skill 系统。
| name | bkn-test |
| description | 生成测试集与验证用例。三种模式:schema_review / rules_verification / qa_verify。 |
公约:../../_shared/contract.md
根据 BKN 草案和业务规则生成可复用的测试集,或对已推送网络做 Q&A 验证。
schema_review(推送前,静态检查,默认)输入:对象/关系/动作草案 + 业务规则 + 绑定结果 输出:四类测试用例 + 覆盖率矩阵
注意:此为静态检查,不依赖真实数据。只验证 .bkn 文件的结构完整性、业务规则存在性、绑定关系完整性。
存储位置: local 对象不参与 binding 测试,local 对象没有数据视图绑定,binding 测试只统计 platform 对象。
| 测试类别 | local 对象处理 |
|---|---|
| smoke | ✓ 参与(验证 schema 结构) |
| rules | ✓ 参与(规则可能引用 local 对象) |
| binding | ✗ 排除(local 对象无视图绑定) |
| risk | ✓ 参与(验证高风险动作定义) |
binding 测试的最小数量:
当 plugin_availability.rules == unavailable 时(阶段五跳过):
| 测试类别 | 处理方式 |
|---|---|
| smoke | 正常生成 |
| rules | 跳过(无业务规则 Skill 文件,无法生成规则类测试) |
| binding | 正常生成 |
| risk | 正常生成 |
此时:
rules: skipped(no_skill_file)本节约束适用于 schema_review 模式。rules_verification 模式有独立的数量约束(见 mode 2 说明)。
生成测试集后必须自检数量,不达标则 BLOCKED:
最小用例数计算:
- smoke_min = 对象数 + 关系数
- rules_min = max(规则数 × 2, 10) # 每条规则至少1正例,关键规则额外1反例,总数不低于10
- binding_min = 3
- risk_min = 高风险动作数 × 2
总最小用例数 = smoke_min + rules_min + binding_min + risk_min
执行逻辑:
测试集数量不达标,BLOCKED:
- smoke: 需至少 {smoke_min} 条,实际 {actual} 条
- rules: 需至少 {rules_min} 条,实际 {actual} 条
- binding: 需至少 {binding_min} 条,实际 {actual} 条
- risk: 需至少 {risk_min} 条,实际 {actual} 条
必须补充至达标后方可继续。
| 检查项 | 说明 | 必须验证 |
|---|---|---|
| 对象存在性 | 对象类型在 schema 中存在 | ✓ |
| 属性完整性 | 至少验证 3 个核心属性非空 | ✓ |
| 主键有效性 | primary_key 字段存在且非空 | ✓ |
| 关系连通性 | 关系的 source/target 对象均存在 | ✓ |
smoke 用例模板:
case_id: smoke_obj_{object_id}_001
title: 验证 {object_name} 对象结构完整
level: smoke
target: {object_id}
steps:
- step: 查询 {object_id} 对象 schema
action: kweaver bkn object-type get {object_id}
- step: 检查属性列表包含核心属性
check: properties contains [{核心属性1}, {核心属性2}, {核心属性3}]
- step: 检查 primary_key 非空
check: primary_key != null && primary_key != ""
- step: 检查 display_key 非空
check: display_key != null && display_key != ""
expected_result:
- 对象存在
- 属性数量 >= {最小属性数}
- 核心属性: {列出3个核心属性} 均存在
- primary_key: {主键字段名}
- display_key: {显示字段名}
case_id: smoke_rel_{relation_id}_001
title: 验证 {relation_name} 关系连通性
level: smoke
target: {relation_id}
steps:
- step: 查询 {relation_id} 关系 schema
action: kweaver bkn relation-type get {relation_id}
- step: 检查 source 对象存在
check: source_object_id in {所有对象ID列表}
- step: 检查 target 对象存在
check: target_object_id in {所有对象ID列表}
- step: 检查 mapping 非空
check: mapping_rules != null
expected_result:
- 关系存在
- source: {source_object_id} 存在
- target: {target_object_id} 存在
- mapping: 有映射规则
| 检查项 | 说明 | 必须验证 |
|---|---|---|
| 触发条件 | 规则的触发条件明确 | ✓ |
| 预期行为 | 满足条件时的预期结果 | ✓ |
| 正例验证 | 满足条件的场景验证 | ✓ |
| 反例验证(关键规则) | 违反条件的拒绝验证 | 仅高/关键规则 |
rules 用例模板(正例):
case_id: rules_{rule_id}_positive_001
title: 验证规则 {rule_name} 正例触发
level: rules
target: {rule_id}
rule_type: {低|中|高/关键}
steps:
- step: 识别规则触发条件
action: 解析规则 {rule_id} 的触发条件
- step: 构造满足条件的测试输入
input: {具体输入数据或场景描述}
- step: 触发规则执行
action: {执行方式}
- step: 验证预期行为
check: actual_result matches expected_behavior
expected_result:
- 触发条件: {列出具体条件}
- 预期行为: {列出预期结果}
- 关键词: [{expected_keyword_1}, {expected_keyword_2}]
- 规则来源: {rule_source_location}
rules 用例模板(反例 - 仅高/关键规则):
case_id: rules_{rule_id}_negative_001
title: 验证规则 {rule_name} 反例拒绝
level: rules
target: {rule_id}
rule_type: 高/关键
is_counterexample: true
steps:
- step: 构造违反条件的测试输入
input: {违反条件的具体输入}
- step: 尝试触发规则
action: {执行方式}
- step: 验证拒绝或报错
check: result is rejection or error
expected_result:
- 违反条件: {列出违反的具体条件}
- 预期拒绝: 系统应拒绝或报错
- 不应出现: [{expected_absent_keyword_1}, {expected_absent_keyword_2}]
- 反例类型: {边界越界|条件缺失|逻辑冲突}
| 检查项 | 说明 | 必须验证 |
|---|---|---|
| 绑定率 | platform 对象绑定 view 的比例 | ✓ |
| 映射覆盖率 | 属性映射完成的比例 | ✓ |
| blocked 项 | 绑定失败的项及原因 | ✓ |
binding 用例模板:
case_id: binding_rate_001
title: 验证对象视图绑定率
level: binding
target: all_platform_objects
steps:
- step: 统计 platform 对象总数
action: count objects where 存储位置 == platform
- step: 统计已绑定对象数
action: count objects where data_source.view_id != null
- step: 计算绑定率
formula: bind_rate = bound_count / platform_count
expected_result:
- platform对象数: {N}
- 已绑定数: {M}
- 绑定率: {M/N}%
- 最低要求: >= 80%(若低于则需说明原因)
---
case_id: binding_coverage_001
title: 验证属性映射覆盖率
level: binding
target: all_bound_objects
steps:
- step: 统计所有绑定对象的属性总数
action: sum properties across bound objects
- step: 统计已映射属性数
action: count properties where mapped_field != "-" and mapped_field != null
- step: 计算映射覆盖率
formula: coverage = mapped_count / property_count
expected_result:
- 属性总数: {N}
- 已映射数: {M}
- 映射覆盖率: {M/N}%
- 未映射属性: [{列出未映射属性}]
| 检查项 | 说明 | 必须验证 |
|---|---|---|
| 动作存在性 | 高风险动作在 schema 中存在 | ✓ |
| 参数完整性 | 动作参数绑定完整 | ✓ |
| 正例:成功执行 | 正常条件下的执行验证 | ✓ |
| 反例:拒绝执行 | 异常条件下的拒绝验证 | ✓ |
risk 用例模板:
case_id: risk_{action_id}_positive_001
title: 验证高风险动作 {action_name} 正例执行
level: risk
target: {action_id}
risk_level: 高
steps:
- step: 查询动作 schema
action: kweaver bkn action-type get {action_id}
- step: 检查参数绑定完整性
check: parameter_binding all have valid source/binding
- step: 构造合法执行条件
input: {满足前置条件的输入}
- step: 执行动作(模拟)
action: {执行方式}
expected_result:
- 动作存在
- 参数绑定完整
- 前置条件满足时可执行
- 关键词: [{expected_keyword_1}]
---
case_id: risk_{action_id}_negative_001
title: 验证高风险动作 {action_name} 反例拒绝
level: risk
target: {action_id}
risk_level: 高
is_counterexample: true
steps:
- step: 构造非法执行条件
input: {违反前置条件的输入}
- step: 尝试执行动作
action: {执行方式}
- step: 验证拒绝或报错
check: result is rejection or error
expected_result:
- 前置条件不满足时应拒绝
- 不应出现: [{expected_absent_keyword}]
- 拒绝类型: {权限不足|前置条件缺失|参数无效}
| 等级 | 标签 | 含义 | 示例 | 反例要求 |
|---|---|---|---|---|
| 低 | 低 | 只读或对单条记录的非破坏性操作 | 查询、生成报表 | 无 |
| 中 | 中 | 影响多条记录或触发下游流程 | 批量状态变更、MRP 计算 | 无 |
| 高/关键 | 高/关键 | 删除、跨系统推送、审批流触发、资金相关 | 删除网络、推送生产计划、关键决策规则 | 必须 |
关键规则:高风险级别的业务规则,涉及删除、审批、资金或跨系统推送。这类规则必须补充反例测试。
rules_verification(推送前,语义检查)输入:锚定在网络中的业务规则 Skill 输出:规则语义测试集(正反例 + 溯源检查)
与 schema_review 的关系:
schema_review 中的 rules 类用例只做"规则存在性检查"(规则 Skill 文件存在、rule_id 可追溯、规则数量与提取清单一致)rules_verification 做"规则语义检查"(触发条件是否可判定、预期行为是否明确、正反例是否覆盖边界场景)检查项:
| 检查项 | 说明 | 必须验证 |
|---|---|---|
| 触发条件可判定性 | 规则的触发条件是否包含可量化的判断标准 | ✓ |
| 预期行为明确性 | 满足/违反条件时的预期结果是否无歧义 | ✓ |
| 正例覆盖 | 每条规则至少有 1 个正例场景 | ✓ |
| 反例覆盖(关键规则) | 高/关键规则至少有 1 个反例场景 | 仅高/关键规则 |
| 溯源完整性 | 规则来源标注可追溯到原始文档段落 | ✓ |
rules_verification 用例模板(正例):
case_id: rv_{rule_id}_positive_001
title: 验证规则 {rule_name} 语义正例
level: rules_verification
target: {rule_id}
rule_type: {低|中|高/关键}
steps:
- step: 解析规则触发条件的可判定性
action: 检查 {rule_id} 的触发条件是否包含量化标准
- step: 构造满足条件的具体场景
input: {具体输入数据,需明确数值或状态}
- step: 验证预期行为
check: actual_result matches {明确的预期结果}
- step: 验证溯源
check: rule_source traces back to {原始文档/章节}
expected_result:
- 触发条件: {具体可判定的条件}
- 预期行为: {无歧义的结果描述}
- 关键词: [{expected_keyword_1}, {expected_keyword_2}]
- 规则来源: {rule_source_location}
- 溯源判定: 可追溯 / 不可追溯(需标注原因)
rules_verification 用例模板(反例 - 仅高/关键规则):
case_id: rv_{rule_id}_negative_001
title: 验证规则 {rule_name} 语义反例
level: rules_verification
target: {rule_id}
rule_type: 高/关键
is_counterexample: true
steps:
- step: 构造违反规则条件的边界场景
input: {违反条件的具体输入,需说明违反的具体维度}
- step: 验证系统拒绝或报错
check: result is rejection or error with specific message
expected_result:
- 违反条件: {具体违反的维度}
- 预期拒绝: 系统应拒绝并给出明确提示
- 不应出现: [{expected_absent_keyword}]
- 反例类型: {边界越界|条件缺失|逻辑冲突}
数量约束:
与 BLOCKED 机制的关系:
rules_verification 语义检查不达标:
- 需至少 {rv_min} 条,实际 {actual} 条
- 缺失类型: {正例/反例/溯源}
qa_verify(推送后,实际验证)输入:业务规则 Skill + 已推送网络 输出:验收引导卡 + Q&A 验证结果
L3 级问题必须基于 skills/ 目录下的业务规则 Skill 文件生成,不可凭空编造:
{network_dir}/skills/ 下所有业务规则 Skill 文件rule_id 可追溯到 Skill 文件中的具体规则skipped,并在报告中注明"业务规则 Skill 不可用"bkn-rules 的 skill_self_check 且有 fail 项,在引导卡中提示用户注意| 级别 | 验证目标 | 最小数量 | 示例 |
|---|---|---|---|
| L1 结构 | 对象/属性是否存在 | 至少 2 题 | "预测单有哪些属性?" |
| L2 关系 | 关系连通性 | 至少 2 题 | "MRP 和预测单什么关系?" |
| L3 规则 | 业务规则是否可回答 | 关键规则 × 1 | "BOM 用量怎么计算?" |
| L4 推理 | 跨实体推导 | 至少 2 题 | "缺料时影响哪些生产计划?" |
L3 级数量计算:
在生成 Agent 配置前,先从以下来源收集所需参数:
| 占位符 | 数据来源 | 获取方式 |
|---|---|---|
{network_name} | pipeline_state.yaml 或 .bkn 文件 Network Overview | 读取 network_name 字段 |
{model_id} / {model_name} | 平台可用模型列表 | 执行 kweaver llm list(委托 bkn-kweaver)获取平台模型;优先使用默认模型,否则询问用户 |
{kn_id} | 阶段七推送返回的网络 ID | 从 pipeline_state.yaml.kn_id 读取 |
{all_object_type_ids} | {network_dir}/bkn/ 下所有 object_type 的 id 字段 | 扫描 .bkn 文件,提取 Object Type: 行的 id 值 |
数据准备步骤:
pipeline_state.yaml 获取 kn_id、network_name{network_dir}/bkn/*.bkn,提取所有 object_type ID 列表kweaver llm list(委托 bkn-kweaver)获取平台模型列表;若无可用模型,提示用户选择委托验证需要 Agent 时,使用以下配置结构(基于 kweaver-sdk e2e 验证):
{
"input": {"fields": [{"name": "user_input", "type": "string", "desc": ""}]},
"output": {"default_format": "markdown"},
"system_prompt": "你是{network_name}的Decision Agent。基于知识网络中的对象、关系和业务规则回答用户问题。",
"llms": [{
"is_default": true,
"llm_config": {
"id": "{model_id}",
"name": "{model_name}",
"model_type": "llm",
"temperature": 0.7,
"top_p": 0.8,
"top_k": 1,
"frequency_penalty": 0,
"presence_penalty": 0,
"max_tokens": 4096
}
}],
"data_source": {
"kg": [{"kg_id": "{kn_id}", "fields": ["{all_object_type_ids}"]}],
"advanced_config": {
"kg": {
"text_match_entity_nums": 60,
"vector_match_entity_nums": 60,
"graph_rag_topk": 25,
"long_text_length": 256,
"reranker_sim_threshold": -5.5,
"retrieval_max_length": 20480
}
}
}
}
关键要点:
data_source 使用 kg(非 knowledge_network),这是 agent-factory API 的遗留字段名fields 填入该网络所有 object_type 的 ID 列表llm_config 必须包含 temperature/top_p/top_k,缺失会导致 FormatErroris_dolphin_mode)第一阶段:生成验收引导卡(必执行)
生成分级问题后,以引导卡形式呈现给用户,并询问验证方式:
知识网络「{network_name}」已推送完成
以下是根据业务规则生成的验收问题:
【L1 结构】(至少 {L1_min} 题)
- {question}
- {question}
【L2 关系】(至少 {L2_min} 题)
- {question}
- {question}
【L3 规则】(至少 {L3_min} 题)关键规则必问
- {question}(关联规则:{rule_id})
- {question}(关联规则:{rule_id})
【L4 推理】(至少 {L4_min} 题)
- {question}
- {question}
问题总数:{total},达标:{达标 or 不达标}
请选择验证方式:
A. 我自己去 DIP 验证,完成后把结果反馈给你
B. 快速验证(L1+L2,使用 context-loader,无需 Agent)
C. 完整验证(L1-L4,需要 Agent,尝试端到端验证)
第二阶段:按用户选择执行
| 选择 | 执行路径 |
|---|---|
| A(用户自验) | 等待用户反馈 → 用户描述 Agent 回答 → 执行判定 → 输出结果 |
| B(快速验证) | L1+L2 自动验证(见下方),L3/L4 输出为"建议用户自行验证" |
| C(完整验证) | L1-L4 自动验证(见下方),Agent 不可用时自动降级为 B |
| 模式 | 覆盖级别 | 工具 | 适用场景 |
|---|---|---|---|
| 快速验证(B) | L1 + L2 | kweaver context-loader + kweaver bkn search | 无 Agent、schema_only、快速迭代 |
| 完整验证(C) | L1-L4 | 上述 + kweaver agent chat | 有关联 Agent、需验证推理能力 |
快速验证流程:
kweaver context-loader config set --kn-id <network_id>kweaver context-loader kn-schema-search "<question>" → 检查对象/属性命中kweaver context-loader kn-schema-search "<question>" → 检查关系连通性 + kweaver bkn search → 检查语义可达性完整验证流程:
kweaver bkn search <kn_id> "<question>" → 检查规则描述命中kweaver agent chat <agent_id> → 端到端回答验证(需用户确认判定)降级规则:
env_capability_matrix.agent_factory == unavailable,自动降级为快速验证kweaver agent list 找不到关联 Agent 或调用失败 → 降级为快速验证,不重试对高风险关键规则,额外生成反例问题:
expected_absent_keywords 中的任何词qa_results:
- question: ""
rule_id: ""
level: L1 | L2 | L3 | L4
is_counterexample: false
expected_keywords: []
expected_absent_keywords: []
verify_mode: user_self | quick | full
tool_used: context-loader | bkn-search | agent-chat
actual_answer: ""
match: true | false
data_status: has_data | schema_only | not_found
l4_user_confirmed: null | true | false
final_verdict: pass | fail | skipped
testset_summary:
scope: {network_name}
focus: {model_review|rules_verification|qa_verify}
total_cases: {N}
smoke_cases: {N}
rules_cases: {N}
binding_cases: {N}
risk_cases: {N}
passed: {N}
failed: {N}
blocked: {N}
coverage_matrix:
objects: {covered}/{total}
relations: {covered}/{total}
actions: {covered}/{total}
rules: {covered}/{total}
bindings: {covered}/{total}
gaps: []
testset_path: "" # 落盘路径,必须向用户展示
quantity_check:
smoke: {actual}/{min} {达标|不达标}
rules: {actual}/{min} {达标|不达标}
binding: {actual}/{min} {达标|不达标}
risk: {actual}/{min} {达标|不达标}
overall: {达标|BLOCKED}
schema_review 和 rules_verification 模式必须将测试集落盘:
{network_dir}/tests/testset.yamlqa_verify 模式不持久化测试集(验证是实时执行的,不生成可回放用例)测试集落盘且数量达标后,按回显模板输出:
### 测试集已生成(完成)
说明:
- 落盘路径:{network_dir}/tests/testset.yaml
- 用例数:{total_cases}
- 数量检查:全部达标 ✓
- smoke: {actual}/{min} ✓
- rules: {actual}/{min} ✓
- binding: {actual}/{min} ✓
- risk: {actual}/{min} ✓
下一步:执行 bkn-test --mode qa_verify 或进入推送流程