把 Anthropic Text-to-SQL 从 21% 提升到 99% 的核心方法论,落地为孔明数据分析的标准流程
表象:AI 写 SQL 能力差。真相:字段映射三大瓶颈——AI 找不到对的表。
AI 数据分析的本质不是"生成 SQL",是"在正确的数据源上查询正确的问题"。写 SQL 是下游能力。
从下到上构建:数据基础 → 语义层 → Skill 层 → 验证闭环。每一层都解决一类问题。
原则:每个业务概念 ↔ 唯一官方数据源,元数据像代码一样严格管理
| 行动 | 说明 |
|---|---|
| 元数据即代码 | schema 改动必须同步更新文档 / PR(强制 CI 检查) |
| 概念绑定数据源 | "活跃用户" = dwd.user_active_30d(强制唯一映射) |
| 版本快照 | 每个 AI 调用必须记录当时的数据源版本,支持回溯 |
last_login_at > now() - 7d 还是别的原则:业务指标固化为可调用函数,强制 Agent 优先调用
| 行动 | 说明 |
|---|---|
| 指标函数化 | "活跃用户" → metric_active_user(scope, time_range),所有 AI 调用必须走函数 |
| 看板对齐 | 函数结果与官方 dashboard 100% 一致(不是 99%,是 100%) |
| 强制优先级 | 业务概念问题必须调函数,不准 AI 自己写 SQL |
原则:成对技能包 + 对抗审查机制
| 元素 | 说明 |
|---|---|
| 成对技能 | "知识路由"(找表)+ "分析师工作流"(写查询)必须配对使用 |
| 对抗审查 | 自动追问业务边界问题("排除测试账号吗?""包含退款订单吗?") |
| 薄知识型 Skill | 不堆历史 SQL 模板,只提供"导航图 + 边界规则" |
堆砌历史 SQL 模板 → 准确率提升 < 1% | 精准导航图 + 边界规则 → 准确率提升 70%+
原则:离线评测 + 对抗审查 + 异常自动修复
| 行动 | 说明 |
|---|---|
| 离线周测 | 每周跑评测题库,追踪准确率是否退化 |
| 对抗审查专抓隐形 bug | 重点抓"格式完美但计算错误"的结果(最危险) |
| 异常自动触发修复 | 数字对不上 dashboard → 自动告警 → 触发 schema 修复 |
基于四层解法,我提炼出 8 条可立即落地的原则。每条都对应一个祖宁真实场景。
字段名 | 类型 | 业务定义 | 最近更新时间 | 来源 URL
数据源注册表.md 注册任务列表 视图domain-manager skill~/.openclaw/workspace/skills/# ✅ 正确
def 祖宁_求职进度查询(状态="进行中"):
"""查询祖宁当前求职任务进度"""
return feishu_bitable_app_table_record.list(
app_token="Rc0SbiVPgaIIu3s76WLctbUBn4e",
filter={"status": 状态}
)
# ❌ 错误
# LLM 自己理解任务、猜字段、写 SQL
应用方式:先输出 3 个边界问题 → 祖宁确认 → 再输出结果
| 概念 → 数据源映射 | ✅ 必须 |
| 调用函数封装 | ✅ 必须 |
| 边界规则 | ✅ 必须 |
| 历史查询模板 | ⚠️ ≤ 3 个 |
| 详细字段说明 | 按需 |
基于上述 8 条原则,我对自己做以下升级。每一块都对应一个具体落地位置。
位置:~/.openclaw/workspace/Openclaw智库/数据源注册表.md
| 数据源 | 业务概念 |
|---|---|
| 飞书多维表格 | 求职进度 / 任务清单 |
| AKShare | 三一持仓 / 资金流 |
| nginx + DNS | 域名健康度 |
位置:~/.openclaw/workspace/skills/data-analysis-anthropic-method/
触发条件(满足任一即强制激活):
位置:skills/.../eval_questions.md
点击展开查看祖宁场景的真实评测题。每道题都覆盖一类数据查询的边界陷阱。
祖宁_求职进度查询() 函数 → 反查飞书多维表格 100% 对账 → 输出结果 + 数据源标注。
sany_daily_analysis.py(已封装好)→ 数字与 AKShare 实时数据 100% 对账 → 输出盈亏(基于祖宁成本表交叉验证)。
domain_health_check() 函数 → 100% 对账最近 7 天日志 → 输出 HTTP 200/301/500 分布 → 异常时立即告警。
message_type 过滤 → 输出各渠道未读数(p2p/group/mention) → 标注数据获取时间戳。
health-check.sh 函数 → 100% 对账最近 7 天 log → 异常时立即告警 → 输出每日备份成功率。
ls + wc -l 统计 ~/.openclaw/workspace/skills/ → 输出分类矩阵(系统/分析/创作/部署)→ 与 SKILL.md 索引 100% 对账。
财务目标.md(结构化)→ 解析该文件 → 与 MEMORY.md 交叉验证 → 输出"目标/实际/完成率"三列。
domain-manager skill 状态对账 → 输出 4 列(域名/IP/状态/SSL 有效期)。
created_time 过滤今日 → 按 status 聚合 → 输出 4 个数字(总/已完成/进行中/未开始)+ 完成率。
核心 7 个维度的根本性变化。每一行都对应一个具体的工程实践。
| 维度 | 升级前 | 升级后 |
|---|---|---|
| 字段查找 | AI 自己猜,可能错 | 数据源注册表 + 函数调用 |
| 业务概念歧义 | "活跃用户"模糊定义 | 强绑定唯一查询路径 |
| 边界处理 | 漏掉测试账号/退款 | 自动 3 问审查 |
| 数字对账 | "差不多" | 100% 反查验证 |
| 异常检测 | 难发现"格式完美但错" | 强制 dashboard 对账 |
| 退化追踪 | 没有 | 每周离线评测题库 |
| 历史经验复用 | 堆 SQL 模板(无效) | 薄知识 + 导航图 |
三个真实场景的对比,展示方法论落地前后的差异。
祖宁_求职进度查询() 函数sany_daily_analysis.py(已封装好)health-check.sh 函数AI 数据分析的本质不是"写 SQL",是"在正确的数据源上查询正确的问题"。
堆砌历史 SQL 模板无效(准确率提升 < 1%),真正需要的是精准导航图——明确告诉 AI"这个问题该查哪个表"。
不要试图一次做完所有事。从这三个最小动作开始,立刻看到准确率提升。
元数据 + 函数化指标
每个业务概念绑定唯一查询路径,所有调用走函数。
10 道追踪退化
覆盖简单查询、关联查询、边界判断、反向陷阱。
导航图 + 边界规则
不堆 SQL 模板,只写"这个概念该查哪张表"。
本次升级的 8 个具体动作,每个都对应一个落地位置。