Agentic Analytics · Anthropic 自助数据分析

Data Agent 的项目本质,
是数据治理

把大模型接进数仓、让它自己查,听起来顺理成章。但在几千名员工、几百 PB、几万张表的规模下,真问题不是能不能查出个数,而是这个数能不能可信到直接支撑董事会、审计、KPI 这类高风险决策。Anthropic 的答案里,藏着一个反直觉的取舍。

21%
没有 skill 时
准确率天花板
95%+
加上 skill 后
某些领域约 99%
01 · 一个看似早已解决的问题

便利感,很快变成"这个数对不对没人能确认"

自然语言问数被"解决"过很多轮。过去两年,内部数据分析一直是个老大难。

一种做法是把数据摊成又宽又大的表,方便不懂技术的同事取用,可业务一扩张,口径就开始打架,同一个指标冒出好几个版本。另一种做法是给每个团队圈一块独立环境,结果长尾问题覆盖不到,看板越堆越多。大模型出来后,很多人以为终于有了第三条路:不用学 SQL,直接用大白话问。

但真照这个思路搭,会掉进一个陷阱。Anthropic 在官方博客里说得很清楚:这套做法制造的是一种虚假的精确感。模型把使用者跟底层的基础设施、文档和专家经验隔开了,而正是这些东西,以前一直在替使用者把关,提醒他们"该用哪张治理好的表"。一开始从临时取数请求里解放出来的轻松感,很快被另一种不安取代:这个数到底对不对,没人能确认。

所以问题不在于能不能查出个数来。在 Anthropic 这种几千名员工、几百 PB 数据、几万张表的规模下,真正的问题是:一个 AI 算出来的数,能不能可信到直接支撑董事会、审计、KPI 这类高风险决策?这篇博客,就是它在自己的真实数仓上跑过一轮之后,给出的答案。它给的数字很硬:公司内部 95% 的业务分析查询已由 Claude 自动完成,整体准确率约 95%。

"
把大模型指向数仓、让它自己执行,制造的是一种虚假的精确感。它把使用者和底层的基础设施、文档、专家经验隔开了。
— Anthropic 数据科学与数据工程团队 "
02 · 核心洞察

数据不是软件:为什么换个更强的模型解决不了

要理解分析 agent 难在哪,Anthropic 给了一个很好的参照系:跟写代码的 agent 比一比。

写代码是一个开放的解空间,有无数种正确写法,模型的创造力在这里是优势。更关键的是,代码天然带护栏:文档说明意图,测试验证结果,一段代码跑没跑对,运行一下就知道。模型就算"幻觉"出一个错误方案,测试会把它挡下来。

数据分析正好相反。对一个具体的业务问题,往往只有唯一正确的答案,而且要用唯一正确的那个数据源算出来。麻烦在于,没有一种确定的办法能证明这个答案是对的。SQL 跑通了不代表数对了,它可能用错了表、漏了个过滤条件,照样返回一个看起来很合理的数字。代码错了会报错,数据错了不会,它会安安静静给你一个错的数。

写 SQL、执行查询业界讨论多年的 text-to-SQL
基本已解决 · trivial
找对表、把口径算对把模糊问话对到唯一正确实体
真正的难点 · 结构问题,不是模型问题

Anthropic 原文:一旦能把问题对到正确的实体上,"the resulting execution and SQL becomes trivial"。这把 text-to-SQL 直接判成了简单部分。

这也解释了一件很多团队没想明白的事:为什么换一个更强的模型解决不了。找对表、把指标算对,这两件难事都是结构问题,不是模型智商问题。模型再强,面对四十张口径微妙不同的"营收表",它也没办法凭空知道哪一张是公司认账的那张。这个信息不在模型里,在组织的治理结构里。

Anthropic 把导致绝大多数错误答案的根源,归成三个具体的失败模式:

失败模式 01
概念 ↔ 实体歧义
几百个看似都能用的选项(可能出自上百万字段),agent 挑不出最对的那个。算"活跃用户":什么行为算活跃?算不算欺诈用户?回看窗口取多长?
失败模式 02
数据陈旧
数据源、业务定义、表结构一直在变。资产和 agent 的知识会过期,然后开始返回一些"细微的错":看着对,其实已经不对了。
失败模式 03
检索失败
正确的信息其实就在数据模型里,也标注得好好的,但搜索空间太大,agent 就是找不到它。信息在,却没被用上。
03 · 四层架构

