共创 · 作者:SummerBetter
个人经验整理;具体效果与验证范围待补充。
结合在不同公司搭建和迭代问数系统的经历,聊聊问数的四个阶段,以及背后的架构演进。
关于 AI 问数,我经历过四个阶段:能查数、能查准、能用数、决策链。
这四个阶段并不是逐一迭代、逐一舍弃的关系。不是到了“能用数”,就不用再关心“能查准”;也不是开始做“决策链”,问数本身的建设就结束了。每个阶段都仍然在向前推进,并为下一阶段提供更好的服务。
如果把这几个阶段连起来看,就会发现:问数最初是一个数据查询问题,随后会变成数据治理问题,再往后,则会推动整个系统从问数工具演进为智能体系统。
一、我理解的问数四个阶段
在我看来,目前问数的行业标杆水平,应当具备下面这些能力:
图 1 · 四个阶段是持续延伸的能力线。越接近经营行动,对底层数据质量与可追溯性的要求越高。
能查数从最早开始持续推进,能查准、能用数和决策链依次加入;新增能力不替代原有能力。
这看起来只有四句话,但真正落实到系统建设上,会涉及很多细节。下面按照我在不同公司搭建问数及迭代系统的经历,展开讲讲这条演进路径。
二、最初的问数:先把 ODPS 云上数据查出来
一开始做问数时,我优先支持的是 ODPS 云上数据源。原因很直接:在当时的业务环境里,ODPS 往往有着最全的业务维度数据。订单、会员、商品、门店等数据汇集在一起,可以支撑比较完整的经营问题。
这个阶段的核心链路并不复杂:用户用自然语言提出问题,AI 理解问题,结合表结构生成 SQL,再执行查询、返回结果。
当时 AI 刚刚兴起,大家对产品的容忍度普遍比较高。只要能够用一句话查出原本需要找数据同学才能拿到的结果,就已经能带来比较直观的价值。
但用得越多,问题越明显。单表查询往往具有较高的精度,而一旦需要关联三至五张表,效果就容易大幅下降。另一个问题是相似语义:同一个业务指标可能出现在多张表里,字段名字看起来也差不多,但实际含义、统计粒度或使用场景并不完全相同,AI 很容易选错。
于是,下一阶段的要求就自然出现了:如何让 AI 在多表关联和相似语义下,仍然能够查准数据?
三、为了查准,需要数据清洗与图数据库的配合
到了这个阶段就会发现,单纯让 AI 更努力地理解表结构是不够的,还必须有数据清洗的配合。需要把字段含义、业务口径以及表与表之间的关系整理清楚,让 AI 有明确的依据。
为了解决多表关联的准确性,我认为目前较好的方法,是建立表、字段级别的图数据库,根据图数据库中的明确关系完成关联,从而让多表查询取得更好的效果。
图数据库里,具体要建立什么?
这里建立的图,主要描述数据结构及业务关系,而不是把业务数据库里的每条订单、每条交易都复制进去。可以先把数据表和字段分别作为节点,再把它们之间的关系建立起来。
- **表节点:**记录表名、业务含义、数据粒度,以及这张表主要服务什么场景。例如,一行代表一笔订单,还是一笔订单中的一件商品。
- **字段节点:**记录字段名称、类型、业务说明,以及它属于哪张表。对于金额、时间、状态等关键字段,补充其具体含义。
- **关联关系:**记录字段之间如何连接,哪些是一对一,哪些是一对多,连接时是否还需要组织、租户或时间等额外条件。
- **指标与业务语义:**将业务叫法、同义词和指标定义关联到具体表字段,帮助 AI 区分名字相近、含义不同的数据。
例如,“销售额”可以对应订单金额,也可以对应支付金额或退款后的净额。如果只提供字段名,AI 很难稳定选择;如果图中同时建立了“指标—业务定义—来源字段—适用场景”的关系,就有了更明确的判断依据。
图 2 · 图数据库保存表、字段和业务语义之间的关系。示例中的关联需以实际数据验证为准。
销售额指标通过口径定义关联到订单表的金额字段;订单表的门店编号和会员编号分别关联门店表和会员表。图中记录关联基数、字段含义和适用条件。
这张图,可以怎样建立起来?
第一步是采集元数据。读取数据源中的表结构、字段类型、注释、已有主外键信息,以及现有 SQL 和数据加工任务里已经使用的关联关系,先建立基础节点和候选关系。
第二步是结合业务数据进行清洗和验证。同名字段不一定具有相同含义,已有 SQL 里的连接方式也需要确认。可以通过字段唯一性、空值比例、关联匹配率以及连接前后行数变化,检查候选关系是否成立。对于关键业务关系,再由数据专家结合业务含义确认。
第三步是补充语义。把业务常用词、指标解释和字段映射填进去,尤其要处理那些“名字相似、口径不同”的指标。比如同样叫销售额,分别按下单时间、支付时间还是结算时间统计,需要在图中明确。
第四步是让图真正参与查询。用户提出问题后,先定位指标和维度,再从图中找到相关表及连接路径,把明确的字段、关联条件和口径交给 AI 生成 SQL。这样,AI 不再面对一堆彼此孤立的表结构,而是沿着已经建立好的关系完成查询。
例如,要查询“某区域不同会员等级的销售额”,系统可以先定位销售额指标,再沿着订单与门店、订单与会员的关系取得区域和等级。对于一对多关系,则需要结合统计粒度安排聚合,避免因为连接后行数增加而重复累计金额。
最后,这张图也需要随着业务迭代而更新。新增表、字段变更、指标口径调整,都应同步反映到图中。到这里,多表关联和相似语义的问题有了更好的解决方式,但另一个问题也开始显现:业务数据的维护成本越来越高。
四、架构的主体,应当从问数变成智能体系统
随着深度使用,这个阶段通常会带来两个问题:一是业务数据维护成本高,二是只是查数还不够,需要更深层次地使用数据。
我认为这里有一个关键点:**你构建的系统,现在不应当只服务于问数了。**如果之前的整体架构就是围绕问数搭建的,那么到了这里,应当考虑进行重构:基于一个 harness 或 loop 底座,把问数作为其中的一个 skill 或专家。
也就是说,架构的主体应当从“问数系统”变成“智能体系统”。问数仍然重要,但它成为整个系统的一项专业能力,可以被其他任务调用,也可以与其他专家共同完成一个业务目标。
在这个架构里,harness 负责把模型、上下文、工具和任务执行过程组织起来;loop 则让系统能够根据执行结果继续向前推进:理解目标、选择下一步、调用工具、观察结果,再决定继续查询、补充分析,还是进入执行。
例如,用户提出“分析这个月某区域销售下滑的原因”,系统不必一次生成一个完整答案。它可以先让问数专家查整体变化,看到结果后再拆分门店、品类或会员维度;发现某个方向值得深入,就继续调用相应专家。前一步的结果,成为后一步工作的依据。
图 3 · 架构主体是智能体系统。问数是其中一个专家,AI 通过 CLI 原子能力构建数据引擎,并在自评测反馈下迭代。
Harness 与 loop 组织专家团协作。问数专家提供数据,其他专家进行归因、决策和执行。AI 通过 CLI 原子能力设计维护数据引擎层,数据引擎基于业务数据建立表和指标,自评测结果反馈给 AI。
基于这样的架构,再去解决数据维护成本和数据深度使用的问题,就会顺手很多。因为系统已经具备了持续执行、使用工具和根据结果调整下一步的基础,不再局限于“一问一答”的查询流程。
五、让 AI 自己设计数据引擎,降低业务维护成本
对于业务数据维护成本高的问题,我现在的做法是:基于业务数据,由 AI 结合数据自行分析、设计一个数据引擎层。这层的所有表和指标,都由 AI 来进行设计。
我们需要做的,是通过 CLI 为它提供原子能力。比如读取表结构、查看样本、执行查询、创建表、更新指标、运行加工任务以及执行评测。AI 将这些能力组织起来,自主构建自己更容易理解和使用的表结构,最终以业务效果来考核整体系统。
这里的“原子能力”,可以理解为一组明确、可组合的操作。每个操作有清晰的输入、输出和执行反馈:建表是否成功,查询返回了什么,评测失败在哪个案例。底层工具负责把动作执行好,AI 负责根据目标决定何时调用、如何组合。
举个例子,如果 AI 发现某一类经营问题总要重复关联订单、门店和商品数据,它就可以结合查询需要设计一张更适合分析的主题表;如果发现多个问题反复使用同一种计算口径,就可以将它沉淀为一个指标。之后的问数便可以复用这些结构,减少每次从原始数据重新理解和拼接的负担。
这也是我理解的真实的 AI 原生架构:不仅是让 AI 使用一套人设计好的数据结构,而是让 AI 参与设计、构建和迭代它自己的数据使用环境。
从专家指导,逐步走向自评测驱动
当然,在最初建立表和指标时,仍然需要业务与数据专家的指导。哪些数据可信、某个指标在公司内部如何定义、哪些关联符合业务事实,这些经验需要在早期传递给系统。
接下来,就要逐步建立自评测体系。把典型业务问题、正确口径和参考结果沉淀为评测案例,AI 每次调整表结构或指标后,都可以运行这些案例,查看是否改善了实际查询效果、有没有影响原来已经正确的问题。
例如,新增一张主题表之后,不只是检查“表有没有建成功”,还要检查:以前复杂的查询是否更容易完成了,统计结果是否与参考结果一致,相似指标是否更容易区分,以及维护和查询成本是否有所下降。
自评测中的参考结果,需要来自已确认的业务口径或数据核验,不能只是让 AI 对自己的输出打分。有了这样的反馈,系统就可以围绕失败案例继续调整,逐步形成“分析数据—设计模型—构建表和指标—评测—再改进”的循环。
随着这个循环运转起来,业务和数据专家就不必长期陷在大量重复维护中,而可以更多地关注业务效果和关键口径。这也是这一层架构要解决的核心问题。
六、问数进入专家团,数据才能被更深地使用
对于“能用数”和“决策链”的问题,基于 harness 架构,可以构建多专家、多技能体系,让问数作为其中的一个专家参与工作。
问数专家的职责,是提供辅助数据。其他专家基于这些数据进行深度归因分析,再进一步参与经营判断。这样,数据就不再止于界面上的一张表或一张图,而是成为其他 skill 的输入。
例如,用户希望了解某品牌经营表现变差的原因,问数专家可以先提供销售、客流、会员、商品等维度的数据;归因分析专家根据这些数据拆解变化,提出需要进一步验证的问题;问数专家再补充查询。经过几轮协作,专家团逐步形成更完整的判断。
在这个过程中,harness 保存任务上下文和各专家的结果,loop 推动“提出问题—补充数据—分析—再查询”的过程。数据专家不需要一次就把所有可能用到的数据查完,而是随着分析需要持续提供支持。
为了让专家之间协作顺畅,问数返回的内容除了数据本身,还应包含相应口径、时间范围和必要说明。这样,其他专家能够知道自己使用的是什么数据,不至于在后续分析里误解指标。
至于是否真正参与业务决策,则因“司”而异。有的公司会先让系统提供分析和建议,有的会让业务人员确认后执行,有的则会在适合的场景下,允许系统根据数据触发经营动作。
当执行结果再回流为新的数据,系统就可以继续观察动作是否有效,决定下一步如何调整。至此,问数才从数据查询进一步进入经营执行闭环。
七、走向商业化,再把多数据源补齐
当这样一整套系统建立起来,接下来很自然就会考虑商业化:如何把产品提供给更多公司?
这时会遇到新的问题。目标客户的体量不同,数据基础也不同,不一定都有 ODPS 云上数据,使用的数据库也可能多种多样。所以,系统需要进一步支持多数据源查询。
沿着前面的架构,实现这一步的核心思路并不难:**添加一个 SQL 执行引擎,根据不同数据源进行区分和查询。**上层问数专家继续负责理解业务问题和组织查询,下层执行引擎负责把查询交给相应的数据源。
具体来说,可以为不同数据源提供对应适配,处理连接配置、SQL 方言、执行状态与结果返回。这样,每新增一种数据库,主要扩展的是执行层,而不需要重新搭建整个问数和专家协作流程。
结构化数据沿着这条路径接入;对于非结构化数据,也可以在同一套工具体系中提供检索与内容读取能力,让问数和其他专家按需使用。
到这里,一个以降低业务人员深度维护负担为目标,同时能够查准数、用好数的问数系统,就逐步建立起来了。也可以看到,虽然系统已经走到了专家协作和决策链,“能查数”这一阶段仍然在通过多数据源接入继续向前推进。
八、最后一个问题:如何让用户敢用查出来的数据?
问数还有一个通用的弊端:AI 是生成式的预测模型,在实际开放式使用中,我们不能期待它每一次都准确。
对于数据查询,这会带来一个很直接的问题:假设一百次查询有九十九次正确,那如何让用户相信,这一次看到的不是错误的那一次?即使整体准确率已经很高,这个疑问仍然存在。
在我看来,现阶段不能只等技术把准确率继续提高,才来解决用户敢不敢用的问题。未来模型能力不断发展,可能从两个九提升到四个九,错误影响进一步降低;但在今天,产品本身也需要提供一种让用户理解和校对结果的方式。
我目前采取的方法是:AI 执行一次查询后,输出的不只是结果,还要把此次实际执行的 SQL 翻译回业务语言,进行语义校对,并附上口径说明。
例如,用户问“上个月的销售额”,返回结果时,应同时说明统计的是订单金额还是实收金额,按下单时间还是支付时间,是否扣除退款,以及包含哪些门店。用户看到这段说明,就能判断系统此次的理解是否符合自己的本意。
不是告诉用户:“你的问题,我查到了什么数据。”
而是告诉用户:“根据你的问题,我查询了什么口径的数据,结果是什么。”
这种表达上的变化,看起来只是多了一段说明,实际上是把问数过程中原本隐藏的理解过程,转化成了用户可以校对的业务口径。用户不需要理解 SQL,也能发现“这不是我想要的销售额口径”,并继续修正问题。
这里展示的是基于已执行 SQL 的业务解释,包括筛选条件、统计范围和计算方式。它不能代替结果校验,但可以先从产品层面缓解“只有一个数字、不知道该不该信”的问题,也为专家团后续使用数据进行决策,多增加一道保障。
结语
从最初支持 ODPS 查询,到通过图数据库改善复杂关联,再到基于 harness 构建 AI 数据引擎和专家团,这条演进路径的背后,是业务对数据使用要求的不断提高。
能查数,解决数据能不能被访问;能查准,解决业务问题能不能被正确理解;能用数,让问数成为其他技能和专家的支撑;决策链,则进一步将数据与经营动作连接起来。
这四个阶段始终都在往前推进。每一个阶段做得更好,都是为了更好地服务下一阶段。
延伸:问数领域的关键面试问题
返回最佳实践