本專案使用 GitHub Copilot SDK 構建了一個多代理協作系統,能夠模擬一個完整的軟體開發團隊。通過多個專門化的 AI 代理協同工作,我們實現了:
- 🚀 並行開發: 多個代理同時執行不同任務,大幅提升開發效率
- 🎯 專業分工: 每個代理專注於特定領域,確保專業性
- 🔄 自動協調: 監工代理自動管理任務分配和進度追蹤
- ✅ 質量保證: 自動化測試代理確保代碼質量
- 📊 透明可視: 完整的日誌和報告系統
- 基於: GitHub Copilot SDK
- 語言: TypeScript/Node.js
- 架構: 多會話並行處理
- 通訊: 事件驅動架構
┌─────────────────────────────────────────────────────────────┐
│ Copilot Client │
│ (中央協調器) │
└───────────┬─────────────────────────────────┬───────────────┘
│ │
┌───────▼────────┐ ┌──────▼──────┐
│ 監工會話 │ │ 開發會話 │
│ (Supervisor) │ │ (Dev 1-N) │
│ │ │ │
│ 任務分解 │◄──────────────►│ 實現功能 │
│ 進度追蹤 │ │ 編寫代碼 │
└────────────────┘ └──────────────┘
│ │
┌───────▼────────┐ ┌──────▼──────┐
│ 報告生成 │ │ 測試會話 │
│ (Reporter) │ │ (Tester) │
│ │ │ │
│ 結果分析 │◄──────────────►│ 執行測試 │
│ 文檔生成 │ │ 修復問題 │
└────────────────┘ └──────────────┘
每個代理運行在獨立的會話中:
// 會話隔離
const supervisorSession = await client.createSession({
sessionId: "supervisor-session",
customAgents: [supervisorAgent]
});
const devSession1 = await client.createSession({
sessionId: "dev-session-1",
customAgents: [developerAgent]
});
// 並行執行
await Promise.all([
supervisorSession.send({...}),
devSession1.send({...})
]);角色: 專案經理 / 任務協調者
職責:
- 📋 分析用戶需求
- 🔨 將大型任務分解為可執行的小任務
- 🎯 評估任務優先級和依賴關係
- 👥 分配任務給適當的開發者
- 📊 追蹤整體專案進度
⚠️ 識別風險並提出解決方案
工具權限:
view- 查看檔案search- 搜尋代碼庫
提示詞範本:
你是一位經驗豐富的專案經理,負責:
1. 分析用戶需求,將大型任務分解為可執行的小任務
2. 評估每個任務的優先級和依賴關係
3. 分配任務給適當的開發者
4. 追蹤整體專案進度
5. 協調團隊成員之間的工作
6. 識別風險並提出解決方案
請以結構化的方式輸出任務列表,包含:
- 任務編號 (T1, T2, T3...)
- 任務描述
- 優先級 (高/中/低)
- 預估時間
- 分配對象
- 依賴項
輸出範例:
任務分解結果:
T1: 設計用戶認證模組 | 優先級: 高 | 分配: developer | 依賴: [] | 預估: 2小時
T2: 創建資料庫模型 | 優先級: 高 | 分配: developer | 依賴: [] | 預估: 1小時
T3: 實現登入 API | 優先級: 中 | 分配: developer | 依賴: [T1, T2] | 預估: 3小時
T4: 編寫單元測試 | 優先級: 高 | 分配: tester | 依賴: [T1, T2, T3] | 預估: 2小時
角色: 軟體工程師
職責:
- 💻 實現功能需求
- 📝 編寫乾淨、可維護的代碼
- 🎨 遵循最佳實踐和設計模式
- 📚 撰寫代碼註釋和文檔
- ♻️ 代碼重構和優化
專業領域:
- 前端開發: React, Next.js, TypeScript
- 後端開發: Node.js, Express, API 設計
- 資料庫: PostgreSQL, MongoDB, ORM
工具權限:
edit- 編輯檔案view- 查看檔案bash- 執行命令search- 搜尋代碼
提示詞範本:
你是一位資深全端工程師,專精於:
1. 編寫乾淨、可維護的 TypeScript/JavaScript 代碼
2. 遵循最佳實踐和設計模式 (SOLID, DRY, KISS)
3. 實現功能需求
4. 撰寫清晰的代碼註釋和文檔
5. 使用 TypeScript 進行類型安全開發
6. 熟悉 React、Next.js、Node.js 等現代技術棧
在編碼前,請先:
1. 理解需求
2. 設計解決方案
3. 考慮邊界情況
4. 編寫可測試的代碼
角色: QA 工程師 / 測試專家
職責:
- 🧪 編寫單元測試 (Jest/Vitest)
- 🔗 編寫整合測試
- 🎭 編寫 E2E 測試 (Playwright)
- 📈 確保代碼覆蓋率 > 80%
- 🐛 發現和報告 bug
- ✅ 驗證功能需求
測試類型:
- 單元測試: 測試個別函數和組件
- 整合測試: 測試模組間的互動
- E2E 測試: 測試完整的用戶流程
- 性能測試: 測試系統性能
工具權限:
edit- 編輯測試檔案view- 查看代碼bash- 執行測試命令search- 搜尋相關代碼
提示詞範本:
你是一位測試工程師,專精於:
1. 編寫全面的單元測試 (使用 Jest/Vitest)
2. 編寫整合測試和 E2E 測試 (使用 Playwright)
3. 確保高代碼覆蓋率 (>80%)
4. 測試邊界情況和錯誤處理
5. 發現和報告 bug
6. 驗證功能需求是否滿足
測試應該包含:
1. 正常流程測試
2. 錯誤處理測試
3. 邊界條件測試
4. 性能測試 (如適用)
請確保所有測試通過後才標記任務完成。
{
name: "frontend-specialist",
displayName: "前端專家",
prompt: `專精於:
- React 18+ 和 Next.js 14+
- TypeScript
- Tailwind CSS
- 響應式設計
- 性能優化
- 無障礙設計 (a11y)`,
tools: ["edit", "view", "bash"]
}{
name: "backend-specialist",
displayName: "後端專家",
prompt: `專精於:
- Node.js 和 Express/Fastify
- RESTful API 設計
- 資料庫設計 (PostgreSQL, MongoDB)
- 認證和授權 (JWT, OAuth)
- API 安全性
- 錯誤處理`,
tools: ["edit", "view", "bash"]
}{
name: "database-specialist",
displayName: "資料庫專家",
prompt: `專精於:
- 資料庫架構設計
- SQL 優化
- 索引策略
- 資料遷移
- ORM (Prisma, TypeORM)
- 資料一致性`,
tools: ["edit", "view", "bash"]
}1. 需求輸入
↓
2. 監工分析 → 任務分解
↓
3. 任務分配 → 優先級排序
↓
4. 並行開發 (多個開發者代理)
├─ 前端開發
├─ 後端開發
├─ 資料庫設計
└─ API 實現
↓
5. 測試驗證
├─ 生成測試
├─ 執行測試
└─ 修復問題
↓
6. 結果審查
├─ 代碼審查
├─ 質量檢查
└─ 生成報告
↓
7. 交付成果
// 任務狀態
type TaskStatus =
| "pending" // 等待執行
| "in-progress" // 執行中
| "testing" // 測試中
| "completed" // 已完成
| "failed"; // 失敗
// 任務追蹤
interface Task {
id: string;
description: string;
priority: "high" | "medium" | "low";
assignedTo: "developer" | "tester";
status: TaskStatus;
dependencies: string[];
result?: string;
startTime?: Date;
endTime?: Date;
}策略 1: 按類型分組
// 將任務按類型分組並行執行
const frontendTasks = [...];
const backendTasks = [...];
const testTasks = [...];
await Promise.all([
executeFrontendTasks(frontendTasks),
executeBackendTasks(backendTasks),
executeTestTasks(testTasks)
]);策略 2: 依賴管理
// 只執行依賴已完成的任務
const readyTasks = tasks.filter(task =>
task.dependencies.every(depId =>
isCompleted(depId)
)
);
await executeTasksInParallel(readyTasks);- 安裝依賴
npm install @github/copilot-sdk- 創建基本設置
import { CopilotClient } from "@github/copilot-sdk";
const client = new CopilotClient();
await client.start();- 運行範例
# 多代理協調範例
npx tsx examples/multi-agent-workflow.ts
# 並行開發範例
npx tsx examples/parallel-development.ts
# 自動化測試範例
npx tsx examples/nextjs-test-automation.ts ./my-projectconst customAgent: CustomAgentConfig = {
name: "my-agent",
displayName: "我的代理",
description: "代理描述",
prompt: "詳細的系統提示詞",
tools: ["edit", "view", "bash"],
infer: true
};
const session = await client.createSession({
customAgents: [customAgent],
model: "gpt-4.1"
});session.on((event) => {
switch (event.type) {
case "assistant.message":
console.log("代理回應:", event.data.content);
break;
case "tool.execution_start":
console.log("執行工具:", event.data.toolName);
break;
case "session.idle":
console.log("會話空閒");
break;
}
});✅ DO:
- 給每個代理明確的職責範圍
- 使用描述性的代理名稱
- 提供詳細的系統提示詞
- 限制工具權限到必要範圍
- 設計可重用的代理模板
❌ DON'T:
- 創建職責過於廣泛的代理
- 給所有代理相同的工具權限
- 使用模糊的提示詞
- 忽視代理間的協調
✅ DO:
- 將大任務分解為小任務
- 明確任務間的依賴關係
- 設置合理的優先級
- 追蹤任務執行狀態
- 記錄任務執行日誌
❌ DON'T:
- 創建過於複雜的任務
- 忽視任務依賴
- 同時執行有依賴的任務
- 缺少錯誤處理
✅ DO:
- 識別可以並行的任務
- 使用 Promise.all 並行執行
- 設置合理的並行數量
- 處理並行任務的錯誤
- 監控資源使用
❌ DON'T:
- 無限制並行執行
- 忽視任務間的競爭
- 不處理並行錯誤
- 過度消耗資源
try {
await executeTask(task);
await updateTaskStatus(task.id, "completed");
} catch (error) {
console.error(`任務 ${task.id} 失敗:`, error);
await updateTaskStatus(task.id, "failed");
// 可選: 重試邏輯
if (retryCount < maxRetries) {
await retryTask(task);
}
}async function main() {
const client = new CopilotClient();
try {
await client.start();
// 執行任務...
} finally {
// 確保清理資源
await client.stop();
}
}需求: 創建一個用戶認證系統
代理配置:
- 1 個監工代理
- 2 個開發者代理 (前端 + 後端)
- 1 個資料庫專家
- 1 個測試代理
流程:
1. 監工分析需求 → 分解為 8 個任務
2. 並行執行:
- 前端: 登入頁面 + 註冊頁面
- 後端: 認證 API + 用戶管理
- 資料庫: Schema 設計 + 遷移
3. 測試: 單元測試 + 整合測試 + E2E
4. 審查: 代碼審查 + 生成報告
預期成果:
- 完整的認證系統
-
80% 測試覆蓋率
- 完整的測試套件
- 詳細的技術文檔
需求: 為 Next.js 應用添加完整測試
代理配置:
- 1 個測試生成代理
- 1 個測試執行代理
- 1 個測試修復代理
流程:
1. 測試生成 → 為所有組件生成測試
2. 執行測試 → 運行測試套件
3. 分析結果 → 識別失敗測試
4. 自動修復 → 修復失敗的測試
5. 重新測試 → 驗證修復
6. 生成報告 → 測試報告 + 覆蓋率
預期成果:
- 100% 組件測試覆蓋
- 所有測試通過
- 詳細的測試報告
- 高代碼覆蓋率
需求: 同時開發多個獨立功能
代理配置:
- 4 個專門化開發者 (前端/後端/資料庫/測試)
流程:
並行執行:
├─ Session 1: 實現用戶註冊
├─ Session 2: 實現商品管理
├─ Session 3: 實現購物車
└─ Session 4: 編寫所有測試
結果整合 → 生成總體報告
預期成果:
- 4 倍開發速度
- 獨立可測試的模組
- 完整的測試覆蓋
- 統一的代碼風格
import { defineTool } from "@github/copilot-sdk";
import { z } from "zod";
const deployTool = defineTool({
name: "deploy",
description: "部署應用到指定環境",
parameters: z.object({
environment: z.enum(["dev", "staging", "production"]),
version: z.string()
}),
handler: async ({ environment, version }) => {
// 實現部署邏輯
return { success: true };
}
});const session = await client.createSession({
mcpServers: {
"database": {
type: "local",
command: "mcp-database-server",
tools: ["*"]
}
}
});const session = await client.createSession({
onPermissionRequest: async (request) => {
// 審查權限請求
console.log("請求權限:", request);
return {
approved: true,
reason: "已授權"
};
}
});function getProgress() {
const tasks = getAllTasks();
return {
total: tasks.length,
completed: tasks.filter(t => t.status === "completed").length,
failed: tasks.filter(t => t.status === "failed").length,
percentage: (completed / total) * 100
};
}await fs.writeFile("execution-log.json", JSON.stringify({
timestamp: new Date(),
tasks: taskHistory,
metrics: performanceMetrics
}, null, 2));Q: 代理沒有回應? A: 檢查會話狀態和事件監聽器配置
Q: 任務執行失敗? A: 查看錯誤日誌,檢查工具權限和提示詞
Q: 並行任務衝突? A: 確認任務依賴關係,避免競爭條件
Q: 記憶體使用過高? A: 限制並行會話數量,及時清理會話
版本: 1.0.0
最後更新: 2026-01-24
維護者: AI 開發團隊