Files
multiAgentTry/docs/backend-steps.md
Claude Code dc398d7c7b 完整实现 Swarm 多智能体协作系统
- 新增 CLIPluginAdapter 统一接口 (backend/app/core/agent_adapter.py)
- 新增 LLM 服务层,支持 Anthropic/OpenAI/DeepSeek/Ollama (backend/app/services/llm_service.py)
- 新增 Agent 执行引擎,支持文件锁自动管理 (backend/app/services/agent_executor.py)
- 新增 NativeLLMAgent 原生 LLM 适配器 (backend/app/adapters/native_llm_agent.py)
- 新增进程管理器 (backend/app/services/process_manager.py)
- 新增 Agent 控制 API (backend/app/routers/agents_control.py)
- 新增 WebSocket 实时通信 (backend/app/routers/websocket.py)
- 更新前端 AgentsPage,支持启动/停止 Agent
- 测试通过:Agent 启动、批量操作、栅栏同步

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 17:32:11 +08:00

13 KiB
Raw Blame History

后端开发步骤

每一步完成后都有验证方法,前端逐步替换 mock 数据。


第一步:项目初始化

操作

cd backend
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install fastapi uvicorn pydantic typer aiofiles
mkdir -p .doc/agents .doc/cache .doc/meetings .doc/resources .doc/workflow

创建文件

  • backend/main.py - FastAPI 入口
  • backend/cli.py - CLI 入口

验证

python cli.py hello  # 输出: Hello Swarm
python -m uvicorn main:app --reload
curl http://localhost:8000/  # 输出: {"status":"ok"}

第二步:基础存储服务

操作 - 创建 backend/services/storage.py

class StorageService:
    async def read_json(self, path: str) -> dict
    async def write_json(self, path: str, data: dict)
    async def ensure_dir(self, path: str)

验证

python cli.py storage write .doc/test.json '{"foo":"bar"}'
python cli.py storage read .doc/test.json
# 输出: {"foo":"bar"}

第三步:文件锁服务

操作 - 创建 backend/services/file_lock.py

class FileLockService:
    async def acquire_lock(self, file_path: str, agent_id: str) -> bool
    async def release_lock(self, file_path: str, agent_id: str) -> bool
    async def get_locks(self) -> List[LockInfo]
    async def check_locked(self, file_path: str) -> Optional[str]

存储到 .doc/cache/file_locks.json

验证

# CLI 测试
python cli.py lock acquire src/auth/login.py claude-001
# 输出: Lock acquired

python cli.py lock status
# 输出: src/auth/login.py -> claude-001 (2s ago)

python cli.py lock release src/auth/login.py claude-001
# 输出: Lock released

API 测试

curl http://localhost:8000/api/locks
# 输出: {"locks": []}

curl -X POST http://localhost:8000/api/locks/acquire \
  -H "Content-Type: application/json" \
  -d '{"file_path":"src/auth/login.py","agent_id":"claude-001"}'
# 输出: {"acquired":true}

前端对接 - 修改 ResourceMonitorCard.tsx

// 替换 lockedFiles mock
const response = await fetch('http://localhost:8000/api/locks');
const data = await response.json();
setLockedFiles(data.locks);

第四步:心跳服务

操作 - 创建 backend/services/heartbeat.py

class HeartbeatService:
    async def update_heartbeat(self, agent_id: str, status: dict) -> None
    async def get_heartbeat(self, agent_id: str) -> Optional[dict]
    async def get_all_heartbeats(self) -> dict
    async def check_timeout(self, timeout_seconds: int) -> List[str]

存储到 .doc/cache/heartbeats.json

验证

# 模拟 Agent 发送心跳
python cli.py heartbeat ping claude-001 '{"status":"working","task":"fixing bug"}'
# 输出: Heartbeat updated

python cli.py heartbeat list
# 输出: claude-001: working (5s ago)

python cli.py heartbeat check-timeout 30
# 输出: No timed out agents

API 测试

curl http://localhost:8000/api/heartbeats
# 输出: {"heartbeats": {"claude-001": {...}}}

第五步Agent 注册服务

操作 - 创建 backend/services/agent_registry.py

class AgentRegistry:
    async def register_agent(self, agent_info: AgentInfo) -> None
    async def get_agent(self, agent_id: str) -> Optional[AgentInfo]
    async def list_agents(self) -> List[AgentInfo]
    async def update_state(self, agent_id: str, state: dict) -> None
    async def get_state(self, agent_id: str) -> Optional[dict]

