crewai

CrewAI 多角色 Agent 协作与任务编排框架。

补充说明

CrewAI 用 Agent(角色、目标、背景)、Task(描述、预期输出)和 Crew(执行顺序)组织多 Agent 工作流。常见模式是研究员检索、写作者成稿、审查者把关,按 Process.sequential 或层级流程执行。

它偏向“角色协作”而不是底层图控制。需要细粒度分支、循环和人工中断时,LangGraph 更合适;CrewAI 的优势是快速搭起可运行的角色团队。

安装与启动

pip install -U crewai crewai-tools
export OPENAI_API_KEY="sk-..."

创建官方脚手架项目,包含 agents/tasks 的 YAML 配置:

crewai create crew ops_crew --skip-provider
cd ops_crew
crewai install
crewai run

常用示例

用两个角色顺序完成一份排障报告:

python - <<'PY'
from crewai import Agent, Task, Crew, Process, LLM

llm = LLM(model="openai/gpt-4o-mini", temperature=0)
researcher = Agent(
    role="SRE 检索员",
    goal="找出 Pod OOMKilled 的根因",
    backstory="熟悉 Kubernetes 资源限制和容器排障。",
    llm=llm, verbose=True, allow_delegation=False, max_iter=3,
)
writer = Agent(
    role="技术写作",
    goal="把根因整理成可执行的修复步骤",
    backstory="擅长把排障过程写成简洁的操作手册。",
    llm=llm, verbose=True, allow_delegation=False,
)
research = Task(
    description="分析 {symptom} 的可能根因,给出排查命令。",
    expected_output="按可能性排序的根因列表,附命令。",
    agent=researcher,
)
report = Task(
    description="基于上一任务输出一份修复清单。",
    expected_output="包含验证与回滚步骤的 Markdown。",
    agent=writer, context=[research],
)
crew = Crew(agents=[researcher, writer], tasks=[research, report],
            process=Process.sequential, verbose=True)
print(crew.kickoff(inputs={"symptom": "Pod 反复 OOMKilled"}).raw)
PY

让 CrewAI 使用本地 vLLM 的 OpenAI 兼容接口:

python - <<'PY'
from crewai import LLM
llm = LLM(model="openai/Qwen/Qwen2.5-7B-Instruct",
          base_url="http://localhost:8000/v1", api_key="EMPTY", temperature=0.2)
print(llm.call("用一句话解释 OOMKilled"))
PY

易错点与排错

读完自测

合上页面,先回答,再展开对照。

  1. Agent、Task、Crew 各自负责什么?
  2. 本地模型接入 CrewAI 的关键配置是什么?
  3. 为什么 Agent 会反复调用同一个工具?
答案
  1. Agent 定义角色、目标和可用工具;Task 定义要完成的工作、预期输出和负责的 Agent;Crew 把 Agent 和 Task 组合起来,并决定顺序或层级执行方式。
  2. 用 LLM(model="openai/<模型名>", base_url="http://localhost:8000/v1", api_key="EMPTY"),并确认模型支持工具调用;否则需要改用不依赖工具的流程。
  3. 常见原因是工具描述含糊、返回结果不符合模型预期,或没有迭代上限。应写清工具 schema、在工具内部返回明确错误,并设置 max_iter。

相关条目