子代理与 MCP

子代理模式(Sub-Agent)

子代理模式是 Codex 的高级特性,允许将复杂任务分解为多个子任务,由专门的子代理并行或串行执行。

什么是子代理?

子代理是 Codex 创建的独立 AI 代理实例,每个子代理有明确的职责范围和执行上下文。主代理负责协调和整合子代理的输出。

主代理(协调者)
├── 子代理 A:分析需求,产出设计文档
├── 子代理 B:根据设计实现前端组件
├── 子代理 C:根据设计实现后端 API
└── 子代理 D:编写集成测试
    ↓
主代理整合结果,确保一致性

子代理的适用场景

场景说明示例
并行开发同时开发多个独立模块同时实现用户管理和订单管理
专业化分工不同子代理专注不同领域一个写前端、一个写后端
大规模重构拆分重构任务分别重构 API 层和数据层
代码审查多维度审查安全审查 + 性能审查 + 风格审查

子代理使用示例

"使用子代理模式完成以下任务:

1. 子代理 A:分析项目结构,生成重构计划
2. 子代理 B:按照计划重构数据访问层
3. 子代理 C:重构业务逻辑层
4. 子代理 D:更新所有相关测试

请协调这些子代理的工作,确保最终结果一致。"

子代理配置

{
  "subAgents": {
    "enabled": true,
    "maxConcurrent": 3,
    "timeout": 120000,
    "models": {
      "code": "claude-3-sonnet",
      "review": "claude-3-opus",
      "test": "claude-3-haiku"
    }
  }
}

MCP 协议

MCP(Model Context Protocol)是 Anthropic 推出的一种开放协议,用于标准化 AI 模型与外部工具之间的通信。

MCP 概述

MCP 允许您为 Codex 注册自定义工具和资源,扩展其能力边界。

Codex (MCP 客户端)
    │
    ├── MCP 服务器 A (文件系统工具)
    ├── MCP 服务器 B (数据库工具)
    ├── MCP 服务器 C (API 集成)
    └── MCP 服务器 D (自定义工具)

MCP 核心概念

概念说明示例
工具(Tool)可调用的函数查询数据库、发送 HTTP 请求
资源(Resource)可访问的数据文件、API 响应
提示(Prompt)预设的提示词模板代码审查模板
传输(Transport)通信方式STDIO、HTTP

工具注册

注册 MCP 服务器

settings.json 中注册 MCP 服务器:

{
  "mcpServers": {
    "database": {
      "command": "node",
      "args": ["/path/to/mcp-db-server.js"],
      "env": {
        "DB_URL": "postgresql://localhost/mydb"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@anthropic-ai/mcp-filesystem", "/allowed/path"]
    },
    "github": {
      "command": "node",
      "args": ["/path/to/mcp-github-server.js"],
      "env": {
        "GITHUB_TOKEN": "ghp_xxx"
      }
    }
  }
}

工具发现

Codex 会自动发现已注册 MCP 服务器的可用工具:

/list-tools          # 列出所有可用工具
/list-tools database  # 列出特定服务器的工具
/tool-info query     # 查看工具详情

自定义工具开发

创建 MCP 服务器

使用 TypeScript 创建自定义 MCP 服务器:

import { Server } from "@anthropic-ai/mcp-sdk";

const server = new Server({
  name: "my-custom-tools",
  version: "1.0.0",
});

// 注册工具
server.tool(
  "search-docs",
  "搜索内部文档",
  {
    query: { type: "string", description: "搜索关键词" },
    limit: { type: "number", default: 10 },
  },
  async (args) => {
    const results = await searchInternalDocs(args.query, args.limit);
    return { content: results };
  }
);

server.tool(
  "send-notification",
  "发送通知",
  {
    message: { type: "string" },
    channel: { type: "string", enum: ["slack", "email"] },
  },
  async (args) => {
    await sendNotification(args.message, args.channel);
    return { content: "通知已发送" };
  }
);

server.start();

Python MCP 服务器

from mcp_sdk import Server, Tool

server = Server("my-python-tools")

@server.tool(
    name="analyze-data",
    description="分析 CSV 数据",
    parameters={
        "file_path": {"type": "string"},
        "analysis_type": {"type": "string", "enum": ["summary", "correlation"]}
    }
)
async def analyze_data(file_path: str, analysis_type: str):
    df = pd.read_csv(file_path)
    if analysis_type == "summary":
        return df.describe().to_dict()
    return df.corr().to_dict()

server.run()

实际应用场景

数据库操作工具

{
  "mcpServers": {
    "database-tools": {
      "command": "node",
      "args": ["db-mcp-server.js"],
      "env": {
        "DATABASE_URL": "postgresql://user:pass@localhost:5432/db"
      }
    }
  }
}

使用场景:

"查询最近 10 个新注册的用户"
"分析订单数据的趋势"
"检查数据库连接池的状态"

项目管理工具

{
  "mcpServers": {
    "project-tools": {
      "command": "node",
      "args": ["project-mcp-server.js"],
      "tools": [
        "create-task",
        "update-status",
        "get-sprint-details"
      ]
    }
  }
}

自定义工作流

通过组合 MCP 工具和子代理,可以构建强大且灵活的自动化工作流,覆盖从需求分析到部署上线的完整开发周期。