Lantide Data
返回博客
AI 分析洞察

AI 把分析做快了,却让“这个结论怎么来的”更难回答

当 AI Agent 开始找数据、写 SQL、运行 Notebook 并修改报告,聊天记录与文件版本已不足以保存完整证据链。本文说明为什么数据分析需要 Analysis Lineage。

你有没有遇到过:AI Agent 用 15 分钟重做完一份分析,你却花了两个小时确认,它是不是用了错误的数据表、错误的分母,或一条上周就已经被排除的分析路径?

Agent 会找字段、写 SQL、运行 Notebook、画图,也能把结果整理得很有说服力。但当你追问:“这个结论到底怎么来的?”答案往往散落在聊天记录、被改写过的查询、几个 Notebook cell,以及分析师自己的记忆里。

AI 加快了分析,也让上下文丢失的代价更高。

问题在于,我们仍用为“人一次操作一步”设计的记录方式,管理一个能自主探索、执行、修正和分支的工作者。执行越快,缺少上下文造成的返工也越快。

AI Agent 的工作早已超过写 SQL

早期的分析 AI 更像补全工具:你描述需求,它返回一段 SQL;你自己粘贴到编辑器、执行、查看错误,再回去问下一题。每一步都经过人的手,所以人自然记得刚才发生了什么。

现在的分析 Agent 可以接下一个目标后,自行完成一连串动作:

业务问题
  → 寻找可能的数据表与字段
  → 生成 SQL 或 Python
  → 执行并读取结果
  → 根据错误或异常自动修改
  → 制作图表、摘要与报告

Databricks 的 Genie Code 会规划任务、查找相关资产、执行 Notebook code,并根据 cell output 修正错误。Microsoft Fabric Data Agent 会根据问题、schema、示例和指令生成 SQL、DAX 或 KQL,并显示中间步骤。分析师的角色也随之转变,从逐步操作改为设定目标与审核结果。

dbt Labs 2025 State of Analytics Engineering 的调查也显示,AI 已广泛进入分析开发、代码与文档工作。问题因此从“AI 能不能写”逐渐变成“我们能不能确认它做了什么”。

真正让分析师疲惫的,是重新建立上下文

日常协作最花时间的往往是这些追问:

  • 哪一段 SQL 才是最后采用的版本?
  • 这张图来自哪一次执行,而不是当前画面上的查询?
  • Agent 为什么从数据表 A 改用 B?A 是暂时无法连接,还是已确认不适用?
  • 报告中的“活跃用户”使用哪个定义、时间窗和时区?
  • 新对话里的 Agent 是否知道某个数据源上周已被排除?
  • 一个 JOIN、分母或筛选条件何时被修改,又影响了哪些下游结论?

聊天记录可以证明“讨论过”,却很难标示哪个决定仍然有效。文件版本可以告诉你“文字改过”,却不一定说得出改动对证据链的意义。Notebook 保留 cell,也可能以非线性顺序执行。

研究者在 Data Analysis in the Era of Generative AI 中把分析描述为在问题定义、数据收集、探索、可视化、验证与沟通之间反复迭代的过程。这类工作本来就不是一条直线。Agent 让迭代加快、分支增加,也更容易超出一个人的短期记忆。

为什么软件开发的 Plan → Result 逻辑还不够

软件开发和数据分析都会先规划、执行、产生成果,也都需要版本控制。但两者判断“这条路是否可行”的信号不同。

软件工作当然也有隐藏风险,不过许多失败会留下直接信号:程序无法编译、测试失败、类型不匹配、API 返回错误,或 diff 明确显示行为被改变。当实现成功且验收通过,一条从需求、改动到结果的版本链,通常能保存相当多关键信息。

数据分析最危险的情况,则是技术上成功、分析上错误

  • SQL 正常执行,但 JOIN 把每笔订单重复了三次。
  • 图表正常生成,但分母混入不符合条件的用户。
  • 替代数据表有同名字段,却没有原方法需要的历史覆盖。
  • Notebook 没有报错,但 cells 的执行顺序让结果无法复现。
  • 数字与前一版一致,只是两个错误恰好相互抵消。

程序成功执行,不代表分析成立。