每一层,堵一个漏洞

Anthropic 把它的"agentic 分析栈"分成四层。它特意说明,每一层主要是为了对付前面那三个失败模式里的某一个。

1
数据地基
把"可能成立的候选实体"一路砍到只剩一个治理过的答案
收窄实体歧义
2
真相来源
把用户嘴里的"周活跃用户",对到数据模型里那个确切的实体
消解概念实体歧义
3
Skills
确保 agent 能可靠地找到那个答案,并且用对
解决检索失败
4
验证
兜底,找出三类失败里还有哪一类在漏
兜住静默失败
Layer 1 · Data Foundations
第一层:数据地基

让分析 agent 准,最重要的还是地基扎实。Anthropic 特意强调,维度建模、把测试左移、对关键管道做新鲜度和完整性检查这些标准实践,在 agent 时代一点没过时,反而和以前一样重要。真正变了的是数据模型的终端用户:以前是能自己判断对错的数据科学家,现在是 agent,而 agent 背后那个人可能完全不懂底层数据。这就带来一个硬约束:结果不能要求用户自己去验证对错,因为他根本没这个能力。

这一层主要冲着"歧义"去。如果"营收"能干净地指向唯一一个治理过的数据集,而不是四十个看着都行的候选,那么这个问题在 agent 开始搜索之前就基本消失了。最管用的做法是建立规范数据集:精选一小批单一真相来源的数据集,产权清晰、开箱即用,然后狠心把近似的重复表废弃掉。

示意 · 规范数据集登记(通用电商)
canonical/
  fct_orders            ← 唯一认账的订单事实表
    grain:   一行 = 一个已支付订单
    owner:   growth-data
    tier:    gold(规范层,可直接消费)
    口径:    已支付 / 排除内部测试账号 / 排除已退款
  dim_customer          ← 唯一认账的客户维表
  --- 以下为已废弃,不应再被引用 ---
  orders_v2_wide        [DEPRECATED → 用 fct_orders]
  orders_finance_copy   [DEPRECATED → 用 fct_orders]

光建不够,还得靠工具、CI、制度三重强制:agent 在结构上被先路由到规范模型,绕开规范层的改动评审通不过,下游团队要么建在治理层之上、要么解释为什么不。没有强制的治理,很快会退化回"多个候选"的老问题。此外把所有数据代码(建模、语义层、参考文档、看板定义)放在同一个代码仓,用 CI 保护跨层一致性;改模型若会搞坏下游看板,修复就在同一个 PR 里发出去。最后,把元数据当成一等公民:列和表的描述、指标定义、粒度、血缘、产权,都要用跟写转换逻辑同等的严谨度去维护。

Layer 2 · Sources of Truth
第二层:真相来源

如果数据地基是数仓本身,那"真相来源"就是 agent 用来导航这个数仓的参考面。这一层把一个干系人嘴里的"周活跃用户",变成数据模型里那个确切的、治理过的实体。Anthropic 按可信度从高到低排了四种。

语义层,可信度最高。这是编译好的指标和维度定义。如果一个问题能干净地对到一个已定义的指标,agent 就调一个函数,拿到一个数,而且是公司里其他所有界面都会算出来的同一个数。Anthropic 的 agent 在结构上被强制要求优先走语义层。

示意 · 语义层指标定义
metric: gmv
  label:   "成交总额 (GMV)"
  owner:   finance
  sql:     SUM(fct_orders.amount_paid)
  filters: [已支付, 排除退款, 排除内部账号]
  维度:    [date, country, product_category, channel]
  口径声明: 含税 / 不含运费

# agent 问 "上季度美国 GMV" → 调用 gmv(country=US, date=last_quarter)
# → 返回唯一一个数,和财务看板、董事会材料里的完全一致

这里 Anthropic 记了一个失败的尝试:它们曾想让 LLM 从原始表和查询日志里自动生成指标定义。结果生成出来的定义看着挺像样,却把它们正想消除的那些歧义又编码了进去,在评测上反而更差。结论是:用 Claude 生成文档,但定义要由人来拥有。

