如何编排一批专业化的 AI 智能体,让它们像真正的团队一样协作。一份配有代码示例的实战指南。
单个 AI 智能体已经能完成一些相当出色的工作。但面对复杂的多步骤任务时,它很快就会力不从心。解法是什么?让多个专业化的智能体像一支真正的团队那样协同工作。
CrewAI 就是一个专门实现这一点的 Python 框架:把多个 AI 智能体编排成一支 crew,其中每个智能体承担一个特定的角色。
核心理念:像管理者一样思考
CrewAI 建立在一个简单的想法之上:与其打造一个无所不能的智能体,不如组建一支团队。你应该问自己以下几个问题:
- 目标是什么?最终要达成什么结果?
- 需要哪些步骤?哪些子任务能通向目标?
- 谁最擅长做这件事?你需要哪些专家?
就像一位管理者组建团队一样,你要定义角色、职责和工作流程。
三个核心概念
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 系统。
用到的工具:
正在规划一套多智能体系统?联系我,我很乐意在架构设计和落地实现上帮上忙。