NVIDIA KGMON 团队在 KDD Cup 2026 Data Agents 竞赛中获得第二名,其系统围绕一个简单的理念构建:让智能体的运行框架更小、更清晰、更易于验证。
该竞赛要求智能体回答关于异构数据源的自然语言问题,这些数据源包括数据库、CSV 和 JSON 文件、散文文档、PDF 以及简报视频。每项任务都不仅仅需要检索,智能体还需检查可用数据、选择正确的工具、跨数据源进行推理、生成最终答案文件,并处理分析工作流中出现的陷阱。
KDD 还要求各团队使用一个小型、固定的 LLM 来驱动智能体,这使得运行框架成为主要的优化面。团队的目标是通过预处理、受限工具、持久状态和评估,让可用模型更轻松地完成任务。在围绕较小的开放模型构建可靠系统时,这些技术尤为有用。
本文分享了他们取得这一成果背后的实战手册。它并非适用于所有数据科学智能体的通用配方,但更广泛的教训适用于许多智能体系统。可靠性往往较少来自让模型更加开放,而更多来自围绕模型构建合适的运行框架。
系统背后的两条原则
两条原则塑造了该系统。
第一,约束动作空间。检查数据、调用工具、写入文件或从错误中恢复的方式过多,可能导致失败。KGMON 统一了数据访问,暴露了一小组工具,并要求最终答案遵循单一输出路径。
第二,让每一次尝试都可检查。一次运行可能因工具调用错误、连接不正确、遗漏文档规则或答案格式问题而失败。执行轨迹、重复尝试和轨迹检查帮助团队识别失败并改进运行框架。图 1 展示了整体工作流。

图 1. 该运行框架预处理数据、限制智能体的工具并保留状态,执行轨迹支持评估和改进
以下技术为构建可靠的数据分析智能体提供了实用指导。
1. 将结构化数据源转换为单一查询界面
每个 KDD 任务都可能组合 SQL 数据库、CSV 和 JSON 文件、文档以及视频。KGMON 将 CSV 和 JSON 文件转换为现有 SQLite 数据库中的表,为智能体提供了一个用于所有结构化数据的 SQL 接口。
KGMON 自定义的持久 Python 环境暴露了两个内置函数,用于检查和查询该统一数据界面:
schema()
sql(query)
这些自定义函数为智能体提供了一种统一的方式来发现和查询结构化数据。它们被内置到 KGMON 的环境中,而不是由 Python 或 SQLite 提供。
单一 SQL 接口减少了路由失败和无效轮次,为固定模型留出了更多对数据进行推理的空间。
应用此方法: 在智能体启动之前,规范化对结构化数据的访问。一个临时 SQLite 数据库、一个虚拟化查询层,或一个受治理的数据仓库接口,都可以提供一个稳定、狭窄且文档完善的查询界面。
2. 预先为智能体注入模式上下文
KGMON 在主要的推理循环之前增加了一个模式侦察步骤。系统检查了表、列、可能的连接键、重复名称、相似字段、单位、空值模式以及行粒度问题。
智能体在每个任务开始时都会收到这些模式上下文,从而节省了早期的发现轮次。
模式侦察减少了因列错误、遗漏连接或对每个答案行应代表什么感到困惑而导致的错误。图 2 展示了统一的 SQL 接口以及提供给智能体的模式上下文。

图 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 展示了该环境的函数、持久状态和错误处理。

图 3。一个持久的 Python 环境在工具调用之间保留变量,修复格式错误的调用,并通过单个辅助函数写入答案
简短、有效的尝试为额外的运行、评估和集成——即合并多次尝试的结果——留下了更多轮次。
应用此方法: 围绕工作流需求设计工具,并移除重复路径。运行 SQL 或写入答案的单一获批方式减少了破坏状态或产生无效输出的机会。
4. 将散文视为一等输入,但将其与结构化数据分开
分析工作流通常包含 PDF、Markdown 文件、文档、政策文本、指令和报告。在某些 KDD 任务中,这些来源包含回答问题所需的阈值、规则、定义和类表记录。
大型文档可能消耗 LLM 的上下文窗口。KGMON 阻止通过 Python 的 open()
函数或 .read()
方法直接读取整个文件,而是提供按字符数或正则表达式(regex)匹配来限制预览和搜索的工具。
在找到相关部分后,智能体可以调用 prose_helper
,这是一个自定义工具,它将文档块传递给一个单独的 LLM 调用,温度设置为 0 并禁用推理。它返回答案或提取表格,使原始文档内容不进入主智能体的上下文。
图 4 展示了文档检查工作流。KGMON 以两种模式使用 prose_helper:
mode="answer" # 提取规则、阈值或简短答案
mode="table" # 将重复记录提取到 SQL 表中

