← 文章 / AI技术
NVIDIA 开发者博客 2小时前 · 2026-10-09 18:23:49 · 8 阅读

打造可靠的数据分析 Agent:KDD Cup 夺亚经验谈

NVIDIA KGMON 团队在 KDD Cup 2026 Data Agents 竞赛中斩获第二名。他们构建系统的核心理念很简单:让 agent 的 harness 更小、更清晰、更易于验证。

这项比赛要求 agent 回答基于异构数据源的自然语言问题,数据源包括数据库、CSV 和 JSON 文件、文本文档、PDF 以及简报视频。每个任务都不只是简单的 检索,agent 需要检查可用数据、选择合适的工具、跨数据源推理、生成最终答案文件,并应对数据分析工作流中常见的各种陷阱。

KDD 还要求各团队使用一个小而固定的 LLM 来驱动 agent,这让 harness 成为主要优化对象。团队的目标是通过预处理、受限工具、持久化状态和评估,让任务对现有模型来说更容易完成。这些技术在围绕小型开源模型构建可靠系统时尤其有用。

本文分享他们取得这一成绩背后的方法论。它并非适用于所有数据科学 agent 的通用配方,但其中的核心经验对许多 agent 系统都适用:可靠性往往不是来自让模型更开放自由,而是来自围绕模型构建合适的 harness。

系统背后的两个原则

整个系统建立在两个原则之上。

第一,约束动作空间。检查数据、调用工具、写文件、从错误中恢复的方式太多,反而容易导致失败。KGMON 统一了数据访问,只暴露少量工具,并要求最终答案走统一的输出路径。

第二,让每次运行都可审查。一次运行可能因为错误的工具调用、不正确的 join、遗漏文档规则或答案格式问题而失败。借助执行轨迹、多次尝试和轨迹检查,团队能够定位失败原因并不断改进 harness。整体工作流如图 1 所示。

数据库、文件、文本和视频作为输入,驱动一个包含预处理、约束和持久化三个阶段的执行环境。执行环境输出 answer.csv 和 trace.jsonl 文件。评估反馈循环会将结果反馈至执行环境。
图 1:执行环境负责数据预处理、限制 Agent 工具权限并保存状态,执行轨迹用于支持评估与优化

以下技术为构建可靠的数据分析 Agent 提供实用指南。

1. 将结构化数据源转化为统一查询接口

KDD 竞赛的各项任务通常涉及混合数据源,包括 SQL 数据库、CSV/JSON 文件、文档和视频。KGMON 将 CSV 和 JSON 文件转换为 SQLite 数据库中的表,从而为 Agent 提供统一的 SQL 接口来访问所有结构化数据。

KGMON 定制的持久化 Python 环境暴露了两个内置函数,用于检查和查询这个统一数据层:

schema()
sql(query)

这些自定义函数让 Agent 能以单一方式发现和查询结构化数据。它们由 KGMON 环境直接提供,而非来自 Python 或 SQLite 本身。

这种单一 SQL 接口减少了路由失败和无效轮次,让固定的模型能留出更多空间专注于数据推理。

应用此方法:在 Agent 开始运行前,规范化结构化数据的访问方式。无论是临时 SQLite 数据库、虚拟查询层还是受治理的仓库接口,都能提供一个稳定、聚焦且文档齐全的查询界面。

2. 预先向 Agent 注入模式上下文

KGMON 在主 推理循环前增加了“模式侦察”步骤。系统会检查表结构、列名、潜在连接键、重复名称、相似字段、单位、空值模式以及行粒度问题。

Agent 在每个任务开始时即获得这些模式上下文,从而节省早期探索所需的时间。

Schema scouting(架构勘探)有效减少了因列选错、连接遗漏或每行答案含义不清而引发的错误。图 2 展示了统一的 SQL 接口以及提供给智能体的架构上下文。
SQLite databases, CSV files, and JSON records feed a shared SQL interface. A read-only schema scout produces a context brief covering available tables, likely joins, the unit each answer row represents, and ambiguous fields.
图 2. 将 CSV 和 JSON 文件转换为 SQLite 表,为智能体提供统一的 SQL 接口;架构勘探则在分析开始前提供上下文

应用此方法: 增加一个只读预检步骤,向智能体简报可用表、潜在连接、关键列、计量单位、可疑字段及已知歧义。这比单纯增加一个检索工具更有用。

3. 构建小型且观点明确的工具框架

KGMON 将智能体限制在架构检查、SQL 查询、文档查找、文本提取和答案撰写这些辅助工具的范围内。

该环境暴露了以下函数:

