子代理与 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 工具和子代理,可以构建强大且灵活的自动化工作流,覆盖从需求分析到部署上线的完整开发周期。