订阅更新

Agent查数总用错表、算错口径,怎么解决?

Agent手册 第 7 题 约 9 分钟读完

本文目录
  1. 30秒版回答
  2. 面试官在考什么
  3. 展开一:先定位,到底错在哪
  4. 展开二:收敛可见范围——Agent 不需要看到整个数仓
  5. 展开三:语义层——给 Agent 一本口径字典
  6. 展开四:隐性知识——few-shot 和踩坑说明
  7. 实战经验:埋点治理就是在为 Agent 做准备
  8. 追问链
  9. 加分说法 vs 减分说法
  10. 怎么挂到你的项目上
  11. 总结

30秒版回答

用错表、算错口径,根因通常不是模型笨,而是三件事:同一个指标在多张表里有多种算法、表和字段缺少可靠的描述、Agent 能看到大量本不该用的临时表和中间表。

我的解法分三层:第一,收敛可见范围——只把认证过的表和指标暴露给 Agent,临时表、废弃表全部隐藏;第二,建设语义层——把指标、维度、口径、适用场景、注意事项写成机器可读的定义,作为 Agent 的唯一口径来源;第三,补充“隐性知识”——表之间怎么关联、哪些字段有坑、典型问题的标准问法和 SQL,作为检索上下文和 few-shot。

最后用评测集量化:治理前后同一批问题的准确率对比,把用户纠错持续回流到语义层。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

面试官:「我们内部的问数 Agent 上线后,业务反馈经常数字对不上:有时候用错了表,有时候 GMV 的口径和看板不一样。如果你来负责,你会怎么解决?」

这道题是上一题的深挖,而且是很多公司的真实痛点。面试官问这个问题,往往说明他们已经踩过坑了。

很多人的第一反应是“优化提示词”或者“换更强的模型”。这两个方向都能改善一点,但治标不治本。根本原因是:数据本身没有为 Agent 准备好。人能靠经验和问同事绕过元数据的缺失,Agent 不能。解决方案的核心是让数据自带说明书。

面试官在考什么

• 能否定位根因:问题出在数据侧(元数据缺失、口径分散、表冗余),而不仅是模型侧。

• 是否理解语义层的作用:指标、维度、实体、关系的统一定义。

• 是否能给出可落地的治理步骤:而不是一句“建语义层”。

• 是否有度量和闭环意识:怎么证明治理有效。

展开一:先定位,到底错在哪

不要一上来就改。先把答错的案例收集起来做归因,通常能分成这几类:

错误类型典型表现根因对应解法
选错表用了 ods 层或 tmp 表,数据重复或不全可见范围太大,表没有认证标记收敛可见范围,表分级认证
口径不一致GMV 和看板差几个点同名指标多种算法语义层统一定义
字段误用用 create_time 而不是 pay_time 统计成交字段描述缺失或含糊补齐字段描述和用法说明
关联错误Join 后数据翻倍不知道表粒度和关联键定义实体关系和粒度
枚举不匹配“华东”查不到数据不知道维度值的真实取值维度值索引和别名
业务规则遗漏没排除测试账号隐性规则只存在于老员工脑子里规则写进语义层默认过滤

我的经验是,做完这个归因,你会发现大部分错误都落在数据侧,真正因为模型推理能力不足导致的错误往往是少数。这个结论本身就是面试里很有说服力的观点。

展开二:收敛可见范围——Agent 不需要看到整个数仓

一个数仓里动辄几千上万张表,其中大量是临时表、历史版本表、个人测试表。人知道 tmp_order_v2_final 不能用,Agent 不知道。

-- 给表打上“Agent 可用”的认证标记,只有认证表进入 Agent 的检索范围
CREATE TABLE meta_table_certification (
  table_name      STRING,     -- 库名.表名
  layer           STRING,     -- ods/dwd/dws/ads
  cert_level      STRING,     -- gold(认证) / silver(可用) / hidden(不可见)
  grain           STRING,     -- 粒度:一行代表什么,如"一个订单一行"
  primary_keys    STRING,     -- 主键,帮助 Agent 判断能否直接 COUNT
  partition_col   STRING,     -- 分区字段,必须过滤
  owner           STRING,     -- 负责人
  description     STRING,     -- 面向 Agent 的用途说明
  not_for         STRING,     -- 不适用场景,如"不要用于财务对账"
  updated_at      TIMESTAMP
);
-- 原则:Agent 默认只能看到 gold 表;silver 表仅在长尾查询时作为候选

注意 grain(粒度)和 not_for(不适用场景) 这两个字段。粒度是 Agent 正确做聚合和关联的前提;“不适用场景”这种负向信息,往往比正向描述更能防止误用。

展开三:语义层——给 Agent 一本口径字典

语义层的本质是:把散落在各个报表 SQL 里的业务逻辑抽出来,统一定义一次。它对人和对 Agent 都有价值,但对 Agent 尤其关键,因为 Agent 没法靠“问同事”来消除歧义。

