智能问数最容易让人产生一种错觉:
只要大模型足够强,企业里的数据问题就能直接用自然语言解决。
业务问一句"这个月哪个区域利润下降最多",几秒钟后数字、图表、结论一起出来。相比过去找数据、写SQL、做报表,这种体验确实跨了一大步。
但真正把智能问数放进企业环境,问题很快就会暴露出来。
同一个"销售额",业务和财务可能得到两个结果;问"华东利润为什么下降",系统分析得头头是道,最后发现"利润"取的是毛利;问"今年客户数",结果又因为订单明细重复,把一个客户统计了十几次。
智能问数最危险的不是答不出来,而是给出一个逻辑完整、图表漂亮、实际上却错了的答案。
所以真正测试智能问数,不能只问几个"今年销售额多少"这样的简单问题,而应该拿真实经营场景去压:
-
"华东利润为什么下降?"
-
"下降主要来自哪些产品?"
-
"A产品继续拆到客户。"
-
"为什么这个客户销售额下降?"
这类问题才会真正碰到数据、口径、分析路径和计算逻辑。
如果正在验证这类场景**,FineBI Next**的AI智能分析可以直接拿企业数据做这种连续测试:
简单问题可以直接对话分析,复杂任务也可以先确认业务场景、指标口径、分析对象和输出要求,再形成分析计划后执行。重点不只是看"第一问有没有答案",而是观察整个分析过程能不能沿着同一套数据和口径持续往下走。
FineBI Next 需要自取:https://s.fanruan.com/68lv7(复制到浏览器)

因为一句自然语言真正变成一个可信数字,中间至少要经过:
数据层 → 语义层 → 模型层 → SQL层。
任何一层发生偏差,错误都会继续向后传递。
一、数据层:模型理解对了,也可能算出错误答案
先看最底层。
用户问:
"今年有多少个有效客户?"
看起来只是一个计数问题,但系统第一步就要判断:
数据到底在哪里?
企业里可能同时存在CRM客户表、ERP订单表、会员系统、财务客户档案。
同一个客户,在CRM里编号是C001,在ERP里可能是10086,在电商系统里又只留下手机号。
如果这些主数据没有统一,模型根本不知道:
三条记录其实是同一个客户。
再往下,还有三个非常典型的问题。
数据质量
订单表里可能同时存在取消订单、测试订单、重复订单、退款订单。
如果这些数据没有提前治理,模型只负责SUM,最终算得越快,错得越快。

数据粒度
订单主表通常是一行一个订单,商品明细表却是一行一个SKU。
一张1000元的订单有5个商品,关联以后就变成5行。
如果后续直接汇总订单金额:
1000元可能瞬间变成5000元。
数据时效
业务系统已经更新到下午4点,但分析库每天凌晨同步一次。
此时用户问:
"今天销售额多少?"
SQL没有任何问题,模型理解也没有任何问题,但回答的数据实际上只到昨天晚上。
所以数据层真正需要解决的不是"AI会不会找表",而是四件事:
数据从哪里来、粒度是什么、表之间怎么关联、数据更新到什么时候。
这也是智能问数很容易走偏的第一步:一开始就把整个数据库交给模型,让AI自己在几万张表里判断哪些能用。
实际落地时,更稳妥的方式是先把可分析范围控制住。比如在FineBI Next 里,可以直接指定本次分析使用的数据;如果业务人员不知道具体表名,也可以描述需求,让AI从数据目录中匹配候选数据,确认以后再加入当前分析。

这样做的意义并不只是"少选几张表"。
而是先解决一个更基础的问题:
这次答案,到底建立在哪些数据之上?
如果连输入数据都无法解释,后面的语义理解、模型推理再复杂,也很难谈可信。
二、语义层:真正难的不是中文,而是企业内部没有统一语言
数据正确之后,第二层问题更加隐蔽。
业务问:
"这个月收入是多少?"
数据库里可能根本没有一个字段叫"收入"。
只有:
order_amount
payment_amount
invoice_amount
revenue_amount
到底应该取哪一个?
这不是语言理解问题,而是业务语义问题。

同样一个词,在不同部门甚至可能代表不同东西。
例如"客户数":
-
市场部门可能统计注册客户;
-
销售部门统计成交客户;
-
财务统计确认收入客户;
-
运营部门统计最近30天活跃客户。
四个人都说"客户数",实际问的是四个指标。
"本月"也一样。
是自然月?
财务期间?
最近30天?
如果集团存在4-4-5财务日历,问题会更加复杂。
因此企业级智能问数必须建立一层:
业务语言与底层数据之间的稳定映射。

