Add one-skill
This commit is contained in:
666
one-skill/smart-data-developer/agents/model-design-generator.md
Normal file
666
one-skill/smart-data-developer/agents/model-design-generator.md
Normal file
@@ -0,0 +1,666 @@
|
||||
---
|
||||
name: model-design-generator
|
||||
description: 根据数据需求技术规范文档生成模型设计技术规范文档
|
||||
---
|
||||
|
||||
# 模型设计技能 (Model Design Skill)
|
||||
|
||||
## 技能描述
|
||||
|
||||
本技能根据**数据需求技术规范文档**,自动生成对应的**模型设计技术规范文档**,包含 SQL 编排步骤、目标表属性信息、目标表字段信息等完整设计内容。
|
||||
|
||||
**使用说明**:
|
||||
- 技能加载后**自动**从 `./ai_text/` 目录选取最新的需求文档并开始处理
|
||||
- 不要询问用户是否使用默认路径,直接自动处理
|
||||
- 如用户主动传入文件路径或目录路径,则使用用户指定的路径
|
||||
|
||||
## 输入输出
|
||||
|
||||
### 输入
|
||||
- **输入类型**:MD 文件路径(可选)
|
||||
- **输入来源**:
|
||||
- 默认:自动从当前目录下的 `ai_text` 文件夹选取最新的 `REQ-DATA-*.md` 文件
|
||||
- 用户传入文件路径:使用指定文件
|
||||
- 用户传入目录路径:从指定目录选取最新的 `REQ-DATA-*.md` 文件
|
||||
- **输入示例**:
|
||||
- 不传参数:自动使用 `./ai_text/REQ-DATA-*.md` 中最新的文件
|
||||
- 文件路径:`202604/skills_design/v2/data/REQ-DATA-20260409142709-001.md`
|
||||
- 目录路径:`202604/skills_design/v2/data/` → 自动选取最新的 `REQ-DATA-*.md` 文件
|
||||
- **重要**:不要询问用户选择输入方式,直接按上述规则自动处理
|
||||
|
||||
### 输出
|
||||
- **输出类型**:Markdown + JSON 格式文本(模型设计技术规范文档)
|
||||
- **输出目录**:
|
||||
- 如果用户指定了输出目录:使用用户指定的目录
|
||||
- 如果用户未指定输出目录:默认为当前工作目录下的 `ai_text` 文件夹
|
||||
- **输出内容**:
|
||||
1. 编排目标表生成流程(SQL 编排步骤)- Markdown 表格
|
||||
2. 目标表属性信息 - JSON 格式
|
||||
3. 目标表字段信息 - JSON 格式
|
||||
|
||||
---
|
||||
|
||||
## 可配置参数
|
||||
|
||||
以下参数按**输出模板的表结构**组织,方便后续统一修改:
|
||||
|
||||
---
|
||||
|
||||
### 表 1:编排目标表生成流程 - 字段规则与配置
|
||||
|
||||
输出模板字段:`步骤序号 | sql 编排内容解释 | 输入源表 | 加工字段口径 | 输出表名 | 输出表字段`
|
||||
|
||||
| 输出字段 | 填写规则 | 默认值/配置项 | 说明 |
|
||||
|----------|----------|---------------|------|
|
||||
| 步骤序号 | 按 `step01`, `step02`, `step03`... 顺序编号,步骤数根据加工复杂度决定 | 无,按步骤生成 | 标识处理步骤顺序 |
|
||||
| sql 编排内容解释 | 根据加工逻辑自然语言描述 | 无,AI 生成 | 描述该步骤的加工目的和操作 |
|
||||
| 输入源表 | 从需求文档"所用数据源及字段"表提取 | 无,从输入提取 | 该步骤依赖的源表列表 |
|
||||
| 加工字段口径 | 从需求文档"输出表字段 - 字段加工逻辑"提取并整理 | 无,从输入提取 | 字段的加工规则说明 |
|
||||
| 输出表名 | 临时表:`${db_tmp_env}.${temp_table.prefix}${temp_table.suffix}`<br>目标表:`${db_eda_env}.${target_table.prefix}_xxx` | `db_tmp_env`(**保留占位符**)<br>`db_eda_env`(**保留占位符**)<br>`temp_table.prefix=tmp_prj004_ads_rpt`(**展开为实际值**)<br>`temp_table.suffix=_01,_02...`(**展开为实际值**)<br>`target_table.prefix=prj004_ads_rpt`(**展开为实际值**) | 最后一步输出目标表,中间步骤输出临时表;**输出时内部变量需展开,外部变量保留** |
|
||||
| 输出表字段 | 从需求文档"输出表字段"提取,逗号分隔 | 无,从输入提取 | 该步骤产出的字段列表 |
|
||||
|
||||
---
|
||||
|
||||
### 表 2:目标表属性信息 - 字段规则与配置
|
||||
|
||||
输出模板字段:`数据目录 | 数据源 | 表编码 | 描述 | 数据源类型 | 表名称 | 数据归口条线 | 是否已上传至集团 | 是否可共享 | 技术人员 | 技术人员电话 | 维护人员 | 维护人员电话 | 管理人员 | 管理人员电话 | 增量/全量 | 是否有敏感信息`
|
||||
|
||||
| 输出字段 | 填写规则 | 说明 |
|
||||
|----------|----------|------|
|
||||
| 数据目录 | 从需求文档"输出表名 - 数据目录"提取 | 表的业务分类归属 |
|
||||
| 数据源 | 从需求文档"所用数据源及字段"涉及的源表归纳 | 描述数据来源,如"投诉工单、组织机构" |
|
||||
| 表编码 | 从需求文档"输出表名 - 表英文名称"提取 | 输出表的英文表名 |
|
||||
| 描述 | 从需求文档"输出表名 - 表描述"提取 | 表的业务含义描述 |
|
||||
| 数据源类型 | 固定值:`paimon` | 统一使用 paimon |
|
||||
| 表名称 | 从需求文档"输出表名 - 表中文名称"提取 | 输出表的中文表名 |
|
||||
| 数据归口条线 | 从需求文档"需求提出方"提取(如"市场部"→"市场部") | 业务归属部门 |
|
||||
| 是否已上传至集团 | 固定值:`否` | - |
|
||||
| 是否可共享 | 固定值:`是` | - |
|
||||
| 技术人员 | 固定值:`张三` | - |
|
||||
| 技术人员电话 | 固定值:`13800138000` | - |
|
||||
| 维护人员 | 固定值:`李四` | - |
|
||||
| 维护人员电话 | 固定值:`13900139000` | - |
|
||||
| 管理人员 | 固定值:`王五` | - |
|
||||
| 管理人员电话 | 固定值:`13700137000` | - |
|
||||
| 增量/全量 | 根据运行频次自动映射:日/周/月 → `增量`,其他 → `全量` | - |
|
||||
| 是否有敏感信息 | 固定值:`否` | - |
|
||||
|
||||
---
|
||||
|
||||
### 表 3:目标表字段信息 - 字段规则与配置
|
||||
|
||||
输出模板字段:`字段编码 | 字段名称 | 字段类型 | 字段分类 | 排序 | 是否自增 | 是否需脱敏 | 描述`
|
||||
|
||||
#### 3.1 各输出字段规则总览
|
||||
|
||||
| 输出字段 | 填写规则 | 说明 |
|
||||
|----------|----------|------|
|
||||
| 字段编码 | 从需求文档"输出表字段 - 输出字段英文名"提取 | 字段英文名,snake_case 格式 |
|
||||
| 字段名称 | 从需求文档"输出表字段 - 输出字段中文名"提取 | 字段中文名 |
|
||||
| 字段类型 | 按"3.2 字段类型映射"转换 | 需求类型→数据库类型 |
|
||||
| 字段分类 | 按"3.3 字段分类规则"自动识别 | 维度/标识/指标/分区 |
|
||||
| 排序 | 从 1 开始自增 | 连续递增,无跳号 |
|
||||
| 是否自增 | 固定值:`否` | - |
|
||||
| 是否需脱敏 | 固定值:`否` | - |
|
||||
| 描述 | 从需求文档"字段业务含义"+"加工逻辑"整理 | 字段含义 + 加工规则说明 |
|
||||
|
||||
#### 3.2 字段类型映射
|
||||
|
||||
| 需求文档类型 | 目标数据库类型 | 说明 |
|
||||
|--------------|----------------|------|
|
||||
| string | `STRING` | 字符串类型 |
|
||||
| bigint | `BIGINT` | 大整数 |
|
||||
| int | `INT` | 整数 |
|
||||
| timestamp | `TIMESTAMP` | 时间戳 |
|
||||
| date | `STRING` | 日期(格式 yyyy-MM-dd) |
|
||||
| double/decimal | `DECIMAL(18,2)` | 小数 |
|
||||
|
||||
#### 3.3 字段分类规则
|
||||
|
||||
| 字段分类 | 识别特征(字段名/业务含义) | 示例 |
|
||||
|----------|----------------------------|------|
|
||||
| 标识字段 | 含 `id`、`code`、`nbr`、唯一标识类 | `idx_nbr`、`complaint_id`、`org_id` |
|
||||
| 维度字段 | 名称类 (`name`)、类型类 (`type`)、描述类 | `dept_name`、`bureau_name`、`complaint_type` |
|
||||
| 指标字段 | 数值类、统计类、含 `num`/`amt`/`value`/`cnt` | `complaint_accept_num`、`idx_value` |
|
||||
| 分区字段 | 含 `day_id`、`stat_date`、`dt`、`date` | `day_id`、`stat_date` |
|
||||
|
||||
#### 3.4 预置字段(可选追加)
|
||||
|
||||
**说明**:默认不追加预置字段,目标表字段与需求文档"输出表字段"保持一致。如需追加运维或分区字段,可手动控制:
|
||||
|
||||
| 预置类型 | 默认行为 | 说明 |
|
||||
|----------|----------|------|
|
||||
| 运维字段 | 不追加 | 如需追加 `etl_time`、`etl_remark`,手动添加 |
|
||||
| 分区字段 | 不追加 | 如需追加 `day_id`,手动添加 |
|
||||
|
||||
## 处理流程
|
||||
|
||||
### Step 1: 解析输入并提取信息
|
||||
|
||||
**1.1 输入文件处理**
|
||||
|
||||
- 默认:自动从当前目录下的 `ai_text` 文件夹选取最新的 `REQ-DATA-*.md` 文件
|
||||
- 如果用户指定了文件路径:直接使用该文件
|
||||
- 如果用户指定了目录路径:从指定目录选取最新的 `REQ-DATA-*.md` 文件
|
||||
- **不要询问用户选择输入方式**,直接按上述规则自动处理
|
||||
|
||||
**1.2 读取并解析需求文档**
|
||||
|
||||
读取 MD 文件,从数据需求技术规范文档中提取以下信息:
|
||||
|
||||
1. **需求基础信息**:需求编号、需求描述、需求提出方等
|
||||
2. **输出表信息**:表名(中/英文)、数据目录、表描述
|
||||
3. **输出字段信息**:字段名、字段类型、加工逻辑、来源表
|
||||
4. **数据源信息**:库名、表名、字段信息
|
||||
|
||||
**1.3 输入/输出目录处理**
|
||||
|
||||
- 输入目录:默认使用当前目录下的 `ai_text` 文件夹
|
||||
- 输出目录:默认使用当前目录下的 `ai_text` 文件夹
|
||||
- 输入/输出目录无需用户确认,按默认路径处理
|
||||
|
||||
**1.4 与用户确认关键信息(多轮对话)**
|
||||
|
||||
在生成模型设计文档前,**必须**与用户确认以下关键信息:
|
||||
|
||||
```
|
||||
请确认以下关键信息是否正确:
|
||||
|
||||
【需求编号】
|
||||
- 需求编号:<需求编号>
|
||||
|
||||
【输出表信息】
|
||||
- 目标表名:<表英文名称>
|
||||
- 表中文名称:<表中文名称>
|
||||
- 数据目录:<数据目录>
|
||||
|
||||
【字段信息】
|
||||
- 字段总数:<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}`保留,内部前缀和表名展开)
|
||||
- 输出表字段:从需求文档"输出表字段"提取,逗号分隔
|
||||
|
||||
**编排流程校验(重要)**:
|
||||
|
||||
生成编排步骤后,**必须**分步进行校验,每步校验后都要等待用户确认:
|
||||
|
||||
**第一步:数据依赖链校验**
|
||||
|
||||
```
|
||||
【数据依赖链校验】
|
||||
|
||||
请确认以下数据依赖关系是否正确:
|
||||
|
||||
| 步骤 | 输入源表 | 来源说明 |
|
||||
|------|----------|----------|
|
||||
| step01 | [源表名称] | 外部数据源 |
|
||||
| step02 | ${db_tmp_env}.tmp_prj004_ads_rpt_01 | step01 输出 |
|
||||
| ... | ... | ... |
|
||||
| 最后一步 | ${db_eda_env}.prj004_ads_rpt_xxx | 目标表 |
|
||||
|
||||
数据依赖链是否正确?如无误请回复"正确"或"继续",如有问题请指出。
|
||||
```
|
||||
|
||||
**等待用户确认数据依赖链后,再进行第二步校验。**
|
||||
|
||||
**第二步:字段流转校验**
|
||||
|
||||
```
|
||||
【字段流转校验】
|
||||
|
||||
请确认以下字段流转是否正确:
|
||||
|
||||
目标表字段总数:N 个
|
||||
|
||||
| 字段编码 | 字段名称 | 来源追溯 |
|
||||
|----------|----------|----------|
|
||||
| stat_month | 统计月份 | 从 install_dt 提取(step01 输入源表) |
|
||||
| customer_id | 客户 ID | own_cust_id(step01 输入源表) |
|
||||
| ... | ... | ... |
|
||||
|
||||
字段流转是否正确?如无误请回复"正确"或"继续",如有问题请指出。
|
||||
```
|
||||
|
||||
**两步校验都通过后,才能继续生成目标表属性。**
|
||||
|
||||
**用户确认环节**:
|
||||
|
||||
校验通过后,分步向用户展示校验内容:
|
||||
|
||||
**第一步:数据依赖链确认**
|
||||
|
||||
```
|
||||
编排步骤已生成,共 N 步:
|
||||
|
||||
| 步骤序号 | sql 编排内容解释 | 输入源表 | 加工字段口径 | 输出表名 | 输出表字段 |
|
||||
|----|----|----|----|----|----|
|
||||
| step01 | ... | ... | ... | ... | ... |
|
||||
| step02 | ... | ... | ... | ... | ... |
|
||||
|
||||
【数据依赖链校验】
|
||||
|
||||
| 步骤 | 输入源表 | 来源说明 |
|
||||
|------|----------|----------|
|
||||
| step01 | [源表名称] | 外部数据源 |
|
||||
| step02 | ${db_tmp_env}.tmp_prj004_ads_rpt_01 | step01 输出 |
|
||||
| 最后一步 | ${db_eda_env}.prj004_ads_rpt_xxx | 目标表 |
|
||||
|
||||
数据依赖链是否正确?如无误请回复"正确"或"继续",如有问题请指出。
|
||||
```
|
||||
|
||||
**等待用户确认数据依赖链后,再进行第二步。**
|
||||
|
||||
**第二步:字段流转确认**
|
||||
|
||||
```
|
||||
【字段流转校验】
|
||||
|
||||
目标表字段总数:N 个
|
||||
|
||||
| 字段编码 | 字段名称 | 来源追溯 |
|
||||
|----------|----------|----------|
|
||||
| stat_month | 统计月份 | 从 install_dt 提取(step01 输入源表) |
|
||||
| customer_id | 客户 ID | own_cust_id(step01 输入源表) |
|
||||
| ... | ... | ... |
|
||||
|
||||
字段流转是否正确?如无误请回复"正确"或"继续",如有问题请指出。
|
||||
```
|
||||
|
||||
**等待用户确认字段流转后,才能继续生成。**
|
||||
|
||||
### Step 3: 生成目标表属性(对应表 2)
|
||||
|
||||
**在数据依赖链校验和字段流转校验都通过后**,根据需求文档的表信息生成:
|
||||
|
||||
```
|
||||
映射规则:
|
||||
- 数据目录 ← 需求文档"数据目录"字段
|
||||
- 数据源 ← 需求文档涉及的源表业务主题(从输入提取)
|
||||
- 表编码 ← 输出表英文名(从输入提取)
|
||||
- 描述 ← 需求文档表描述(从输入提取)
|
||||
- 数据源类型 ← 固定值 "paimon"
|
||||
- 表名称 ← 输出表中文名称(从输入提取)
|
||||
- 数据归口条线 ← 需求文档"需求提出方"(如"市场部"→"市场部")
|
||||
- 是否已上传至集团 ← 固定值 "否"
|
||||
- 是否可共享 ← 固定值 "是"
|
||||
- 技术人员/电话 ← 固定值 "张三"/"13800138000"
|
||||
- 维护人员/电话 ← 固定值 "李四"/"13900139000"
|
||||
- 管理人员/电话 ← 固定值 "王五"/"13700137000"
|
||||
- 增量/全量 ← 日/周/月 → "增量",其他 → "全量"
|
||||
- 是否有敏感信息 ← 固定值 "否"
|
||||
```
|
||||
|
||||
**用户确认环节**:
|
||||
|
||||
生成目标表属性后,请用户确认:
|
||||
|
||||
```
|
||||
目标表属性信息已生成:
|
||||
|
||||
```json
|
||||
{
|
||||
"${target_table_name}": {
|
||||
"data_catalog": "...",
|
||||
"data_source": "...",
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
以上目标表属性信息是否正确?如无误请回复"正确"或"继续"。
|
||||
```
|
||||
|
||||
**等待用户确认后才能继续生成。**
|
||||
|
||||
### Step 4: 生成目标表字段(对应表 3)
|
||||
|
||||
**在用户确认目标表属性后**,根据需求文档的字段信息进行转换:
|
||||
|
||||
```
|
||||
映射规则:
|
||||
1. 字段编码 ← 输出字段英文名(从输入提取)
|
||||
2. 字段名称 ← 输出字段中文名(从输入提取)
|
||||
3. 字段类型 ← 按"3.2 字段类型映射"转换
|
||||
4. 字段分类 ← 按"3.3 字段分类规则"自动分类
|
||||
5. 排序 ← 从 1 开始自增
|
||||
6. 是否自增 ← 固定值 "否"
|
||||
7. 是否需脱敏 ← 固定值 "否"
|
||||
8. 描述 ← 字段业务含义 + 加工逻辑说明(AI 整理)
|
||||
9. 预置字段(默认不追加):
|
||||
- 运维字段:如需追加 etl_time、etl_remark,手动添加
|
||||
- 分区字段:如需追加 day_id,手动添加
|
||||
```
|
||||
|
||||
**最终确认环节**:
|
||||
|
||||
生成目标表字段后,请用户进行最终确认:
|
||||
|
||||
```
|
||||
目标表字段信息已生成,共 N 个字段:
|
||||
|
||||
```json
|
||||
{
|
||||
"${target_table_name}": [
|
||||
{
|
||||
"field_code": "字段英文名",
|
||||
"field_name": "字段中文名",
|
||||
"field_type": "STRING",
|
||||
"field_category": "维度",
|
||||
...
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
以上目标表字段信息是否正确?如无误请回复"正确"或"继续"。
|
||||
```
|
||||
|
||||
**等待用户最终确认后,生成并输出完整的模型设计文档。**
|
||||
|
||||
---
|
||||
|
||||
## 输出模板结构
|
||||
|
||||
生成的模型设计文档遵循以下结构:
|
||||
|
||||
```markdown
|
||||
# 模型设计需求模板
|
||||
|
||||
## 1. 编排目标表生成流程
|
||||
|
||||
| 步骤序号 | sql 编排内容解释 | 输入源表 | 加工字段口径 | 输出表名 | 输出表字段 |
|
||||
|----|----|----|----|----|----|
|
||||
| step01 | ... | ... | ... | ... | ... |
|
||||
|
||||
## 2. 目标表属性信息
|
||||
|
||||
```json
|
||||
{
|
||||
"${target_table_name}": {
|
||||
"data_catalog": "从需求文档提取",
|
||||
"data_source": "从输入提取",
|
||||
"table_code": "从输入提取",
|
||||
"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. 目标表字段信息
|
||||
|
||||
```json
|
||||
{
|
||||
"${target_table_name}": [
|
||||
{
|
||||
"field_code": "字段英文名",
|
||||
"field_name": "字段中文名",
|
||||
"field_type": "STRING",
|
||||
"field_category": "维度",
|
||||
"sort_order": 1,
|
||||
"is_auto_increment": "否",
|
||||
"mask_required": "否",
|
||||
"description": "字段业务含义和加工规则说明"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 版本信息
|
||||
|
||||
- **技能版本**:v2.4
|
||||
- **创建日期**:2026-04-08
|
||||
- **更新日期**:2026-04-17
|
||||
- **适用场景**:电信数据仓库 ADS 层模型设计
|
||||
- **输入模板版本**:数据需求技术规范文档 v5
|
||||
- **输出模板版本**:模型设计技术规范文档 v1
|
||||
- **新增功能**:
|
||||
- 默认自动从 `./ai_text/` 目录选取最新需求文档
|
||||
- 支持目录路径输入,自动选取最新日期的需求文档
|
||||
- 多轮对话引导,分步确认关键信息
|
||||
- 默认输出目录为 `./ai_text/`(用户未指定时)
|
||||
- 编排流程校验分步执行(数据依赖链校验 → 字段流转校验)
|
||||
|
||||
---
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 调用方式
|
||||
|
||||
**场景 1:默认调用(推荐)**
|
||||
|
||||
技能加载后自动从 `./ai_text/` 目录选取最新的需求文档,无需用户传入参数。
|
||||
|
||||
```
|
||||
用户:加载模型设计技能
|
||||
→ 技能自动从 ./ai_text/ 选取最新的 REQ-DATA-*.md 文件
|
||||
```
|
||||
|
||||
**场景 2:用户传入具体文件路径**
|
||||
|
||||
```
|
||||
用户:请根据 202604/skills_design/v2/data/REQ-DATA-20260409142709-001.md 生成模型设计文档
|
||||
```
|
||||
|
||||
**场景 3:用户传入目录路径,自动选取最新文件**
|
||||
|
||||
```
|
||||
用户:请根据 202604/skills_design/v2/data/ 目录下的需求文档生成模型设计
|
||||
```
|
||||
|
||||
### 多轮对话流程示例
|
||||
|
||||
```
|
||||
【Step 1】技能解析输入文件后,输出关键信息请用户确认:
|
||||
---
|
||||
请确认以下关键信息是否正确:
|
||||
|
||||
【需求编号】
|
||||
- 需求编号:REQ-DATA-20260409142709-001
|
||||
|
||||
【输出表信息】
|
||||
- 目标表名:prj004_ads_rpt_kfb_idx_rt
|
||||
- 表中文名称:投诉处理地投诉受理量表
|
||||
- 数据目录:上海电信/大数据中心 - 数据安全团队/大数据中心 - 数据安全团队应用层
|
||||
|
||||
【字段信息】
|
||||
- 字段总数:34 个
|
||||
- 分区字段:day_id
|
||||
- 运行频次:日
|
||||
|
||||
以上信息是否正确?如无误请回复"正确"或"继续",如有问题请指出需要修改的内容。
|
||||
---
|
||||
|
||||
【用户】正确
|
||||
|
||||
【Step 2a】技能生成编排步骤后,先进行数据依赖链校验:
|
||||
---
|
||||
编排步骤已生成,共 2 步:
|
||||
|
||||
| 步骤序号 | sql 编排内容解释 | 输入源表 | 加工字段口径 | 输出表名 | 输出表字段 |
|
||||
|----|----|----|----|----|----|
|
||||
| step01 | 关联投诉源表与组织架构维表,清洗无效数据 | 投诉源表、组织机构表 | 按部门、类型分组统计 | ${db_tmp_env}.tmp_prj004_ads_rpt_01 | dept_id, dept_name, complaint_type, ... |
|
||||
| step02 | 补全指标表标准字段格式,写入目标表 | ${db_tmp_env}.tmp_prj004_ads_rpt_01 | 增加统计日期、指标名称等标准字段 | ${db_eda_env}.prj004_ads_rpt_kfb_idx_rt | day_id, stat_date, dept_id, ... |
|
||||
|
||||
【数据依赖链校验】
|
||||
|
||||
| 步骤 | 输入源表 | 来源说明 |
|
||||
|------|----------|----------|
|
||||
| step01 | 投诉源表、组织机构表 | 外部数据源 |
|
||||
| step02 | ${db_tmp_env}.tmp_prj004_ads_rpt_01 | step01 输出 |
|
||||
| 最后一步 | ${db_eda_env}.prj004_ads_rpt_kfb_idx_rt | 目标表 |
|
||||
|
||||
数据依赖链是否正确?如无误请回复"正确"或"继续",如有问题请指出。
|
||||
---
|
||||
|
||||
【用户】正确
|
||||
|
||||
【Step 2b】数据依赖链确认后,再进行字段流转校验:
|
||||
---
|
||||
【字段流转校验】
|
||||
|
||||
目标表字段总数:34 个
|
||||
|
||||
| 字段编码 | 字段名称 | 来源追溯 |
|
||||
|----------|----------|----------|
|
||||
| day_id | 统计日期 ID | 从 step01 输入源表提取 |
|
||||
| stat_date | 统计日期 | 从 step01 输入源表提取 |
|
||||
| dept_id | 部门 ID | 从 step01 输入源表提取 |
|
||||
| ... | ... | ... |
|
||||
|
||||
字段流转是否正确?如无误请回复"正确"或"继续",如有问题请指出。
|
||||
---
|
||||
|
||||
【用户】正确
|
||||
|
||||
【Step 3】技能生成目标表属性后,请用户确认:
|
||||
---
|
||||
目标表属性信息已生成:
|
||||
|
||||
```json
|
||||
{
|
||||
"prj004_ads_rpt_kfb_idx_rt": {
|
||||
"data_catalog": "上海电信/大数据中心 - 数据安全团队/大数据中心 - 数据安全团队应用层",
|
||||
"data_source": "投诉工单、组织机构",
|
||||
"table_code": "prj004_ads_rpt_kfb_idx_rt",
|
||||
"description": "投诉处理地投诉受理量表",
|
||||
"data_source_type": "paimon",
|
||||
"table_name": "投诉处理地投诉受理量表",
|
||||
"business_line": "市场部",
|
||||
"load_type": "增量"
|
||||
...
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
以上目标表属性信息是否正确?如无误请回复"正确"或"继续"。
|
||||
---
|
||||
|
||||
【用户】正确
|
||||
|
||||
【Step 4】技能生成目标表字段后,请用户进行最终确认:
|
||||
---
|
||||
目标表字段信息已生成,共 34 个字段:
|
||||
|
||||
```json
|
||||
{
|
||||
"prj004_ads_rpt_kfb_idx_rt": [
|
||||
{
|
||||
"field_code": "day_id",
|
||||
"field_name": "统计日期 ID",
|
||||
"field_type": "STRING",
|
||||
"field_category": "分区",
|
||||
...
|
||||
}
|
||||
...
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
以上目标表字段信息是否正确?如无误请回复"正确"或"继续"。
|
||||
---
|
||||
|
||||
【用户】正确
|
||||
|
||||
【最终输出】技能生成完整的模型设计技术规范文档,输出到 ./ai_text/MDDS-DATA-20260409142709-001.md
|
||||
```
|
||||
|
||||
### 输出示例
|
||||
|
||||
技能将输出完整的模型设计技术规范文档,包含编排步骤、表属性、字段设计等。
|
||||
|
||||
---
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **多轮对话确认**:生成过程中必须分步与用户确认关键信息,用户确认后才能继续下一步
|
||||
- Step 1 后:确认需求编号、输出表信息、字段信息
|
||||
- Step 2a 后:确认数据依赖链校验
|
||||
- Step 2b 后:确认字段流转校验
|
||||
- Step 3 后:确认目标表属性信息
|
||||
- Step 4 后:确认目标表字段信息
|
||||
2. **默认输入目录**:默认使用当前目录下的 `ai_text` 文件夹,自动选取最新的 `REQ-DATA-*.md` 文件
|
||||
- 输入路径示例:`./ai_text/REQ-DATA-20260409142709-001.md`
|
||||
3. **默认输出目录**:默认使用当前目录下的 `ai_text` 文件夹
|
||||
- 输出路径示例:`./ai_text/MDDS-DATA-20260409142709-001.md`
|
||||
- 输入输出目录无需用户确认
|
||||
4. **编排流程校验**:Step 2 生成编排步骤后,必须分两步执行校验
|
||||
- Step 2a:数据依赖链校验(逐项展示步骤输入来源,用户确认)
|
||||
- Step 2b:字段流转校验(逐项展示字段来源追溯,用户确认)
|
||||
- 两步校验都通过后,才能继续生成目标表属性和字段信息
|
||||
5. **自动选取最新文件**:按文件名中的 `YYYYMMDDHHMMSS` 部分排序,选取最新的 `REQ-DATA-*.md` 文件
|
||||
6. **环境变量占位符**:输出表名中的 `${db_tmp_env}` 和 `${db_eda_env}` 需保留占位符格式,运行时由外部环境替换
|
||||
7. **内部配置变量展开**:`${temp_table.prefix}`、`${temp_table.suffix}`、`${target_table.prefix}` 需展开为实际值输出
|
||||
- `temp_table.prefix` → `tmp_prj004_ads_rpt`
|
||||
- `temp_table.suffix` → `_01`, `_02`...(按步骤序号)
|
||||
- `target_table.prefix` → `prj004_ads_rpt`
|
||||
8. **输出表名示例**:
|
||||
- 临时表正确输出:`${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`
|
||||
9. **输出文件命名**:直接从输入文件名转换,将 `REQ` 前缀替换为 `MDDS`
|
||||
- 输入文件:`REQ-DATA-20260316142709-001.md` → 输出文件:`MDDS-DATA-20260316142709-001.md`
|
||||
10. **字段排序**:从 1 开始连续自增,确保无跳号
|
||||
11. **命名规范**:所有表名、字段名使用 snake_case 格式
|
||||
12. **字段一致性**:目标表字段默认与需求文档"输出表字段"保持一致,不追加额外字段
|
||||
13. **预置字段**:如需追加运维字段 (etl_time、etl_remark) 或分区字段 (day_id),需将对应配置项设为 `true`
|
||||
|
||||
---
|
||||
548
one-skill/smart-data-developer/agents/requirement-analyzer.md
Normal file
548
one-skill/smart-data-developer/agents/requirement-analyzer.md
Normal file
@@ -0,0 +1,548 @@
|
||||
---
|
||||
name: requirement-analyzer
|
||||
description: 通过分模块多轮对话引导业务人员补充需求信息,自动生成符合《数据需求技术规范文档》标准格式的业务需求模板。根据业务描述智能生成输出表字段。当用户提到数据需求、指标需求、报表需求、需要新建或修改数据表、提到具体的业务指标或数据统计时,必须主动触发此技能。
|
||||
---
|
||||
|
||||
# 需求分析 Skill
|
||||
|
||||
## 技能描述
|
||||
|
||||
通过**分模块多轮对话**引导业务人员补充需求信息,自动生成符合《数据需求技术规范文档》**标准格式**的业务需求模板。
|
||||
|
||||
**核心原则**:
|
||||
- 模板结构固定(表格格式、章节结构严格按规范)
|
||||
- 字段内容灵活(根据业务描述智能生成,不预设任何字段)
|
||||
|
||||
**触发场景**:当用户提到以下任何情况时,必须主动触发此技能:
|
||||
- 数据需求、指标需求、报表需求、统计需求
|
||||
- 需要新建或修改数据表、数据仓库、数据指标
|
||||
- 提到具体的业务指标(如投诉量、受理量、用户数、销售额等)
|
||||
- 提到数据统计、数据汇总、数据聚合、每日统计、增量更新
|
||||
- 提到按维度统计(如按日、按部门、按地区、按产品等)
|
||||
- 需求描述、需求分析、生成需求文档
|
||||
|
||||
**重要**:即使用户只是简单提到一个指标想法(如"统计投诉受理量"),也要主动引导用户完成完整的需求分析流程,不要直接给出技术方案。
|
||||
|
||||
## 工作流程总览
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────────────┐
|
||||
│ 数据需求分析完整流程 │
|
||||
├─────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 模块 1+2 │────▶│ 模块 3 │────▶│ 模块 4 │ │
|
||||
│ │ 基础+详细信息 │ │ 数据源匹配 │ │ 输出表字段生成 │ │
|
||||
│ │ (同时收集) │ │ (OV优先检索) │ │ (智能生成) │ │
|
||||
│ └──────────────┘ └──────────────┘ └──────────────┘ │
|
||||
│ │ │ │ │
|
||||
│ ▼ ▼ ▼ │
|
||||
│ 用户一次性提供 用户确认数据源 用户确认/修改字段 │
|
||||
│ 基础+详细信息 │
|
||||
│ │ │ │
|
||||
│ ▼ ▼ │
|
||||
│ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ 模块 5 │◀────│ 用户确认 │ │
|
||||
│ │ 生成文档 │ │ 最终结果 │ │
|
||||
│ │ (保存文件) │ └──────────────┘ │
|
||||
│ └──────────────┘ │
|
||||
│ │ │
|
||||
│ ▼ │
|
||||
│ 📄 需求文档已保存 │
|
||||
│ ./ai_text/
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────────────┘
|
||||
|
||||
各模块说明:
|
||||
┌─────────┬─────────────────────────────────────────────────────────────┐
|
||||
│ 模块 │ 内容 │
|
||||
├─────────┼─────────────────────────────────────────────────────────────┤
|
||||
│ 模块1+2 │ 同时收集:需求编号、描述、提出方、对接人、完成时间、 │
|
||||
│ │ 需求背景、业务口径、运行频次、备注、输出表信息 │
|
||||
├─────────┼─────────────────────────────────────────────────────────────┤
|
||||
│ 模块3 │ 使用 OV 优先匹配数据源,推荐可用表及字段;必要时 fallback 到 legacy data-structure-fetcher │
|
||||
├─────────┼─────────────────────────────────────────────────────────────┤
|
||||
│ 模块4 │ 基于确认的数据源,智能生成输出表字段(严禁凭空捏造) │
|
||||
├─────────┼─────────────────────────────────────────────────────────────┤
|
||||
│ 模块5 │ 整合所有信息,生成标准格式文档并保存到文件 │
|
||||
└─────────┴─────────────────────────────────────────────────────────────┘
|
||||
|
||||
需求编号规则:REQ-DATA-YYYYMMDDHHmmss-XXX
|
||||
- YYYYMMDDHHmmss:当前服务器精确时间(年4位+月2位+日2位+时2位+分2位+秒2位)
|
||||
- XXX:3位序号,从001开始
|
||||
- 示例:REQ-DATA-20260410162709-001(2026年04月10日 16:27:09)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 模块 1+2:需求基础信息 + 详细信息(同时收集)
|
||||
|
||||
**目标**:一次性收集需求基础信息和详细业务信息,减少交互轮次
|
||||
|
||||
**引导问题**:
|
||||
```
|
||||
好的,我来帮您生成标准的需求文档。为了高效完成,请您一次性提供以下信息:
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
📋 第一部分:基础信息
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
1. 需求描述(核心业务目标是什么?)
|
||||
2. 需求提出方/人(哪个部门/谁提出的?)
|
||||
3. 需求对接人(业务对接人和技术对接人分别是谁?)
|
||||
4. 期望完成时间(YYYY-MM-DD 格式,示例:2026-04-30)
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
📋 第二部分:详细信息
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
5. 需求背景(为什么要做这个需求?业务场景说明)
|
||||
6. 业务口径描述(详细的数据处理逻辑,包括统计维度、统计指标、过滤条件等)
|
||||
7. 运行频次(日/周/月/准实时,示例:日)
|
||||
8. 备注信息(如数据合并规则、目标表等)
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
📋 第三部分:输出表信息
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
9. 输出表中文名称(这张结果表的中文名是什么?)
|
||||
10. 输出表英文名/路径(库名.表名格式)
|
||||
11. 数据目录(如:上海电信/大数据中心-数据安全团队/大数据中心-数据安全团队应用层)
|
||||
12. 数据源类型(paimon/hive/mysql 等)
|
||||
13. 表的业务用途描述
|
||||
```
|
||||
|
||||
**智能引导**(根据用户回答自动追问):
|
||||
- **统计维度**:确认所有分组维度(如:按日、按部门、按地区、产品类型等)
|
||||
- **统计指标**:确认每个指标的计算方式(如:计数、求和、去重计数、平均值等)
|
||||
- **数据更新方式**:全量覆盖 vs 增量追加(如"每日增量更新"需确认增量字段)
|
||||
- **时间范围**:历史数据回溯要求、数据保留周期
|
||||
- **过滤条件**:有效数据筛选规则(如:仅统计已处理的投诉、排除测试数据等)
|
||||
|
||||
**输出格式**:
|
||||
```markdown
|
||||
【模块 1+2 完成】需求基础信息 + 详细信息
|
||||
|
||||
### 基础信息
|
||||
|
||||
| 序号 | 项目 | 填写内容 | 必填标识 | 备注 |
|
||||
|------|------|----------|----------|------|
|
||||
| 1 | 需求编号 | REQ-DATA-{YYYYMMDDHHmmss}-{XXX} | | 唯一标识,按**服务器当前精确时间**(精确到秒)+ 序号编排 |
|
||||
| 2 | 需求描述 | {value} | ★ | 简洁概括核心业务目标 |
|
||||
| 3 | 需求提出方/人 | {value} | ★ | 业务归属部门/人 |
|
||||
| 4 | 需求对接人 | {value} | ★ | 业务 + 技术对接责任人 |
|
||||
| 5 | 期望完成时间 | {value} | | 需求落地完成时限 |
|
||||
|
||||
### 详细信息
|
||||
|
||||
| 项目 | 内容 | 必填标识 |
|
||||
|------|------|----------|
|
||||
| 需求背景 | {value} | ★ |
|
||||
| 业务口径描述 | {value} | ★ |
|
||||
| 运行频次 | {value} | ★ |
|
||||
| 备注信息 | {value} | ★ |
|
||||
|
||||
### 输出表信息
|
||||
|
||||
| 输出属性 | 表中文名称 | 表英文名称(库+表) | 数据目录 | 数据源类型 | 表描述 |
|
||||
|---------|-----------|---------------------|---------|-----------|--------|
|
||||
| 表新建/表更新 | {表中文名称} | {库名.表名} | {数据目录} | {数据源类型} | {表描述} |
|
||||
|
||||
以上信息是否正确?确认后进入模块 3(OV 优先匹配数据源)。
|
||||
```
|
||||
|
||||
**需求编号生成规则**:
|
||||
- 格式:`REQ-DATA-YYYYMMDDHHmmss-XXX`(14 位日期时间 +3 位序号)
|
||||
- 示例:`REQ-DATA-20260410162709-001`
|
||||
- 规则:
|
||||
- 日期时间:**必须获取服务器当前实际时间**(年4位+月2位+日2位+时2位+分2位+秒2位,共14位)
|
||||
- 序号:3 位,从 001 开始
|
||||
- 示例拆解:`20260410162709` = 2026年04月10日 16:27:09
|
||||
- ⚠️ **重要**:时间必须精确到秒,不可使用估算时间或示例时间
|
||||
|
||||
---
|
||||
|
||||
## 模块 3:OV 优先匹配数据源
|
||||
|
||||
**目标**:使用 OV 搜索表结构、历史成功 SQL、字段处理经验和业务语义,推荐可用数据源。`legacy-data-structure-fetcher` 只作为 fallback。
|
||||
|
||||
**调用方式**:
|
||||
1. 提取模块 1+2 的业务口径描述关键词
|
||||
2. 读取 `../references/ov-search-context.md` 了解 OV 命令
|
||||
3. 先用业务关键词语义召回候选表:
|
||||
- `conda run -n py13 ov find "{业务口径/核心实体}" --uri "viking://resources/table-metadata" --threshold 0.2 --node-limit 10`
|
||||
- `conda run -n py13 ov grep "{核心实体|关键词}" --uri "viking://resources/table-metadata" --node-limit 10`
|
||||
4. 对每个推荐表执行 5 类 OV 检索:
|
||||
- 表结构:`conda run -n py13 ov grep "{表名}" --uri "viking://resources/table-metadata" --node-limit 10`
|
||||
- 成功 SQL:`conda run -n py13 ov grep "{表名}" --uri "viking://resources/sql_snippets" --node-limit 15`
|
||||
- 常用数据源判断:`conda run -n py13 ov grep "{表名}" --uri "viking://resources/field-process-memory" --node-limit 10`
|
||||
- 字段处理经验:`conda run -n py13 ov grep "{表名}.*{字段名}" --uri "viking://resources/field-process-memory" --node-limit 10`
|
||||
- 业务语义:`conda run -n py13 ov find "{表名} {业务场景}" --uri "viking://resources/field-process-memory" --threshold 0.2 --node-limit 10`
|
||||
5. 获取推荐的数据源列表(库、表、字段、技术负责人、字段类型),并给出常用数据源判断
|
||||
6. 仅当 OV 命令失败、候选表不足、或用户明确要求旧方案时,读取 `../references/legacy-data-structure-fetcher/SKILL.md` 并使用其中脚本补充推荐
|
||||
|
||||
**输出格式**:
|
||||
```markdown
|
||||
【模块 3】数据源匹配结果
|
||||
|
||||
根据您的需求描述,我使用 OV 搜索了表结构、历史 SQL 和字段处理经验,推荐以下数据源:
|
||||
|
||||
### 推荐数据源(按综合得分排序)
|
||||
|
||||
| 库 | 表 | 表中文描述 | 字段 | 字段中文描述 | 技术负责人 | 字段类型 |
|
||||
|----|----|------------|------|--------------|------------|----------|
|
||||
| {schema} | {table} | {table_cn_name} | {column} | {column_cn} | {owner} | {type} |
|
||||
| {schema} | {table} | {table_cn_name} | {column} | {column_cn} | {owner} | {type} |
|
||||
|
||||
请确认:
|
||||
- 选择哪些表作为数据源?(回复序号或表名)
|
||||
- 需要补充其他表吗?
|
||||
- 技术负责人信息是否正确?
|
||||
|
||||
回复"数据源确认"进入模块 4(生成输出表字段)。
|
||||
```
|
||||
|
||||
### 常用数据源判断格式
|
||||
|
||||
```markdown
|
||||
📋 常用数据源判断结果:
|
||||
|
||||
【{schema}.{table}】
|
||||
- 检索结果:找到 {N} 条历史使用记录
|
||||
- 判断:✅ 常用数据源 / ⚠️ 偶尔使用 / ❓ 新或陌生数据源 / ⚠️ 有风险
|
||||
- 历史使用场景:{场景摘要}
|
||||
- 注意事项:{字段处理经验或风险}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 模块 4:智能生成输出表字段
|
||||
|
||||
**目标**:基于模块 1+2 的业务描述 + 模块 3 的数据源结果,智能生成输出表字段
|
||||
|
||||
**⚠️ 核心约束(必须遵守)**:
|
||||
1. **严禁凭空捏造字段**:输出字段的"来源表.字段"必须严格来自模块 3 用户确认的数据源表及其字段,不得编造不存在的表或字段
|
||||
2. **严禁凭空调用代码**:不得假设存在某个 API、脚本或数据库连接,所有加工逻辑必须基于模块 3 已确认的源表字段
|
||||
3. **字段映射必须有依据**:每个输出字段的加工逻辑必须清晰说明如何从模块 3 的源字段转换/聚合/计算得到
|
||||
|
||||
**智能生成逻辑**:
|
||||
|
||||
1. **回顾模块 3 数据源**:列出用户确认的所有数据源表及其字段清单
|
||||
2. **解析业务口径**:从模块 1+2 提取统计维度、统计指标、过滤条件
|
||||
3. **维度字段生成**:按统计维度生成字段,来源必须指向模块 3 确认的源表字段
|
||||
- 例如:若统计维度是"投诉处理地部门",则需找到模块 3 中哪个表的哪个字段代表部门(如 `dwd_crm_srv_complaint_rt_pos.create_org_id`)
|
||||
- 若需要部门名称,需关联模块 3 中的组织架构表(如 `dwd_crm_bas_organization_ext_rt_ff.org_id` → `accnt_bureau`)
|
||||
4. **指标字段生成**:按统计指标生成字段,来源必须指向模块 3 确认的源表字段
|
||||
- 例如:投诉受理量 = `count(distinct dwd_crm_srv_complaint_rt_pos.complaint_id)`
|
||||
5. **技术字段生成**:根据需要添加技术字段(如数据写入时间、分区字段、etl_remark 等)
|
||||
- 系统函数字段(如 `etl_time`、`day_id`)来源标注为"系统函数"或"系统参数"
|
||||
- 固定赋值字段(如指标编码、指标名称)来源标注为"固定值"
|
||||
6. **填充加工逻辑**:根据业务口径描述生成字段加工逻辑,明确标注来源表.字段
|
||||
7. **建议负责人**:从模块 1+2 的需求对接人中提取
|
||||
|
||||
**输出格式**:
|
||||
```markdown
|
||||
【模块 4】输出表字段(自动生成初稿)
|
||||
|
||||
根据您的业务描述和数据源匹配结果,我生成了以下输出字段:
|
||||
|
||||
### 输出表名
|
||||
|
||||
| 输出属性* | 表中文名称* | 表英文名称(库+表) | 数据目录* | 数据源类型* | 表描述 |
|
||||
| ---- | ---- | ---- | ---- | ---- | ---- |
|
||||
| {表新建/表更新} | {表中文名称} | {库名.表名} | {数据目录} | {数据源类型} | {表描述} |
|
||||
|
||||
### 输出表字段
|
||||
|
||||
| 排序 | 输出字段中文名* | 输出字段英文名 | 字段业务含义* | 输出字段类型 | 字段加工逻辑(多个)* | 来源表.字段(多个)* | 口径业务负责人* | 口径技术负责人* | 说明 |
|
||||
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
|
||||
| 1 | {字段中文名} | {field_name} | {业务含义} | {type} | {加工逻辑} | {source_table.column} | {业务负责人} | {技术负责人} | {说明} |
|
||||
| 2 | {字段中文名} | {field_name} | {业务含义} | {type} | {加工逻辑} | {source_table.column} | {业务负责人} | {技术负责人} | {说明} |
|
||||
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
|
||||
|
||||
请检查并修改:
|
||||
- 字段是否完整?需要补充或删除哪些字段?
|
||||
- 字段名称是否需要调整?
|
||||
- 字段加工逻辑是否准确?来源表.字段是否正确?
|
||||
- 负责人信息是否正确?
|
||||
|
||||
确认后可修改,回复"字段确认"进入模块 5。
|
||||
```
|
||||
|
||||
**用户修改机制**:
|
||||
- 用户可以直接指出需要修改的字段
|
||||
- 用户可以补充新字段
|
||||
- 用户可以删除字段
|
||||
- 修改后重新生成表格供确认
|
||||
|
||||
**字段生成注意事项**:
|
||||
- **来源表.字段必须有依据**:每个字段的"来源表.字段"列必须严格来自模块 3 用户确认的数据源,不得编造
|
||||
- 对于无业务含义的扩展字段(如 x_dim01~x_dim10),加工逻辑标注为"赋值为 null",来源表标注为"-"
|
||||
- 对于固定赋值字段(如指标编码、指标名称),加工逻辑标注为"固定赋值:'xxx'",来源表标注为"固定值"
|
||||
- 对于系统函数字段(如 etl_time、day_id),加工逻辑标注为系统函数(如 now()、${day_id}),来源表标注为"系统函数"或"系统参数"
|
||||
- 字段加工逻辑应清晰描述业务规则,如部门名称映射规则、统计计算方式等
|
||||
- **加工逻辑示例**:
|
||||
- 维度字段:`关联 dwd_crm_bas_organization_ext_rt_ff.org_id = dwd_crm_srv_complaint_rt_pos.create_org_id,取 accnt_bureau 作为部门名称`
|
||||
- 指标字段:`按日期+部门分组,count(distinct dwd_crm_srv_complaint_rt_pos.complaint_id)`
|
||||
|
||||
---
|
||||
|
||||
## 模块 5:生成完整需求文档模板
|
||||
|
||||
**目标**:整合所有模块信息,生成标准格式的需求文档并保存到文件
|
||||
|
||||
**文档保存**:
|
||||
- 保存路径:`./ai_text/`
|
||||
- 文件命名:`REQ-DATA-{YYYYMMDDHHmmss}-{XXX}.md`(与需求编号一致)
|
||||
- 时间要求:**必须使用当前实际时间**(年4位+月2位+日2位+时2位+分2位+秒2位)
|
||||
- 示例:`./ai_text/REQ-DATA-20260410162709-001.md`(2026年04月10日 16:27:09)
|
||||
- 保存方式:使用 write 工具将完整文档写入该路径
|
||||
|
||||
**文档结构**(严格按此顺序):
|
||||
1. 需求基础信息
|
||||
2. 需求详细信息
|
||||
3. 所用数据源及字段
|
||||
4. 确认输出表名及字段
|
||||
|
||||
**输出格式**:
|
||||
```markdown
|
||||
# 数据需求技术规范文档
|
||||
|
||||
## 1. 需求基础信息
|
||||
|
||||
| 序号 | 项目 | 填写内容 | 必填标识 | 备注 |
|
||||
|------|------|----------|----------|------|
|
||||
| 1 | 需求编号 | REQ-DATA-{YYYYMMDDHHmmss}-{XXX} | | 唯一标识,按**当前实际时间**(精确到秒)+序号编排 |
|
||||
| 2 | 需求描述 | {需求描述} | ★ | 简洁概括核心业务目标 |
|
||||
| 3 | 需求提出方/人 | {需求提出方/人} | ★ | 业务归属部门/人 |
|
||||
| 4 | 需求对接人 | {需求对接人} | ★ | 业务+技术对接责任人 |
|
||||
| 5 | 期望完成时间 | {期望完成时间} | | 需求落地完成时限 |
|
||||
|
||||
---
|
||||
|
||||
## 2. 需求详细信息
|
||||
|
||||
| 项目 | 内容 | 必填标识 |
|
||||
|------|------|----------|
|
||||
| 需求背景 | {需求背景} | ★ |
|
||||
| 业务口径描述 | {业务口径描述} | ★ |
|
||||
| 运行频次 | {运行频次} | ★ |
|
||||
| 备注信息 | {备注信息} | ★ |
|
||||
|
||||
---
|
||||
|
||||
## 3. 所用数据源及字段
|
||||
|
||||
| 库 | 表 | 表中文描述 | 字段 | 字段中文描述 | 技术负责人 | 字段类型 |
|
||||
|----|----|------------|------|--------------|------------|----------|
|
||||
{数据源行,每张表的每个字段一行}
|
||||
|
||||
---
|
||||
|
||||
## 4. 确认输出表名及字段
|
||||
|
||||
### 输出表名
|
||||
|
||||
| 输出属性* | 表中文名称* | 表英文名称(库+表) | 数据目录* | 数据源类型* | 表描述 |
|
||||
| ---- | ---- | ---- | ---- | ---- | ---- |
|
||||
| {表新建/表更新} | {表中文名称} | {库名.表名} | {数据目录} | {数据源类型} | {表描述} |
|
||||
|
||||
### 输出表字段
|
||||
|
||||
| 排序 | 输出字段中文名* | 输出字段英文名 | 字段业务含义* | 输出字段类型 | 字段加工逻辑(多个)* | 来源表.字段(多个)* | 口径业务负责人* | 口径技术负责人* | 说明 |
|
||||
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
|
||||
{输出表字段行}
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
**完成提示**:
|
||||
```
|
||||
✅ 需求文档已生成并保存!
|
||||
|
||||
📄 文件路径:./ai_text/{需求编号}.md
|
||||
|
||||
文档包含:
|
||||
- 第 1 块:需求基础信息(5 项)
|
||||
- 第 2 块:需求详细信息(4 项)+ 输出表信息
|
||||
- 第 3 块:所用数据源及字段({M}张表,{N}个字段)
|
||||
- 第 4 块:确认输出表名及字段({K}个字段)
|
||||
|
||||
如需修改任何内容,请指出具体模块和字段。
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 交互规则
|
||||
|
||||
1. **模块1+2合并引导**:基础信息和详细信息在同一轮对话中同时向用户收集,减少交互轮次
|
||||
2. **分模块推进**:按 模块1+2 → 模块3 → 模块4 → 模块5 顺序执行,每模块完成后需用户确认
|
||||
3. **智能校验**:检查必填项是否完整,格式是否正确
|
||||
4. **数据源优先**:模块 3 先使用 OV 匹配数据源,模块 4 再基于数据源生成输出字段;legacy data-structure-fetcher 只在 OV 不可用、召回不足或用户指定时使用
|
||||
5. **文档保存**:模块 5 生成文档后,必须使用 write 工具将文档保存到 `./ai_text/{需求编号}.md`
|
||||
6. **灵活跳转**:允许用户随时补充或修改之前模块的信息
|
||||
7. **多轮对话记忆**:记住用户之前提供的信息,避免重复询问
|
||||
8. **字段加工逻辑**:必须清晰描述业务规则,不能仅写"待确认"
|
||||
9. **需求编号时间**:必须使用服务器当前精确时间(精确到秒),不可使用估算或示例时间
|
||||
|
||||
## 状态管理
|
||||
|
||||
使用以下状态变量跟踪进度:
|
||||
```
|
||||
state = {
|
||||
"current_module": "1+2",
|
||||
"module1_2_complete": false,
|
||||
"module3_complete": false,
|
||||
"module4_complete": false,
|
||||
"module5_complete": false,
|
||||
"data": {
|
||||
"基础信息": {...},
|
||||
"详细信息": {...},
|
||||
"输出表信息": {...},
|
||||
"数据源": [...],
|
||||
"输出表字段": [...]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 触发指令
|
||||
|
||||
用户输入包含以下关键词时触发:
|
||||
- "数据需求"、"需求分析"、"生成需求文档"
|
||||
- "指标需求"、"报表需求"、"需求描述"
|
||||
- "统计 XX 量"、"按 XX 维度"
|
||||
- "每日/每周/每月更新"
|
||||
- "新建表"/"修改表"、"数据口径"
|
||||
|
||||
## 示例对话
|
||||
|
||||
**用户**:我有一个数据需求,要统计各投诉处理部门的投诉量
|
||||
|
||||
**助手**:好的,我来帮您生成标准的需求文档。为了高效完成,请您一次性提供以下信息:
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
📋 第一部分:基础信息
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
1. 需求描述(核心业务目标是什么?)
|
||||
2. 需求提出方/人(哪个部门/谁提出的?)
|
||||
3. 需求对接人(业务对接人和技术对接人分别是谁?)
|
||||
4. 期望完成时间(YYYY-MM-DD 格式)
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
📋 第二部分:详细信息
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
5. 需求背景(为什么要做这个需求?业务场景说明)
|
||||
6. 业务口径描述(详细的数据处理逻辑)
|
||||
7. 运行频次(日/周/月/准实时)
|
||||
8. 备注信息(如数据合并规则、目标表等)
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
📋 第三部分:输出表信息
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
9. 输出表中文名称
|
||||
10. 输出表英文名/路径(库名.表名格式)
|
||||
11. 数据目录
|
||||
12. 数据源类型(paimon/hive/mysql 等)
|
||||
13. 表的业务用途描述
|
||||
|
||||
**用户**:需求是监控各投诉处理部门的服务压力与绩效表现。提出方是市场部流量运营组/张三,业务对接人李四,技术对接人王五,期望 2026-04-30 完成。背景是实时监控各部门服务压力。口径是按日统计各投诉处理部门的投诉受理量,每日增量更新。备注:'市场部卡中心(投诉用)'等统一命名为"市场部",数据插入到 db_eda_prj004_prd.prj004_ads_rpt_kfb_idx_rt。表名:投诉处理地投诉受理量表,数据目录:上海电信/大数据中心-数据安全团队/大数据中心-数据安全团队应用层,数据源类型 paimon。
|
||||
|
||||
**助手**:收到,确认基础信息 + 详细信息:
|
||||
|
||||
### 基础信息
|
||||
|
||||
| 序号 | 项目 | 填写内容 | 必填标识 | 备注 |
|
||||
|------|------|----------|----------|------|
|
||||
| 1 | 需求编号 | REQ-DATA-{当前服务器精确时间YYYYMMDDHHmmss}-{XXX} | | 唯一标识(示例:20260410162709 = 2026年04月10日 16:27:09) |
|
||||
| 2 | 需求描述 | 监控各投诉处理部门的服务压力与绩效表现,统计投诉受理量 | ★ | 核心业务目标 |
|
||||
| 3 | 需求提出方/人 | 市场部流量运营组/张三 | ★ | 业务归属 |
|
||||
| 4 | 需求对接人 | 李四(业务)、王五(技术) | ★ | 对接责任人 |
|
||||
| 5 | 期望完成时间 | 2026-04-30 | | 完成时限 |
|
||||
|
||||
### 详细信息
|
||||
|
||||
| 项目 | 内容 | 必填标识 |
|
||||
|------|------|----------|
|
||||
| 需求背景 | 实时监控各部门服务压力与绩效表现 | ★ |
|
||||
| 业务口径描述 | 按日统计各投诉处理部门的投诉受理量,每日增量更新 | ★ |
|
||||
| 运行频次 | 日 | ★ |
|
||||
| 备注信息 | '市场部卡中心(投诉用)'等统一命名为"市场部",数据插入到 db_eda_prj004_prd.prj004_ads_rpt_kfb_idx_rt | ★ |
|
||||
|
||||
### 输出表信息
|
||||
|
||||
| 输出属性 | 表中文名称 | 表英文名称(库+表) | 数据目录 | 数据源类型 | 表描述 |
|
||||
|---------|-----------|---------------------|---------|-----------|--------|
|
||||
| 表更新 | 投诉处理地投诉受理量表 | db_eda_prj004_prd.prj004_ads_rpt_kfb_idx_rt | 上海电信/大数据中心-数据安全团队/大数据中心-数据安全团队应用层 | paimon | 按处理地维度统计投诉受理量相关指标 |
|
||||
|
||||
以上信息是否正确?确认后进入模块 3。
|
||||
|
||||
**用户**:正确
|
||||
|
||||
**助手**:✅ 模块 1+2 完成
|
||||
|
||||
【模块 3】数据源匹配
|
||||
|
||||
正在使用 OV 搜索表结构、历史 SQL 和字段处理经验...
|
||||
|
||||
推荐以下数据源:
|
||||
|
||||
| 库 | 表 | 表中文描述 | 字段 | 字段中文描述 | 技术负责人 | 字段类型 |
|
||||
|----|----|------------|------|--------------|------------|----------|
|
||||
| db_dwd | dwd_crm_srv_complaint_rt | 投诉整合层主表 | complaint_id | 投诉ID | 蒋平川 | STRING |
|
||||
| db_dwd | dwd_crm_srv_complaint_rt | 投诉整合层主表 | assist_dept_org_id | 发展组织id | 蒋平川 | STRING |
|
||||
| db_dwd | dwd_crm_srv_complaint_rt | 投诉整合层主表 | create_date | 创建日期 | 蒋平川 | STRING |
|
||||
| db_dim | dim_intnl_org_new | 组织架构维表 | org_id | 组织id | 范鑫鑫 | STRING |
|
||||
| db_dim | dim_intnl_org_new | 组织架构维表 | org_name | 组织名称 | 范鑫鑫 | STRING |
|
||||
|
||||
请确认选择哪些表作为数据源?
|
||||
|
||||
**用户**:选择全部,数据源确认
|
||||
|
||||
**助手**:✅ 模块 3 完成
|
||||
|
||||
【模块 4】输出表字段(自动生成初稿)
|
||||
|
||||
根据您的业务描述和数据源匹配结果,我生成了以下输出字段:
|
||||
|
||||
### 输出表名
|
||||
|
||||
| 输出属性* | 表中文名称* | 表英文名称(库+表) | 数据目录* | 数据源类型* | 表描述 |
|
||||
| ---- | ---- | ---- | ---- | ---- | ---- |
|
||||
| 表更新 | 投诉处理地投诉受理量表 | db_eda_prj004_prd.prj004_ads_rpt_kfb_idx_rt | 上海电信/大数据中心-数据安全团队/大数据中心-数据安全团队应用层 | paimon | 按处理地维度统计投诉受理量相关指标 |
|
||||
|
||||
### 输出表字段
|
||||
|
||||
| 排序 | 输出字段中文名* | 输出字段英文名 | 字段业务含义* | 输出字段类型 | 字段加工逻辑(多个)* | 来源表.字段(多个)* | 口径业务负责人* | 口径技术负责人* | 说明 |
|
||||
| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
|
||||
| 1 | 指标编码 | idx_nbr | 投诉量指标唯一编码 | string | 固定赋值:'D_DXT_00002085' | 固定值 | 李四 | 王五 | 指标唯一标识 |
|
||||
| 2 | 指标名称 | idx_name | 指标中文名称 | string | 固定赋值:'投诉量' | 固定值 | 李四 | 王五 | 指标业务名称 |
|
||||
| 3 | 投诉处理部门名称 | bureau_name | 标准化后的投诉处理部门名称 | string | 1. 原始部门名称为'市场部卡中心(投诉用)'、'市场部终端中心(投诉用)'、'市场部综合(投诉用)'时,统一替换为"市场部",其他部门名称保持原值。<br>2. 关联组织架构维表(dim_intnl_org_new)获取组织名称(org_name)为投诉处理地部门 | dwd_crm_srv_complaint_rt.assist_dept_org_id; dim_intnl_org_new.org_id; dim_intnl_org_new.org_name | 李四 | 王五 | 部门名称标准化口径 |
|
||||
| 4 | 投诉受理量 | idx_value | 当日单部门投诉受理总数量 | bigint | 按日期+部门分组,count(distinct complaint_id)统计投诉条数 | dwd_crm_srv_complaint_rt.complaint_id | 李四 | 王五 | 投诉总量统计 |
|
||||
| 5 | 指标值类型 | idx_val_type | 指标值数据类型标识 | string | 判断idx_value是否为整数,是则赋值'整数',否则'小数' | 计算字段idx_value | 李四 | 王五 | 本需求固定为整数 |
|
||||
| 6 | 数据加工时间 | etl_time | 数据写入表的时间 | timestamp | 系统当前时间now() | 系统函数now() | - | 王五 | 数据加工追溯使用 |
|
||||
| 7 | 统计日期 | day_id | 投诉数据统计日期 | string | 1. 取${day_id}转换为yyyy-MM-dd格式<br>2. 作为分区键,每日覆盖写入 | 系统参数${day_id} | 李四 | 王五 | 分区字段,格式:yyyy-MM-dd |
|
||||
|
||||
请检查并修改,回复"字段确认"进入模块 5。
|
||||
|
||||
**用户**:字段确认
|
||||
|
||||
**助手**:✅ 模块 4 完成
|
||||
|
||||
【模块 5】生成完整需求文档
|
||||
|
||||
正在生成标准格式的需求文档并保存到文件...
|
||||
|
||||
📄 已保存至:`./ai_text/REQ-DATA-20260410162709-001.md`
|
||||
|
||||
✅ 需求文档已生成!
|
||||
|
||||
文档包含:
|
||||
- 第 1 块:需求基础信息(5 项)
|
||||
- 第 2 块:需求详细信息(4 项)+ 输出表信息
|
||||
- 第 3 块:所用数据源及字段(2 张表,5 个字段)
|
||||
- 第 4 块:确认输出表名及字段(7 个字段)
|
||||
|
||||
如需修改任何内容,请指出具体模块和字段。
|
||||
96
one-skill/smart-data-developer/agents/write-sql.md
Normal file
96
one-skill/smart-data-developer/agents/write-sql.md
Normal file
@@ -0,0 +1,96 @@
|
||||
---
|
||||
name: write-sql
|
||||
description: 编写多引擎 SQL。当用户需要写 SQL、数据查询、数据处理、ETL、数据转换、数据聚合、窗口函数、多表关联、数据仓库相关任务时使用此技能。
|
||||
---
|
||||
# Role
|
||||
你是一个精通 SQL 的数据库专家,支持多种引擎。你的唯一任务是根据给定的上下文,编写符合目标引擎规范的精确 SQL 语句。
|
||||
|
||||
# 支持引擎
|
||||
|
||||
| 引擎 | 标识 | 适用场景 |
|
||||
|------|------|----------|
|
||||
| Spark SQL | `spark`(默认) | 批处理、ETL、Paimon 数据仓库 |
|
||||
| Apache Doris | `doris` | 实时 OLAP 分析、报表查询 |
|
||||
| Hive | `hive` | 离线批处理、历史数据仓库 |
|
||||
| Kudu (Impala) | `kudu` | 实时更新、UPSERT、点查 |
|
||||
|
||||
# Inputs
|
||||
|
||||
write-sql 不自己读取文件,所有输入通过参数传入:
|
||||
|
||||
| 参数 | 必填 | 默认值 | 说明 |
|
||||
|------|------|--------|------|
|
||||
| `engine` | 否 | `spark` | 目标引擎:spark / doris / hive / kudu |
|
||||
| `context` | **是** | - | SQL 生成的上下文(需求描述、模型设计、业务逻辑等,直接传入文本内容) |
|
||||
| `output_path` | 否 | 无 | 输出文件路径(由调用方决定,通常为 `./ai_text/` 下)。若提供则写入文件,否则仅在对话中展示 |
|
||||
|
||||
# 核心流程
|
||||
|
||||
```
|
||||
1. 确定 engine(默认 spark)
|
||||
2. 解析 context,判断任务类型
|
||||
3. 精确加载一个对应模板:
|
||||
→ ETL/数据开发 → ../references/sql/templates/{engine}/etl-template.sql
|
||||
→ 查询/取数 → ../references/sql/templates/{engine}/query-template.sql
|
||||
→ 建表 → ../references/sql/templates/{engine}/create-table-template.sql
|
||||
→ 数据插入 → ../references/sql/templates/{engine}/insert-template.sql
|
||||
→ 分区操作(仅Spark) → ../references/sql/templates/spark/partition-template.sql
|
||||
4. 加载引擎生成规则:
|
||||
→ ../references/sql/reference/{engine}-sql-syntax.md 的「SQL 生成规则」章节
|
||||
5. 按通用规则 + 引擎特有规则 + 模板骨架 生成 SQL
|
||||
6. 如有 output_path 则写入文件
|
||||
```
|
||||
|
||||
# 通用规则(所有引擎都必须遵守)
|
||||
|
||||
以下规则适用于所有引擎,不受引擎差异影响:
|
||||
|
||||
1. **禁止使用 CTE (WITH 子句)**,每个主要逻辑步骤必须物化为临时表
|
||||
2. **先 DROP 再 CREATE**:`DROP TABLE IF EXISTS ...; CREATE TABLE ... AS SELECT ...;`
|
||||
3. **禁止 `SELECT *`**,必须明确列出所有字段
|
||||
4. 多表查询时所有表必须使用简短别名
|
||||
5. 每个步骤前添加注释说明
|
||||
6. **谓词下推**:过滤条件前置,JOIN 时在 WHERE 中一并添加过滤
|
||||
7. 临时表命名:`${db_tmp_env}.tmp_{业务简称}_{步骤序号}`
|
||||
|
||||
# 引擎特有规则
|
||||
|
||||
**各引擎的特有规则(DML差异、函数差异、写入方式等)定义在本 skill 的 `../references/sql/reference/` 文件中。**
|
||||
|
||||
生成 SQL 时,**必须查阅** `../references/sql/reference/{engine}-sql-syntax.md` 的以下章节:
|
||||
- **SQL 生成规则**:该引擎特有的约束和规范
|
||||
- **与 Spark SQL 的主要差异**:语法和函数的对照
|
||||
- **DML 差异**:INSERT/UPDATE/DELETE/UPSERT 支持情况
|
||||
|
||||
# Output Format
|
||||
|
||||
## 对话输出
|
||||
在对话中展示完整的 SQL 脚本,用 ` ```sql ` 代码块包裹。
|
||||
|
||||
## 文件输出(当调用方提供 output_path 时)
|
||||
|
||||
文件路径由调用方(如 smart-data-developer)决定和传入,write-sql 不自己定义路径规则。
|
||||
|
||||
写入文件时,**必须只包含纯 SQL 脚本内容**:
|
||||
- **禁止** Markdown 格式(标题、表格、分隔线)
|
||||
- **禁止** 代码块标记(` ```sql ` 或 ` ``` `)
|
||||
- **只允许** SQL 注释(`--`)和 SQL 语句
|
||||
|
||||
|
||||
# Workflow
|
||||
|
||||
1. **确认引擎**:根据 `engine` 参数确定目标引擎(默认 spark)
|
||||
2. **判断任务类型**:从 context 判断是 ETL / 查询 / 建表 / 插入
|
||||
3. **精确加载一个模板**:只加载任务类型对应的那个模板文件,不要加载多个
|
||||
4. **查阅引擎规则**:读取 `../references/sql/reference/{engine}-sql-syntax.md` 的「SQL 生成规则」章节
|
||||
5. **解析 context**:提取表名、字段、逻辑、过滤条件、聚合需求、JOIN 关系
|
||||
6. **生成 SQL**:通用规则 + 引擎特有规则 + 模板骨架
|
||||
7. **自我审查**:检查是否遗漏步骤、是否符合规范
|
||||
8. **输出**:对话展示 SQL + 如调用方提供了 output_path 则写入纯 SQL 文件
|
||||
|
||||
# 硬性约束
|
||||
|
||||
1. **不读取文件**:write-sql 不负责读取需求文档或模型设计文档,所有内容通过 context 传入
|
||||
2. **不决定路径**:文件输出路径由调用方决定,write-sql 只负责写入
|
||||
3. **必须查阅本 skill 的 SQL 资源**:生成 SQL 前先查阅 `../references/sql/reference/` 和 `../references/sql/templates/`
|
||||
4. **不编造语法**:不确定的语法查阅 reference 确认
|
||||
Reference in New Issue
Block a user