Files
smart-data-dev-skill/skills/model-design-generator/SKILL.md
2026-04-17 05:22:47 +00:00

19 KiB
Raw Blame History

name, description
name description
model-design-generator 根据数据需求技术规范文档生成模型设计技术规范文档

模型设计技能 (Model Design Skill)

技能描述

本技能根据用户输入的数据需求技术规范文档,自动生成对应的模型设计技术规范文档,包含 SQL 编排步骤、目标表属性信息、目标表字段信息等完整设计内容。

输入输出

输入

  • 输入类型MD 文件路径(数据需求技术规范文档的文件路径)或目录路径
  • 输入来源
    • 用户传入具体文件路径:直接使用该文件
    • 用户传入目录路径:自动选取文件名中日期最新的 REQ-DATA-*.md 文件
  • 输入示例
    • 文件路径:202604/skills_design/v2/data/REQ-DATA-20260409142709-001.md
    • 目录路径:202604/skills_design/v2/data/ → 自动选取 REQ-DATA-20260409142709-001.md(最新的)

输出

  • 输出类型Markdown + JSON 格式文本(模型设计技术规范文档)
  • 输出内容
    1. 编排目标表生成流程SQL 编排步骤)- Markdown 表格
    2. 目标表属性信息 - JSON 格式
    3. 目标表字段信息 - JSON 格式

可配置参数

以下参数按输出模板的表结构组织,方便后续统一修改:


表 1编排目标表生成流程 - 字段规则与配置

输出模板字段:步骤序号 | sql 编排内容解释 | 输入源表 | 加工字段口径 | 输出表名 | 输出表字段

输出字段 填写规则 默认值/配置项 说明
步骤序号 step01, step02, step03... 顺序编号,步骤数根据加工复杂度决定 无,按步骤生成 标识处理步骤顺序
sql 编排内容解释 根据加工逻辑自然语言描述 AI 生成 描述该步骤的加工目的和操作
输入源表 从需求文档"所用数据源及字段"表提取 无,从输入提取 该步骤依赖的源表列表
加工字段口径 从需求文档"输出表字段 - 字段加工逻辑"提取并整理 无,从输入提取 字段的加工规则说明
输出表名 临时表:${db_tmp_env}.${temp_table.prefix}${temp_table.suffix}
目标表:${db_eda_env}.${target_table.prefix}_xxx
db_tmp_env保留占位符
db_eda_env保留占位符
temp_table.prefix=tmp_prj004_ads_rpt展开为实际值
temp_table.suffix=_01,_02...展开为实际值
target_table.prefix=prj004_ads_rpt展开为实际值
最后一步输出目标表,中间步骤输出临时表;输出时内部变量需展开,外部变量保留
输出表字段 从需求文档"输出表字段"提取,逗号分隔 无,从输入提取 该步骤产出的字段列表

表 2目标表属性信息 - 字段规则与配置

输出模板字段:数据目录 | 数据源 | 表编码 | 描述 | 数据源类型 | 表名称 | 数据归口条线 | 是否已上传至集团 | 是否可共享 | 技术人员 | 技术人员电话 | 维护人员 | 维护人员电话 | 管理人员 | 管理人员电话 | 增量/全量 | 是否有敏感信息

输出字段 填写规则 默认值/配置项 说明
数据目录 从需求文档"输出表名 - 数据目录"提取,或按业务类型匹配 table_attr.data_catalog=指标层 - 客户服务 可选值:指标层 - 客户服务明细层 - 投诉汇总层 - 业务
数据源 从需求文档"所用数据源及字段"涉及的源表归纳 无,从输入提取 描述数据来源,如"投诉工单、组织机构"
表编码 从需求文档"输出表名 - 表英文名称"提取 无,从输入提取 输出表的英文表名
描述 从需求文档"输出表名 - 表描述"提取 无,从输入提取 表的业务含义描述
数据源类型 固定值或从需求文档提取 table_attr.data_source_type=paimon 可选值:paimonhivemysql
表名称 从需求文档"输出表名 - 表中文名称"提取 无,从输入提取 输出表的中文表名
数据归口条线 从需求文档"需求提出方"映射 table_attr.business_line=客户服务部 业务归属部门
是否已上传至集团 固定默认值 table_attr.is_uploaded=否 /
是否可共享 固定默认值 table_attr.is_shareable=是 /
技术人员 默认配置 table_attr.tech_name=张三 技术负责人姓名
技术人员电话 默认配置 table_attr.tech_phone=13800138000 技术负责人电话
维护人员 默认配置 table_attr.maint_name=李四 数据维护人员姓名
维护人员电话 默认配置 table_attr.maint_phone=13900139000 数据维护人员电话
管理人员 默认配置 table_attr.mgr_name=王五 数据管理人员姓名
管理人员电话 默认配置 table_attr.mgr_phone=13700137000 数据管理人员电话
增量/全量 从需求文档"运行频次"映射 table_attr.load_type=增量 增量/全量,日/周/月频次→增量
是否有敏感信息 固定默认值 table_attr.has_sensitive=否 /

