Files
ColaFlow/docs/demo/ai-human-collaboration-demo.md
Yaojia Wang 34a379750f
Some checks failed
Code Coverage / Generate Coverage Report (push) Has been cancelled
Tests / Run Tests (9.0.x) (push) Has been cancelled
Tests / Docker Build Test (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
Clean up
2025-11-15 08:58:48 +01:00

30 KiB
Raw Blame History

AI + Human 协作 Demo 指南

概述

本文档演示 ColaFlow 的核心特性AI 通过 MCP 协议安全地读写项目数据,人类通过审批机制保持对系统的控制权。

Demo 场景AI 助手读取项目信息,提议创建一个新 Epic人类审批后系统执行变更。


1. 环境准备

1.1 启动后端服务

cd colaflow-api
dotnet run

后端服务运行在 http://localhost:5000(或 https://localhost:5001

1.2 启动前端服务

cd colaflow-web
npm run dev

前端服务运行在 http://localhost:3000

1.3 创建测试用户

# 注册测试用户
curl -X POST http://localhost:5000/api/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "username": "demo_user",
    "email": "demo@colaflow.com",
    "password": "Demo@12345"
  }'

1.4 登录获取 JWT Token

curl -X POST http://localhost:5000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "demo@colaflow.com",
    "password": "Demo@12345"
  }'

响应示例

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "id": "user-uuid",
    "username": "demo_user",
    "email": "demo@colaflow.com"
  }
}

保存返回的 token,后续所有请求需要使用。

1.5 创建测试项目

curl -X POST http://localhost:5000/api/projects \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ColaFlow Demo",
    "key": "DEMO",
    "description": "AI + Human 协作演示项目"
  }'

响应示例

{
  "id": "project-uuid",
  "name": "ColaFlow Demo",
  "key": "DEMO",
  "description": "AI + Human 协作演示项目"
}

保存返回的 id,后续步骤需要使用。

1.6 创建 MCP API Key

curl -X POST http://localhost:5000/api/mcp/keys \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "AI Assistant Demo",
    "description": "用于演示 AI 协作功能",
    "expiresInDays": 30
  }'

响应示例

{
  "id": "key-uuid",
  "name": "AI Assistant Demo",
  "key": "mcp_live_1234567890abcdef",
  "createdAt": "2025-11-09T10:00:00Z",
  "expiresAt": "2025-12-09T10:00:00Z"
}

重要:保存返回的 key,这是 AI 调用 MCP 协议的凭证,只显示一次!


2. 完整 Demo 流程7步

Step 1: AI 连接和认证

AI 客户端使用 MCP API Key 连接到 ColaFlow MCP Server。

测试连接

curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "initialize",
    "params": {
      "protocolVersion": "2024-11-05",
      "capabilities": {
        "roots": {
          "listChanged": true
        }
      },
      "clientInfo": {
        "name": "ColaFlow AI Assistant",
        "version": "1.0.0"
      }
    },
    "id": 1
  }'

响应示例

{
  "jsonrpc": "2.0",
  "result": {
    "protocolVersion": "2024-11-05",
    "capabilities": {
      "resources": {},
      "tools": {}
    },
    "serverInfo": {
      "name": "ColaFlow MCP Server",
      "version": "1.0.0"
    }
  },
  "id": 1
}

Step 2: AI 读取项目数据

2.1 列出可用资源

curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "resources/list",
    "id": 2
  }'

响应示例

{
  "jsonrpc": "2.0",
  "result": {
    "resources": [
      {
        "uri": "colaflow://projects/project-uuid",
        "name": "Project: ColaFlow Demo",
        "description": "项目详情和配置",
        "mimeType": "application/json"
      },
      {
        "uri": "colaflow://projects/project-uuid/epics",
        "name": "Epics in ColaFlow Demo",
        "description": "项目的所有 Epic",
        "mimeType": "application/json"
      }
    ]
  },
  "id": 2
}

2.2 读取项目详情

curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "resources/read",
    "params": {
      "uri": "colaflow://projects/project-uuid"
    },
    "id": 3
  }'

