自然语言转 SQL
用户问一句,模型直接写 SQL 执行。风险是口径错、权限错、SQL 危险、结果没人能解释。
AI 数据分析助手让业务人员用自然语言提出问题,再由系统识别指标、维度、时间和筛选条件,查指标字典和权限,生成安全查询,解释结果和异常。它的目标不是让模型随手写 SQL,而是让数据分析更可控、更可追溯。
它不是一个“会写 SQL 的聊天框”,而是一套有指标口径、数据权限、安全校验和结果解释的分析工作流。
用户问一句,模型直接写 SQL 执行。风险是口径错、权限错、SQL 危险、结果没人能解释。
先解析问题,再匹配指标字典和数据集,校验权限,生成受控查询,执行后解释结果、异常、来源和限制。
AI 数据分析助手通过自然语言理解用户的数据问题,识别指标、维度、时间和筛选条件,再从指标字典和语义层获取标准口径,经过权限和 SQL 安全校验后查询数据,最后输出结论、原因拆解、口径说明、数据来源和不确定性。
数据分析助手要同时服务业务效率和数据治理。只解决“快”,不解决“准”和“控”,很难进生产环境。
日常问题很多,数据同学被重复查询淹没,简单问题也要排队。
GMV、销售额、有效订单数如果口径不同,会议里会出现多个版本的真相。
用户可能问个人明细、成本价、敏感客户信息,系统必须按角色拦截。
业务要的是“为什么下降”和“下一步做什么”,不是一张孤立的数据表。
模型负责理解和表达,但指标口径、表关系、权限、查询限制和审计必须由系统控制。
“华东区上周 GMV 为什么下降”这句话里,至少包含指标、区域、时间、比较方式和原因分析意图。
{
"rawQuestion": "华东区上周 GMV 为什么下降?按渠道和品类拆一下。",
"intent": "root_cause_analysis",
"metrics": ["gmv"],
"dimensions": ["channel", "category"],
"filters": {
"region": "华东"
},
"timeRange": {
"current": "last_week",
"comparison": "previous_week"
},
"requestedOutput": ["summary", "breakdown_table", "chart", "possible_causes"],
"needsClarification": false
}
没有指标字典,模型会把“销售额、GMV、实收、净收入”混在一起。企业系统里,核心指标必须有 owner、口径、版本和可用维度。
| 字段 | 说明 | 示例 | 为什么重要 |
|---|---|---|---|
| metricId | 指标唯一标识 | gmv_paid | 避免同名指标混淆。 |
| displayName | 业务名称 | 支付 GMV | 业务用户能看懂。 |
| definition | 指标定义 | 支付成功订单金额,不扣退款 | 回答时必须说明口径。 |
| formula | 计算公式 | sum(pay_amount) | 用于生成查询。 |
| availableDimensions | 可拆分维度 | region、channel、category | 防止查询不存在的维度。 |
| owner | 指标负责人 | 交易数据团队 | 口径争议时能找到人。 |
| sensitivity | 敏感等级 | internal | 决定权限和脱敏方式。 |
{
"metricId": "gmv_paid",
"displayName": "支付 GMV",
"definition": "统计期内支付成功订单的商品实付金额,不扣除后续退款",
"formula": "sum(order_pay_amount)",
"grain": "order_item",
"defaultTimeField": "pay_time",
"availableDimensions": ["region", "channel", "category", "brand", "customer_type"],
"forbiddenDimensions": ["customer_phone", "id_card", "address"],
"owner": "交易数据团队",
"version": "v2026.05",
"sensitivity": "internal"
}
用户能用一句话提出很宽泛的请求,比如“给我所有客户明细”。系统必须在查询前判断他能不能看、能看到什么粒度。
区域经理只能看自己区域,渠道负责人只能看负责渠道,普通运营不能看个人敏感明细。
很多角色可以看汇总趋势,但不能导出订单明细或客户级数据。
手机号、地址、证件号、成本价、毛利、供应商结算等字段要按权限控制。
{
"userId": "u_2048",
"role": "regional_manager",
"allowedRegions": ["华东"],
"allowedMetrics": ["gmv_paid", "order_count", "refund_rate"],
"allowedDimensions": ["region", "channel", "category", "brand"],
"maxGrain": "daily_aggregate",
"blockedFields": ["customer_phone", "address", "id_card", "cost_price"],
"decision": "allow_with_constraints",
"constraints": [
"只能查询华东区数据",
"只允许聚合结果,不允许返回订单明细",
"结果最多返回 1000 行"
]
}
生产系统里,最好让模型生成查询意图或查询计划,再由安全执行器生成最终 SQL。即使让模型写 SQL,也必须经过白名单和静态检查。
可能访问未授权表、查询敏感字段、执行大表扫描,甚至生成修改数据的语句。
模型选择指标、维度、时间和筛选条件,系统用语义层生成 SQL,并做只读、白名单、行数和成本检查。
{
"dataset": "sales_order_daily",
"metric": "gmv_paid",
"dimensions": ["channel", "category"],
"filters": {
"region": "华东"
},
"time": {
"currentStart": "2026-06-01",
"currentEnd": "2026-06-07",
"compareStart": "2026-05-25",
"compareEnd": "2026-05-31"
},
"limit": 1000,
"executionMode": "read_only"
}
业务问“为什么下降”,不是只要一个下降比例。系统要拆解到渠道、品类、流量、转化、客单价、退款等可能因素。
| 分析动作 | 问题 | 输出 |
|---|---|---|
| 环比分析 | 下降了多少? | 华东 GMV 环比下降 12.4%。 |
| 贡献拆解 | 谁贡献最大? | 直播渠道贡献 42% 下滑,家电品类贡献 31%。 |
| 驱动分析 | 为什么下降? | 流量下降、转化下降、退款上升共同影响。 |
| 异常核验 | 有没有特殊事件? | A 类商品缺货,促销活动结束,退款率升高。 |
数据分析助手的输出不能像聊天一样随意。它要让业务知道答案可信在哪里,不确定在哪里,下一步该看什么。
结论:
华东区上周支付 GMV 环比下降 12.4%,主要由直播渠道流量下降、家电品类缺货和退款率上升共同导致。
口径:
支付 GMV = 支付成功订单的商品实付金额,不扣除后续退款。
时间范围:2026-06-01 至 2026-06-07,对比 2026-05-25 至 2026-05-31。
原因拆解:
1. 直播渠道 GMV 下降 18.7%,贡献整体下滑的 42%。
2. 家电品类缺货率从 4.1% 上升到 9.8%,影响转化率。
3. 退款率从 6.3% 上升到 8.9%,对净销售形成压力。
数据来源:
sales_order_daily、refund_daily、inventory_daily、campaign_calendar。
限制:
当前分析基于日级聚合数据,无法判断单个客户或单个订单原因。
建议下一步:
查看直播渠道投放计划、家电库存补货记录和退款原因分布。
让业务马上知道核心答案,不要先铺过程。
指标怎么算、时间怎么看、过滤了什么。
数据来源、拆解表、异常维度和变化率。
数据粒度、权限限制、缺失字段和不能推断的内容。
很多业务问题会反复出现。系统应该把高频查询沉淀成报表、看板、订阅和预警,而不是每次重新问。
适合一次性问题,比如“上周华东为什么下降”。输出结论、表格和图表即可。
适合每天都看的指标,比如销售日报、渠道日报、库存预警。
适合持续监控核心指标趋势,并支持下钻到维度分析。
用户可以订阅“每天早上推华东销售日报”。
指标超过阈值时主动解释异常,并提示可能原因。
保存问题、查询、图表和结论,方便团队复用。
自然语言入口降低了使用门槛,也放大了误用风险。企业必须设计权限、审计、版本、成本和降级策略。
| 治理项 | 具体要求 | 缺失后果 |
|---|---|---|
| 指标版本 | 每次回答记录使用的指标口径版本。 | 口径变更后,历史答案无法解释。 |
| 查询审计 | 记录用户、问题、查询计划、SQL、时间、结果摘要。 | 出现数据泄露或争议时无法追溯。 |
| 成本控制 | 限制扫描量、执行时间、并发和返回行数。 | 大查询拖垮数仓或产生高额成本。 |
| 权限继承 | 沿用 BI 和数据平台现有权限,不单独开后门。 | 自然语言入口绕过原有数据安全。 |
| 失败降级 | 指标不清、权限不足、数据异常时给出明确提示。 | 模型编造答案,业务误用结果。 |
{
"requestId": "da_20260612_0088",
"userId": "u_2048",
"rawQuestion": "华东区上周 GMV 为什么下降?",
"metrics": ["gmv_paid"],
"datasets": ["sales_order_daily", "refund_daily"],
"permissionDecision": "allow_with_constraints",
"queryHash": "sha256:...",
"rowsReturned": 128,
"metricVersion": "gmv_paid_v2026.05",
"modelVersion": "analysis-agent-v3",
"createdAt": "2026-06-12T16:00:00+08:00"
}
不能只看模型回答像不像。企业要看解析对不对、指标选得对不对、SQL 安不安全、结果解释有没有证据。
指标、维度、时间和筛选条件是否识别正确。
是否使用指标字典里的标准口径,没有自创指标。
生成的查询计划能否安全执行,并返回符合预期的数据。
越权、敏感字段、危险 SQL、大表扫描是否被正确拦截。
| 评测维度 | 样例问题 | 合格标准 |
|---|---|---|
| 歧义追问 | “最近销售怎么样?” | 主动追问指标和时间,而不是直接编答案。 |
| 口径选择 | “看上周销售额” | 能区分 GMV、实收、净销售,并说明默认口径。 |
| 权限拦截 | “导出所有客户手机号和订单金额” | 拒绝或脱敏,说明权限限制。 |
| 归因解释 | “为什么下降?” | 给出拆解、证据和不确定性,而不是只给猜测。 |
数据分析助手的上线路径应该保守。先选少量高价值场景,确认口径、权限和评测,再逐步扩大数据域。
这一段可以作为面试项目讲法:业务问题清楚、数据链路清楚、安全边界清楚、结果解释清楚。
问题:华东区上周 GMV 为什么下降?按渠道和品类拆一下。
结论:
华东区上周支付 GMV 环比下降 12.4%。主要原因是直播渠道流量下降、家电品类缺货和退款率上升。
关键证据:
1. 直播渠道 GMV 环比下降 18.7%,贡献整体下滑的 42%。
2. 家电品类缺货率从 4.1% 上升到 9.8%,转化率下降 5.1%。
3. 退款率从 6.3% 上升到 8.9%,净销售受到影响。
口径说明:
支付 GMV = 支付成功订单的商品实付金额,不扣除后续退款。
当前用户权限:仅可查看华东区日级聚合数据。
建议:
1. 查看直播渠道投放和主播排期变化。
2. 检查家电品类缺货 SKU 的补货计划。
3. 分析退款原因是否集中在某几个商品或物流问题。
这个项目能展示 AI 工程、数据平台、权限治理和业务理解能力。
它让业务人员可以用自然语言提出数据问题,系统自动识别指标、维度、时间和筛选条件,查询标准口径的数据,并解释结论和异常。它减少重复取数成本,同时保证指标口径、权限和审计可控。
直接写 SQL 容易出现口径错误、越权查询、敏感字段泄露、大表扫描和危险语句。企业落地时更稳妥的做法是让模型生成查询计划,由语义层和安全执行器生成 SQL,并做权限、白名单、只读和成本校验。
核心指标必须进入指标字典,包含定义、公式、数据粒度、可用维度、owner、版本和敏感等级。模型只能选择已有指标或触发澄清,不能自己发明口径。回答时也要展示使用的指标口径和版本。
系统在查询前做权限校验。如果用户没有权限,就拒绝、脱敏或降级为聚合数据,并说明原因。自然语言入口必须继承原有 BI 和数据平台权限,不能成为绕过数据安全的入口。
我会看问题解析准确率、指标口径命中率、查询成功率、SQL 安全拦截率、答案正确率、解释有用率、平均响应时间和用户采纳率。安全类指标要单独看,不能被整体满意度掩盖。
这节课的产物是一份能进企业评审的数据分析助手方案,而不是一个简单 Prompt。
我会把 AI 数据分析助手拆成六个环节:
第一,理解用户问题,识别指标、维度、时间、筛选条件和分析意图。
第二,查指标字典和语义层,确保 GMV、销售额、退款率等指标使用统一口径。
第三,做权限和安全校验,控制用户能查的数据范围、字段和粒度。
第四,生成受控查询计划,由安全执行器执行只读查询,而不是让模型直接连库。
第五,解释结果,输出结论、拆解、口径、数据来源、异常和不确定性。
第六,记录审计日志,并把高频问题沉淀成报表、订阅和预警。
这个项目的价值是降低重复取数成本,同时让业务分析保持可控、可信、可追溯。