至少包括:
指标定义、计算公式、维度定义、业务术语、同义词、时间口径、默认过滤条件。
例如:
营业收入 = 已满足收入确认条件的收入金额;
有效客户 = 最近90天发生有效交易且交易金额大于0的客户;
华东 = 上海、江苏、浙江、安徽......
真正关键的是:
这些规则不能每问一次,让模型重新猜一次。
因为模型今天可能把"收入"理解成订单金额,明天根据另一段上下文又理解成回款金额。
这会产生一个非常严重的问题:
同一句自然语言,没有稳定的数据含义。
所以智能问数建设有一个很重要的原则:
能提前确定的业务规则,不要留给模型临场推理。
模型应该负责判断用户想问什么;
企业自己必须先定义清楚这个东西到底怎么算。
否则所谓智能问数,本质上只是把过去"人与人对口径",变成了"人和AI反复猜口径"。

三、模型层:答不准,很多时候是问题根本没有被正确拆开
很多企业发现智能问数效果不好以后,第一反应是:
换一个更大的模型。
但到了真实经营分析里,模型真正需要解决的远不只是Text-to-SQL。
例如:
"为什么华东利润下降?"
这个问题甚至不能直接写SQL。
它首先应该被拆成一棵分析树。
先判断:
利润下降了多少?

再拆:
利润 = 收入 - 成本。
到底是收入下降,还是成本上升?
如果是收入下降,还要继续拆:
收入 = 销量 × 价格。
是销量少了,还是平均售价下降?
如果销量少了,还可以沿着:
区域 → 产品 → 渠道 → 客户
继续寻找主要贡献项。
到了这里,智能问数已经不是"翻译SQL",而是在做:
理解问题 → 建立假设 → 拆分指标 → 选择维度 → 查询数据 → 验证假设 → 决定下一步。
而现实中的经营问题往往还很模糊。

比如一句:
"帮我看看最近经营情况。"
系统至少还缺少:
看公司还是某个事业部?
最近是7天、30天还是本月?
重点看收入、利润、现金还是库存?
只需要描述结果,还是继续找原因?
如果什么都不确认就直接执行,后面即使SQL完全正确,也可能是在正确地回答一个用户根本没问的问题。
像"为什么华东利润下降"这类问题,真正分析时通常不会一次就把答案找全,而是先确定口径和范围,再沿着结果不断往下拆。比如先看收入和成本,再定位区域、产品、客户,过程中还可能根据新发现临时调整分析方向。
在 FineBI Next 里,这类复杂问题可以先把分析目标、指标口径和分析范围梳理清楚,再按照形成的分析思路逐步执行。过程中发现某个区域异常,也可以直接沿着当前结果继续拆产品、客户或其他维度,不需要每换一个问题就重新交代前面的背景。

这种方式更接近真实的数据分析过程:不是把一句话机械地翻译成SQL,而是围绕一个业务问题持续验证、缩小范围,直到找到真正值得解释的异常。
比如:
"为什么利润下降?"
接着问:
"哪个区域影响最大?"
再问:
"华东按产品拆一下。"
继续:
"只看A产品,再拆客户。"
这几个问题看起来都是独立的自然语言,实际上必须共享前面的:
时间范围、利润口径、筛选条件和分析对象。
所以多轮问数真正重要的,并不是聊天体验。
而是:
上下文不能在分析过程中悄悄漂移。
模型越往下分析,越应该继承已经确认过的条件,而不是每一轮都重新解释一次世界。
四、SQL层:最危险的错误,是数据库根本不会报错
当前面三层都正确以后,最后才来到SQL。
这一层的问题非常典型:
SQL执行成功,不代表SQL逻辑正确。
例如用户问:
"今年购买A产品的客户有多少?"
模型写:
COUNT(customer_id)
语法没有任何错误。
但一个客户可能购买了10次。
真正需要的可能是:
COUNT(DISTINCT customer_id)
再比如订单主表和商品明细表关联。

一张订单金额1000元,对应5条商品明细。
如果关联完成以后直接:
SUM(order_amount)
结果就可能变成5000元。
还有大量错误都隐藏得非常深:
-
下单时间还是付款时间?
-
INNER JOIN还是LEFT JOIN?
-
退款订单要不要冲减?
-
NULL按0处理还是排除?
-
同比使用自然日还是完整可比周期?
-
金额单位到底是元、千元还是万元?
这些问题最危险的地方就在于:
数据库不会提醒你。
它只会忠实执行。
于是一个错误查询可以顺利完成,继续生成折线图、同比变化、异常原因,甚至最后形成一段非常专业的经营结论。
一个底层计算错误,会被AI包装成越来越完整的错误答案。

