简介

多智能体AI系统代表了AI自动化的下一个演进方向。与单个AI处理所有事务不同,专业智能体各自拥有不同的角色、目标和工具,通过协作更有效地解决复杂任务。

CrewAI是一个让构建此类系统变得简单的Python框架。在本教程中,你将构建一个研究团队,自动调查技术主题、分析市场趋势并生成专业报告。

你将学到

  • 从零搭建CrewAI项目
  • 定义具有专业角色和工具的智能体
  • 创建具有依赖关系和预期输出的任务
  • 编排多智能体工作流
  • 集成Web搜索和自定义工具
  • 前提条件

  • Python 3.10+
  • OpenAI API密钥
  • Python基础知识
  • ---

    步骤1: 环境搭建

    创建新项目并安装依赖:

    mkdir tech-research-crew && cd tech-research-crew
    

    python -m venv venv

    source venv/bin/activate # Windows: venv\Scripts\activate

    pip install crewai crewai-tools langchain-openai python-dotenv

    创建.env文件存放API密钥:

    # .env
    

    OPENAI_API_KEY=sk-your-api-key-here

    SERPER_API_KEY=your-serper-key-here # 用于Web搜索

    ---

    步骤2: 定义智能体

    创建agents.py — 每个智能体有角色、目标和背景故事:

    # agents.py
    

    from crewai import Agent

    from crewai_tools import SerperDevTool, WebsiteSearchTool

    # 工具

    search_tool = SerperDevTool()

    web_tool = WebsiteSearchTool()

    # 智能体1: 研究专家

    researcher = Agent(

    role="高级技术研究员",

    goal="寻找关于新兴技术的全面、准确信息",

    backstory="""你是一位在顶级咨询公司拥有15年经验的资深技术研究员。

    你擅长寻找可靠来源、识别关键趋势,并区分炒作与实质。""",

    tools=[search_tool, web_tool],

    verbose=True,

    allow_delegation=False,

    max_iter=5,

    )

    # 智能体2: 数据分析师

    analyst = Agent(

    role="技术市场分析师",

    goal="分析技术趋势并提供数据驱动的洞察",

    backstory="""你是一位专注于技术市场分析的数据驱动型分析师。

    你将原始研究转化为可执行的洞察,识别模式并做出基于证据的预测。""",

    verbose=True,

    allow_delegation=False,

    )

    # 智能体3: 技术写手

    writer = Agent(

    role="高级技术写手",

    goal="创建清晰、引人入胜且结构良好的技术报告",

    backstory="""你是一位以将复杂主题变得易懂而闻名的获奖技术写手。

    你创建的报告让高管和工程师都觉得有价值。""",

    verbose=True,

    allow_delegation=False,

    )

    ---

    步骤3: 创建任务

    创建tasks.py — 任务定义每个智能体应完成的工作:

    # tasks.py
    

    from crewai import Task

    from agents import researcher, analyst, writer

    def create_research_tasks(topic: str):

    """为给定主题创建研究任务序列"""

    # 任务1: 研究

    research_task = Task(

    description=f"""对以下主题进行彻底研究: {topic}

    研究内容:

    1. 技术现状

    2. 关键参与者和公司

    3. 最新发展(过去6个月)

    4. 用例和实际应用

    5. 技术挑战和局限性

    提供所有来源的URL。""",

    expected_output="""详细的研究文档:

    - 执行摘要(2-3句)

    - 关键发现(5-7条)

    - 各研究领域的详细章节

    - 用于验证的来源URL""",

    agent=researcher,

    )

    # 任务2: 分析(依赖研究结果)

    analysis_task = Task(

    description=f"""分析研究发现: {topic}

    分析内容:

    1. SWOT分析

    2. 市场采用时间线预测

    3. 竞争技术对比

    4. 企业采用风险评估

    5. 早期采用者的ROI潜力""",

    expected_output="""结构化分析文档:

    - SWOT矩阵

    - 采用时间线(含阶段)

    - 竞品对比表

    - 风险矩阵

    - ROI预测""",

    agent=analyst,

    context=[research_task],

    )

    # 任务3: 报告撰写(依赖前两个任务)

    writing_task = Task(

    description=f"""撰写专业技术报告: {topic}

    报告要求:

    1. 以执行摘要开头

    2. 按逻辑顺序呈现发现

    3. 包含分析框架

    4. 提供可执行的建议

    5. 以下一步行动结束

    格式: Markdown,使用清晰的标题、列表和表格""",

    expected_output="""完善的Markdown报告(2000-3000字):

    - 标题和日期

    - 执行摘要

    - 研究发现

    - 分析与洞察

    - 建议(按优先级)

    - 来源附录""",

    agent=writer,

    context=[research_task, analysis_task],

    output_file="output/report.md",

    )

    return [research_task, analysis_task, writing_task]

    ---

    步骤4: 组装Crew

    创建main.py — 编排层:

    # main.py
    

    import os

    from dotenv import load_dotenv

    from crewai import Crew, Process

    from agents import researcher, analyst, writer

    from tasks import create_research_tasks

    load_dotenv()

    os.makedirs("output", exist_ok=True)

    def run_research_crew(topic: str):

    tasks = create_research_tasks(topic)

    crew = Crew(

    agents=[researcher, analyst, writer],

    tasks=tasks,

    process=Process.sequential,

    verbose=True,

    memory=True,

    max_rpm=10,

    )

    result = crew.kickoff()

    print(f"\n报告已保存至: output/report.md")

    print(f"使用Token数: {crew.usage_metrics}")

    return result

    if __name__ == "__main__":

    topic = input("输入研究主题: ") or "企业中的AI智能体"

    result = run_research_crew(topic)

    ---

    步骤5: 添加自定义工具

    创建tools.py扩展智能体能力:

    # tools.py
    

    from crewai_tools import tool

    import json

    from datetime import datetime

    @tool("保存JSON报告")

    def save_json_report(content: str, filename: str) -> str:

    """将结构化数据保存为JSON报告文件。

    Args:

    content: JSON字符串格式的报告内容

    filename: 输出文件名(不含扩展名)

    """

    try:

    data = json.loads(content)

    except json.JSONDecodeError:

    data = {"raw_content": content}

    report = {

    "generated_at": datetime.now().isoformat(),

    "data": data,

    }

    filepath = f"output/{filename}.json"

    with open(filepath, "w") as f:

    json.dump(report, f, indent=2, ensure_ascii=False)

    return f"报告已保存至 {filepath}"

    ---

    步骤6: 高级 — 层级流程

    对于复杂工作流,使用管理者智能体进行委派:

    # hierarchical_crew.py
    

    from crewai import Crew, Process

    from langchain_openai import ChatOpenAI

    manager_llm = ChatOpenAI(model="gpt-4o", temperature=0.1)

    crew = Crew(

    agents=[researcher, analyst, writer],

    tasks=tasks,

    process=Process.hierarchical,

    manager_llm=manager_llm,

    verbose=True,

    )

    result = crew.kickoff()

    在层级模式下,CrewAI自动创建管理者智能体,负责任务分配和质量控制。

    ---

    步骤7: 运行测试

    python main.py
    
    

    # 输出示例:

    # > Agent: 高级技术研究员

    # > Task: 正在调研AI智能体...

    # > 使用工具: 互联网搜索

    # > ...

    # > CREW EXECUTION COMPLETE

    # > 报告已保存至: output/report.md

    ---

    核心概念总结

    | 概念 | 说明 |

    |------|------|

    | Agent | 拥有角色、目标和工具的自主AI实体 |

    | Task | 具有预期输出和上下文的具体任务 |

    | Crew | 协作完成任务的智能体团队 |

    | Process | 执行策略(顺序或层级) |

    | Tools | 智能体与外界交互的函数 |

    | Memory | 跨任务执行持久化的共享上下文 |

    ---

    最佳实践

    1. 明确角色 — 给智能体窄而清晰的角色定义

    2. 清晰预期 — 精确定义expected_output

    3. 任务依赖 — 使用context链接任务并传递信息

    4. 速率限制 — 设置max_rpm避免API限流

    5. 错误处理 — 设置max_iter防止无限循环

    6. 模型选择 — 复杂推理用GPT-4o,简单任务用GPT-3.5

    ---

    参考资源

  • CrewAI官方文档
  • CrewAI GitHub仓库
  • CrewAI示例合集

Techsfree出品 — 您的技术创新合作伙伴