往下三层依次是:血缘和转换图(语义层没覆盖时,靠它推理哪些上游模型喂养了某个概念、哪些已废弃);查询语料(历史 SQL,直觉上极有价值,但实践中给 agent 开放原始检索权限,准确率连一个百分点都没动,后面验证那节会讲为什么);以及业务上下文,最被低估的一层。一个不懂业务的 agent 会回答用户字面上问的,但不是他真正想问的:它不知道"Q2 那次发布"指的是哪个产品,不知道某个问题被问出来是因为周四要开董事会。Anthropic 接入一张公司知识图谱(文档、路线图、决策记录、组织架构)来补这一层。

这四层有一个共同的失败模式:文档差或文档过期。Claude 在补这个缺口上极其有用(起草列描述、提议指标文档、在 CI 里标出没文档的模型),但策展和产权始终由人来管。

Layer 3 · Skills
第三层:Skills

如果真相来源是 agent 的陈述性知识(一个指标是什么意思),那 skill 就是它的程序性知识:该按什么顺序查哪些来源、怎么在有歧义的数据里导航、一份完成的分析长什么样。在 Claude Code 里,一个 skill 就是一个文件夹的 markdown,agent 按需读取。

这一层的价值大到惊人。没有 skill 时,Claude 回答分析问题的准确率从没超过 21%;加上 skill 后,整体稳定在 95% 以上,某些领域经常做到 99% 左右。同一个模型,差距全在 skill。这正好印证了核心论点:卡点不在模型,在结构。

做成配对的 skill。一个"知识 skill"充当很薄的顶层路由器:先试语义层,没覆盖就指向这个领域的几十个参考文件。这个路由器就是对"检索失败"的答案:与其让 agent 在上百万字段里搜,不如先把空间收窄到几十个策展过的文件。另一个"执行 skill"把资深分析师的流程编码下来,还打包了留存曲线、比率拆解、漏斗分析等可复用模式。

示意 · 配对 skill 的两件套
knowledge-skill(薄路由器)
  └─ "先走语义层;没覆盖再看下面的领域参考"
     references/
       orders.md       ← 订单域:表、列、join、坑、路由触发器
       users.md        ← 用户域
       marketing.md    ← 营销域
       … 几十个领域文件,每个问题只载入相关的几个 …

execution-skill(资深分析师流程)
  1. 澄清问题  2. 找来源(走 knowledge-skill)
  3. 跑查询    4. 丢给对抗性评审子 agent
  + 打包:留存曲线 / 比率拆解 / 漏斗 等可复用分析模式
主仓库 skill 骨架 · 据 Anthropic 官方附录(PART 3 路由层按多级索引扩展)
---
name: [warehouse-skill]
description: "IF 用户要查[公司]数仓的任何[业务域]问题 → THEN 调用本 skill;
  DO NOT 用于相邻工程任务、或与数仓无关的问题。"
---

# 语义层(REQUIRED · 必走第一步)
治理过的语义层是每个数据问题的强制默认路径;原始 SQL 仅兜底,
只有在确认语义层覆盖不了之后才用。
## 必走流程:Load → Discover(务必查 segments)→ Compile+run → Fallback
> 别提前放弃。不要拿这些理由退回原始 SQL:
>   "要自定义日期 / cohort" → 时间维度 spec 已覆盖
>   "需要 join"           → 指标层已封装好 join
>   [再 3-4 条 agent 常用来跳过语义层的借口,逐条预先驳掉]

# PART 1 必知:红旗检查 / 越界升级 / 澄清业务决策 / 实体消歧 / 数据完整性铁律
# PART 2 怎么做:技术执行 / 分析规范 / 强制对抗性 SQL 评审 / 带出处页脚汇报
# PART 3 数据参考(多级索引,逐层下钻,单次只载相关的几个)
  references/_index.md              ← L0 顶层域索引(先读这一个)
    ├─ 用户域 → user/_index.md         关键词:注册 / 画像 / DAU / MAU / 分群
    │           └─ user/tables.md       L2 表级:user / device / membership
    ├─ 交易域 → transaction/_index.md   关键词:订单 / 支付 / 退款 / GMV
    │           └─ transaction/tables.md
    └─ 营销域 → marketing/_index.md     关键词:活动 / 优惠券 / 推送 / 核销
  metrics/_index.md                 ← 指标路由:DAU / 留存 → core;GMV / LTV / ROI → kpi
  relationships.md                  ← 跨域 JOIN 关系(多表关联时再载)

