mcp-feedback-enhanced/docs/architecture/interaction-flows.md
2025-06-10 09:01:53 +08:00

8.2 KiB

交互流程文檔

🔄 AI 助手與 MCP 服務完整交互流程

本文檔詳細描述 AI 助手調用 MCP Feedback Enhanced 服務的完整流程,包括首次調用和多次循環調用的機制。

📋 流程概覽

整體交互時序圖

sequenceDiagram
    participant AI as AI 助手
    participant MCP as MCP 服務
    participant WM as WebUIManager
    participant WS as WebSocket
    participant UI as Web UI
    participant User as 用戶
    
    Note over AI,User: 第一次調用流程
    AI->>MCP: interactive_feedback(summary, timeout)
    MCP->>WM: launch_web_feedback_ui()
    WM->>WM: 創建新會話
    WM->>WS: 啟動 Web 服務器
    WM->>User: 智能開啟瀏覽器
    User->>UI: 訪問回饋頁面
    UI->>WS: 建立 WebSocket 連接
    WS->>UI: connection_established
    
    Note over AI,User: 用戶回饋流程
    User->>UI: 填寫回饋內容
    UI->>WS: submit_feedback
    WS->>WM: 處理回饋數據
    WM->>MCP: 設置回饋完成
    MCP->>AI: 返回回饋結果
    
    Note over AI,User: 第二次調用流程
    AI->>MCP: interactive_feedback(new_summary, timeout)
    MCP->>WM: 更新現有會話
    WM->>WS: session_updated 通知
    WS->>UI: 會話更新訊息
    UI->>UI: 局部更新內容
    User->>UI: 提交新回饋
    UI->>WS: submit_feedback
    WS->>WM: 處理新回饋
    WM->>MCP: 設置回饋完成
    MCP->>AI: 返回新回饋結果

🚀 第一次調用詳細流程

1. AI 助手發起調用

# AI 助手調用示例
result = await interactive_feedback(
    project_directory="./my-project",
    summary="我已完成了功能 X 的實現,請檢查代碼品質和邏輯正確性",
    timeout=600
)

2. MCP 服務處理流程

flowchart TD
    START[AI 調用 interactive_feedback] --> VALIDATE[參數驗證]
    VALIDATE --> ENV[環境檢測]
    ENV --> LAUNCH[調用 launch_web_feedback_ui]
    LAUNCH --> SESSION[創建新會話]
    SESSION --> SERVER[啟動 Web 服務器]
    SERVER --> BROWSER[智能開啟瀏覽器]
    BROWSER --> WAIT[等待用戶回饋]
    WAIT --> TIMEOUT{檢查超時}
    TIMEOUT -->|未超時| FEEDBACK[接收回饋]
    TIMEOUT -->|超時| ERROR[返回超時錯誤]
    FEEDBACK --> RETURN[返回結果給 AI]
    ERROR --> RETURN

關鍵步驟說明:

2.1 環境檢測

def detect_environment():
    if os.environ.get('SSH_CLIENT') or os.environ.get('SSH_TTY'):
        return "ssh"
    elif 'microsoft' in platform.uname().release.lower():
        return "wsl"
    else:
        return "local"

2.2 會話創建

async def create_session(self, summary: str, project_dir: str):
    # 保存舊會話的 WebSocket 連接
    old_websockets = []
    if self.current_session:
        old_websockets = list(self.current_session.websockets)
    
    # 創建新會話
    session_id = str(uuid.uuid4())
    self.current_session = WebFeedbackSession(
        session_id=session_id,
        summary=summary,
        project_directory=project_dir
    )
    
    # 繼承 WebSocket 連接
    for ws in old_websockets:
        self.current_session.add_websocket(ws)
    
    # 標記需要發送會話更新
    self._pending_session_update = True

3. Web UI 連接建立

sequenceDiagram
    participant Browser as 瀏覽器
    participant UI as Web UI
    participant WS as WebSocket
    participant Session as 會話管理
    
    Browser->>UI: 訪問 /feedback
    UI->>WS: 建立 WebSocket 連接
    WS->>Session: 註冊連接
    Session->>WS: connection_established
    WS->>UI: 發送連接確認
    
    alt 有待處理的會話更新
        Session->>WS: session_updated
        WS->>UI: 會話更新訊息
        UI->>UI: 更新頁面內容
    end

🔄 多次循環調用機制

持久化會話架構

MCP Feedback Enhanced 的核心創新在於持久化會話架構,支援 AI 助手進行多次循環調用而無需重新建立連接。