响应示例

{
  "jsonrpc": "2.0",
  "result": {
    "contents": [
      {
        "uri": "colaflow://projects/project-uuid",
        "mimeType": "application/json",
        "text": "{\"id\":\"project-uuid\",\"name\":\"ColaFlow Demo\",\"key\":\"DEMO\",\"description\":\"AI + Human 协作演示项目\",\"epicCount\":0,\"storyCount\":0,\"taskCount\":0}"
      }
    ]
  },
  "id": 3
}

2.3 读取项目的 Epic 列表

curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "resources/read",
    "params": {
      "uri": "colaflow://projects/project-uuid/epics"
    },
    "id": 4
  }'

响应示例

{
  "jsonrpc": "2.0",
  "result": {
    "contents": [
      {
        "uri": "colaflow://projects/project-uuid/epics",
        "mimeType": "application/json",
        "text": "{\"epics\":[]}"
      }
    ]
  },
  "id": 4
}

Step 3: AI 提议创建 Epic

AI 分析项目数据后,决定创建一个新的 Epic。

3.1 列出可用工具

curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/list",
    "id": 5
  }'

响应示例

{
  "jsonrpc": "2.0",
  "result": {
    "tools": [
      {
        "name": "create_issue",
        "description": "创建新的 Epic、Story 或 Task",
        "inputSchema": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": ["EPIC", "STORY", "TASK"],
              "description": "Issue 类型"
            },
            "title": {
              "type": "string",
              "description": "Issue 标题"
            },
            "description": {
              "type": "string",
              "description": "Issue 描述"
            },
            "project_id": {
              "type": "string",
              "description": "项目 IDEpic 必需)"
            },
            "epic_id": {
              "type": "string",
              "description": "Epic IDStory 必需)"
            },
            "story_id": {
              "type": "string",
              "description": "Story IDTask 必需)"
            }
          },
          "required": ["type", "title"]
        }
      }
    ]
  },
  "id": 5
}

3.2 调用 create_issue Tool

curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "create_issue",
      "arguments": {
        "type": "EPIC",
        "title": "用户认证系统",
        "description": "实现用户注册、登录、JWT 认证和 OAuth 集成功能",
        "project_id": "project-uuid"
      }
    },
    "id": 6
  }'

Step 4: 系统生成 Diff Preview 和 PendingChange

系统接收到 AI 的创建请求后,不会立即执行,而是:

  1. 生成 Diff Preview:显示即将发生的变更
  2. 创建 PendingChange:等待人类审批
  3. 返回响应给 AI

响应示例

{
  "jsonrpc": "2.0",
  "result": {
    "content": [
      {
        "type": "text",
        "text": "已创建待审批的变更请求。\n\nPendingChange ID: pending-change-uuid\n状态: PENDING\n\n变更预览:\n=== 新建 Epic ===\n标题: 用户认证系统\n描述: 实现用户注册、登录、JWT 认证和 OAuth 集成功能\n项目: ColaFlow Demo (DEMO)\n\n此变更需要人类审批后才会执行。"
      }
    ],
    "isError": false
  },
  "id": 6
}

系统内部流程

  1. 创建 PendingChange 记录状态PENDING
  2. 生成 Diff Preview JSON
  3. 触发 SignalR 实时通知到前端

Step 5: 前端收到 SignalR 实时通知

前端通过 SignalR 实时接收到新的 PendingChange 通知。

5.1 SignalR 连接示例JavaScript

// 在前端应用中建立 SignalR 连接
import * as signalR from "@microsoft/signalr";

const connection = new signalR.HubConnectionBuilder()
  .withUrl("http://localhost:5000/hubs/mcp", {
    accessTokenFactory: () => "YOUR_JWT_TOKEN"
  })
  .withAutomaticReconnect()
  .build();

// 监听 PendingChange 事件
connection.on("PendingChangeCreated", (pendingChange) => {
  console.log("新的待审批变更:", pendingChange);

  // 显示通知
  showNotification({
    title: "AI 提议新变更",
    message: `${pendingChange.operation}: ${pendingChange.metadata.title}`,
    action: "查看详情"
  });

  // 更新 UI
  updatePendingChangesList(pendingChange);
});