原文附录的知识库导航是单层(每个业务域一个参考文件);大库实践里常把它做成多级索引:顶层域索引 → 域内 _index → 表级文档,逐层把搜索空间收窄。上面的 frontmatter、语义层强制、PART 1-3 脊椎沿用原文骨架,多级索引那层是按大库实践的扩展。

写为 LLM 检索而生的参考文档。描述表的粒度、范围、排除项,坑的机制("排除已知免费邮箱域名,但保留 anthropic.com 这样的自定义域名"),以及明确的路由触发器,而不写会过期的菜谱式步骤。Anthropic 在附录里给了一个骨架。

参考文档骨架 · 据 Anthropic 官方附录
# [领域] 表

## Quick Reference
### 业务上下文 — [这个领域用大白话讲是什么]
### 实体粒度 — [一行代表什么]
### 标准清洗过滤 — [这个领域每条查询都要套的过滤]

## 维度 · 关键表 · Gotchas(坑)
- [一个资深分析师会提醒你的那些"出错模式"]

## 最佳实践 / 常见查询模式 · Cross-References
- [默认选择、标准切法;相邻领域文档谁负责哪些相邻问题]

把 skill 维护当成一等公民。Skill 文档描述的是一个每天都在变的数据模型,不主动维护几周内就会过时。Anthropic 亲眼看着离线准确率从上线时的约 95% 一路漂到一个月后的约 65%,直到把它当成工程问题来治:skill 文件和转换模型放进同一个仓,改模型的 PR 就是更新文档的 PR,一个 code-review hook 标出任何"改了报表模型却没碰 skill"的改动。现在大约 90% 的数据模型 PR,在同一个 diff 里就带着一个 skill 改动。此外保证所有界面体验一致:同一个 skill 在 Slack、IDE、看板工具、独立会话里对同一个问题给同一个答案,靠唯一规范源 + 合并时自动同步(插件市场、云存储 blob、MCP 资源)。

Layer 4 · Validation
第四层:验证

验证是用来搞清楚那三个失败模式里,到底还有哪一个在漏。分三块。

离线评测。简单的问答配对,类似给 ML 模型做离线测试。Anthropic 部署两种:看板类(Claude 自动生成、人验证)和长尾类(喂业务上下文让 Claude 生成问题),每次干系人纠正 agent 也被收集成候选评测。几条关键做法:把基准答案锚死在快照日期防漂移;结果像遥测一样存进数仓表(带 skill 版本、git SHA、模型 ID、通过率、token、耗时),让"那个改动有没有用"变成一条查询;按领域设发布门槛(初始约 90%);离线准确率应做到约 100%,且每个正确答案都应命中语义层。

消融实验。关于 skill 的每个结构性决定,都在固定评测集下只改一个组件、比较通过率。Anthropic 最有用的一次消融是个否定结果:它给 agent 开放了对几千个 SQL 文件的直接 grep 权限,还核实了 agent 确实每次都读了它们,准确率却没动过一个百分点。对答错的问题,正确答案约 80% 的时候就在语料里,但"答案在不在"预测不了"答对没"。信息就在那儿,agent 也看到了,它就是没用。这告诉它们:瓶颈不是拿不到过往成果,而是结构,把问题对到正确实体的能力。这个洞见改变了之后好几个月的路线。

在线验证。用对抗性评审激进挑战候选答案的所有假设(准确率 +6%,代价是 +32% token、+72% 延迟,第四节细说);每个回答带一个出处页脚,说明来源层级、新鲜度、负责人;持续监控"经语义层解析的查询占比"和"出现纠正语言的回答占比";一个定时 agent 每隔几小时扫频道找纠正语言、起草一行文档修复、开 PR 给领域负责人,修复路径刻意做得很无聊(改 markdown、合并、自动同步)。

示意 · 出处页脚 · 据 Anthropic 官方附录
> Source: 语义层 | 治理表 | 原始探索
> Confidence: [层级]   Reviewed: [评审者 ✓, 第 N 轮]
> Freshness: [数据里的最大日期]   Owner: [负责团队]

