Lost Temple

来源:How Anthropic enables self-service data analytics with Claude | Anthropic Data Science Team | 2026-06-03

分析完成时间:2026-06-05 09:03:00


翻译:Anthropic 如何用 Claude 实现自助数据分析

许多数据科学和数据工程团队都深有体会:实现自助式商业分析历来是一场苦战。

通过宽表和反范式化表让数据模型对非技术同事更"友好",往往随着业务扩张产生大量定义不一致的重叠视图(对那些根本不想学 SQL 的员工帮助也不大)。而创建更多隔离的环境给用户使用,又往往遗漏业务问题的长尾需求,导致指标和仪表盘的泛滥——各团队各自为战。

LLM 的崛起提供了一条绕过这些挑战的自助分析新路径。然而,把 Claude 往数据仓库上一指就放 Agent 去跑,会制造一种虚假的精确感。

最初从临时需求中解放出来的欣喜,很快变成恐惧——因为这种设置把利益相关方与底层基础设施、文档和专业知识隔离开了,而这些正是之前引导他们使用精心策划的数据集的关键。

在 Anthropic,95% 的商业分析查询通过 Claude 自动化完成,综合准确率约 95%。把这些重复性的工作交给 Claude 后,数据科学团队可以聚焦于更有战略意义的工作,如因果建模、预测和机器学习。

在与数十位 Anthropic 顶级 Claude Code 用户交流,并见过无数分析 Agent 设计模式之后,我们总结了一些最佳实践。在这篇文章中,我们将分享这些技巧和方法,包括:

数据不是软件

LLM 的生成能力是一把双刃剑:让模型能对复杂问题产出创造性解决方案的机制,同样也可能产生错误输出的幻觉。要充分理解分析 Agent 面临的挑战,可以将其与编码 Agent 做对比。

编码是一个开放解空间,奖励模型的创造力,而文档和测试天然就是抵御幻觉的护栏。相比之下,分析场景往往只有一个正确答案,使用单一正确数据源,而且没有确定性方法证明答案的正确性

对于自助式 Agent 商业分析,复杂性主要来自数据的歧义性。核心问题归结为:我们能否将用户的问题映射到数据模型中特定且最新的实体,并知道处理它们的正确方式。如果做到这点,后续的执行和 SQL 就变得微不足道了。

我们识别出这个问题的三个属性,它们导致了绝大多数的错误回答:

  1. 概念-实体歧义:数据模型中有数百个可选字段(潜在的数百万个字段中),Agent 无法选择最能回答用户问题的正确字段。例如,衡量"活跃用户数"时:什么行为算"活跃"?要不要包含欺诈用户?用什么回看窗口?

  2. 数据陈旧:数据源、业务定义和 Schema 不断变化;资产和 Agent 知识变得过时,开始返回微妙的错误答案。

  3. 检索失败:正确的信息确实存在于数据模型中且有适当标注,但面对庞大的搜索空间,Agent 就是找不到。

我们的 Agent 分析栈

在 Anthropic,我们主要通过 Agent 数据栈来最小化这三种错误。每一层主要针对一到两个问题:

  1. 实体歧义:数据基础和真实信息源将可选实体空间缩小到只剩一个受治理的答案
  2. 陈旧:维护和验证流程确保一切随业务变化而不腐烂
  3. 检索失败:Skill 确保 Agent 能可靠地找到并正确使用那个答案

数据基础

确保分析 Agent 准确的最重要的方面是强大的数据基础,包括数据模型、转换、测试和数据仓库中的表,以及描述它们的元数据。标准的数据工程和数据质量实践——维度建模、左移测试、关键管道的新鲜度和完整性检查——依然适用。

真正改变的是数据模型的最终用户不再是数据专家(如数据科学家),而是代表具有不同程度数据专业知识的用户的 Agent。这种转变带来一个挑战:结果不能要求用户验证底层的正确性,因为最终用户根本不具备这种能力。

数据基础层主要针对歧义问题:如果"收入"指向一个受治理的数据集而不是 40 个可能的候选集,问题在很大程度上在 Agent 搜索之前就消失了。它也是第一道防陈旧的防线,因为定义规范模型的同一个代码库就是确保它们保持更新的天然场所。

我们发现以下几个实践特别有效:

真实信息源

如果数据基础是数据仓库本身,真实信息源就是 Agent 用来导航它的参考界面。这一层减少概念-实体歧义,将利益相关方问题中的"周活跃用户"转化为数据模型中特定的、受治理的实体。按信任度从高到低排列:

所有四个的共同失败模式与数据基础层相同:差或过时的文档。Claude 在弥合差距方面非常有用(从查询模式起草列描述、从查询模式提出指标文档、在 CI 中标记未文档化的模型),但策划和所有权由人类管理。

Skill

