第28讲|多智能体协作:让 AI 团队帮你开发完整项目

4 阅读1分钟

金句:一个 AI 像一个员工,多个 AI 协作才像一个团队。当你学会指挥 AI 团队,你就成了一个能驾驭比自己大十倍资源的架构师。


一、为什么需要多智能体?

单个 AI 助手存在天然局限:

  • 上下文窗口有限:无法同时处理整个大型项目
  • 专注领域有限:一个 AI 很难同时擅长前端、后端、测试、文档
  • 串行处理:只能顺序思考,无法并行

多智能体框架解决了这些问题:

  • 不同的 Agent 专注不同的领域
  • Agent 之间可以并行工作
  • 有协调者(Orchestrator)统筹全局

二、多智能体开发工作流设计

角色分工

┌─────────────────────────────────────────────────────────────┐
│                   多智能体开发团队                            │
│                                                             │
│  ┌─────────────┐         ┌─────────────┐                   │
│  │ Orchestrator │ ←─────→ │  Planner   │                   │
│  │   (协调者)   │         │ (规划者)    │                   │
│  └──────┬──────┘         └─────────────┘                   │
│         │                                                   │
│    ┌────┼────────────────────────┐                         │
│    ↓    ↓                        ↓                         │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐                 │
│  │ Frontend │  │ Backend  │  │  Tester  │                 │
│  │  Agent   │  │  Agent   │  │  Agent   │                 │
│  └──────────┘  └──────────┘  └──────────┘                 │
│                      ↓                                      │
│               ┌──────────────┐                             │
│               │ Reviewer     │                             │
│               │  Agent       │                             │
│               └──────────────┘                             │
└─────────────────────────────────────────────────────────────┘

三、使用 LangGraph 构建多智能体

安装依赖

pip install langgraph langchain-anthropic langchain-openai

构建开发团队

# multi_agent_dev_team.py
from typing import TypedDict, Annotated, List
from langgraph.graph import StateGraph, END
from langchain_anthropic import ChatAnthropic
from langchain_core.messages import HumanMessage, AIMessage
import operator

# 定义状态
class DevTeamState(TypedDict):
    task: str                    # 原始任务描述
    plan: str                    # 规划者的计划
    frontend_code: str           # 前端代码
    backend_code: str            # 后端代码
    tests: str                   # 测试代码
    review_comments: str         # 审查意见
    final_output: str            # 最终输出
    messages: Annotated[List, operator.add]

# 初始化模型
claude = ChatAnthropic(model="claude-3-5-sonnet-20241022")

# 规划节点
def planner_node(state: DevTeamState) -> dict:
    """分析任务,制定开发计划"""
    prompt = f"""你是一个技术架构师,请分析以下开发任务,制定详细的开发计划。

任务:{state['task']}

请输出:
1. 功能分解(前端/后端分别需要做什么)
2. 文件结构建议
3. API 接口清单
4. 数据库 Schema
5. 各 Agent 的具体任务分配"""
    
    response = claude.invoke([HumanMessage(content=prompt)])
    return {"plan": response.content}

# 前端 Agent
def frontend_agent_node(state: DevTeamState) -> dict:
    """生成前端代码"""
    prompt = f"""你是一个专业的前端工程师,使用 React + TypeScript + Tailwind CSS。

开发计划:
{state['plan']}

请生成前端相关代码,包括:
- 组件代码
- 页面代码
- API 调用封装

输出格式:使用 ```filename.tsx 标注每个文件"""
    
    response = claude.invoke([HumanMessage(content=prompt)])
    return {"frontend_code": response.content}

# 后端 Agent
def backend_agent_node(state: DevTeamState) -> dict:
    """生成后端代码"""
    prompt = f"""你是一个专业的后端工程师,使用 Node.js + TypeScript + Prisma。

开发计划:
{state['plan']}

请生成后端相关代码,包括:
- API 路由
- Service 层
- 数据库 Schema (Prisma)
- 中间件

输出格式:使用 ```filename.ts 标注每个文件"""
    
    response = claude.invoke([HumanMessage(content=prompt)])
    return {"backend_code": response.content}

