上线验证的目标
演示不是「能跑就行」,而要证明三件事:
- 数据可信:宽表与元数据口径一致,过滤条件正确
- 链路可复现:同一问法多次返回相同 SQL 与结果
- 异常可解释:失败时有排障路径,而非沉默报错
本篇给出虚构企业场景的完整验证 playbook。
测试数据 Seed 流程
1 | |
Step 1–2:元数据初始化
1 | |
Step 3:取数逻辑
1 | |
Step 4:表白名单
1 | |
Step 5:宽表 Seed 数据(虚构)
1 | |
验证点:含 is_valid = '0' 的 99999 不应出现在任何查询结果。
指标对齐检查
| 检查项 | 方法 | 期望 |
|---|---|---|
| index_name 一致 | 宽表 DISTINCT vs 元数据 | 完全一致,无空格差异 |
| 区域枚举 | 宽表 region_name | 含华东区、华北区 |
| 默认过滤 | 抽查 SQL | 均含 is_valid = '1' |
| 时间字段 | 季/月/年样例各 1 条 | stat_date 与 period 匹配 |
| 白名单 | 非白名单表查询 | validate_sql 拒绝 |
对齐脚本示意:
1 | |
标准问法演示脚本
演示建议按「简单 → 多轮 → 安全」顺序:
演示 1:单轮完整问法
问:华东区 2026 年一季度销售收入是多少?
期望 SQL:
1 | |
期望结果:12850.6(不含 99999 作废行)
演示 2:缺时间周期追问
问:华北区销售收入多少
期望:needs_clarification: true,fallback_type: missing_time_period
追问:华北区 2026 年一季度销售收入
期望 SQL:region_name = '华北区',结果 9650.2
演示 3:客户留存率同比
问:华东区 2026 年客户留存率同比
1 | |
演示 4:新增客户数
问:2026 年 5 月新增客户数
期望:华东区 1250,华北区 980(若未指定区域可返回多行或默认汇总,需在元数据配置 granularity)
排障对照表
| 现象 | 可能原因 | 排查步骤 | 修复 |
|---|---|---|---|
| 检索不到指标 | bi_metric 未配置或 status=0 | 查 MySQL 关键词匹配 | 补 metric 记录 |
| SQL 无 is_valid | default_filter 为空 | 查 extract_logic | 填 is_valid = '1' |
| 结果偏大 | 含作废行 | 对比去/加过滤 | 强制 default_filter |
| 时间条件错误 | 时间解析规则不全 | 查 _extract_time_period 日志 | 补规则或追问 |
| validate 失败 | 表不在白名单 | 查 bi_table | 加 is_whitelisted=1 |
| 空结果 | seed 未导入 / 区域拼写 | 查宽表 LIKE | 修正数据或别名 |
| 图表空白 | explain_result 未返回 option | 查 API 响应 | 修 chart 生成逻辑 |
| 澄清死循环 | slots 合并未写入 | 查 qa_session.slots_json | 修 merge 逻辑 |
上线 Checklist
数据层
-
dws_sales_metric_wide已 seed,含华东区、华北区样例 - 作废行
is_valid='0'存在且被过滤验证通过 - 三个核心指标元数据与取数逻辑齐全
服务层
-
validate_data_pipeline.py全绿 -
/api/ask标准问法 10 条快照测试通过 - validate_sql 攻击样例 5 条均被拦截
前端层
- 问数抽屉可完成演示 1–4
- 澄清 chips 可点击
- SQL 折叠面板可展开复制
- agent_flow 时间线有数据
运维层
- 只读 DB 账号配置完成
- sql_audit_log 有写入
- 演示环境 API Key / 模型配置有效
自动化验证命令
1 | |
演示话术建议
- 先讲元数据驱动而非 LLM 写 SQL
- 现场展示 agent_flow 各步耗时
- 展开 SQL 强调
is_valid = '1'与表白名单 - 故意输入缺周期问法,展示追问
- 对比作废行不存在于结果,证明数据质量过滤
本章小结
- 上线验证 = seed 流程 + 指标对齐 + 标准问法 + 排障表 + checklist
- 宽表必须含
is_valid正反样例,验证 default_filter 生效 - 演示脚本覆盖单轮、追问、多指标三类场景
- 自动化 golden test 保证回归可复现
思考题
- 若演示环境与生产元数据不同步,如何防止「演示行、生产崩」?
- golden file 中 SQL 字符串比对要不要规范化空白与反引号?
- 排障表里还应增加哪三类「用户可见」错误提示?
系列导航
| 篇 | 主题 |
|---|---|
| 01 | 架构全景 |
| 02 | Text-to-SQL |
| 03 | RAG 指标库 |
| 04 | 多轮澄清 |
| 05 | 安全校验 |
| 06 | Vue3 工作台 |
| 07 | 本篇 |
| 08 | 反馈闭环 |