我們如何構建內部數據分析智能代理
GitHub 內部使用 Copilot 驅動的 Qubot 智能代理,讓員工能夠用自然語言查詢數據倉庫,無需分析師介入。本文介紹了 Qubot 的架構、上下文層、評估框架及經驗教訓。
大型數據分析組織常常難以讓數據訪問和洞察真正實現自助服務。業界嘗試解決這一問題數十年,但效果不佳,而如今 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