表 3目标表字段信息 - 字段规则与配置

输出模板字段:字段编码 | 字段名称 | 字段类型 | 字段分类 | 排序 | 是否自增 | 是否需脱敏 | 描述

3.1 各输出字段规则总览

输出字段 填写规则 默认值/配置项 说明
字段编码 从需求文档"输出表字段 - 输出字段英文名"提取 无,从输入提取 字段英文名snake_case 格式
字段名称 从需求文档"输出表字段 - 输出字段中文名"提取 无,从输入提取 字段中文名
字段类型 按"3.2 字段类型映射"转换 见下方 3.2 节 需求类型→数据库类型
字段分类 按"3.3 字段分类规则"自动识别 见下方 3.3 节 维度/标识/指标/扩展/分区
排序 从 1 开始自增 field.sort_start=1 连续递增,无跳号
是否自增 固定默认值 field.auto_increment=否 /
是否需脱敏 固定默认值 field.mask_required=否 /
描述 从需求文档"字段业务含义"+"加工逻辑"整理 AI 生成 字段含义 + 加工规则说明

3.2 字段类型映射配置

需求文档类型 目标数据库类型 配置项 说明
string STRING type_map.string=STRING 字符串类型
bigint BIGINT type_map.bigint=BIGINT 大整数
int INT type_map.int=INT 整数
timestamp TIMESTAMP type_map.timestamp=TIMESTAMP 时间戳
date STRING type_map.date=STRING 日期(格式 yyyy-MM-dd
double/decimal DECIMAL(18,2) type_map.decimal=DECIMAL(18,2) 小数

3.3 字段分类规则配置

字段分类 识别特征(字段名/业务含义) 配置项 示例
标识字段 idcodenbr、唯一标识类 class.identifier.keys=id,code,nbr idx_nbrcomplaint_idorg_id
维度字段 名称类 (name)、类型类 (type)、描述类 class.dimension.keys=name,type,desc dept_namebureau_namecomplaint_type
指标字段 数值类、统计类、含 num/amt/value/cnt class.metric.keys=num,amt,value,cnt complaint_accept_numidx_value
分区字段 day_idstat_datedtdate class.partition.keys=day_id,stat_date,dt,date day_idstat_date

3.4 预置字段配置(可选追加)

说明:默认不追加预置字段,目标表字段与需求文档"输出表字段"保持一致。如需追加运维或分区字段,可通过以下配置项控制:

预置类型 配置项 默认值 说明
运维字段 preset.etl.enabled false 是否追加 etl_timeetl_remark
分区字段 preset.partition.enabled false 是否追加 day_id
分区字段名 preset.partition.field day_id 分区字段名称

处理流程

Step 1: 解析输入并提取信息

1.1 输入文件处理

  • 如果用户传入的是文件路径:直接读取该文件
  • 如果用户传入的是目录路径
    • 列出目录下所有 REQ-DATA-*.md 文件
    • 按文件名中的日期时间戳排序YYYYMMDDHHMMSS 部分)
    • 自动选取最新的文件

1.2 读取并解析需求文档

读取 MD 文件,从数据需求技术规范文档中提取以下信息:

  1. 需求基础信息:需求编号、需求描述、需求提出方等
  2. 输出表信息:表名(中/英文)、数据目录、表描述
  3. 输出字段信息:字段名、字段类型、加工逻辑、来源表
  4. 数据源信息:库名、表名、字段信息

1.3 与用户确认关键信息(多轮对话)

在生成模型设计文档前,必须与用户确认以下关键信息:

请确认以下关键信息是否正确:

【输入文件】
- 文件路径:<file_path>
- 需求编号:<需求编号>

【输出表信息】
- 目标表名:<表英文名称>
- 表中文名称:<表中文名称>
- 数据目录:<数据目录>

【字段信息】
- 字段总数:<N> 个
- 分区字段:<day_id 等>
- 运行频次:<日/周/月等>

以上信息是否正确?如无误请回复"正确"或"继续",如有问题请指出需要修改的内容。

等待用户确认后才能继续生成。

输出文件命名规则

  • 直接从输入文件名转换,将前缀 REQ 替换为 MDDSModel Design Document Specification
  • 输入文件名:REQ-DATA-YYYYMMDDHHMMSS-XXX.md
  • 输出文件名:MDDS-DATA-YYYYMMDDHHMMSS-XXX.md
  • 示例:
    • 输入文件:REQ-DATA-20260316142709-001.md
    • 输出文件:MDDS-DATA-20260316142709-001.md