存储到 .doc/agents/{agent_id}/ 目录

验证

python cli.py agent register claude-001 \
  --name "Claude Code" \
  --role "architect" \
  --model "claude-opus-4.6"
# 输出: Agent registered

python cli.py agent list
# 输出: claude-001 | Claude Code | architect | claude-opus-4.6

python cli.py agent state claude-001 set '{"task":"fixing bug","progress":50}'
python cli.py agent state claude-001 get
# 输出: {"task":"fixing bug","progress":50}

API 测试

curl http://localhost:8000/api/agents
# 输出: {"agents": [...]}

curl http://localhost:8000/api/agents/claude-001/state
# 输出: {"task":"fixing bug","progress":50}

前端对接 - 修改 AgentStatusCard.tsx

// 替换 agents mock
const response = await fetch('http://localhost:8000/api/agents');
const data = await response.json();
setAgents(data.agents);

第六步:会议调度器(栅栏同步)

操作 - 创建 backend/services/meeting_scheduler.py

class MeetingScheduler:
    async def wait_for_meeting(self, agent_id: str, meeting_id: str) -> str
    async def get_queue(self, meeting_id: str) -> List[str]
    async def start_meeting(self, meeting_id: str) -> None
    async def end_meeting(self, meeting_id: str) -> None

存储到 .doc/cache/meeting_queue.json

验证

# 终端1 - Agent 1 等待
python cli.py meeting wait design-review claude-001
# 阻塞等待...

# 终端2 - Agent 2 等待
python cli.py meeting wait design-review kimi-002
# 触发会议,输出: Meeting started!

python cli.py meeting queue design-review
# 输出: [claude-001, kimi-002]

API 测试

curl -X POST http://localhost:8000/api/meetings/design-review/wait \
  -H "Content-Type: application/json" \
  -d '{"agent_id":"claude-001"}'
# 输出: {"status":"waiting"}

curl http://localhost:8000/api/meetings/design-review/queue
# 输出: {"waiting_agents":["claude-001"]}

第七步:会议记录服务

操作 - 创建 backend/services/meeting_recorder.py

class MeetingRecorder:
    async def create_meeting(self, meeting_info: MeetingInfo) -> str
    async def add_discussion(self, meeting_id: str, agent_id: str, content: str) -> None
    async def update_progress(self, meeting_id: str, step: str) -> None
    async def get_meeting(self, meeting_id: str) -> MeetingInfo
    async def list_meetings(self, date: str) -> List[MeetingInfo]

存储到 .doc/meetings/{YYYY-MM-DD}/{meeting_id}.md

验证

python cli.py meeting create design-review \
  --title "认证方案设计评审" \
  --attendees claude-001,kimi-002,opencode-003
# 输出: Meeting created: design_review_20260304_141000

python cli.py meeting discuss design_review_20260304_141000 \
    --agent claude-001 \
    --content "建议使用 JWT"
# 输出: Discussion added

python cli.py meeting progress design_review_20260304_141000 "收集初步想法"
# 输出: Progress updated

API 测试

curl http://localhost:8000/api/meetings/2026-03-04
# 输出: {"meetings": [...]}

curl http://localhost:8000/api/meetings/design_review_20260304_141000
# 输出: {...}

前端对接 - 修改 MeetingProgressCard.tsxRecentMeetingsCard.tsx

// 替换 steps mock
const response = await fetch('http://localhost:8000/api/meetings/active');
const data = await response.json);
setSteps(data.meeting.steps);

第八步:资源管理器(整合锁 + 心跳)

操作 - 创建 backend/services/resource_manager.py

class ResourceManager:
    async def execute_task(self, agent_id: str, task_description: str) -> str
    # 内部逻辑:
    # 1. 解析任务需要的文件
    # 2. 获取所有文件锁
    # 3. 执行任务
    # 4. finally: 释放所有锁

验证

python cli.py execute claude-001 "修改 src/auth/login.py 修复登录 bug"
# 输出: Task executing...
# 输出: Locks acquired: [src/auth/login.py, src/utils/crypto.py]
# 输出: Task completed
# 输出: Locks released

第九步:工作流引擎

操作 - 创建 backend/services/workflow_engine.py

class WorkflowEngine:
    async def load_workflow(self, workflow_path: str) -> Workflow
    async def get_next_meeting(self, workflow_id: str) -> Optional[MeetingInfo]
    async def complete_meeting(self, workflow_id: str, meeting_id: str) -> None