这套组合拳唯一没法完全兜住的,是那个静默失败:答案是错的,但看着合理,没人提异议就被用掉了。Anthropic 的缓解手段是出处页脚、对任何要交给领导层的东西强制人工签字、给每个领域的头部 KPI 立常驻评测每天对账。它坦承这块还没有稳健解法。

04 · 载重决策

最后算数那一步,不让模型自由发挥

四层架构里,最值得单拎出来讲的是一个反直觉的取舍。它藏在语义层那句"被强制要求优先走"里,分量却撑得起整篇文章。

通常的 text-to-SQL 思路是:给模型足够的上下文,然后让它自己写出最终那条 SQL,模型越强写得越准。Anthropic 没走这条路。它的 agent 在结构上被 skill 指令强制:只要一个问题能对到语义层里一个已定义的指标,就必须调那个指标函数,而不是自己拼 SQL。模型不被允许在最后算数这一步自由发挥,原始 SQL 只是兜底。

为什么要这么自缚手脚?因为它要的不是"大概率算对",是"错了能被发现"。同一个问题"上季度美国 GMV",两条路的结局完全不同:

✓ 走语义层(强制默认)
gmv(country=US, date=last_quarter)
口径已治理:已支付、排除退款、排除内部账号、含税不含运费。返回的数和财务看板、董事会材料完全一致。
若语义层没这个指标 → 直接报"无覆盖",转兜底或澄清。
失败是显性的:一条错误信息。
✗ 让模型自由写 SQL(Anthropic 不走)
SELECT SUM(amount) FROM orders_v2_wide WHERE ...
也能跑出一个数,看着很合理。但可能用了已废弃的宽表、漏了退款过滤。
没有任何信号提示它错了。
失败是隐性的:一个看似对、其实错的数,没人会发现。

这就是这个决策的核心。一个会报错的系统,错误是显性的,你当场就知道它答不了,可以转人工、可以澄清。一个总能给你一个数的系统,错误是隐性的,它把"我不知道"伪装成"这是答案",而这恰恰是高风险决策里最危险的东西。当一个数要拿去支撑董事会、审计、KPI 时,"看着对其实错"比"明确说我答不了"破坏力大得多。

所以这个载重决策可以一句话概括:用确定性的语义层,把错误从隐性逼成显性。模型的创造力在写代码时是资产,在最后算数这一步是负债,因为这一步只有唯一正确答案、且没有测试能当场证伪。Anthropic 的选择是,在这一步把创造力关掉。

"
用 text-to-SQL,失败长得像一个合理但错误的答案;用语义层,失败长得像一条错误信息。
— dbt《Semantic Layer vs. Text-to-SQL》(竞品来源,见文末) "
05 · 外部证据

这道结构性鸿沟,是真的

Anthropic 是基于自己内部系统讲的,这些数字外人没法复核。但"结构性鸿沟真实存在、确定性语义层确实能补上它"这个方向,2026 年有一批行业证据可以印证。

需要先把话说在前面:这批 benchmark 大多来自语义层和治理层厂商(dbt、Looker、Atlan 这类),按本文的来源标准属于竞品博客,可信度最低,有让语义层"赢"的商业动机,具体百分比大概率挑选过。下面只用它们下"方向"判断,每个数字都标来源,不当定论。方向之所以可信,是因为三类来源指向一致:有动机的竞品、一个中立的学术基准(Spider 2.0)、加上 Anthropic 自己的内部数字。

模型在 text-to-SQL 上一年的进步竞品 · dbt
一年前32.7%
现在64.5%
模型确实猛进。但对企业级复杂查询,这个准确率仍然远不够。
企业级 text-to-SQL:同一个 GPT-4o,换到贴近真实的基准中立学术 · Spider 2.0
Spider 1.086%
6%
最有说服力的一条,因为它是中立学术基准。这道坎不是靠模型变强能迈过去的,它是结构问题:唯一正确答案 + 静默失败。
裸 schema 直接查 vs 接上治理的语义层竞品 · dbt
裸 schema ~40%
接语义层 83%
语义层能覆盖的查询,准确率接近甚至就是 100%,因为查询是确定性生成的,模型没机会产出"细微错"的结果集。
Looker:自然语言转 SQL vs 转治理过的 LookML竞品 · Looker
NL→SQL 平均 80%
NL→LookML 平均 97%
Atlan 跨 522 个查询也显示:加治理上下文让 AI 生成 SQL 的准确率相对提升 38%(竞品 · Atlan)。厂商之间数字不完全一致,但方向高度统一。
"找对表"这一步:投资元数据质量后的检索命中率第三方 · 中立向
embedding 裸 DDL ~40%
embedding 表文档 90%
这条印证 Anthropic 的 skill 路由思路:先把上百万字段收窄到几十个文件,和行业里"先检索缩表再生成"的经验一致。