所以企业真正要控制的不能只是:
SQL能不能跑。
还需要验证:
-
用了哪张表?
-
选了哪个字段?
-
聚合粒度是什么?
-
过滤条件是什么?
-
关联以后数据量有没有异常膨胀?
-
最终结果是否落在合理区间?
核心指标最好还要建立"基准值"。
例如财务已经确认本月营业收入约为1.02亿元,而一次智能问数突然得到1.86亿元。
系统此时最应该做的不是立即解释:
"营业收入同比增长42%。"
而是先判断:
为什么这个数字和可信基准差了8000多万?
这也是智能问数不能只停留在"聊天框"的原因。像 FineBI Next 这类场景,AI完成分析后,结果还可以继续形成图表、仪表板或分析报告,并将需要保留的内容归档到项目中。对于重要经营分析,更合理的做法是把AI生成的结果继续放回既有的数据分析过程里,与原有指标、图表和业务结果交叉检查,而不是把聊天窗口里的第一次回答直接当成最终结论。

问数的终点不应该是"AI给了答案",而应该是"这个答案经得起复核"。
五、真正提高准确率,要建立一套"错误定位机制"
讲到这里,会发现一个非常现实的问题。
当业务反馈:
"这个数不对。"
-
到底应该找谁?
-
找数据开发?
-
找指标负责人?
-
找AI团队?
-
还是找数据库?
如果企业没有错误定位机制,每一次问数失败最后都会变成一句:
"AI还是不太准。"

但这句话其实没有任何优化价值。
因为"答错"只是结果,真正需要找到的是:
它从哪一步开始错的。
可以按照前面的四层快速判断。
-
如果人工SQL和智能问数结果都错,优先检查数据层;
-
如果数据本身没问题,但AI把"收入"理解成"订单金额",检查语义层;
-
如果指标识别正确,但用户问"为什么下降",模型只给了一张趋势图,没有继续拆原因,问题更多出在模型的分析规划层;
-
如果问题、指标、分析路径都正确,最终数字仍然对不上,就要继续追到SQL和计算逻辑层。
所以真正成熟的智能问数,最好不要只保留最后一句答案,而应该保留完整的分析过程。
至少能够回看:
用户原始问题 → 使用了哪些数据 → 识别了哪些指标和维度 → 采用什么筛选条件 → 做了哪些分析步骤 → 得到了什么结果。
实际用FineBI Next做这类分析时,过程可回看也很重要。一次问数往往不会停在一个数字上,前面可能已经经过数据选择、口径确认、分析步骤拆解以及多轮下钻,后面的图表和分析结果也可以继续保留下来。这样业务发现某个结论异常时,不必重新从聊天记录里猜"AI当时到底怎么算的",而是可以沿着已有分析过程往前追,看问题究竟出在数据、指标还是某一步分析逻辑。

这和普通搜索最大的区别就在这里。
搜索错了,可以重新搜一次;
但经营分析一旦进入预算、经营会、绩效或者管理决策,结果为什么得出来,必须能够解释。
更进一步,还可以给每一次重要问数保留一条"证据链":
-
问题是什么;
-
用了什么数据;
-
口径是什么;
-
时间范围是什么;
-
过滤了什么;
-
怎么计算;
-
为什么得出这个结论。
这样智能问数才能逐渐从"结果型工具",变成一套可追踪、可复核、可持续优化的分析系统。
否则一句"结果不准",最后往往只能靠模型团队反复调Prompt。
而真正有价值的优化,应该是能够明确回答:
这次错误发生在哪一层,下次应该改哪一层。
结语
智能问数为什么答不准?
很多时候,并不是模型真的不够聪明。
而是企业把太多本来应该提前确定的事情,都留给了模型临场猜测。
-
数据从哪里来,让它猜;
-
收入怎么算,让它猜;
-
"最近"到底多久,让它猜;
-
用户想看结果还是找原因,让它猜;
-
该关联哪张表,继续让它猜。
每一层看起来可能只有一点不确定,但这些不确定一旦向后传递,最终就可能得到一个:
SQL正常、图表漂亮、解释完整,却从根上就错了的答案。
因此真正可靠的智能问数,不应该只建设一个自然语言入口。
它背后至少要形成一条完整链路:
可信数据 → 统一语义 → 正确理解 → 合理拆解 → 准确计算 → 结果验证。
模型真正应该发挥价值的地方,是那些需要理解、推理、探索和归因的环节;
而企业已经明确的数据关系、指标口径、计算规则和分析方法,则应该尽可能沉淀下来。
智能问数真正成熟的标志,不是AI什么问题都敢回答。
而是:
该确定的地方足够确定,该推理的地方再交给AI。