schema()       	# 检查表和列
sql(query)     	# 查询 context.db
write_answer(df)   # 原子性写入最终答案
prose_helper() 	# 从文本中回答或将文本提取为 SQL

中间件会修复格式错误的工具调用,防止单次调用失败导致整个尝试终止。

一个有状态的 Python 环境能在工具调用之间保留变量,让智能体可以复用中间结果。预定义的函数如 schema()、sql(query) 和 write_answer(df) 减少了样板代码、语法错误及文件处理失误。这节省了调用轮次,并让小型 LLM 专注于分析。图 3 展示了该环境的函数、持久化状态及错误处理机制。

schema()、sql(query)、prose_helper() 和 write_answer(df) 四个函数共同支撑一个持久化的 Python 工作区。示例中保留了查询结果供最终答案使用。侧边面板说明了错误调用修复、原子化写入答案以及避免重复执行路径的机制。
图 3. 持久化的 Python 环境可以在工具调用之间保留变量、修复格式错误的调用,并通过单一辅助函数写入答案

简短而有效的尝试可以为后续运行、评估和集成(即合并多次尝试的结果)留出更多的轮次。

实践建议:围绕工作流需求设计工具,消除重复路径。运行 SQL 或写入答案时只保留一条经过验证的路径,可以减少破坏状态或产生无效输出的机会。

4. 把文本当作一等输入,但与结构化数据分开处理

数据分析工作流中经常出现 PDF、Markdown 文件、文档、政策文本、指令和报告。在部分 KDD 赛题中,这些材料包含了回答问题所需的阈值、规则、定义以及类似表格的记录。

大文档会消耗 LLM 的上下文窗口。KGMON 禁止通过 Python 的 open() 函数或 .read() 方法直接读取整个文件,而是提供了一些工具,按字符数或正则表达式(regex)匹配来限制预览和搜索的范围。

找到相关段落后,agent 可以调用 prose_helper——一个自定义工具,它会把文档片段传给另一次 LLM 调用(temperature 设为 0,并关闭推理)。该调用返回答案或抽取出的表格,从而避免原始文档内容占用主 agent 的上下文。

图 4 展示了文档检查的工作流。KGMON 以两种模式使用 prose_helper:
mode="answer"  # 提取规则、阈值或简短答案
mode="table"   # 将重复记录提取为 SQL 表
A document passes through a limited preview and targeted search. The prose_helper() function has two modes: answer mode extracts a fact, such as a year cutoff; table mode converts repeated records into a SQL table.
图 4. 针对性文档检查用于识别 prose_helper() 所需的相关文本,该函数可提取单个事实或将有重复记录的文本转换为 SQL 表格

从文本中提取规则,使智能体在 SQL 分析中应用这些规则,同时保持其工作上下文聚焦。

需注意:表格提取适用于竞赛中那些在文档内嵌结构化信息的任务。生产系统可能仅需要针对性文本查询,表格提取可作为可选项保留。

应用此方法: 提供一个文档检查工具,它能在不将整篇文档加载到主智能体上下文的情况下回答特定问题并引用来源。当文档包含需要连接或过滤的重复记录时,再添加表格提取功能。

5. 视频作为任务一部分时进行预处理

部分 KDD 任务包含简报视频。为避免在智能体循环内处理视频带来的计算成本,KGMON 提取关键帧、转录音频、对齐转录片段与帧,并将生成的证据提供给智能体。

每个任务最多包含一个视频,常涉及基于幻灯片的约束条件或干扰值。经转录对齐的关键帧将口头语境与正确的视觉证据关联起来。图 5 展示了预处理步骤。

从左到右的工作流首先接收简报视频,提取关键帧,转录语音,并将画面与文本段落对齐。示例中将幻灯片的年份截止日期与关于将其应用于诊断日期的口头指令进行匹配。
图 5。视频预处理将关键帧与文本段落配对,使 Agent 能够结合上下文解读视觉证据

需要注意:预处理方案适用于本次比赛环境。若应用涉及大量视频,采用类似 prose_helper 的按需辅助工具可能更为合适。

应用该方法:在 Agent 循环之前,对有限数量的视频进行预处理。对于更大的集合,提供用于按需检索或检查视频证据的工具。

6. 记录执行轨迹,便于其他 Agent 或人类检查失败原因

每次尝试都记录了提示词、工具调用、SQL 查询、中间结果、错误、修复操作、文档检索及最终答案。

专用检查 Agent 可以审查失败轨迹,对错误进行分类,并凸显反复出现的失败模式,帮助团队优先改进关键问题。

