📋 项目概述
本系统是"基于 OpenClaw + Claude Code 的端到端研发自动化系统"的核心子系统,专注于实现人机协同节点的任务暂停、人工审核、流程重启功能。系统覆盖从需求分析到 UI 自动化测试验收的全流程自动化研发,并在关键研发节点支持人机协同干预。
🎯 核心价值
- 智能暂停机制,确保关键决策点有人工介入
- 灵活审核流程,支持多种决策类型
- 弹性重启策略,支持从任意节点恢复
- 全流程追溯,完整的审计日志
🔧 应用场景
- AI 编码后的代码审核
- PRD 和技术方案评审
- 生产部署前确认
- 异常处理和恢复
📊 技术指标
- API 响应时间 < 100ms
- 支持并发用户数 1000+
- 状态变更追溯率 100%
- 系统可用性 99.9%
🏗️ 系统架构
整体架构图
┌─────────────────────────────────────────────────────────────┐
│ 前端展示层 (React + CSS3) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 任务看板 │ │ 审核中心 │ │ 监控面板 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
│ HTTP/WebSocket │
▼
┌─────────────────────────────────────────────────────────────┐
│ API 网关层 (FastAPI) │
│ RESTful API / WebSocket / 认证授权 │
└─────────────────────────────────────────────────────────────┘
│ 异步调用 │
▼
┌─────────────────────────────────────────────────────────────┐
│ 业务服务层 (Python Async) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 暂停服务 │ │ 审核服务 │ │ 恢复服务 │ │
│ │ PauseSvc │ │ ReviewSvc │ │ ResumeSvc │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
│ Repository Pattern │
▼
┌─────────────────────────────────────────────────────────────┐
│ 数据存储层 (PostgreSQL/Redis) │
│ 任务数据 │ 审核记录 │ 审计日志 │ 缓存 │
└─────────────────────────────────────────────────────────────┘
分层架构说明
| 层级 |
职责 |
技术选型 |
关键特性 |
| 前端展示层 |
用户界面交互、状态展示 |
React 18 + CSS3 |
响应式设计、实时通知 |
| API 网关层 |
请求路由、认证授权、限流 |
FastAPI 0.100+ |
异步处理、自动文档 |
| 业务服务层 |
核心业务逻辑处理 |
Python 3.12 Async |
事件驱动、状态管理 |
| 数据访问层 |
数据持久化抽象 |
Repository Pattern |
多存储后端支持 |
| 数据存储层 |
数据存储和检索 |
PostgreSQL + Redis |
事务支持、高速缓存 |
⚙️ 核心模块设计
1. 任务暂停服务 (TaskPauseService)
负责处理任务暂停请求、管理暂停状态转换、记录暂停历史和原因。
class TaskPauseService:
async def pause_task(pause_request: PauseRequest) → Dict[str, Any]:
async def auto_pause_for_review(task_id, node_id, review_type):
2. 人工审核服务 (TaskReviewService)
管理审核队列、处理审核决策、支持审核升级、记录审核历史。
class TaskReviewService:
async def submit_for_review(review_request: ReviewRequest):
async def submit_review_decision(review_response: ReviewResponse):
3. 任务恢复服务 (TaskResumeService)
处理任务恢复请求、支持多种重启策略、管理失败重试。
class TaskResumeService:
async def resume_task(resume_request: ResumeRequest):
async def retry_failed_node(task_id, node_id):
恢复策略对比
| 策略 |
描述 |
适用场景 |
进度保留 |
| 正常恢复 |
从暂停点继续执行 |
审核通过后恢复 |
✅ 全部保留 |
| 从头重启 |
重新执行整个任务 |
需求重大变更 |
❌ 全部清空 |
| 从节点重启 |
从指定节点重新开始 |
局部问题修复 |
⚠️ 部分保留 |
| 跳过节点 |
跳过特定节点继续 |
非关键节点跳过 |
✅ 保留其他 |
📦 数据模型设计
任务模型 (Task)
class Task(BaseModel):
task_id: str
task_name: str
task_type: str
status: TaskStatus
priority: int
workflow_nodes: List[WorkflowNode]
current_node_index: int
pause_reason: Optional[str]
pause_initiator: Optional[str]
review_required: bool
review_history: List[Dict]
context: Dict[str, Any]
created_at: datetime
updated_at: datetime
状态枚举 (TaskStatus)
PENDING 待执行
RUNNING 执行中
PAUSED 已暂停
WAITING_REVIEW 等待审核
REVIEW_APPROVED 审核通过
REVIEW_REJECTED 审核拒绝
COMPLETED 已完成
FAILED 失败
RESTARTED 已重启
审核决策枚举 (ReviewDecision)
APPROVED 通过
REJECTED 拒绝
MODIFIED 修改后通过
🔌 API 接口设计
任务暂停 API
| 方法 |
路径 |
描述 |
请求参数 |
| POST |
/tasks/{task_id}/pause |
暂停任务 |
reason, initiator, initiator_id |
| GET |
/tasks/{task_id}/pause-history |
获取暂停历史 |
- |
人工审核 API
| 方法 |
路径 |
描述 |
请求参数 |
| POST |
/tasks/{task_id}/review/submit |
提交审核 |
node_id, reviewer_id, review_type |
| POST |
/tasks/{task_id}/review/decision |
提交审核决策 |
node_id, decision, comments |
| GET |
/reviews/pending |
获取待审核列表 |
reviewer_id (optional) |
| POST |
/tasks/{task_id}/reviews/{node_id}/escalate |
升级审核 |
reason |
任务恢复 API
| 方法 |
路径 |
描述 |
请求参数 |
| POST |
/tasks/{task_id}/resume |
恢复/重启任务 |
resume_type, node_id (optional) |
| POST |
/tasks/{task_id}/nodes/{node_id}/retry |
重试失败节点 |
- |
| GET |
/tasks/{task_id}/restart-history |
获取重启历史 |
- |
🛠️ 技术栈选型
后端技术栈
| 组件 |
技术 |
版本 |
选型理由 |
| Web 框架 |
FastAPI |
0.100+ |
高性能异步、自动文档、类型安全 |
| 编程语言 |
Python |
3.12 |
现代语法、丰富生态、AI 友好 |
| 数据验证 |
Pydantic |
2.0+ |
类型提示、自动验证、JSON 序列化 |
| 数据库 |
PostgreSQL |
15+ |
ACID 事务、JSONB 支持、扩展性强 |
| 缓存 |
Redis |
7+ |
内存存储、发布订阅、高性能 |
前端技术栈
| 组件 |
技术 |
版本 |
选型理由 |
| UI 框架 |
React |
18+ |
组件化、虚拟 DOM、生态丰富 |
| 样式 |
CSS3 |
- |
自定义动画、渐变效果、响应式 |
| 构建工具 |
Webpack |
5+ |
模块打包、代码分割、热更新 |
✅ 测试策略
单元测试覆盖
暂停服务测试
- ✅ test_pause_task_success
- ✅ test_pause_task_not_found
- ✅ test_pause_task_invalid_status
- ✅ test_validate_pause_request
- ✅ test_auto_pause_for_review
审核服务测试
- ✅ test_submit_for_review_success
- ✅ test_submit_review_decision_approved
- ✅ test_submit_review_decision_rejected
- ✅ test_get_pending_reviews
- ✅ test_escalate_review
恢复服务测试
- ✅ test_normal_resume_success
- ✅ test_restart_from_beginning
- ✅ test_restart_from_node
- ✅ test_skip_node
- ✅ test_retry_failed_node
测试执行命令
pytest tests/unit/ -v
pytest tests/unit/test_task_pause_service.py -v
pytest --cov=backend --cov-report=html
🚀 部署方案
Docker Compose 部署
version: '3.8'
services:
backend:
build: ./backend
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/human_collab
- REDIS_URL=redis://redis:6379
depends_on:
- db
- redis
frontend:
build: ./frontend
ports:
- "3000:3000"
db:
image: postgres:15
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
pgdata:
Kubernetes 部署要点
- 使用 Deployment 管理应用副本(建议 3 副本)
- 使用 Service 暴露内部服务(ClusterIP)
- 使用 Ingress 配置外部访问和 HTTPS
- 使用 ConfigMap 管理配置文件
- 使用 Secret 管理敏感信息(数据库密码等)
- 配置 HPA 实现自动扩缩容
- 配置 Liveness/Readiness 探针
🔒 安全设计
认证授权
- JWT Token 认证
- RBAC 角色权限控制
- API 密钥管理
- 会话超时机制
数据安全
- 敏感数据加密存储
- HTTPS 传输加密
- SQL 注入防护
- XSS 攻击防护
审计日志
- 所有状态变更记录
- 操作人身份追踪
- 时间戳不可篡改
- 日志完整性校验
🔮 未来规划
短期目标 (1-3 个月)
- ✅ 集成真实数据库(PostgreSQL)
- ✅ 实现 WebSocket 实时通知
- ✅ 添加邮件/钉钉通知渠道
- ✅ 完善前端审核中心功能
- ✅ 增加批量操作支持
中期目标 (3-6 个月)
- 🔄 微服务拆分(任务服务、审核服务、通知服务)
- 🔄 支持自定义审核流程配置
- 🔄 集成机器学习预测审核时长
- 🔄 移动端 App 开发
- 🔄 多语言国际化支持
长期愿景 (6-12 个月)
- 🌟 AI 辅助审核决策
- 🌟 智能推荐审核人
- 🌟 跨系统集成(Jira、GitLab 等)
- 🌟 开放 API 生态系统
- 🌟 SaaS 化多租户支持