WeData Data Quality Task
Skill 概述
本 skill 覆盖 DataQualityService 中基于规则的数据质量校验相关 API。质量任务是与"Profiling"、"异常检测"并列的能力:用户定义规则 → 调度/试运行 → 判定是否异常 → 告警通知。
不适用场景
- 数据剖析 Profiling(数据画像 / 分布漂移 / dashboard)→
data-quality-profiling - 智能异常检测(Schema 级异常 / 新鲜度 / 完整度 / 学习中)→
data-quality-anomaly - 通用数据资产检索 →
knowledge/semantic-meta-search - 数据模型/指标定义 →
semantic-manage
必需输入
- 用户意图:自然语言(至少一项)
- 写操作:必须有用户明确触发指令,不得由 LLM 主动发起
硬性约束
以下规则不可违反、不可跳过、不可降级。
| # | 约束 | 一句话提示 |
|---|---|---|
| H1 | CreateDataQualityTask 失败 → 立即终止链路 |
禁止用其他 TaskId 继续(串号风险) |
| H2 | ResourceId 必须用户选 | 即使只有 1 个也要确认 |
| H3 | 调度意图必须先采集血缘+同表+DAG 再推荐 | 禁止直接问二选一 |
| H4 | 调 API 前必须两块独立展示(YAML 全文 + 告警配置) | 等用户"确认" |
| H5 | 删除需用户回复同时包含"确认删除"+ TaskId | 批量逐个确认 |
| H6 | 调度必须先发布(VersionStatus = published) |
draft 先引导发布 |
| H7 | AlarmChannels/AlertRuleNames 写请求顶层 |
禁止放进 YAML(会被静默丢弃) |
| H8 | 创建后禁止自动发布 | 必须用户显式确认 |
效率约束
表定位策略
| 场景 | 正确行为 | 禁止行为 |
|---|---|---|
| 用户给出完整表名 | 直接执行 | — |
| 缺 catalog/schema | search table '<表名>' 定位(最多 1 次) |
遍历 catalog 猜测 |
| 未给出任何表名 | 立即询问,零工具调用 | get catalogs / get tables 列举 |
| 搜索返回 0 结果 | 立即告知"未找到",停止 | 缩短关键词反复重试 |
| 搜索返回多个候选 | 展示列表让用户选 | 自行猜测选择 |
快速失败原则:表名定位相关 CLI 调用不得超过 3 次。
CLI 调用规范
- 调用前必须参考 api_reference.md 中的命令模板,禁止凭猜测拼参数
- 需要查询多个 catalog/schema/表时必须并行调用,禁止串行
- 诊断多条规则执行结果时必须并行获取各规则详情
创建前信息收集(一次调用)
wedatacli quality-task prepare_create --catalog <c> --schema <s> --table <t>
返回:current_user(OwnerId)、existing_tasks(同表已有任务)、rule_templates(规则模板)、notifications(通知渠道)。
禁止分别调用 current-user get、list-rule-templates、notification list、quality-task list --filters TableName。
模板使用策略
- 默认优先使用
system_template(标准化程度高、维护成本低) - 仅当需求无法被现有系统模板覆盖时才降级为
custom_sql - 确定使用
custom_sql后禁止单独调用list-rule-templates
停止条件
| 条件 | 处理 |
|---|---|
CreateDataQualityTask 失败 |
立即终止链路,禁止用其他 TaskId 继续(H1) |
| 用户未给出任何表名 | 立即询问目标表,零工具调用 |
search table 返回 0 结果 |
告知"未找到该表",停止探索 |
| 表名定位 CLI 调用已达 3 次 | 停止探索,告知用户确认表名 |
| 用户说"Profiling/数据画像/dashboard/监控效果" | 路由到 data-quality-profiling |
| 用户说"异常检测/智能异常/新鲜度/完整度/学习中" | 路由到 data-quality-anomaly |
completeness.is_complete=true(诊断模式) |
禁止再调用其他检索类工具 |
意图路由(第一步 MUST)
| 意图类别 | 触发词 | 工作流 |
|---|---|---|
| E.0 综合诊断 | "数据质量怎么样 / 帮我检查数据质量 / 表有没有质量问题" | E.0 诊断 |
| E.1 创建/更新 | "创建质量任务 / 加规则 / 配质量监控" | E.1 创建 |
| E.2 试运行 | "试运行 / 跑一下看看 / 测试规则" | E.2 试运行 |
| E.3 删除 | "删除质量任务 / 不要这个任务了" | E.3 删除 |
| E.4 调度集成 | "配调度 / 加入工作流 / 定时跑" | E.4 调度 |
| E.5 查询 | "看规则 / 看执行记录 / 看告警" | E.5 查询 |
工作流 E.0:综合诊断模式(质量域入口)
当用户描述宽泛质量问题时,必须使用综合诊断复合工具一次性完成三维度探测:
wedatacli quality-task diagnose --catalog <c> --schema <s> --table <t> [--time_range <N>d] [--latest_only] [--compare_alerts <N>]
时间范围选择策略:
| 用户表述 | 参数 |
|---|---|
| "最近一次" / "上次" | --latest_only |
| "最近" / "怎么样" / 无时间限定 | 默认(--time_range 7d) |
| "最近一周" | --time_range 7d |
| "最近一个月" | --time_range 30d |
| "最近N次告警根因一样吗" | --compare_alerts N |
工具输出字段
- quality_task:任务是否存在 + 任务列表(含规则数、覆盖维度)+ 执行统计(通过/异常/失败次数)+ 最近执行记录 + 自动下钻到触发规则级别
- quality_task.exec_stats:时间范围内的执行统计摘要(total_execs/passed_count/abnormal_count/failed_count/latest_exec_time/latest_exec_result)
- profiling:Profiling 配置是否存在 + 跨 workspace 状态
- anomaly:异常检测继承状态 + 各维度基线状态 + open 异常
- summary:已配置维度、问题数量、推荐动作
- completeness:
is_complete+covered_questions+uncovered_questions - next_actions:下一步建议命令(
priority: none/optional/recommended)
诊断后续动作
completeness.is_complete=true→ 直接基于当前结果回答,禁止额外调用其他工具summary.has_issues=true→ 进入诊断决策树(见 spec.md §诊断决策树)- 根因追溯限制:最多 2 层、每层最多 3 个上游节点;超限则汇报已发现信息
- 某维度
exists=false→ 推荐语气建议开启,不强制 next_actions中priority=none的命令 禁止主动执行
诊断模式禁止行为
- 禁止分别跳转到
Skill("data-quality-profiling")和Skill("data-quality-anomaly")执行完整工作流 - 禁止对
ListDataQualityTaskExecs进行超过 3 次分页遍历 - 禁止读取
spec.md全文(工具输出已足够做诊断判断) completeness.is_complete=true时禁止调用quality-task get、list-rule-execs等priority=none时禁止主动执行该命令
工作流 E.1:创建 / 更新质量任务
- 定位表 → 按表定位策略收集 catalog/schema/table
prepare_create(强制第一步):一次性获取 OwnerId + 同表已有任务 + 规则模板 + 通知渠道- 已有任务 → 询问用户新建还是追加
- 确定 rule_type → 按模板使用策略判断
system_template/custom_sql - 构造 YAML → 过 14 项自检清单
- 告警配置 → 用户未提及则推荐语气建议开启;
ChannelId从prepare_create返回的notifications获取 - H4 配置确认闭环 → 两块独立展示(YAML 全文 + 告警配置)→ 等用户"确认"
- 调
wedatacli quality-task create→ 返回TaskId+VersionNo - H8 禁止自动发布 → 汇报结果,提示用户可发布/试运行
工作流 E.2:试运行
- 收集 ResourceId(H2):
wedatacli get compute-resources→ 过滤ExecAvailableStatus=1→ 表格让用户选 - 调
wedatacli quality-task run --task-id <id> --resource-id <id> - 轮询:首次 2s → 间隔 3s → 最多 20 次 → 终止条件
SubInstanceStatus ∈ {completed, cancelled} - 结果处理:失败/触发的规则进入诊断决策树
工作流 E.3:删除质量任务
- 展示任务摘要(TaskId / TaskName / 表 / 规则数 / 版本状态)
- 高亮"删除不可恢复,关联工作流节点会失效"
- 要求用户回复同时包含**"确认删除"+ TaskId**(H5)
- 校验通过 →
wedatacli quality-task delete --task-id <id>→ 汇报结果
工作流 E.4:工作流集成(配调度)
4 步流程(H3 + H6):
- 校验发布状态 → draft 先引导发布
- 智能推荐(并发采集血缘+同表+DAG):
| 优先级 | 条件 | 推荐 |
|---|---|---|
| P1 | 下游有工作流任务 | 加入该工作流,插入下游之前 |
| P2 | 上游有工作流任务 | 加入该工作流,插入上游之后 |
| P3 | 同表已有任务的 WorkflowRefs 非空 | 加入同一工作流 |
| P4 | 以上均不满足 | 新建独立工作流 |
- 用户选择
- 交接给
workflow-orchestration(本 skill 禁止直接调CreateWorkflow/UpdateWorkflow)
产物归档
诊断报告和试运行结果(规则≥5 或失败≥1)通过 Skill("artifact-uploader") 上传,domain="governance"。
参考文件索引
- 领域规范(实体模型 / YAML 规范 / 诊断决策树 / 自检清单)
- API 接口说明(CLI 命令格式与参数)