因此,只记录“Plan 产生 Result,新的 Plan 再产生新 Result”会漏掉真正重要的信息:前一条路径为什么停止、哪些假设已被否决、哪些部分结果仍可沿用,以及新路径是替代、延伸,还是重新开始。

AI 会让“安静的错误”一起规模化

一位分析师手动尝试三段查询,通常还记得自己为什么放弃第一段。但 Agent 可以在几分钟内查看十张表、改写多轮查询、建立中间结果,再把其中一版数字写进图表与文字。

这种速度有真实价值,也让四件事更容易丢失:

  1. 被否决的路径:为什么数据 A 不可用,而不是单纯没有选择它。
  2. 转换的理由:查询从 A 改成 B,是修正 bug、改变口径,还是更换假设。
  3. 证据的身份:报告引用的是哪次实际执行结果。
  4. 当前的权威版本:多个看似完成的产物中,哪一个才是正式结论。

如果这些信息只存在对话里,更换 Agent、压缩 context 或隔周重开项目,就可能把已经排除的路径当成新发现,再走一次。

失败的分析路径不该被删除,也不该被假装完成

分析走不下去,不一定代表前面的工作没有价值。

假设团队原本计划用事件数据评估某项功能对 30 日留存的影响,检查后才发现历史数据只保留 14 天。这条路径不能支持原问题,但过程可能已经确认了事件定义、数据质量和可用期间。合理的处理不是删除整段记录,也不是把它标成“完成”。

它应该被清楚标记为:

  • 已停止,尚未成功完成。
  • 停止原因是历史覆盖不足。
  • 已完成哪些检查,哪些部分结果仍然有效。
  • 后续用什么新方法或新范围取代它。

这个差异看似只是状态名称,实际上是在保护未来的人和 Agent:不要再把一条已被证明不可行的路,误认为尚未尝试的路。

Data Lineage 不够,我们还需要 Analysis Lineage

Data Lineage 回答的是数据如何流动:

原始数据 → 清洗 → JOIN → 聚合 → Dashboard

它能帮助团队判断上游改动会影响哪些数据表和报表,但它通常不会回答:为什么选择这张表?哪个指标定义被否决?这份结论引用哪次执行?前一个方法为什么停止?

Analysis Lineage 要追踪的是结论如何成立:

业务问题
  → 分析路径、假设与口径
  → 实际执行的 SQL / Notebook
  → 验证、部分结果与停止原因
  → 图表、报告与最终结论

两者回答不同的问题:

Data Lineage 追踪数据如何流动。Analysis Lineage 追踪结论如何成立。

一条实用的 Analysis Lineage 不必保存 Agent 的每个思考片段。它应记下能帮助人和 Agent 回答下列五个问题的信息:

  1. 当前讨论的结论来自哪个正式产物与哪次执行?
  2. 它使用哪些数据、查询、定义、筛选与时间范围?
  3. 上游有哪些被停止或被替代的分析路径,原因是什么?
  4. 哪些内容是正式证据,哪些只是历史背景或部分成果?
  5. 证据链是否完整?若不完整,缺少哪一环?

这条上下文必须活在聊天之外

如果 Analysis Lineage 只有当前这个 Agent 看得到,它就不是团队资产。内置 Agent、外部 Agent 和人工审核者都应读取同一套关系,而且这些关系要和分析产物一起保存,不依赖某段对话仍在 context 中。

在 Lantide Data 中,我们用这个原则连接分析的 Plan、被停止或替代的路径、实际结果与 Report。用户可以直接查看 Analysis Lineage。Agent 也能沿着同一条上下文,从当前报告追溯到上游计划与证据。下次追问、交接或重新分析时,就不必靠猜测拼回历史。

无论使用哪套工具,都可以先从一条最低限度的规则开始:每个正式结论都要能指回实际执行证据。每条被放弃的路径都要保留停止原因与替代关系。

结语

AI Agent 让分析师不必亲手完成每一个操作,也让“我记得自己做过什么”不再足以支撑可信度。未来的分析工作流除了保存最后一版 SQL 和最后一份报告,还要保留问题、选择、失败、验证与结论之间的关系。

AI Agent 让分析更快。Analysis Lineage 让团队仍能说清楚结论是怎么得出的。

参考资料