connection.on("PendingChangeApproved", (pendingChange) => {
  console.log("变更已审批:", pendingChange);
  showNotification({
    title: "变更已执行",
    message: `Epic "${pendingChange.metadata.title}" 已创建`,
    type: "success"
  });
});

connection.on("PendingChangeRejected", (pendingChange) => {
  console.log("变更已拒绝:", pendingChange);
  showNotification({
    title: "变更已拒绝",
    message: `AI 提议的变更已被拒绝`,
    type: "warning"
  });
});

// 启动连接
await connection.start();
console.log("SignalR 已连接");

5.2 前端 UI 显示

前端收到通知后,应显示:

PendingChange 列表项

┌─────────────────────────────────────────────────┐
│ 🤖 AI 提议新变更 - 等待审批                     │
├─────────────────────────────────────────────────┤
│ 操作: CREATE_EPIC                                │
│ 标题: 用户认证系统                               │
│ 描述: 实现用户注册、登录、JWT 认证和 OAuth...   │
│ 项目: ColaFlow Demo (DEMO)                       │
│ 时间: 2025-11-09 10:30:25                        │
│                                                   │
│ [查看详情] [批准] [拒绝]                         │
└─────────────────────────────────────────────────┘

Diff Preview 对话框

{
  "operation": "CREATE_EPIC",
  "before": null,
  "after": {
    "title": "用户认证系统",
    "description": "实现用户注册、登录、JWT 认证和 OAuth 集成功能",
    "project_id": "project-uuid",
    "project_name": "ColaFlow Demo",
    "status": "TODO"
  },
  "changes": [
    "+ Epic: 用户认证系统",
    "+ 项目: ColaFlow Demo (DEMO)",
    "+ 状态: TODO"
  ]
}

Step 6: 人类审批变更

用户在前端点击 "批准" 或 "拒绝" 按钮。

6.1 获取 PendingChange 列表

curl -X GET http://localhost:5000/api/mcp/pending-changes \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

响应示例

{
  "items": [
    {
      "id": "pending-change-uuid",
      "mcpApiKeyId": "key-uuid",
      "operation": "CREATE_EPIC",
      "status": "PENDING",
      "metadata": {
        "type": "EPIC",
        "title": "用户认证系统",
        "description": "实现用户注册、登录、JWT 认证和 OAuth 集成功能",
        "project_id": "project-uuid"
      },
      "diffPreview": "{\"operation\":\"CREATE_EPIC\",\"after\":{...}}",
      "createdAt": "2025-11-09T10:30:25Z"
    }
  ],
  "total": 1,
  "page": 1,
  "pageSize": 20
}

6.2 获取 PendingChange 详情

curl -X GET http://localhost:5000/api/mcp/pending-changes/pending-change-uuid \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

6.3 批准变更

curl -X POST http://localhost:5000/api/mcp/pending-changes/pending-change-uuid/approve \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json"

响应示例

{
  "id": "pending-change-uuid",
  "status": "APPROVED",
  "approvedAt": "2025-11-09T10:35:00Z",
  "approvedBy": "user-uuid",
  "executedAt": "2025-11-09T10:35:00Z",
  "resultData": {
    "epic_id": "epic-uuid",
    "epic_key": "DEMO-1",
    "title": "用户认证系统"
  }
}

6.4 拒绝变更(可选)

curl -X POST http://localhost:5000/api/mcp/pending-changes/pending-change-uuid/reject \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "reason": "需要更详细的需求描述"
  }'

响应示例

{
  "id": "pending-change-uuid",
  "status": "REJECTED",
  "rejectedAt": "2025-11-09T10:35:00Z",
  "rejectedBy": "user-uuid",
  "rejectionReason": "需要更详细的需求描述"
}

Step 7: 系统执行变更并通知 AI