Step 2: 生成编排步骤(对应表 1

在用户确认关键信息后,根据字段加工逻辑和数据依赖关系,生成 SQL 编排步骤:

编排规则:
1. 识别数据依赖链:来源表 → 中间处理 → 目标表
2. 按处理复杂度拆分步骤,每步一个明确目标:
   - 简单场景2 步step01 清洗关联 → step02 补全写入
   - 中等场景3~4 步):增加中间聚合、多表关联等步骤
   - 复杂场景5~6 步):多层嵌套加工、多次关联转换等
3. 每步骤包含:编排内容解释、输入源表、加工字段口径、输出表名、输出表字段
4. 临时表命名:`${db_tmp_env}.${temp_table.prefix}${temp_table.suffix}`
   - `${db_tmp_env}` 保留占位符格式,不展开
   - `${temp_table.prefix}` 展开为实际值:`tmp_prj004_ads_rpt`
   - `${temp_table.suffix}` 展开为实际值:`_01`, `_02`...
   - 示例输出:`${db_tmp_env}.tmp_prj004_ads_rpt_01`
5. 目标表命名:`${db_eda_env}.${target_table.prefix}_xxx`
   - `${db_eda_env}` 保留占位符格式,不展开
   - `${target_table.prefix}` 展开为实际值:`prj004_ads_rpt`
   - `_xxx` 从需求文档"输出表名 - 表英文名称"提取(去掉库名后的表名部分)
   - 示例输出:`${db_eda_env}.prj004_ads_rpt_kfb_idx_rt`

字段填写说明

  • 步骤序号:按 step01, step02, step03... 顺序编号,步骤数根据加工复杂度决定
  • sql 编排内容解释AI 根据加工逻辑自然语言描述
  • 输入源表:从需求文档"所用数据源及字段"表提取
  • 加工字段口径:从需求文档"输出表字段 - 字段加工逻辑"提取并整理
  • 输出表名:最后一步输出目标表,中间步骤输出临时表
    • 临时表格式:${db_tmp_env}.tmp_prj004_ads_rpt_01${db_tmp_env}保留,内部前缀和 suffix 展开)
    • 目标表格式:${db_eda_env}.prj004_ads_rpt_xxx${db_eda_env}保留,内部前缀和表名展开)
  • 输出表字段:从需求文档"输出表字段"提取,逗号分隔

