19 KiB
19 KiB
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 格式文本(模型设计技术规范文档)
- 输出内容:
- 编排目标表生成流程(SQL 编排步骤)- Markdown 表格
- 目标表属性信息 - JSON 格式
- 目标表字段信息 - 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 |
可选值:paimon、hive、mysql 等 |
| 表名称 | 从需求文档"输出表名 - 表中文名称"提取 | 无,从输入提取 | 输出表的中文表名 |
| 数据归口条线 | 从需求文档"需求提出方"映射 | 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 字段分类规则配置
| 字段分类 | 识别特征(字段名/业务含义) | 配置项 | 示例 |
|---|---|---|---|
| 标识字段 | 含 id、code、nbr、唯一标识类 |
class.identifier.keys=id,code,nbr |
idx_nbr、complaint_id、org_id |
| 维度字段 | 名称类 (name)、类型类 (type)、描述类 |
class.dimension.keys=name,type,desc |
dept_name、bureau_name、complaint_type |
| 指标字段 | 数值类、统计类、含 num/amt/value/cnt |
class.metric.keys=num,amt,value,cnt |
complaint_accept_num、idx_value |
| 分区字段 | 含 day_id、stat_date、dt、date |
class.partition.keys=day_id,stat_date,dt,date |
day_id、stat_date |
3.4 预置字段配置(可选追加)
说明:默认不追加预置字段,目标表字段与需求文档"输出表字段"保持一致。如需追加运维或分区字段,可通过以下配置项控制:
| 预置类型 | 配置项 | 默认值 | 说明 |
|---|---|---|---|
| 运维字段 | preset.etl.enabled |
false |
是否追加 etl_time、etl_remark |
| 分区字段 | preset.partition.enabled |
false |
是否追加 day_id |
| 分区字段名 | preset.partition.field |
day_id |
分区字段名称 |
处理流程
Step 1: 解析输入并提取信息
1.1 输入文件处理
- 如果用户传入的是文件路径:直接读取该文件
- 如果用户传入的是目录路径:
- 列出目录下所有
REQ-DATA-*.md文件 - 按文件名中的日期时间戳排序(YYYYMMDDHHMMSS 部分)
- 自动选取最新的文件
- 列出目录下所有
1.2 读取并解析需求文档
读取 MD 文件,从数据需求技术规范文档中提取以下信息:
- 需求基础信息:需求编号、需求描述、需求提出方等
- 输出表信息:表名(中/英文)、数据目录、表描述
- 输出字段信息:字段名、字段类型、加工逻辑、来源表
- 数据源信息:库名、表名、字段信息
1.3 与用户确认关键信息(多轮对话)
在生成模型设计文档前,必须与用户确认以下关键信息:
请确认以下关键信息是否正确:
【输入文件】
- 文件路径:<file_path>
- 需求编号:<需求编号>
【输出表信息】
- 目标表名:<表英文名称>
- 表中文名称:<表中文名称>
- 数据目录:<数据目录>
【字段信息】
- 字段总数:<N> 个
- 分区字段:<day_id 等>
- 运行频次:<日/周/月等>
以上信息是否正确?如无误请回复"正确"或"继续",如有问题请指出需要修改的内容。
等待用户确认后才能继续生成。
输出文件命名规则:
- 直接从输入文件名转换,将前缀
REQ替换为MDDS(Model 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】技能继续生成目标表属性和字段信息,最终输出完整文档
输出示例
技能将输出完整的模型设计技术规范文档,包含编排步骤、表属性、字段设计等。
注意事项
- 多轮对话确认:生成过程中必须分步与用户确认关键信息,用户确认后才能继续下一步
- Step 1 后:确认输入文件和输出表信息
- Step 2 后:确认编排步骤
- Step 3 后:确认目标表属性和字段信息
- 自动选取最新文件:当用户传入目录路径时,按文件名中的
YYYYMMDDHHMMSS部分排序,选取最新的REQ-DATA-*.md文件 - 环境变量占位符:输出表名中的
${db_tmp_env}和${db_eda_env}需保留占位符格式,运行时由外部环境替换 - 内部配置变量展开:
${temp_table.prefix}、${temp_table.suffix}、${target_table.prefix}需展开为实际值输出temp_table.prefix→tmp_prj004_ads_rpttemp_table.suffix→_01,_02...(按步骤序号)target_table.prefix→prj004_ads_rpt
- 输出表名示例:
- 临时表正确输出:
${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
- 临时表正确输出:
- 输出文件命名:直接从输入文件名转换,将
REQ前缀替换为MDDS- 输入文件:
REQ-DATA-20260316142709-001.md→ 输出文件:MDDS-DATA-20260316142709-001.md
- 输入文件:
- 字段排序:从 1 开始连续自增,确保无跳号
- 命名规范:所有表名、字段名使用 snake_case 格式
- 字段一致性:目标表字段默认与需求文档"输出表字段"保持一致,不追加额外字段
- 预置字段:如需追加运维字段 (etl_time、etl_remark) 或分区字段 (day_id),需将对应配置项设为
true