AI News HubLIVE
站內改寫2 分鐘閱讀

使用 Copilot SDK 構建 AI 驅動的 GitHub 問題分類應用

本文介紹瞭如何利用 GitHub Copilot SDK 在 React Native 應用中集成 AI 功能,構建一個名為 IssueCrush 的問題分類工具。文章詳細説明了服務器端集成架構、SDK 的生命週期管理、提示工程技巧以及優雅降級策略,幫助開發者快速理解並實現 AI 輔助的問題分類工作流。

來源GitHub AI & ML作者: Andrea Griffiths

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 工作流。若想構建類似應用,建議從本文所述的服務器端模式入手,這是實現集成的最簡路徑,且能隨應用擴展。