验证

python cli.py workflow load .doc/workflow/project_workflow.yaml
# 输出: Workflow loaded: my_project

python cli.py workflow next my_project
# 输出: Next meeting: design_review (attendees: claude-001,kimi-002)

第十步角色分配器AI 路由)

操作 - 创建 backend/services/role_allocator.py

class RoleAllocator:
    async def allocate_roles(self, task: str, agents: List[str]) -> Dict[str, str]
    # 内部调用 LLM 分析任务,返回角色分配

验证

python cli.py role allocate "重构认证模块" claude-001,kimi-002,opencode-003
# 输出: claude-001 -> architect
# 输出: kimi-002 -> pm
# 输出: opencode-003 -> developer

API 接口汇总

路径 方法 说明
/api/agents GET 获取所有 Agent
/api/agents/{id}/state GET/POST Agent 状态
/api/locks GET 获取所有锁
/api/locks/acquire POST 获取锁
/api/locks/release POST 释放锁
/api/heartbeats GET 获取心跳列表
/api/heartbeats/{id} POST 更新心跳
/api/meetings/{date} GET 获取会议列表
/api/meetings/{id} GET 获取会议详情
/api/meetings/{id}/wait POST 加入会议等待
/api/workflows/{id}/next GET 获取下一步

前端 Mock 替换顺序

步骤 组件 API 端点
3 ResourceMonitorCard /api/locks
5 AgentStatusCard /api/agents
7 MeetingProgressCard /api/meetings/{id}
7 RecentMeetingsCard /api/meetings/{date}
- WorkflowCard /api/workflows/{id}/next

参考开源项目

多智能体协作框架

项目 链接 参考点
AutoGen github.com/microsoft/autogen 对话驱动协作、异步消息传递、Agent 交接机制
CrewAI github.com/CrewAIInc/crewAI 角色扮演式 Agent、任务编排、Crew 结构
AgentScope 阿里通义实验室 Agent 编排、安全沙箱、跨框架互操作
MetaGPT github.com/FoundationAgents/MetaGPT AI 软件公司、多角色协作、文档生成

FastAPI 项目结构

项目 链接 参考点
FastAPI Project Structure github.com/brianobot/fastapi_project_structure 分层架构、services/routers/schemas 分离
FastAPI Best Architecture github.com 伪三层架构、插件系统
FastAPI Tips github.com WebSocket 实时通信、性能优化
推荐目录结构:
backend/
├── app/
│   ├── main.py              # FastAPI 入口
│   ├── settings.py          # 配置管理
│   ├── dependencies.py      # 依赖注入
│   ├── middlewares.py       # 中间件
│   ├── api_router.py        # 路由汇总
│   ├── routers/             # API 路由
│   │   ├── agents.py
│   │   ├── locks.py
│   │   └── meetings.py
│   ├── services/            # 业务逻辑
│   │   ├── storage.py
│   │   ├── file_lock.py
│   │   ├── heartbeat.py
│   │   ├── agent_registry.py
│   │   └── meeting_scheduler.py
│   ├── schemas/             # Pydantic 模型
│   │   ├── agent.py
│   │   ├── lock.py
│   │   └── meeting.py
│   └── models/              # 数据模型(如用数据库)
├── cli.py                   # CLI 入口 (Typer)
└── requirements.txt

文件锁实现

链接 特点
filelock github.com/tox-dev/filelock 跨平台、上下文管理器、超时机制
fasteners github.com/harlowja/fasteners 进程间读写锁

推荐使用 filelock

from filelock import FileLock, Timeout

lock = FileLock("/path/to/file.lock", timeout=10)
with lock:
    # 临界区代码
    pass

WebSocket 实时更新

FastAPI 原生支持 WebSocket参考官方文档fastapi.tiangolo.com/zh/websockets

from fastapi import WebSocket

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    async for data in websocket.iter_text():
        await websocket.send_text(f"Received: {data}")

技术栈推荐

# requirements.txt
fastapi>=0.110.0
uvicorn[standard]>=0.27.0
pydantic>=2.0.0
typer>=0.9.0
aiofiles>=23.0.0
filelock>=3.13.0
pyyaml>=6.0
anthropic>=0.18.0      # Claude API
openai>=1.0.0          # OpenAI API

设计文档参考

文档 链接
AutoGen 编程模型 github.com/microsoft/autogen/docs/design
Agent Worker Protocol github.com/microsoft/autogen/docs/design