人类批准后,系统自动执行以下流程:

  1. 执行变更:调用业务逻辑创建 Epic
  2. 更新 PendingChange 状态APPROVED + 记录执行结果
  3. SignalR 通知前端PendingChangeApproved 事件
  4. (可选)通知 AI:通过回调机制通知 AI 变更已执行

系统内部流程

// PendingChangeService.ApproveAsync()
public async Task<PendingChange> ApproveAsync(Guid id, Guid userId)
{
    var pendingChange = await GetByIdAsync(id);

    // 1. 执行变更
    var result = await _changeExecutor.ExecuteAsync(pendingChange);

    // 2. 更新状态
    pendingChange.Approve(userId, result);
    await _repository.UpdateAsync(pendingChange);

    // 3. 通知前端
    await _hubContext.Clients.User(userId.ToString())
        .SendAsync("PendingChangeApproved", pendingChange);

    return pendingChange;
}

AI 可以查询执行结果

curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "resources/read",
    "params": {
      "uri": "colaflow://projects/project-uuid/epics"
    },
    "id": 7
  }'

响应示例

{
  "jsonrpc": "2.0",
  "result": {
    "contents": [
      {
        "uri": "colaflow://projects/project-uuid/epics",
        "mimeType": "application/json",
        "text": "{\"epics\":[{\"id\":\"epic-uuid\",\"key\":\"DEMO-1\",\"title\":\"用户认证系统\",\"description\":\"实现用户注册、登录、JWT 认证和 OAuth 集成功能\",\"status\":\"TODO\",\"createdAt\":\"2025-11-09T10:35:00Z\"}]}"
      }
    ]
  },
  "id": 7
}

3. 演示要点

3.1 安全性Human-in-the-Loop

核心机制

  • AI 不能直接修改数据,所有写操作必须经过人类审批
  • PendingChange 作为安全隔离层
  • 审批权限基于用户角色和项目权限

演示重点

  1. 展示 AI 调用 create_issue 后,数据库中没有立即创建 Epic
  2. 展示 PendingChange 表中的待审批记录状态PENDING
  3. 展示人类审批后Epic 才真正创建

SQL 查询示例

-- 查看 PendingChange
SELECT * FROM PendingChanges WHERE Status = 'PENDING';

-- 查看 Epics审批前应为空
SELECT * FROM Epics WHERE ProjectId = 'project-uuid';

-- 人类批准后再查看
SELECT * FROM Epics WHERE ProjectId = 'project-uuid';
-- 应该看到新创建的 Epic

3.2 透明性Diff Preview

核心机制

  • 每个 PendingChange 都包含 diffPreview JSON
  • 清晰展示变更前后的对比
  • 支持复杂变更UPDATE、DELETE

Diff Preview 结构

{
  "operation": "CREATE_EPIC",
  "before": null,  // CREATE 操作 before 为 null
  "after": {
    "title": "用户认证系统",
    "description": "实现用户注册、登录、JWT 认证和 OAuth 集成功能",
    "project_id": "project-uuid",
    "project_name": "ColaFlow Demo",
    "status": "TODO"
  },
  "changes": [
    "+ Epic: 用户认证系统",
    "+ 项目: ColaFlow Demo (DEMO)",
    "+ 状态: TODO"
  ]
}

UPDATE 操作示例

{
  "operation": "UPDATE_EPIC",
  "before": {
    "title": "用户认证系统",
    "status": "TODO"
  },
  "after": {
    "title": "用户认证系统 v2.0",
    "status": "IN_PROGRESS"
  },
  "changes": [
    "~ 标题: 用户认证系统 → 用户认证系统 v2.0",
    "~ 状态: TODO → IN_PROGRESS"
  ]
}

3.3 实时性SignalR

核心机制

  • 前端通过 SignalR 实时接收变更通知
  • 支持多用户协作场景
  • 减少轮询,提升性能

演示场景

  1. 单用户场景

    • 用户 A 创建 API Key 给 AI
    • AI 提议变更
    • 用户 A 立即收到通知(浏览器右上角弹窗)
  2. 多用户场景

    • 用户 A 创建 API Key 给 AI
    • AI 提议变更
    • 用户 A 和用户 B同一项目成员都收到通知
    • 用户 B 先批准
    • 用户 A 看到变更已执行的通知