如果真实信息源是 Agent 的声明性知识(一个指标意味着什么),那么 Skill 就是它的程序性知识:按什么顺序查阅哪些信息源、如何导航有歧义的数据、一份完成的分析长什么样。

在 Claude Code 中,Skill 是一个 Agent 按需读取的 Markdown 文件夹。在 Anthropic,我们开发的 Skill 价值巨大。没有 Skill 时,Claude 准确回答分析问题的能力在我们的评估中不超过 21%。加上 Skill 后,这些数字在综合上持续超过 95%,在某些领域经常达到 99%。

一些最佳实践:

创建配对 Skill:一个 knowledge Skill 充当薄顶层路由器,允许按需加载额外的领域细节。它说"先尝试语义层,但如果没有覆盖,这里有该领域的约 30 个参考文件,描述相关的表、列、连接和陷阱。“这个路由器本质上是我们对检索失败的答案:不让 Agent 搜索百万字段的数据仓库,它在查询写入之前就将空间缩小到几十个策划好的文件。unbook Skill 编码了资深分析师会遵循的流程:澄清问题、找到数据源(通过 knowledge Skill)、运行查询,然后将结果通过对抗性审查子 Agent 循环。它还捆绑了十几个可复用的分析模式(留存曲线、比率分解、漏斗分析),这样常见请求不需要每次重新发明。

