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