SignalR 事件流程

AI 调用 Tool
    ↓
PendingChange 创建
    ↓
SignalR: PendingChangeCreated → 前端显示通知
    ↓
人类批准
    ↓
PendingChange 执行
    ↓
SignalR: PendingChangeApproved → 前端更新 UI

3.4 多租户隔离

核心机制

  • 每个 MCP API Key 关联一个用户
  • PendingChange 只能由 Key 的所有者审批
  • 跨项目隔离(用户只能访问自己的项目)

演示验证

# 用户 A 创建 API Key
curl -X POST http://localhost:5000/api/mcp/keys \
  -H "Authorization: Bearer USER_A_JWT_TOKEN" \
  -d '{"name": "AI Key A"}'

# AI 使用 Key A 创建变更
curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_key_a" \
  -d '{...}'

# 用户 B 尝试批准(应该失败 - 403 Forbidden
curl -X POST http://localhost:5000/api/mcp/pending-changes/{id}/approve \
  -H "Authorization: Bearer USER_B_JWT_TOKEN"

# 用户 A 批准(成功)
curl -X POST http://localhost:5000/api/mcp/pending-changes/{id}/approve \
  -H "Authorization: Bearer USER_A_JWT_TOKEN"

4. 前端界面演示建议

4.1 MCP Dashboard 页面

位置/mcp/dashboard

功能区域

  1. API Keys 管理

    • 列表显示所有 API Keys
    • 创建新 Key 按钮
    • 删除/禁用 Key 操作
  2. 待审批变更列表

    • 实时更新SignalR
    • 过滤ALL / PENDING / APPROVED / REJECTED
    • 排序:创建时间、状态
  3. 变更详情对话框

    • Diff Preview 可视化
    • 批准/拒绝按钮
    • 变更历史记录

截图建议

  • 截图1MCP Dashboard 主界面(显示 3 个 API Keys2 个待审批变更)
  • 截图2点击 "查看详情" 后的 Diff Preview 对话框
  • 截图3批准后的成功通知右上角 Toast

4.2 PendingChange 卡片设计

┌─────────────────────────────────────────────────────────────┐
│ 🤖 AI Assistant Demo                      ⏰ 2 分钟前       │
├─────────────────────────────────────────────────────────────┤
│ 操作: CREATE_EPIC                           状态: ⏳ 待审批  │
│                                                               │
│ 📝 标题: 用户认证系统                                        │
│ 📋 描述: 实现用户注册、登录、JWT 认证和 OAuth 集成功能      │
│ 📁 项目: ColaFlow Demo (DEMO)                                │
│                                                               │
│ ┌─────────────────────────────────────────┐                 │
│ │ Diff Preview:                            │                 │
│ │ + Epic: 用户认证系统                    │                 │
│ │ + 项目: ColaFlow Demo (DEMO)            │                 │
│ │ + 状态: TODO                             │                 │
│ └─────────────────────────────────────────┘                 │
│                                                               │
│ [🔍 查看详情]  [✅ 批准]  [❌ 拒绝]                          │
└─────────────────────────────────────────────────────────────┘

4.3 实时通知设计

Toast 通知(右上角)

新变更通知

┌─────────────────────────────────────┐
│ 🤖 AI 提议新变更                    │
│ CREATE_EPIC: 用户认证系统           │
│ [查看] [批准] [关闭]                │
└─────────────────────────────────────┘

批准成功通知

┌─────────────────────────────────────┐
│ ✅ 变更已执行                       │
│ Epic "用户认证系统" 已创建          │
│ [查看 Epic] [关闭]                  │
└─────────────────────────────────────┘

5. 高级演示场景

5.1 批量操作AI 创建多个 Story

场景描述 AI 读取 Epic "用户认证系统" 后,提议创建 3 个 Story。

AI 调用