# 测试 Agent
def tester_agent_node(state: DevTeamState) -> dict:
    """生成测试代码"""
    prompt = f"""你是一个 QA 工程师,专注于测试质量。

后端代码:
{state['backend_code'][:3000]}  # 截取前3000字

请生成:
1. 单元测试(Jest)
2. 集成测试(Supertest)
3. 关键业务流程的 E2E 测试场景描述"""
    
    response = claude.invoke([HumanMessage(content=prompt)])
    return {"tests": response.content}

# 审查 Agent
def reviewer_agent_node(state: DevTeamState) -> dict:
    """审查所有代码"""
    prompt = f"""你是一个高级工程师,负责代码审查。

请审查以下代码,重点关注:
1. 安全性问题
2. 性能问题
3. 代码质量
4. 前后端接口是否匹配

前端代码摘要:{state['frontend_code'][:1000]}
后端代码摘要:{state['backend_code'][:1000]}
测试覆盖:{state['tests'][:500]}

输出:发现的问题清单(严重程度 + 描述 + 修改建议)"""
    
    response = claude.invoke([HumanMessage(content=prompt)])
    return {"review_comments": response.content}

# 组装最终输出
def assembler_node(state: DevTeamState) -> dict:
    """组装最终交付物"""
    final = f"""# 开发结果报告

## 任务描述
{state['task']}

## 开发计划
{state['plan']}

## 前端代码
{state['frontend_code']}

## 后端代码
{state['backend_code']}

## 测试代码
{state['tests']}

## 代码审查意见
{state['review_comments']}
"""
    return {"final_output": final}

# 构建工作流
def build_dev_team_graph():
    workflow = StateGraph(DevTeamState)
    
    # 添加节点
    workflow.add_node("planner", planner_node)
    workflow.add_node("frontend", frontend_agent_node)
    workflow.add_node("backend", backend_agent_node)
    workflow.add_node("tester", tester_agent_node)
    workflow.add_node("reviewer", reviewer_agent_node)
    workflow.add_node("assembler", assembler_node)
    
    # 定义流程
    workflow.set_entry_point("planner")
    workflow.add_edge("planner", "frontend")
    workflow.add_edge("planner", "backend")
    # 测试在后端完成后进行
    workflow.add_edge("backend", "tester")
    # 审查在所有代码完成后进行
    workflow.add_edge("frontend", "reviewer")
    workflow.add_edge("tester", "reviewer")
    workflow.add_edge("reviewer", "assembler")
    workflow.add_edge("assembler", END)
    
    return workflow.compile()

# 运行
if __name__ == '__main__':
    graph = build_dev_team_graph()
    
    result = graph.invoke({
        "task": """实现用户评论系统:
        - 用户可以对文章发表评论
        - 支持回复评论(嵌套结构,最多2层)
        - 评论可以点赞
        - 管理员可以删除不当评论
        使用 React + Node.js + PostgreSQL""",
        "messages": []
    })
    
    # 保存结果
    with open("dev_output.md", "w", encoding="utf-8") as f:
        f.write(result["final_output"])
    
    print("✅ 开发完成,结果已保存到 dev_output.md")

四、CrewAI 框架:更高级的多智能体

CrewAI 提供了更接近真实团队协作的框架:

from crewai import Agent, Task, Crew

# 定义角色
architect = Agent(
    role='系统架构师',
    goal='设计可扩展的系统架构',
    backstory='10年经验的架构师,专注于高并发系统设计',
    llm=claude
)

developer = Agent(
    role='全栈开发工程师',
    goal='实现高质量的代码',
    backstory='擅长 TypeScript 全栈开发,注重代码质量',
    llm=claude
)

# 定义任务
design_task = Task(
    description='设计评论系统的架构',
    agent=architect,
    expected_output='详细的系统设计文档'
)

# 创建团队
crew = Crew(
    agents=[architect, developer],
    tasks=[design_task, implement_task],
    verbose=True
)

result = crew.kickoff()

章节小结:多智能体协作代表了 AI 辅助开发的下一个阶段——从"一个 AI 助手"进化为"AI 开发团队"。通过合理的角色分工和工作流设计,你可以用 AI 团队完成以前需要 3-5 个人才能完成的开发工作。这不是科幻,2025 年这已经是可用的现实。