使用 Copilot SDK 構建 AI 驅動的 GitHub 問題分類應用
本文介紹瞭如何利用 GitHub Copilot SDK 在 React Native 應用中整合 AI 功能,構建一個名為 IssueCrush 的問題分類工具。文章詳細說明了伺服器端整合架構、SDK 的生命週期管理、提示工程技巧以及優雅降級策略,幫助開發者快速理解並實現 AI 輔助的問題分類工作流。
GitHub Copilot SDK 允許開發者將 Copilot Chat 的同款 AI 能力整合到自己的應用中。為了探索實際應用效果,我構建了一個名為 IssueCrush 的問題分類應用,並在此分享整合過程中的經驗與實現要點。
維護開源專案或活躍倉庫時,常會面對大量 issue:通知徽章顯示 47 個未處理項,其中包含 bug、功能請求、需要轉為討論的問題,甚至還有三年前的重複 issue。每一條都需要切換上下文——閱讀標題、掃描描述、檢查標籤、評估優先順序、決定處理方式。當跨倉庫處理幾十條 issue 時,這種心理負擔會迅速累積。
IssueCrush 將 GitHub issue 以可滑動卡片的形式呈現:左滑關閉,右滑保留。點選“獲取 AI 摘要”按鈕,Copilot 會讀取 issue 並提供簡潔的說明與建議操作,讓維護者快速掌握要點,加速分類決策。
架構挑戰
首要技術決策是確定 Copilot SDK 的執行位置。React Native 應用無法直接使用 Node.js 包,而 SDK 需在 Node.js 環境中執行。SDK 內部管理本地 Copilot CLI 程序並透過 JSON-RPC 通訊,因此必須採用伺服器端整合模式。伺服器需安裝 Copilot CLI 並將其加入系統 PATH。
最終採用了伺服器端整合方案:單個 SDK 例項由所有客戶端共享,避免為每個移動客戶端建立新連線;認證憑據儲存在伺服器端,確保安全;當 AI 服務不可用時實現優雅降級,保證基本分類功能;所有請求和響應均經伺服器記錄,便於除錯和監控。
SDK 整合實現
Copilot SDK 採用基於會話的模型:啟動客戶端(生成 CLI 程序)、建立會話、傳送訊息、最後清理資源。關鍵程式碼模式如下:
const { CopilotClient, approveAll } = await import('@github/copilot-sdk');
let client = null;
let session = null;
try {
client = new CopilotClient();
await client.start();
session = await client.createSession({
model: 'gpt-4.1',
onPermissionRequest: approveAll,
});
const response = await session.sendAndWait({ prompt });
// 處理響應
} finally {
if (session) await session.disconnect().catch(() => {});
if (client) await client.stop().catch(() => {});
}提示工程
提示結構需提供足夠上下文。我整理了結構化的 issue 資訊,而非直接轉儲原始文本:包含標題、編號、倉庫、狀態、標籤、建立時間、作者和正文。標籤和作者上下文尤為重要——首次貢獻者的 issue 與核心維護者的 issue 需要不同處理方式。
客戶端服務層
React Native 端透過服務類封裝 API 呼叫,處理初始化與錯誤狀態。服務類提供健康檢查方法,客戶端據此決定是否顯示 AI 摘要按鈕。摘要按需生成,避免預生成浪費。結果快取在 issue 物件上,使用者滑動返回時直接顯示快取內容。
優雅降級
AI 服務可能失敗(網路問題、速率限制、服務中斷)。伺服器處理兩種失敗模式:訂閱錯誤返回 403,客戶端顯示清晰提示;其他錯誤則 fallback 到基於後設資料的摘要。Fallback 函式利用標題、標籤、正文首句等已有資訊構建有用摘要。
經驗總結
伺服器端整合是正確選擇:SDK 需要的 CLI 二進位制檔案無法安裝在手機上,伺服器端統一管理 AI 邏輯並保護憑據。提示結構比長度更重要,組織良好的後設資料能產生更優摘要。始終保留 fallback 方案,確保使用者在 AI 離線時仍能正常分類。務必清理會話資源(先 disconnect() 再 stop()),我在忘記 disconnect() 後花費兩小時排查記憶體洩漏。快取結果避免重複呼叫和額外成本。
AI 能讓維護工作更可持續。分類是消耗精力的隱形任務,若能將對 50 個 issue 的處理時間減半,就能為程式碼審查、指導新人或單純減少對通知徽章的恐懼騰出時間。Copilot SDK 只是一個工具,但背後的理念更為重要:審視維護中耗時的環節,思考 AI 是否可以先行處理。
嘗試使用 @github/copilot-sdk 可開啟構建智慧開發工具的可能性。結合 React Native 的跨平臺能力,能在移動端帶來原生般流暢的 AI 工作流。若想構建類似應用,建議從本文所述的伺服器端模式入手,這是實現整合的最簡路徑,且能隨應用擴充套件。