基于 OpenClaw + Claude Code 的多 Agent 协同架构
实现从需求分析到自动部署的全流程智能化研发
| 指标 | 传统开发 | 本系统 | 提升倍数 |
|---|---|---|---|
| MVP 开发周期 | 4-8 周 | 1-3 天 | 10-20x |
| 人力成本 | 5-10 人团队 | 1-3 人团队 | 3-5x |
| 代码一致性 | 依赖个人能力 | 标准化输出 | 质量稳定 |
| 测试覆盖率 | 60-80% | >80% 自动生成 | 显著提升 |
| 服务名 | 职责 | 端口 | 关键技术 |
|---|---|---|---|
| api-gateway | API 网关、路由、鉴权 | 8000 | FastAPI + JWT |
| orchestrator | 任务编排、工作流调度 | 8001 | AsyncIO + Redis |
| agent-service | Agent 执行引擎 | 8002 | Claude Code SDK |
| memory-service | 记忆与上下文管理 | 8003 | Redis + PostgreSQL |
| code-service | 代码生成与管理 | 8004 | OpenClaw + LLM |
| test-service | 测试执行服务 | 8005 | pytest + Cypress |
| deploy-service | 部署与 CI/CD | 8006 | Jenkins + K8S |
职责:需求分析与 PRD 文档生成
职责:后端技术架构设计
职责:前端技术架构设计
职责:前后端接口协议设计
职责:代码自动生成
职责:测试用例生成与执行
职责:CI/CD 流水线管理
职责:质量验收与 UI 测试
class StageStatus(Enum):
PENDING = "pending" # 待开始
IN_PROGRESS = "in_progress" # 执行中
COMPLETED = "completed" # 已完成
FAILED = "failed" # 失败
REVIEWING = "reviewing" # 审核中
REJECTED = "rejected" # 已拒绝
SKIPPED = "skipped" # 已跳过
| 阶段 | 是否需要审核 | 审核角色 | 审核内容 |
|---|---|---|---|
| PRD 设计 | ✅ 是 | 产品经理 | 需求理解准确性、功能完整性 |
| 架构设计 | ✅ 是 | 技术负责人 | 技术选型合理性、扩展性 |
| API 设计 | ⚠️ 可选 | 后端负责人 | 接口规范性、一致性 |
| 代码生成 | ❌ 否 | - | 自动测试保证质量 |
| 部署生产 | ✅ 是 | 运维负责人 | 部署配置、回滚方案 |
| 类别 | 技术 | 版本 | 选型理由 |
|---|---|---|---|
| Web 框架 | FastAPI | 0.110+ | 高性能、异步、自动生成 OpenAPI |
| 语言 | Python | 3.12+ | AI 生态丰富、开发效率高 |
| 数据库 | PostgreSQL | 16+ | ACID 事务、JSONB 支持 |
| 缓存 | Redis | 7.2+ | 高性能、发布订阅 |
| 消息队列 | RabbitMQ | 3.12+ | 可靠投递、路由灵活 |
# 创建项目
POST /api/v1/projects
Content-Type: application/json
{
"name": "my-ecommerce",
"description": "在线商城系统",
"requirements": "用户注册登录、商品浏览、下单支付...",
"config": {
"tech_stack": "python",
"architecture": "microservices"
}
}
# 响应
{
"id": "proj_xxx",
"status": "created",
"workflow_id": "wf_xxx",
"created_at": "2026-03-15T08:00:00Z"
}
# 连接
ws://localhost:8000/ws/notifications?token=xxx
# 服务器推送
{
"type": "stage_completed",
"data": {
"workflow_id": "wf_xxx",
"stage_id": "stage_xxx",
"stage_name": "prd_design",
"status": "completed",
"requires_review": true
}
}
| 方法 | 端点 | 描述 | 认证 |
|---|---|---|---|
| POST | /api/v1/projects | 创建新项目 | ✅ |
| GET | /api/v1/projects/{id} | 获取项目详情 | ✅ |
| GET | /api/v1/workflows/{id}/status | 获取工作流状态 | ✅ |
| POST | /api/v1/reviews/{id}/approve | 批准阶段 | ✅ |
| POST | /api/v1/reviews/{id}/reject | 拒绝阶段 | ✅ |
| DELETE | /api/v1/workflows/{id} | 取消工作流 | ✅ |
┌─────────────────┐ ┌─────────────────┐
│ projects │ │ workflows │
├─────────────────┤ ├─────────────────┤
│ id (PK) │───┐ │ id (PK) │
│ name │ │ │ project_id (FK) │
│ description │ └──>│ status │
│ requirements │ │ current_stage │
│ status │ │ created_at │
│ created_at │ │ updated_at │
└─────────────────┘ └─────────────────┘
│
│ 1:N
▼
┌─────────────────┐
│ workflow_stages│
├─────────────────┤
│ id (PK) │
│ workflow_id (FK)│
│ name │
│ agent_type │
│ status │
│ result (JSONB) │
│ error │
└─────────────────┘
-- 项目表
CREATE TABLE projects (
id VARCHAR(64) PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
requirements TEXT,
config JSONB,
status VARCHAR(50) DEFAULT 'created',
workflow_id VARCHAR(64),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 工作流阶段表
CREATE TABLE workflow_stages (
id VARCHAR(64) PRIMARY KEY,
workflow_id VARCHAR(64) REFERENCES workflows(id),
name VARCHAR(255),
agent_type VARCHAR(100),
requires_human_review BOOLEAN DEFAULT FALSE,
status VARCHAR(50) DEFAULT 'pending',
result JSONB,
error TEXT,
timeout_seconds INTEGER DEFAULT 3600,
retry_count INTEGER DEFAULT 3,
started_at TIMESTAMP,
completed_at TIMESTAMP
);
-- 索引
CREATE INDEX idx_projects_status ON projects(status);
CREATE INDEX idx_workflows_project_id ON workflows(project_id);
CREATE INDEX idx_workflow_stages_workflow_id ON workflow_stages(workflow_id);
| 指标类别 | 具体指标 | 告警阈值 | 监控工具 |
|---|---|---|---|
| 性能 | API 响应时间 P95 | >500ms | Prometheus |
| 性能 | Agent 执行时长 | >10 分钟 | Prometheus |
| 可用性 | 服务健康检查 | 失败 | K8S Probe |
| 业务 | 工作流完成率 | <90% | Grafana |
| 资源 | CPU/内存使用率 | >80% | Node Exporter |
# 结构化日志示例
{
"timestamp": "2026-03-15T08:23:51Z",
"level": "INFO",
"service": "orchestrator",
"workflow_id": "wf_xxx",
"stage_id": "stage_xxx",
"event": "stage_completed",
"duration_ms": 1250,
"trace_id": "abc123"
}