# 语义层定义示例:实体、指标、维度
entities:
  - name: order
    table: dws.dws_trade_order_d
    grain: 一个订单一行
    primary_key: order_id
    joins:
      - entity: user
        on: order.user_id = user.user_id   # 多对一,不会放大行数
metrics:
  - name: gmv
    synonyms: [成交额, 交易额, 流水]       # 帮助召回
    expression: SUM(pay_amount)
    default_filters: [pay_status = 'SUCCESS', is_test_user = 0]
    description: 支付成功订单金额,含运费,不扣退款;已排除测试账号
    certified: true
dimensions:
  - name: region
    values_source: dim.dim_region           # 维度取值从维表同步,用于枚举匹配

这里有三个细节是数据开发特有的经验:

• synonyms 同义词:业务说“流水”“交易额”“成交额”,指的都是 GMV。没有同义词,检索就召回不到。

• default_filters 默认过滤:测试账号、内部账号、作废订单这类“隐性规则”必须写死,不能指望 Agent 每次都记得。

• joins 关联关系和基数:明确是多对一还是一对多,Agent 才不会 Join 出翻倍的数据。

展开四:隐性知识——few-shot 和踩坑说明

语义层覆盖的是“结构化的口径”,还有一部分知识是非结构化的:某张表 2024 年之前的数据口径不一样、某个字段在某个渠道是空的、某类问题的标准写法。这些知识我会整理成两类上下文资产:

资产内容怎么用
Few-shot 问答库真实问题 + 标准结构化意图/SQL + 结果按问题相似度检索 3-5 条放进上下文
数据注意事项字段陷阱、历史口径变更、已知数据问题和相关表/指标绑定,召回时一起带出
业务术语表业务黑话和标准概念的映射问题理解阶段做术语归一

实战经验:埋点治理就是在为 Agent 做准备

我在某出海硬件品牌做过一次埋点治理,把 1000 多个事件精简到 100 多个标准化事件,数据质量问题减少了 60%。当时的问题和今天 Agent 查数的问题几乎一模一样:同一个行为有好几个事件名,不同版本 App 的字段含义不一样,分析师查数前要先问一圈“这个事件到底什么意思”。

那次治理我们做了三件事:统一事件命名规范、为每个事件和属性写清楚定义和触发时机、废弃重复事件并做映射。这三件事放到今天,正好对应收敛可见范围、建设语义定义、沉淀映射关系。所以面试时我会说:给 Agent 用的数据治理并不是全新的东西,它是数据治理的延续,只是标准更高了——人能容忍的模糊,Agent 不能容忍。

追问链

追问一:语义层要覆盖多少指标才够?一开始全量建吗?

不要一开始全量建,那样会变成一个永远做不完的项目。我会按需求频率排序:先从历史取数工单和看板访问记录里统计最常被问的指标和维度,优先覆盖头部。通常头部一小部分指标就覆盖了大部分提问。先把这部分做到认证级别,上线跑起来,再根据未命中的问题逐步扩展。

追问二:语义层和指标平台是什么关系?

可以理解为同一件事的不同侧面。指标平台更偏管理:指标的申请、审批、负责人、上下线;语义层更偏使用:指标怎么计算、能和哪些维度组合、怎么编译成 SQL。很多公司是一套系统同时承担两个角色。对 Agent 来说,重要的是它能通过 API 或 MCP 实时读到最新、已认证的定义。

追问三:怎么证明你的治理有效?

用同一份评测集做前后对比:治理前准确率多少,收敛可见范围后多少,加了语义层后多少,加了 few-shot 后多少。每一步的增量都能看到,既证明了效果,也能指导下一步该投入在哪里。线上还要看用户纠错率和人工兜底率的趋势。

加分说法 vs 减分说法

✔ 加分说法✘ 减分说法
先做错误归因,大部分问题在数据侧优化一下提示词就好了
收敛可见范围,表分级认证换更强的模型
语义层:同义词、默认过滤、关联基数把所有表结构都给 Agent
沉淀 few-shot 和数据注意事项语义层一次性全量建完
用评测集量化每一步治理的增量没有度量,说不清治理效果

怎么挂到你的项目上

话术模板:“我会先把答错的案例做归因,通常大部分问题出在数据侧,比如选错表、口径不一致、隐性过滤规则遗漏。然后分三步:收敛 Agent 的可见范围,只开放认证表;建设语义层,统一口径、同义词和默认过滤;沉淀 few-shot 和数据注意事项。我之前做埋点治理时,把上千个事件收敛成一百多个标准事件,思路是一样的。”

总结

这道题的核心观点是:Agent 用错数据,大多是数据没有为 Agent 准备好。解法是收敛范围、统一口径、沉淀隐性知识,并用评测集证明效果。这道题是数据开发在 Agent 面试里最能体现专业壁垒的一题,一定要用你真实做过的治理经历来回答。

下一篇聊安全:让 Agent 直接连数仓,怎么防止它跑出全表扫描、误删数据、越权查询?

你们数仓里有多少表是“只有写它的人才知道怎么用”的?评论区聊聊~

关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器