创建合适的参考文档:为 LLM 检索而写。我们的参考文档描述表(粒度、范围和排除项)、陷阱的机制(例如"排除已知的免费邮箱域名,但保留像 anthropic.com 这样的自定义域名”)和显式路由触发器(例如"如果问题关于实验提升……请勿用于原始事件计数"),而没有会过时的规范性配方。

将 Skill 维护视为一等公民:Skill 文档描述一个每天都在变的数据模型,没有主动维护,几周内就会出错。我们看着离线准确率从上线时的约 95% 漂移到一个月后的约 65%,之后才把这当作工程问题来处理。这意味着将 Skill Markdown 文件与转换模型放在同一个仓库中,所以更改模型的 PR 也是更新描述文档的 PR。代码审查钩子会标记任何不涉及 Skill 文件的报告模型变更。我们约 90% 的数据模型 PR 现在在同一 diff 中包含 Skill 变更。我们还随着模型改进定期修剪 Skill 脚手架,因为之前的失败模式不再适用。

在所有界面创建一致且无缝的体验:同一个 Skill 必须在 Slack、IDE、仪表盘工具和独立 Agent 会话中为相同问题提供相同答案。我们通过确保一个规范来源(数据仓库)来实现这一点,Skill 变更自动同步。合并时,Skill 同步到插件市场(供 IDE 用户)、云存储 blob(供读取单个文件的托管应用),并直接通过 MCP 作为资源提供服务。我们从头开始就设计了可移植性,避免了硬编码的仓库路径和特定于界面的命名空间。

验证

最后,验证是找出三种失败模式中哪个仍在泄漏的方式。

离线评估

我们看到的常见模式是:数据团队会搭建精巧的分析环境,却没有任何流程来了解其分析 Agent 的准确性。

解决这个问题的一种方式是通过离线评估,即简单的问答对。你可以将离线评估类比为 ML 模型的离线测试——它们不能告诉你在线 Agent 的表现,但能让你很好地了解是否存在关键缺口。

我们在 Anthropic 部署两种离线评估。基于仪表盘的评估由 Claude 自动生成(然后人工验证),覆盖最常见的利益相关方问题。长尾评估是我们向 Claude 提供业务上下文(路线图、表文档),让它生成领域其他部分的合理问题。我们还持续收集每次利益相关方在对话中纠正 Agent 的案例,因为那个纠正就是一个候选评估。

其他最佳实践:

消融技术

关于 Skill 的每个结构性决策(例如,暴露哪些信息源、子 Agent 是否值得其延迟、是否合并两个 Skill)都是通过固定离线评估集来做的。

我们只改变一个组件并比较通过率。每次运行只需一小时,比大量讨论更有说服力。方法论比任何单一结果更重要:

在线验证

最后一步是确保实际在线系统性能尽可能准确:

所有这些都没能完全捕获的失败模式是"静默"的。答案是错的,但看起来合理,被使用而不被质疑。我们的缓解措施是来源页脚、对任何面向领导层的内容要求明确的人工签字,以及每个领域顶部 KPI 的固定评估每日与受信仪表盘的健全性检查——但我们还没有一个健壮的解决方案。

如何开始

如果你从零开始,少量规范数据集、几十个离线评估和一个薄的 knowledge Skill 就能捕获大部分收益;这篇文章中的其他一切都是我们在这些基础建立后添加的。

我们还分享了很多最佳实践,并非所有都适用于每个数据团队。与你的组织就以下几个影响方法的原则达成一致:

无论你走哪条路,我们最大的收益都来自解决三种失败模式:将歧义折叠成单一受治理的答案,使该答案易于发现,并在其中任何一个变得过时时标记出来


深度解读

Part 1: Magazine Article

这篇文章回答的问题: 如何让 LLM Agent 在企业数据分析中达到生产级准确率(95%+),而不仅仅是 demo 级的"看起来能用”。

这篇文章应该回答但没回答的问题: 这套系统的总拥有成本是多少?维护 Skill 文档的人力投入、token 消耗、延迟增加的 ROI 如何衡量?“静默失败"在实际业务中造成了多少影响?


核心洞察:准确率是上下文问题,不是代码生成问题

这是全文最重要的一句话:

编码 Agent 有编译器、测试、类型系统做验证。但分析 Agent 的输出——“上月活跃用户数是 1.2M”——没有编译器帮你检查。你不会知道 Agent 用了错误的"活跃"定义或漏了某个过滤。

这正是数据分析 Agent 和编码 Agent 的本质差异。写代码写错了,CI 红了,测试挂了,你知道。但写 SQL 算出"月活 120 万"这个数字错了——看起来和正确的 135 万一样 plausible——没有人会知道,直到基于这个数字做了错误的商业决策。

Anthropic 的解法不是让 Agent 更聪明,而是让 Agent 根本不需要猜。通过三层架构:

数据基础(消除歧义)→ 真实信息源(建立导航)→ Skill(执行程序性知识)

每一层都在缩小搜索空间:从"数百万字段中选"到"几十个策划好的文件"到"一条受治理的查询路径”。

21% → 95%:Skill 是关键跃迁

这个数字对比是全文最有冲击力的数据点:

状态准确率
没有 Skill21%
有 Skill95%+(某些领域 99%)

不是微调,不是 RAG,不是更复杂的 prompt engineering——就是精心编排的 Markdown 文件

这验证了一个重要的工程直觉:LLM 的能力边界不在于"能不能生成正确的 SQL”,而在于"知不知道该查哪张表、该用什么过滤条件、‘活跃’在你们公司到底怎么定义"。这些是领域知识问题,不是推理能力问题。

消融实验的黄金教训

全文最有价值的部分是那个"否定结果":

我们给了 Agent 直接 grep 访问数千个历史 SQL 的权限。准确率变化不到一个百分点。80% 的情况下,答案确实在语料库中。Agent 看到了,但仍然没有使用它。

这个实验价值连城。它证明:瓶颈不是信息的可访问性(access),而是信息的结构化(structure)

这正是为什么精心编排的 Markdown Skill 比 RAG 检索海量历史查询更有效。前者是一张精心绘制的地图;后者是一堆散落的照片。地图告诉你怎么走;照片只是证明有人到过那里。

Skill 维护的工程化

文章揭示了一个容易被忽视的现实:Skill 不是写一次就完了的

我们看着离线准确率从约 95% 漂移到约 65%,过了一个月。

解决方案是将 Skill 文档与数据模型放在同一个仓库,同一个 PR 中更新。90% 的数据模型 PR 现在都包含 Skill 变更。这不是一个有趣的最佳实践——这是一个生死攸关的工程流程

静默失败:未解的难题

文章最诚实的部分是对"静默失败"的坦承:

答案是错的,但看起来合理,被使用而不被质疑。我们没有健壮的解决方案。

这比任何技术细节都重要。因为它意味着:即使用了本文描述的所有最佳实践,仍然会有一类错误——看起来完全正确但实际错误的答案——是当前方法无法捕获的。这是数据分析 Agent 的根本性挑战。


精选评论

@ClaudeDevs 原帖:1456 赞,39 回复,10.2 万浏览。评论区以技术从业者为主,讨论集中在 Skill 设计和数据治理的实操层面。


Part 2: Socratic Dialogue

学生:我看到 Anthropic 说用 Claude 做数据分析准确率 95%,这也太高了吧?我们试过让 AI 查数据库,经常给出看起来对但实际错的数字。

老师:你觉得"看起来对但实际错"通常是什么原因?

学生:大概是 AI 搞错了字段?比如把"注册用户"和"活跃用户"搞混了。

老师:对。Anthropic 把这个叫"概念-实体歧义"——数据模型里有几百个字段都能勉强匹配用户的提问,但只有一个是"正确"的。他们的核心发现是:这不是 AI 推理能力的问题,是你有没有给它正确导航信息的问题

学生:所以他们的 Skill 本质上就是一份"导航手册"?

老师:精确。想象你把一个实习生扔进公司的数据仓库,什么都不告诉他,他当然会搞混。但如果你给他一份精心编写的文档,告诉他"‘活跃用户’在这个场景下必须用 dim_users_daily 表、必须排除欺诈标记、回看窗口是 30 天"——他就能答对。Skill 就是把资深分析师脑子里的知识显性化了。

学生:那 RAG 呢?直接让 AI 搜索历史 SQL 不就行了?

老师:这是 Anthropic 做过的最有价值的实验。他们给了 AI 直接访问数千条历史 SQL 的权限——准确率提升不到 1%。80% 的情况下答案确实在那些 SQL 里,AI 也看到了,但就是没用上。

学生:为什么?信息就在那里啊。

老师:因为检索 ≠ 理解 ≠ 应用。一堆散落的 SQL 脚本就像一堆积木——零件都在,但没有说明书告诉你哪块积木用在哪个场景。精心编排的 Skill 文档就是那份说明书。这是"非结构化信息"和"结构化知识"的本质差异。

学生:所以他们的做法是先搞治理(让每个概念只有一个正确答案),再用 Skill 把这个唯一答案的路径写清楚?

老师:完全正确。三层架构:数据基础确保只有一个正确答案,信息源告诉 Agent 怎么找到它,Skill 告诉 Agent 找到后怎么用。缺任何一层,准确率都会掉。

学生:那维护成本呢?数据模型天天在变,Skill 不也跟着过时?

老师:这是文章最"劝退"的部分:他们把 Skill 文档和代码放在同一个仓库、同一个 PR 里更新。90% 的数据变更 PR 都包含 Skill 文档更新。准确率从 95% 降到 65% 只用了一个月——如果不维护的话。这不是一个"写一次就完"的方案,这是一个持续工程投入

学生:听起来最适合的场景是……

老师:数据模型相对稳定、有一支愿意投入治理的数据工程团队、且分析查询有大量重复模式的公司。如果你的数据模型每周都大改、或者每个分析需求都是一次性的,这套方案的投资回报率可能不够高。

学生:最后问一个——他们说"静默失败"没解决,这事儿严重吗?

老师:非常严重。所有的方法都是在降低错误率,但"看起来完全正确实际是错的"这种失败,当前没有任何技术手段能可靠捕获。这是数据分析 Agent 的根本性挑战——它不像写代码有编译器和测试做安全网。在面向高层决策的场景中,这可能是不可接受的风险。


Part 3: 个性化洞察

1. Skill 设计模式可以直接复用到你的 Claude Code 工作流

Anthropic 的 knowledge/unbook 配对 Skill 模式——薄路由层 + 按需加载领域细节——和你现有的 Skill 架构高度一致。你可以把这套"先查语义层,fallback 到参考文档"的模式应用到任何需要结构化知识检索的场景,不限于数据分析。

为什么跟你有关:你已经在维护一套全局 Skill 系统(~/.claude/skills/),这个案例验证了"精心编排的 Markdown > RAG 检索"的判断。你的 wiki 知识库(qmd)本质就是在做 Anthropic 语义层的角色。

2. “否定结果"是最有价值的实验产出

Anthropic 的"给 Agent 历史 SQL 无用"实验值千金。这个方法论——用消融实验验证每个架构决策,特别重视否定结果——可以直接复用到你评估 AI 工具链的任何场景。下次有人跟你推销"给 AI 接入所有历史数据就能解决问题"的方案时,你有 Anthropic 的数据作为反驳。

你可以怎么做:对你自己的知识库系统做类似的消融实验——对比 qmd search(结构化)vs 直接 grep 原始文件(非结构化)vs WebSearch(外部)的回答准确率,用固定问题集评估。

3. “Skill 腐烂"问题你也存在

Anthropic 准确率一个月从 95% 降到 65% 的教训对你同样适用。你的 wiki 知识库、全局 Skill、CLAUDE.md 配置都在持续积累,但缺乏系统性的"腐烂检测"机制。你已经有 /lint/refresh skill,但可能需要更激进的自动化——比如 CI 集成或定期自动运行。

你可以怎么做:给 /lint 加一个"新鲜度评分”,对超过 30 天未更新的 wiki 页面自动标记警告。

4. 数据治理 > AI 能力

这篇文章最大的 meta-lesson:不是 AI 不够聪明,是你的数据不够干净。这对你做 AI 产品的启示是——不要在 AI 模型层面过度投入,应该在数据治理和知识结构化层面投入。你做 AI 产品时,核心竞争力不是"用了什么模型”,而是"积累了多少结构化的领域知识"。

5. 静默失败的应对策略

Anthropic 坦承无法解决"看起来对的错误答案"。在你的场景(Hugo 博客分析文章、知识库内容)中,类似的风险是"AI 生成了看起来专业但实际有误的技术内容"。来源页脚(Source/Confidence/Freshness/Owner)是一个值得借鉴的实践——在每个分析输出中标注信息来源和可信度。