AI News HubLIVE
站内改写3 分钟阅读

我们如何构建内部数据分析智能代理

GitHub 内部使用 Copilot 驱动的 Qubot 智能代理,让员工能够用自然语言查询数据仓库,无需分析师介入。本文介绍了 Qubot 的架构、上下文层、评估框架及经验教训。

来源GitHub AI & ML作者: Natalie Guevara

大型数据分析组织常常难以让数据访问和洞察真正实现自助服务。业界尝试解决这一问题数十年,但效果不佳,而如今 AI 为我们提供了可行的途径。在 GitHub 的规模下,为数十个产品团队提供专门的数据分析支持充满挑战,因此许多团队不得不自行解决。虽然有大量有价值的产品遥测数据可用于决策,但确定数据模型、粒度、过滤器,编写查询并验证结果,在没有数据分析师支持的情况下一直很困难。

为此,我们推出了 Qubot,一个基于 GitHub Copilot 的内部数据分析代理。Qubot 允许任何 GitHub 员工(我们称之为 Hubber)用自然语言询问数据仓库中任何数据模型的问题,并在数秒内获得答案。Qubot 并非报告工具或仪表盘替代品,而是用于探索性问题,例如“哪个用户群组在此功能上留存率最高?”或“上周哪个产品对指标的移动贡献最大?”Qubot 维护成本为零,帮助团队快速上手不熟悉的数据集。

在本文中,我们将介绍 Qubot 的构建方式、演变过程以及经验教训。

Qubot 的工作原理

架构包含三个主要组件:用户界面、上下文层和查询引擎。

用户界面

Qubot 可通过 Slack、VS Code 和 Copilot CLI 访问。Slack 界面无需配置,是 Hubber 的首选协作工具。当有人在 Qubot Slack 频道提问时,会生成一个 Qubot 实例作为 Copilot Cloud Agent 运行在 github.com 上。答案直接返回 Slack,用户可以分享结果,也可以在线程中迭代优化问题。所有结果也会以 Markdown 报告形式存储在拉取请求中,供用户参考以微调查询或用于仪表盘。

Qubot 也可在 VS Code 和 Copilot CLI 中使用,适合希望与工作流更紧密集成的用户。Qubot 可通过一条命令安装为插件,随后在 VS Code 或 Copilot CLI 的任何代理会话中可用。

上下文层

我们的数据仓库包含不同阶段的数据:原始事件(青铜)、一致的事实和维度(白银)以及针对特定业务用例的数据集(黄金)。上下文层采用联邦方式构建,针对不同数据类型定制知识。

  • 对于青铜数据,产品团队提供遥测上下文,包含模式信息和元数据。
  • 对于白银数据,我们有查询示例、使用指南、强制过滤器等,由数据和分析团队维护。
  • 对于黄金数据,我们有业务规则和指标定义,由拥有这些数据集的团队贡献。

我们还利用 ETL 管道系统地用额外信号和派生元数据丰富上下文层。上下文在运行时通过 GitHub MCP Server 从上下文层获取。

上下文代理

上下文层不断接收新知识,这些知识持久化在多个仓库中。GitHub 主要使用 Markdown 编写文档,因此无需与多种工具对接。我们通过上下文代理简化了联邦上下文贡献。团队可以通过标准化模板或引用包含相关上下文的仓库来贡献内容。代理会将这些信息摄入、组织并规范化,形成对 Qubot 有效的结构化格式。

评估框架

每次对上下文层或代理配置的更改在上线前都会经过评估。当有人想丰富上下文层时,可以提交拉取请求。新上下文会通过离线评估框架,测量响应准确性、找到正确答案的延迟,并在问题到达用户前捕捉回归。

基准测试框架包含三个部分:

  • 测试用例:包含已知正确答案、标准 SQL 和元数据(领域、难度)的提示数据集。
  • 自动化运行编排:自动化每个测试用例作为代理任务启动的脚本,运行多次并行试验,轮询完成并保存详细 JSON 结果。
  • 统计汇总:读取保存的结果并计算每个测试用例的完成率、准确率和持续时间(平均/最小/最大)。

端到端流程为:定义测试用例 → 对每个用例运行 Qubot N 次 → 收集结果 → 汇总统计 → 比较配置。

查询引擎

Qubot 通过 MCP 服务器连接到 Kusto 和 Trino,这两个查询引擎驱动了 GitHub 大多数的分析工作负载。我们开发了自定义的 Trino MCP 服务器,而 Kusto 则部署了 Fabric RTI MCP Server 的本地版本。Kusto 速度很快,适合对近期事件数据进行探索性查询;Trino 处理复杂连接和更深层次的历史分析。Qubot 默认使用 Kusto,并在需要时自动切换到 Trino,无需用户决定。

变化与经验教训

Qubot 在 GitHub 得到了广泛采用,数百名活跃用户运行了数千次查询。Hubber 在数据和分析 Slack 频道中提问的数量大幅减少,因为他们可以更自主地探索数据,只在遇到复杂问题时才求助。Qubot 也让从未涉足数据仓库的 Hubber 能够访问所需数据,驱动决策。这就是我们提供多种接口(Slack、Copilot CLI、VS Code)的原因之一;Hubber 虽然技术背景强,但我们也希望提供零门槛、零配置的选项。

我们很快发现,上下文层是增强 Copilot 推理能力、创建专家分析代理的关键。实验表明,结构良好且精心管理的上下文不仅让 Qubot 更准确,还将返回正确答案的速度提升了三倍。这对分析工程学科有深远影响,使这类工件成为数据建模的一等公民,而非事后补充。

Qubot 是一个罕见的成功中心辐射式执行的例子。它减轻了数据和分析团队的负担,因为产品团队拥有其表面的遥测数据,业务团队拥有其黄金数据的定义。Qubot 像引力一样将所有分布式知识集中到一个工具中,为整个 GitHub 带来益处,激励合作团队贡献,而非创建多个局限于各自领域的工具。

致谢

Qubot 工程团队:Weijie Tan, Tobias Tschuemperlin, Vamsi Anamaneni

特别感谢:Yaswanth Anantharaju