Step 3: 生成目标表属性(对应表 2

在用户确认编排步骤后,根据需求文档的表信息和默认配置生成:

映射规则:
- 数据目录 ← 需求文档"数据目录"字段(或 table_attr.data_catalog 默认值)
- 数据源 ← 需求文档涉及的源表业务主题(从输入提取)
- 表编码 ← 输出表英文名(从输入提取)
- 描述 ← 需求文档表描述(从输入提取)
- 数据源类型 ← table_attr.data_source_type
- 表名称 ← 输出表中文名称(从输入提取)
- 数据归口条线 ← table_attr.business_line
- 是否已上传至集团 ← table_attr.is_uploaded
- 是否可共享 ← table_attr.is_shareable
- 技术人员/电话 ← table_attr.tech_name/tech_phone
- 维护人员/电话 ← table_attr.maint_name/maint_phone
- 管理人员/电话 ← table_attr.mgr_name/mgr_phone
- 增量/全量 ← 根据运行频次映射 (table_attr.load_type)
- 是否有敏感信息 ← table_attr.has_sensitive

Step 4: 生成目标表字段(对应表 3

在用户确认目标表属性后,根据需求文档的字段信息进行转换:

映射规则:
1. 字段编码 ← 输出字段英文名(从输入提取)
2. 字段名称 ← 输出字段中文名(从输入提取)
3. 字段类型 ← 按"3.2 字段类型映射"转换
4. 字段分类 ← 按"3.3 字段分类规则"自动分类
5. 排序 ← 从 field.sort_start 开始自增
6. 是否自增 ← field.auto_increment
7. 是否需脱敏 ← field.mask_required
8. 描述 ← 字段业务含义 + 加工逻辑说明AI 整理)
9. 预置字段(默认不追加):
   - 运维字段:当 preset.etl.enabled=true 时追加 etl_time、etl_remark
   - 分区字段:当 preset.partition.enabled=true 时追加 day_id

输出模板结构

生成的模型设计文档遵循以下结构:

# 模型设计需求模板

## 1. 编排目标表生成流程

| 步骤序号 | sql 编排内容解释 | 输入源表 | 加工字段口径 | 输出表名 | 输出表字段 |
|----|----|----|----|----|----|
| step01 | ... | ... | ... | ... | ... |

## 2. 目标表属性信息

```json
{
  "${target_table_name}": {
    "data_catalog": "指标层 - 客户服务",
    "data_source": "投诉工单、组织机构",
    "table_code": "prj004_ads_rpt_xxx",
    "description": "表描述",
    "data_source_type": "paimon",
    "table_name": "表中文名称",
    "business_line": "客户服务部",
    "is_uploaded": "否",
    "is_shareable": "是",
    "tech_name": "张三",
    "tech_phone": "13800138000",
    "maint_name": "李四",
    "maint_phone": "13900139000",
    "mgr_name": "王五",
    "mgr_phone": "13700137000",
    "load_type": "增量",
    "has_sensitive": "否"
  }
}

3. 目标表字段信息

{
  "${target_table_name}": [
    {
      "field_code": "字段英文名",
      "field_name": "字段中文名",
      "field_type": "STRING",
      "field_category": "维度",
      "sort_order": 1,
      "is_auto_increment": "否",
      "mask_required": "否",
      "description": "字段业务含义和加工规则说明"
    }
  ]
}

版本信息

  • 技能版本v2.1
  • 创建日期2026-04-08
  • 更新日期2026-04-10
  • 适用场景:电信数据仓库 ADS 层模型设计
  • 输入模板版本:数据需求技术规范文档 v5
  • 输出模板版本:模型设计技术规范文档 v1
  • 新增功能
    • 支持目录路径输入,自动选取最新日期的需求文档
    • 多轮对话引导,分步确认关键信息

使用示例

调用方式

场景 1用户传入具体文件路径

用户:请根据 202604/skills_design/v2/data/REQ-DATA-20260409142709-001.md 生成模型设计文档

场景 2用户传入目录路径自动选取最新文件

用户:请根据 202604/skills_design/v2/data/ 目录下的需求文档生成模型设计

多轮对话流程示例

【Step 1】技能解析输入文件后输出关键信息请用户确认
---
请确认以下关键信息是否正确:

【输入文件】
- 文件路径202604/skills_design/v2/data/REQ-DATA-20260409142709-001.md
- 需求编号REQ-DATA-20260409142709-001

【输出表信息】
- 目标表名prj004_ads_rpt_kfb_idx_rt
- 表中文名称:投诉处理地投诉受理量表
- 数据目录:上海电信/大数据中心 - 数据安全团队/大数据中心 - 数据安全团队应用层

【字段信息】
- 字段总数34 个
- 分区字段day_id
- 运行频次:日

以上信息是否正确?如无误请回复"正确"或"继续",如有问题请指出需要修改的内容。
---

【用户】正确

【Step 2】技能生成编排步骤后请用户确认
---
编排步骤已生成,共 2 步:
- step01: 关联投诉源表与组织架构维表...
- step02: 补全指标表标准字段格式...

以上编排步骤是否正确?
---

【用户】正确

【Step 3-4】技能继续生成目标表属性和字段信息最终输出完整文档

输出示例

技能将输出完整的模型设计技术规范文档,包含编排步骤、表属性、字段设计等。


注意事项

  1. 多轮对话确认:生成过程中必须分步与用户确认关键信息,用户确认后才能继续下一步
    • Step 1 后:确认输入文件和输出表信息
    • Step 2 后:确认编排步骤
    • Step 3 后:确认目标表属性和字段信息
  2. 自动选取最新文件:当用户传入目录路径时,按文件名中的 YYYYMMDDHHMMSS 部分排序,选取最新的 REQ-DATA-*.md 文件
  3. 环境变量占位符:输出表名中的 ${db_tmp_env}${db_eda_env} 需保留占位符格式,运行时由外部环境替换
  4. 内部配置变量展开${temp_table.prefix}${temp_table.suffix}${target_table.prefix} 需展开为实际值输出
    • temp_table.prefixtmp_prj004_ads_rpt
    • temp_table.suffix_01, _02...(按步骤序号)
    • target_table.prefixprj004_ads_rpt
  5. 输出表名示例
    • 临时表正确输出:${db_tmp_env}.tmp_prj004_ads_rpt_01 错误:${db_tmp_env}.${temp_table.prefix}${temp_table.suffix}
    • 目标表正确输出:${db_eda_env}.prj004_ads_rpt_kfb_idx_rt 错误:${db_eda_env}.${target_table.prefix}_kfb_idx_rt
  6. 输出文件命名:直接从输入文件名转换,将 REQ 前缀替换为 MDDS
    • 输入文件:REQ-DATA-20260316142709-001.md → 输出文件:MDDS-DATA-20260316142709-001.md
  7. 字段排序:从 1 开始连续自增,确保无跳号
  8. 命名规范:所有表名、字段名使用 snake_case 格式
  9. 字段一致性:目标表字段默认与需求文档"输出表字段"保持一致,不追加额外字段
  10. 预置字段:如需追加运维字段 (etl_time、etl_remark) 或分区字段 (day_id),需将对应配置项设为 true