◄ 所有文章
CrewAI

用 CrewAI 构建多智能体 AI 系统:团队协作,而非单打独斗

NW Nils Weiser November 15, 2024

如何编排一批专业化的 AI 智能体,让它们像真正的团队一样协作。一份配有代码示例的实战指南。

单个 AI 智能体已经能完成一些相当出色的工作。但面对复杂的多步骤任务时,它很快就会力不从心。解法是什么?让多个专业化的智能体像一支真正的团队那样协同工作。

CrewAI 就是一个专门实现这一点的 Python 框架:把多个 AI 智能体编排成一支 crew,其中每个智能体承担一个特定的角色。

核心理念:像管理者一样思考

CrewAI 建立在一个简单的想法之上:与其打造一个无所不能的智能体,不如组建一支团队。你应该问自己以下几个问题:

  1. 目标是什么?最终要达成什么结果?
  2. 需要哪些步骤?哪些子任务能通向目标?
  3. 谁最擅长做这件事?你需要哪些专家?

就像一位管理者组建团队一样,你要定义角色、职责和工作流程。

三个核心概念

1. 智能体(Agents):专家

每个智能体都有一个特定的角色(role)、一个目标(goal)和一段背景故事(backstory)。你把这些定义得越精确,结果就越好。

from crewai import Agent

content_planner = Agent(
    role="Content Strategist",
    goal="Research topics and create article structures",
    backstory="""You are an experienced content strategist with
    10 years of experience in tech journalism. You know
    how to structure complex topics and
    captivate readers.""",
    tools=[search_tool, scrape_tool],
    allow_delegation=False
)

最佳实践:具体的角色

不要只写"研究员",而要写"持有 FINRA 认证的金融分析师"或"专注于德国劳动法的 HR 专家"。角色越具体,智能体的工作就越聚焦。

2. 任务(Tasks):具体的委派

任务定义了需要做什么。每个任务都有一段描述、预期产出,以及一个指派给它的智能体。

from crewai import Task

plan_task = Task(
    description="""Research the topic {topic} and create
    a detailed article plan with:
    - Key theses
    - Structure with headings
    - Important points per section""",
    expected_output="Markdown document with article structure",
    agent=content_planner
)

3. Crew:团队

crew 把智能体和任务组合到一起,并定义它们如何协作。

from crewai import Crew, Process

crew = Crew(
    agents=[planner, writer, editor],
    tasks=[plan_task, write_task, edit_task],
    process=Process.sequential,
    verbose=True
)

result = crew.kickoff(inputs={"topic": "AI in Healthcare"})

实战示例:内容创作

一个经典的用例:自动撰写博客文章。三个智能体协同工作:

内容策略师

调研主题、提炼要点、搭建文章结构

内容撰稿人

基于大纲撰写文章,专注于文风与可读性

编辑

检查错误、润色措辞、确保品牌调性一致

关键之处在于:每个智能体都会把上一个智能体的产出作为上下文接收下来。撰稿人能看到策略师的大纲,编辑能看到写好的文章。这样就自然形成了一条工作流程。

顺序式 vs. 层级式

CrewAI 支持两种流程类型:

顺序式流程(Sequential)

任务被逐个依次处理。智能体 A 把结果交给智能体 B,B 再交给智能体 C。非常适合内容创作或数据处理这类线性工作流程。

crew = Crew(
    process=Process.sequential,
    ...
)

层级式流程(Hierarchical)

由一个管理者 LLM 动态地协调各个智能体。它自行决定何时调用哪个智能体。非常适合存在依赖关系的复杂任务。

from langchain_openai import ChatOpenAI

crew = Crew(
    process=Process.hierarchical,
    manager_llm=ChatOpenAI(model="gpt-4-turbo"),
    ...
)

工具(Tools):智能体的工具箱

智能体正是靠工具变得强大。CrewAI 既提供内置工具,也允许你自定义工具:

from crewai_tools import SerperDevTool, ScrapeWebsiteTool

# Built-in tools
search_tool = SerperDevTool()  # Web search
scrape_tool = ScrapeWebsiteTool()  # Extract website content

# Custom Tool
from crewai_tools import BaseTool

class SentimentTool(BaseTool):
    name = "Sentiment Analysis"
    description = "Analyzes the sentiment of a text"

    def _run(self, text: str) -> str:
        # Implementation here
        return "positive"

工具设计原则

工具应当具备通用性(覆盖多种场景)、容错性(优雅地处理错误),以及高效性(对重复调用进行缓存)。

真实世界的用例

多智能体系统尤其适合那些需要不同视角或不同专业能力的任务:

销售自动化

线索调研、画像分析、个性化邮件触达

金融分析

采集市场数据、制定策略、评估风险

客户支持

工单分析、解决方案建议、质量把控

活动策划

场地协调、后勤保障、市场推广

用 Pydantic 得到结构化产出

为了得到稳定一致的结果,你可以用 Pydantic 来定义产出的格式:

from pydantic import BaseModel

class ArticlePlan(BaseModel):
    title: str
    summary: str
    sections: list[str]
    target_audience: str

plan_task = Task(
    description="Create an article plan...",
    output_json=ArticlePlan,
    output_file="./output/plan.json",
    agent=planner
)

关键心得

"在复杂任务上,一支精心组建的智能体团队会明显胜过单个'超级智能体'。"

1. 定义具体的角色

像"研究员"这样宽泛的角色只会带来宽泛的结果。"专注于科技初创公司的高级金融分析师"则能给出好得多的产出。

2. 清晰地划分任务

每个任务都应当有明确的目标和确定的产出。任务之间的重叠会导致重复和不一致。

3. 有意识地分配工具

并非每个智能体都需要所有工具。编辑不需要网页搜索,研究员不需要写文件。往往越少反而越好。

4. 为迭代留出空间

多智能体系统需要不断调优。先从一个简单的配置起步,再根据结果逐步扩展。

结语

CrewAI 让你能轻松地从单个智能体过渡到协作团队。关键在于用心去定义角色、任务和工作流程。像一位组建团队的管理者那样思考,你就能构建出可靠解决复杂任务的 AI 系统。


用到的工具:

CrewAI DeepLearning.AI

正在规划一套多智能体系统?联系我,我很乐意在架构设计和落地实现上帮上忙。

NW
Nils WeiserAI 智能体专家 · 博登湖地区
与我合作 ▸

更多现场笔记

所有文章 ▸