# Story 1: 用户注册
curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "create_issue",
      "arguments": {
        "type": "STORY",
        "title": "用户注册功能",
        "description": "实现邮箱注册、密码强度验证、邮箱验证",
        "epic_id": "epic-uuid"
      }
    },
    "id": 10
  }'

# Story 2: 用户登录
curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "create_issue",
      "arguments": {
        "type": "STORY",
        "title": "用户登录功能",
        "description": "实现 JWT Token 登录、Remember Me、多端登录",
        "epic_id": "epic-uuid"
      }
    },
    "id": 11
  }'

# Story 3: OAuth 集成
curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "create_issue",
      "arguments": {
        "type": "STORY",
        "title": "OAuth 第三方登录",
        "description": "集成 GitHub、Google、Microsoft OAuth 登录",
        "epic_id": "epic-uuid"
      }
    },
    "id": 12
  }'

演示要点

  • 前端同时收到 3 个 PendingChange 通知
  • 人类可以选择性批准(例如:批准 Story 1 和 2拒绝 Story 3
  • 展示批量审批功能(勾选多个 → 批量批准)

5.2 UPDATE 操作AI 更新 Epic 状态

场景描述 AI 检测到 Epic 下所有 Story 已完成,提议将 Epic 状态更新为 DONE。

AI 调用

curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "update_issue",
      "arguments": {
        "issue_id": "epic-uuid",
        "status": "DONE"
      }
    },
    "id": 20
  }'

Diff Preview

{
  "operation": "UPDATE_EPIC",
  "before": {
    "id": "epic-uuid",
    "key": "DEMO-1",
    "title": "用户认证系统",
    "status": "IN_PROGRESS",
    "completedStories": 3,
    "totalStories": 3
  },
  "after": {
    "id": "epic-uuid",
    "key": "DEMO-1",
    "title": "用户认证系统",
    "status": "DONE",
    "completedStories": 3,
    "totalStories": 3
  },
  "changes": [
    "~ 状态: IN_PROGRESS → DONE"
  ]
}

5.3 DELETE 操作AI 删除重复 Task

场景描述 AI 检测到有重复的 Task提议删除。

AI 调用

curl -X POST http://localhost:5000/mcp \
  -H "Authorization: Bearer mcp_live_1234567890abcdef" \
  -d '{
    "jsonrpc": "2.0",
    "method": "tools/call",
    "params": {
      "name": "delete_issue",
      "arguments": {
        "issue_id": "task-uuid"
      }
    },
    "id": 30
  }'

Diff Preview

{
  "operation": "DELETE_TASK",
  "before": {
    "id": "task-uuid",
    "key": "DEMO-1-1",
    "title": "设计数据库 Schema",
    "status": "TODO",
    "story": "用户注册功能"
  },
  "after": null,
  "changes": [
    "- Task: 设计数据库 Schema (DEMO-1-1)",
    "- 从 Story: 用户注册功能 中删除"
  ]
}

安全考虑

  • DELETE 操作应该有更严格的审批流程
  • 可以设置规则:某些类型的变更需要多人审批
  • 可以设置时间窗口DELETE 操作需要等待 24 小时后才能执行

6. 监控和审计

6.1 Audit Log

所有 MCP 操作都应记录在 AuditLogs 表中。

查询示例

curl -X GET "http://localhost:5000/api/audit-logs?entityType=PendingChange&page=1&pageSize=20" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

响应示例

{
  "items": [
    {
      "id": "log-uuid-1",
      "entityType": "PendingChange",
      "entityId": "pending-change-uuid",
      "action": "CREATED",
      "performedBy": "AI Assistant Demo (MCP Key)",
      "performedAt": "2025-11-09T10:30:25Z",
      "metadata": {
        "operation": "CREATE_EPIC",
        "title": "用户认证系统"
      }
    },
    {
      "id": "log-uuid-2",
      "entityType": "PendingChange",
      "entityId": "pending-change-uuid",
      "action": "APPROVED",
      "performedBy": "demo_user",
      "performedAt": "2025-11-09T10:35:00Z",
      "metadata": {
        "approver_id": "user-uuid"
      }
    },
    {
      "id": "log-uuid-3",
      "entityType": "Epic",
      "entityId": "epic-uuid",
      "action": "CREATED",
      "performedBy": "System (via PendingChange)",
      "performedAt": "2025-11-09T10:35:00Z",
      "metadata": {
        "pending_change_id": "pending-change-uuid",
        "key": "DEMO-1",
        "title": "用户认证系统"
      }
    }
  ],
  "total": 3
}