把这三条合起来,有一个被反复提到的概括很贴切:准确率是个上下文问题,不是模型问题("Accuracy is a context problem, not a model problem",第三方)。这跟 Anthropic 的核心论点,是同一句话的两种说法。

06 · 落地与代价

这不是一次性搭好,是要持续喂养的

Anthropic 给了一条务实的起步建议:如果从零开始,几个规范数据集、几十个离线评测、加一个薄薄的知识 skill,就能拿到大部分收益;这篇文章里其余的东西,都是在这三样建好之后才加上去的。

但要把这套东西跑得久,得认清它的代价。把全篇的硬数字摆在一起,代价就清楚了。

21% → 95%+
没有 skill,准确率上不了 21%;大部分准确率不是模型白给的,是 skill 这层人工资产堆出来的。
95% → 65%
离线准确率会自己漂,只需一个月。这是不维护的代价,靠 hook 强制"改模型就改文档"才按住,代价是约 90% 的 PR 都得带 skill 改动。
+6% / +32% / +72%
对抗性评审买到 6% 准确率,要付 32% 更多 token、72% 更高延迟。准确率不是免费的,越往高处越贵。

这几条凑在一起,指向同一个结论:这套架构的真正成本不在搭建,在维护。它不是一个搭好就能放着的系统,而是一个要持续喂养的活物。数据模型天天在变,文档会过期,评测会漂移,纠正要被不断收集回流。把这套维护机制建起来,比第一次把 agent 跑通,难得多,也值得多。

Anthropic 还提了几个原则性问题,建议每个团队先和自己的组织对齐,因为不是每条实践都适合所有人。

这套打法对其他团队的启示是清楚的:在 agent 时代搭自助分析,真正的工程量不在"接个模型让它查",而在前面那三件事:治理出唯一答案、让它可被检索、给它建一套持续纠偏的免疫系统。换个更强的模型代替不了这些,因为它们解决的根本不是模型能力问题,而是组织的数据结构问题。

来源说明

证据分级与标注

官方How Anthropic enables self-service data analytics with Claude

claude.com · 2026-06-03 · 数据科学与数据工程团队(Chen Chang、Clement Peng、Justin Leder、Johanne Jiao、Josh Cherry)。本文第一到第四节、第六节的全部论点、数字、架构、附录骨架均出自此文。所有内部准确率数字(95% 自动化 / ~95% 整体准确、无 skill <21%、加 skill >95% 及某些领域 ~99%、离线准确率一月内 95%→65%、对抗性评审 +6% / +32% token / +72% 延迟、~90% PR 带 skill、发布门槛初始 ~90%)均为 Anthropic 自报,外部无法独立复核。文中标"示意"的数据结构块是据原文描述用通用电商例子重建的演示,不涉及任何具体公司的内部表结构。

竞品第三方2026 年 text-to-SQL / 语义层 benchmark

dbt(text-to-SQL 32.7%→64.5%;裸 schema ~40% vs 语义层 83%;"failure looks like an error message")、Looker(NL→LookML 平均 97% vs NL→SQL 平均 80%)、Atlan(522 查询,治理上下文 +38%)的数字来源本身就是卖语义层或治理层的厂商,有商业动机,具体百分比大概率挑选过;本文只用它们支撑"方向"判断。Spider 2.0(GPT-4o 86%→6%,企业级峰值 38–59%)为中立学术基准,是上面自利来源的非自利交叉印证。Pinterest 检索命中率 40%→90%、"Accuracy is a context problem, not a model problem"为第三方中立向来源。方向之所以可信,在于竞品基准 + 中立学术 + Anthropic 内部数字三类指向一致;任何单个百分比都不应被当成定论。