让 LLM 参与数据分析前,先补齐这三道护栏

1175 字
6 分钟
让 LLM 参与数据分析前,先补齐这三道护栏

让 LLM 回答“上周华东收入为什么下降”这类问题,真正困难的并不是把自然语言翻译成 SQL。模型可以帮助理解问题、补全查询和解释结果,但它不知道指标口径是否更新,也不应天然拥有触碰全部数据的权力。把它放进数据分析流程前,先把数据、执行和结论三个环节约束清楚,回答才有被复查的基础。

可信的数据上下文#

模型看到的上下文应来自受维护的语义层,而不是临时拼接的表名清单。每个可用指标至少说明定义、时间字段、所属数据源、更新频率和常见过滤条件;维度的枚举值、主键关系与脱敏规则也要能被检索。这样,“收入”才能被解析成约定的已支付金额,而不会把退款前的订单金额当作同一件事。

上下文还应有版本和责任人。指标定义改动后,应同步更新可供模型读取的说明,并保留变更记录。模型可以引用这些定义,却不应自行发明口径;遇到名称相近、字段含义不明或数据新鲜度不足时,应要求澄清,或把不确定性写在回答里。

模型提议,执行权限归系统#

LLM 的职责是提出候选 SQL 和解释计划,不是获得数据库账号。服务端应解析候选语句,只允许受控数据集、已批准的表列和只读语法;禁止多语句、写入、导出、权限变更和绕过租户条件。执行器用独立的只读身份运行,并在网络、超时、扫描量和返回行数上设置上限。用户身份和数据域授权仍由系统验证,不能让提示词代替权限判断。

一个紧凑的流程可以写成:

用户问题 -> LLM 候选 SQL -> 解析 / 表列白名单 -> 用户与数据域授权策略门
-> 只读且限行、强制执行授权的执行器
-> 指标校验 -> LLM 解释

其中,解析阶段应把 SQL 变成结构化语法树,再检查表、列、函数和条件,不能只靠关键词拦截。白名单只界定可查询的结构;执行器必须在每次请求中按用户身份和数据域授权策略强制判定,不能由 LLM 或白名单代替。执行前还可自动补上时间范围、租户过滤和 LIMIT。审计日志应记录问题、经过审批的查询、执行身份、耗时和结果摘要,便于定位错误,但日志本身也要避免保存不必要的敏感明细。

结果必须可校验#

自然语言回答不能遮住查询条件。每次输出至少以符合访问策略的脱敏形式暴露时间范围、数据来源、返回行数和实际过滤条件;若用到了聚合,也要说明指标口径。这样读者可以判断“下降”是按自然周、滚动七天还是某个业务周期计算,也能知道结果来自正式宽表还是尚未完成刷新的明细表。

数值必须来自已执行的查询结果,模型不能补全缺失的小数、增长率或排名。对关键指标,系统可比较历史区间、总分项是否相加一致、空值比例和异常阈值;必要时再跑一条独立的对照查询。空结果、明显异常或执行超时都不是“没有变化”的证据,回答应明确说明无法得出结论,并给出可复查的状态,而不是把失败包装成业务解释。

同样要区分事实与推测。查询能说明某时间段、某筛选条件下的数值变化;“促销结束导致下降”属于待验证的假设,需要结合活动、价格、渠道或实验数据进一步检验。LLM 可以整理假设和下一步检查,但不应把相关性写成因果结论。

更稳妥的落地方式,是先选少量口径稳定、敏感度可控且已有人工分析流程的指标,限定在只读问答和结果复核场景中试运行。等到数据目录、授权审计和校验规则经得起日常使用,再逐步扩展范围;不应一开始就把所有数据资产交给一个会生成 SQL 的对话框。

让 LLM 参与数据分析前,先补齐这三道护栏
https://bugengxin.github.io/posts/llm-data-analysis-guardrails/
作者
Bugengxin
发布于
2026-07-14
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Bugengxin
当一个故事要结束的时候,我们总会想起它的开始,就像是一切回到了从前。
公告
暮色漫游者 · 此间小叙

"行囊里装着代码与星光,走到哪,写到哪。"

这里记录着代码拾贝、日暮琐记,和偶尔的夜航独白。旅人随风而行,不定期更新,但每一篇都出自真心。

茶已煮好,故事待续——愿你今日也有一程温柔的风景。
分类
标签
站点统计
文章
2
分类
1
标签
7
总字数
2,177
运行时长
0
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Bugengxin v0.1
文章许可
CC BY-NC-SA 4.0