图 4. 定向文档检查为 prose_helper() 识别相关文本,该函数提取单个事实或将重复记录转换为 SQL 表
从散文中提取规则使智能体能够在 SQL 分析中应用这些规则,同时保持其工作上下文聚焦。
重要注意事项:表格提取适用于将结构化信息嵌入文档的竞赛任务。生产系统可能只需要定向的散文查找;表格提取可以保持为可选。
应用此方法: 提供一个文档检查工具,回答定向问题并引用来源,而无需将整个文档加载到主智能体的上下文中。当文档包含需要连接或过滤的重复记录时,添加表格提取。
5. 当视频是任务的一部分时,对其进行预处理
一些 KDD 任务包含简报视频。为了避免在智能体循环内处理视频的计算成本,KGMON 提取关键帧、转录音频、将转录片段与帧对齐,并将得到的证据提供给智能体。
每个任务最多包含一个视频,通常包含基于幻灯片的约束或干扰值。转录对齐的关键帧将口头上下文与正确的视觉证据连接起来。图 5 显示了预处理步骤。

图 5. 视频预处理将关键帧与转录片段配对,以便智能体能够在上下文中解释视觉证据
重要注意事项:预处理适用于竞赛设置。拥有大量视频的应用可能受益于按需辅助工具,类似于 prose_helper
。
应用此方法: 在智能体循环之前预处理有限的一组视频。对于更大的集合,提供一个检索或检查工具,按需查询视频证据。
6. 记录追踪日志,以便另一个智能体或人类可以检查失败
每次尝试都记录了提示、工具调用、SQL 查询、中间结果、错误、修复、文档查找和最终答案。
一个专门的检查智能体可以审查失败的轨迹,对错误进行分类,并呈现反复出现的失败,以帮助团队确定改进的优先级。
追踪日志显示了错误答案是否来自模式混淆、不正确的连接、遗漏的散文证据、输出格式或脆弱的提示规则。
应用此方法: 将追踪检查构建到开发工作流中。子智能体或评估脚本可以对最近运行中的失败进行分类,并建议对测试框架进行更改。图 6 显示了追踪如何揭示第一个错误决策。

图 6. 执行轨迹揭示了尝试首次出错的位置,并帮助团队对反复出现的失败进行分类
7. 评估多次尝试,但要注意成本
KGMON 通过重复尝试和答案选择提高了覆盖率和可靠性。它按答案值而不是列名对尝试进行分组,并可以为有争议的任务提供额外的运行。
在排行榜的精确值级评分下,多次尝试有助于区分稳定答案和一次性错误。
重要警告:重复尝试会增加令牌使用量、延迟和计算成本。在生产中,只为那些价值、不确定性或风险足以证明成本合理的任务保留集成。
应用此方法: 从单次运行评估和轨迹检查开始。使用置信度、分歧或验证失败来决定何时额外尝试的成本是合理的。
8. 谨慎使用改进循环
在自主改进循环中,代理使用评估反馈来改进提示、工具、后处理和评估逻辑。这些更改可以提高性能,但也可能过拟合基准。
KGMON 看到了几个风险:
- 将训练示例硬编码到提示中
- 累积矛盾的指令
- 添加脆弱的后处理规则
- 改进一个基准分割而损害泛化能力
团队需要快速改进,但不能构建一个记住基准的测试框架。
应用此方法: 在推广更改之前,要求保留任务、提示审计、轨迹审查和人工批准。在改进循环中构建审查门。
9. 让人类保持在循环的正确部分
团队将人工指导与代理规模的实验相结合。
人员定义了任务需求,审计了轨迹,指导了早期代理行为,拒绝了脆弱的更改,并选择了要保留在测试框架中的改进。
有针对性的人工干预可以改善未来的运行,而无需监督每个工具调用。
应用此方法: 审查任务设计、评估标准、失败分析和提议的可重用技能。让代理执行和探索,而人员决定保留哪些改进。图 7 显示了人工审查在循环中的位置。

图 7. 人员定义成功标准并审查提议的改进,而代理运行任务、审计轨迹并生成更改
构建数据科学代理的重要经验
确切的 KDD 解决方案是由基准塑造的:固定模型、无互联网访问、异构任务包、值级评分和长期运行预算。并非每个设计选择都应直接复制到生产中。
您可以将这些实践应用于其他代理系统:
- 在智能体启动之前规范化数据访问。
- 为智能体提供一个小而可靠的工具面。
- 让每一次尝试都可追溯。
- 同时评估答案和轨迹。
- 有选择地使用重复尝试。
- 保留可复用的知识。
- 仅在验证之后才推广改进。
这些实践有助于智能体可靠地使用数据。
入门
从一个可重复的分析工作流开始,并构建能够完成它的最小化框架。遵循以下步骤:
- 定义问题和所需的答案格式。
- 为智能体提供一组用于检查和查询数据的狭窄工具集。
- 记录每一次工具调用和中间结果。
- 创建一个小型评估集,其中既包含成功案例,也包含可能的失败模式。
- 审查智能体的轨迹,然后改进其工具、提示和验证检查。
一旦基础可靠,就添加文档检查、共享知识、经过审查的改进,以及对多次尝试的选择性评估。
如需更多架构示例和实现思路,请浏览 KDD Cup Data Agents 演示文稿存档,其中包含录制的演示会议以及来自八个特色团队的幻灯片。这些材料旨在作为设计参考,而非对 KGMON 解决方案的逐步重新实现。
智能体的可靠性取决于模型及其框架。二者必须共同支持可检查、可重复且有用的分析。