stateDiagram-v2
    [*] --> FirstCall: AI 首次調用
    FirstCall --> SessionActive: 會話建立
    SessionActive --> UserFeedback: 等待用戶回饋
    UserFeedback --> FeedbackSubmitted: 回饋提交
    FeedbackSubmitted --> AIProcessing: AI 處理回饋
    AIProcessing --> SecondCall: AI 再次調用
    SecondCall --> SessionUpdated: 會話更新
    SessionUpdated --> UserFeedback: 等待新回饋
    
    note right of SessionActive
        Web 服務器持續運行
        瀏覽器標籤頁保持開啟
        WebSocket 連接維持
    end note
    
    note right of SessionUpdated
        無需重新開啟瀏覽器
        局部更新頁面內容
        狀態無縫切換
    end note

第二次調用流程

1. AI 助手再次調用

# AI 根據用戶回饋進行調整後再次調用
result = await interactive_feedback(
    project_directory="./my-project",
    summary="根據您的建議,我已修改了錯誤處理邏輯,請再次確認",
    timeout=600
)

2. 智能會話切換

flowchart TD
    CALL[AI 再次調用] --> CHECK[檢查現有會話]
    CHECK --> ACTIVE{有活躍會話?}
    ACTIVE -->|是| UPDATE[更新會話內容]
    ACTIVE -->|否| CREATE[創建新會話]
    UPDATE --> PRESERVE[保存 WebSocket 連接]
    CREATE --> PRESERVE
    PRESERVE --> NOTIFY[發送會話更新通知]
    NOTIFY --> FRONTEND[前端接收更新]
    FRONTEND --> REFRESH[局部刷新內容]

3. 前端無縫更新

// 處理會話更新訊息
function handleSessionUpdated(data) {
    // 顯示會話更新通知
    showNotification('會話已更新', 'info');
    
    // 重置回饋狀態
    feedbackState = 'FEEDBACK_WAITING';
    
    // 局部更新 AI 摘要
    updateAISummary(data.summary);
    
    // 清空回饋表單
    clearFeedbackForm();
    
    // 更新會話 ID
    currentSessionId = data.session_id;
    
    // 保持 WebSocket 連接不變
    // 無需重新建立連接
}

📊 狀態同步機制

WebSocket 訊息類型

graph LR
    subgraph "服務器 → 客戶端"
        CE[connection_established<br/>連接建立]
        SU[session_updated<br/>會話更新]
        FR[feedback_received<br/>回饋確認]
        ST[status_update<br/>狀態更新]
    end
    
    subgraph "客戶端 → 服務器"
        SF[submit_feedback<br/>提交回饋]
        HB[heartbeat<br/>心跳檢測]
        LS[language_switch<br/>語言切換]
    end

狀態轉換圖

stateDiagram-v2
    [*] --> WAITING: 會話創建/更新
    WAITING --> FEEDBACK_PROCESSING: 用戶提交回饋
    FEEDBACK_PROCESSING --> FEEDBACK_SUBMITTED: 處理完成
    FEEDBACK_SUBMITTED --> WAITING: 新會話更新
    FEEDBACK_SUBMITTED --> [*]: 會話結束
    
    WAITING --> ERROR: 連接錯誤
    FEEDBACK_PROCESSING --> ERROR: 處理錯誤
    ERROR --> WAITING: 錯誤恢復
    ERROR --> [*]: 致命錯誤

🛡️ 錯誤處理和恢復

連接斷線處理

// WebSocket 重連機制
function handleWebSocketClose() {
    console.log('WebSocket 連接已關閉,嘗試重連...');
    
    setTimeout(() => {
        initWebSocket();
    }, 3000); // 3秒後重連
}

// 心跳檢測
setInterval(() => {
    if (websocket && websocket.readyState === WebSocket.OPEN) {
        websocket.send(JSON.stringify({
            type: 'heartbeat',
            timestamp: Date.now()
        }));
    }
}, 30000); // 每30秒發送心跳

超時處理

async def wait_for_feedback(self, timeout: int = 600):
    try:
        await asyncio.wait_for(
            self.feedback_completed.wait(),
            timeout=timeout
        )
        return self.get_feedback_result()
    except asyncio.TimeoutError:
        raise TimeoutError(f"等待用戶回饋超時 ({timeout}秒)")

🎯 性能優化

連接復用

  • WebSocket 連接保持: 避免重複建立連接
  • 會話狀態繼承: 新會話繼承舊會話的連接
  • 智能瀏覽器開啟: 檢測活躍標籤頁,避免重複開啟

資源管理

  • 自動清理機制: 超時會話自動清理
  • 內存優化: 單一活躍會話模式
  • 進程管理: 優雅的進程啟動和關閉

下一步: 查看 API 參考文檔 了解詳細的 API 規範