6.2 MCP Analytics

Dashboard 指标

  • 总 API 调用次数
  • PendingChange 批准率
  • 平均审批时长
  • AI 提议的准确率(被批准的比例)

查询示例

curl -X GET "http://localhost:5000/api/mcp/analytics?startDate=2025-11-01&endDate=2025-11-30" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"

响应示例

{
  "totalApiCalls": 1523,
  "totalPendingChanges": 87,
  "approvedChanges": 72,
  "rejectedChanges": 10,
  "pendingChanges": 5,
  "approvalRate": 0.828,
  "averageApprovalTime": "00:05:32",
  "topOperations": [
    {"operation": "CREATE_TASK", "count": 45},
    {"operation": "UPDATE_TASK", "count": 20},
    {"operation": "CREATE_STORY", "count": 12}
  ]
}

7. 常见问题排查

7.1 SignalR 连接失败

问题:前端无法连接到 SignalR Hub

检查

# 1. 检查后端 SignalR 配置
# Program.cs 中应该有:
builder.Services.AddSignalR();
app.MapHub<McpHub>("/hubs/mcp");

# 2. 检查 CORS 配置
# 确保允许 SignalR 所需的 Headers
app.UseCors(policy => policy
    .WithOrigins("http://localhost:3000")
    .AllowAnyHeader()
    .AllowAnyMethod()
    .AllowCredentials()); // SignalR 需要

# 3. 测试连接
# 浏览器控制台应该看到:
# SignalR: Connection started

7.2 MCP API Key 认证失败

问题AI 调用 MCP 接口返回 401 Unauthorized

检查

# 1. 验证 Key 格式
# 正确格式: mcp_live_xxxxxxxxxxxx
# 错误格式: xxxxxxxxxxxx (缺少前缀)

# 2. 验证 Key 是否过期
curl -X GET http://localhost:5000/api/mcp/keys \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
# 检查 expiresAt 字段

# 3. 验证 Authorization Header
# 正确: Authorization: Bearer mcp_live_xxxxxxxxxxxx
# 错误: Authorization: mcp_live_xxxxxxxxxxxx (缺少 Bearer)

7.3 PendingChange 执行失败

问题:批准 PendingChange 后返回 500 错误

检查

# 1. 查看后端日志
# 应该有详细的错误堆栈

# 2. 检查数据完整性
# 例如Epic 关联的 Project 是否存在
SELECT * FROM Projects WHERE Id = 'project-uuid';

# 3. 检查业务逻辑验证
# 例如Story 必须关联到 Epic
# Task 必须关联到 Story

8. 总结

本 Demo 展示了 ColaFlow 的核心创新:AI + Human 协作的项目管理模式。

关键价值

  1. 安全可控Human-in-the-Loop 确保 AI 不会失控
  2. 透明可信Diff Preview 让人类清晰了解 AI 的提议
  3. 高效协作:实时通知让人类快速响应 AI 的请求
  4. 可审计性:完整的操作日志确保合规性

下一步

  • 集成 Claude/ChatGPT MCP 客户端
  • 实现更复杂的 Prompt 工程(智能拆解需求)
  • 支持批量审批和审批规则引擎
  • 实现 AI 自主学习(根据历史审批记录优化提议)

演示清单

  • 环境准备(后端、前端、数据库)
  • 创建测试用户和项目
  • 创建 MCP API Key
  • AI 读取项目数据
  • AI 提议创建 Epic
  • 前端收到 SignalR 通知
  • 人类查看 Diff Preview
  • 人类批准变更
  • 验证 Epic 已创建
  • 查看 Audit Log

预计演示时长15-20 分钟