Skip to content

Latest commit

 

History

History
668 lines (547 loc) · 15.7 KB

File metadata and controls

668 lines (547 loc) · 15.7 KB

AI 代理系統 - 多代理協作開發框架

目錄

概述

本專案使用 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({...})
]);

代理類型

1. 監工代理 (Supervisor Agent)

角色: 專案經理 / 任務協調者

職責:

  • 📋 分析用戶需求
  • 🔨 將大型任務分解為可執行的小任務
  • 🎯 評估任務優先級和依賴關係
  • 👥 分配任務給適當的開發者
  • 📊 追蹤整體專案進度
  • ⚠️ 識別風險並提出解決方案

工具權限:

  • 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小時

2. 開發者代理 (Developer Agent)

角色: 軟體工程師

職責:

  • 💻 實現功能需求
  • 📝 編寫乾淨、可維護的代碼
  • 🎨 遵循最佳實踐和設計模式
  • 📚 撰寫代碼註釋和文檔
  • ♻️ 代碼重構和優化

專業領域:

  • 前端開發: 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. 編寫可測試的代碼

3. 測試代理 (Tester Agent)

角色: 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. 性能測試 (如適用)

請確保所有測試通過後才標記任務完成。

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);

使用指南

快速開始

  1. 安裝依賴
npm install @github/copilot-sdk
  1. 創建基本設置
import { CopilotClient } from "@github/copilot-sdk";

const client = new CopilotClient();
await client.start();
  1. 運行範例
# 多代理協調範例
npx tsx examples/multi-agent-workflow.ts

# 並行開發範例
npx tsx examples/parallel-development.ts

# 自動化測試範例
npx tsx examples/nextjs-test-automation.ts ./my-project

配置代理

const 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;
    }
});

最佳實踐

1. 代理設計原則

DO:

  • 給每個代理明確的職責範圍
  • 使用描述性的代理名稱
  • 提供詳細的系統提示詞
  • 限制工具權限到必要範圍
  • 設計可重用的代理模板

DON'T:

  • 創建職責過於廣泛的代理
  • 給所有代理相同的工具權限
  • 使用模糊的提示詞
  • 忽視代理間的協調

2. 任務管理

DO:

  • 將大任務分解為小任務
  • 明確任務間的依賴關係
  • 設置合理的優先級
  • 追蹤任務執行狀態
  • 記錄任務執行日誌

DON'T:

  • 創建過於複雜的任務
  • 忽視任務依賴
  • 同時執行有依賴的任務
  • 缺少錯誤處理

3. 並行執行

DO:

  • 識別可以並行的任務
  • 使用 Promise.all 並行執行
  • 設置合理的並行數量
  • 處理並行任務的錯誤
  • 監控資源使用

DON'T:

  • 無限制並行執行
  • 忽視任務間的競爭
  • 不處理並行錯誤
  • 過度消耗資源

4. 錯誤處理

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);
    }
}

5. 資源管理

async function main() {
    const client = new CopilotClient();
    
    try {
        await client.start();
        // 執行任務...
    } finally {
        // 確保清理資源
        await client.stop();
    }
}

範例場景

場景 1: 開發 Web 應用

需求: 創建一個用戶認證系統

代理配置:

  • 1 個監工代理
  • 2 個開發者代理 (前端 + 後端)
  • 1 個資料庫專家
  • 1 個測試代理

流程:

1. 監工分析需求 → 分解為 8 個任務
2. 並行執行:
   - 前端: 登入頁面 + 註冊頁面
   - 後端: 認證 API + 用戶管理
   - 資料庫: Schema 設計 + 遷移
3. 測試: 單元測試 + 整合測試 + E2E
4. 審查: 代碼審查 + 生成報告

預期成果:

  • 完整的認證系統
  • 80% 測試覆蓋率

  • 完整的測試套件
  • 詳細的技術文檔

場景 2: 自動化測試流程

需求: 為 Next.js 應用添加完整測試

代理配置:

  • 1 個測試生成代理
  • 1 個測試執行代理
  • 1 個測試修復代理

流程:

1. 測試生成 → 為所有組件生成測試
2. 執行測試 → 運行測試套件
3. 分析結果 → 識別失敗測試
4. 自動修復 → 修復失敗的測試
5. 重新測試 → 驗證修復
6. 生成報告 → 測試報告 + 覆蓋率

預期成果:

  • 100% 組件測試覆蓋
  • 所有測試通過
  • 詳細的測試報告
  • 高代碼覆蓋率

場景 3: 並行功能開發

需求: 同時開發多個獨立功能

代理配置:

  • 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 };
    }
});

MCP 伺服器整合

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 開發團隊