轨迹显示错误答案是否源于 Schema 混淆、连接错误、遗漏文本证据、输出格式问题或脆弱的提示词规则。

应用该方法:将轨迹检查融入开发工作流。子 Agent 或评估脚本可以对近期运行中的失败进行分类并推荐框架改进方案。图 6 展示了轨迹如何揭示首个错误决策。

示例轨迹展示了一个推理错误:将精确标签扩大为一类标签,导致答案从 0 变成 11。旁边的图表按 schema 混淆、遗漏数据源规则、错误的 join 或行单位、输出格式问题以及脆弱的提示词,对示例失败频率进行了分组。
图 6. 执行轨迹能揭示尝试最早在哪一步出错,并帮助团队对反复出现的失败进行归类

7. 多次尝试评估,但要留意成本

KGMON 通过反复尝试和答案筛选提升了覆盖率和可靠性。它按答案值而非列名对尝试结果分组,还可以对有争议的任务追加运行次数。

在排行榜按精确数值计分的规则下,多次尝试有助于区分稳定答案和偶然错误。

需要注意的是:反复尝试会增加 token 消耗、延迟和计算成本。在生产环境中,只有当任务的价值、不确定性或风险足以证明成本合理时,才应使用这种集成策略。

实践建议:先从单次运行评估和轨迹检查入手,再根据置信度、结果分歧或验证失败情况,判断何时值得为额外尝试付出成本。

8. 谨慎使用改进循环

在自主改进循环中,agent 会根据评估反馈来调整提示词、工具、后处理和评估逻辑。这些改动虽然能提升性能,但也可能导致对基准测试的过拟合。

KGMON 团队发现了以下几类风险:

  • 把训练示例硬编码进提示词
  • 累积相互矛盾的指令
  • 添加脆弱的后处理规则
  • 在一个基准子集上提升性能,却损害了泛化能力

团队既要快速改进,又不能把评估框架做成死记硬背基准测试的工具。

应用此方法:在推广变更前,强制要求留出集任务测试、提示词审查、执行轨迹复盘以及人工审批。将审查节点嵌入到改进循环中。

9. 让人类处于循环的正确环节

团队将人类指导与大规模智能体实验相结合。

人类负责定义任务需求、审查执行轨迹、引导早期智能体行为、拒绝脆弱变更,并筛选需要保留在框架中的改进项。

有针对性的人工干预可以提升未来运行的效果,而无需监控每一次工具调用。

应用此方法:审查任务设计、评估标准、故障分析以及拟定的可复用技能。让智能体执行并探索,由人类决定保留哪些改进。图 7 展示了人工审查在循环中的位置。

人工设计阶段定义任务、答案格式、评估标准和已知故障模式。智能体运行任务、审查轨迹并提出变更。在推广或修订变更前,人工审查员检查证据、留出集任务、成本和风险。获批的变更将反馈至框架中。
图 7. 人类定义成功标准并审查提议的改进,而智能体负责运行任务、审查轨迹及生成变更

构建数据科学智能体的核心经验

KDD 竞赛的具体解法受基准测试约束:固定模型、无互联网访问、异构任务包、基于价值的评分以及长时运行预算。并非所有设计决策都适合直接照搬到生产环境中。

这些实践可应用于其他智能体系统:

  • 在智能体启动前,规范化数据访问。
  • 为智能体提供小而可靠的工具接口。
  • 确保每次尝试都可追溯。
  • 同时评估答案和执行轨迹。
  • 选择性使用重复尝试策略。
  • 保留可复用知识。
  • 改进方案须经验证通过后再推广。

这些实践有助于让 Agent 可靠地使用数据。

快速上手

从一个可复现的分析工作流入手,搭建能完成该流程的最小化框架。请遵循以下步骤:

  • 明确问题及所需的答案格式。
  • 为 Agent 提供一组精简的工具,用于查看和查询数据。
  • 记录每一次工具调用及中间结果。
  • 创建一个小型评估集,涵盖成功案例及潜在失败模式。
  • 审查 Agent 的执行轨迹,进而优化其工具、提示词及验证检查。

基础框架稳定后,再逐步加入文档审查、共享知识、改进方案审查以及对多次尝试的选择性评估。

如需更多架构示例及实现思路,请访问KDD Cup 数据 Agent 演示资料库,其中收录了八支特色团队录制的演示视频及幻灯片。这些材料旨在作为设计参考,而非逐步复刻 KGMON 解决方案。

Agent 的可靠性取决于模型及其框架。二者必须协同工作,支持可检查、可复现且有用的分析。

原始来源: NVIDIA 开发者博客

评论 (0)