周一至周五 09:00 - 18:00(UTC+08:00) 
©2026 NST LABS TECH LTD. 保留所有权利。Kai WatanabeScraping Infrastructure Evangelist
如何在2026年用CrewAI构建多智能体系统
TL;DR
- 一个有用的 CrewAI 系统以任务边界为起点,而不是代理角色。 为每个代理提供不同的输入、工具、预期输出和失败条件。
- 使用 Crew 进行开放式协作,使用 Flow 进行确定性应用控制。 大多数生产系统需要围绕一个或多个小 Crew 形成 Flow。
- 最小的工作模式是 Agent → Task → Crew → kickoff。 从顺序执行开始,这样输出和失败就容易检视。
- 不要给每个代理每种工具。 最小权限工具访问可以减少成本、降低提示注入风险,并减少难以调试的副作用。
- 在扩展团队之前增加结构化输出、护栏、追踪和人工批准。 更多的代理会增加协调开销,并不能保证提供更好的答案。
- 对于网络研究团队,分离数据获取和推理。 Nstproxy Crawl 可以准备有限的网站内容,而 CrewAI 代理进行分析和报告。
你在与 CrewAI 构建什么?
CrewAI 多代理系统是一组分配到定义过程下的任务的角色范围代理。Crew 协调这些代理和任务;当周围的应用需要明确的状态、分支、持久性或恢复时,Flow 可以包装该 Crew。如果代理需要批准的网站证据,Nstproxy Crawl 可以提供获取层,而不是让每个代理不受限制地浏览。
CrewAI 概念指南 区分自主 Crew 和事件驱动的 Flow。这很重要,因为许多教程将固定的业务流程建模为代理之间的对话。在实践中,确定性代码应该决定何时开始一项工作,哪个状态是有效的,以及是否需要批准;代理应该处理那些真正需要解释的部分。
本教程构建了一个包含两个代理的小型顺序研究团队:
- 研究者将提供的来源材料转化为证据摘要。
- 编辑将该摘要转换为决策备忘录,并必须保留不确定性。
该示例故意避免使用实时浏览工具。网络工具可以在之后添加,待其域政策、输出契约和错误行为经过测试。
为什么任务设计比代理数量更重要
代理只有在有不同责任、上下文或工具边界时才应存在。如果将“研究”、“分析”和“写作”分配给三个代理是有用的,因为每个都产生可检视的工件。但如果三个代理都接受相同的巨大提示并重复相同的搜索,那么这样做就是浪费。
在编写代码之前,定义此契约:
| 组件 | 研究者 | 编辑 |
|---|
| 输入 | 主题和批准的来源包 | 研究者的证据摘要 |
| 允许的工具 | 仅在批准的数据上检索 | 在最小示例中无检索工具 |
| 输出 | 主张、支持证据、冲突、不确定性 | 具有引用主张和未解问题的简明备忘录 |
| 失败条件 | 缺少支持或无法访问的来源 | 不支持的主张或隐藏的不确定性 |
| 人工门 | 来源政策 | 最终出版或商业行动 |
该设计类似于一个可靠的 代理工具:角色的重要性不如权限、状态、追踪和接受检查。
前提条件和项目创建
使用 CrewAI 支持的 Python 版本,一个存储在源控制外的模型提供者凭证,以及当前基于 uv 的安装路径。CrewAI 文档首页 链接到维护的安装和快速入门页面;请依据这些页面获得当前的 Python 兼容范围和 CLI 命令,而非依赖于旧的 pip 教程。
安装后,使用 CrewAI CLI 生成项目并检查生成的结构。标准项目将代理和任务的 YAML 配置与 Python 组装代码分开。将秘密存储在环境变量或批准的秘密管理器中,切勿将其存储在提交到 Git 的 YAML 文件中。
src/research_crew/
├── config/
│ ├── agents.yaml
│ └── tasks.yaml
├── crew.py
└── main.py
方法 1:在 Python 中构建最小 Crew
最小的教学实现将定义保留在一个文件中。它使数据流在团队引入装饰器、YAML、自定义工具或 Flow 之前可视化。
步骤 1:定义两个代理
创建 crew_demo.py 并添加以下代码。模型名称通过环境变量传递,这样示例就不会冻结可能被弃用的标识符。
import os
from crewai import Agent, Crew, Process, Task
model_name = os.environ["CREWAI_MODEL"]
researcher = Agent(
role="证据研究者",
goal="创建一个可追踪的证据摘要以满足请求的主题",
backstory="您将支持的主张、冲突和未知分开。",
llm=model_name,
allow_delegation=False,
verbose=True,
)
editor = Agent(
role="决策备忘录编辑",
goal="将证据摘要转化为简明、有资格的建议",
backstory="您保留引用,绝不隐瞒不确定性。",
llm=model_name,
allow_delegation=False,
verbose=True,
)
role、goal 和 backstory 会影响行为,但重要的控制是模型、可用工具和委托设置。首先禁用委托。无界的代理到代理委托使得令牌使用和终止更难以预测。
步骤 2:在指令之前定义输出
附加两个任务。第二个任务通过 context 参考第一个任务,从而明确依赖关系。
research_task = Task(
description=(
"仅使用在 {source_path} 中提供的源包研究 {topic}。 "
"列出支持的主张、引用、矛盾和未知数。"
),
expected_output=(
"一个包含主张、来源、冲突和未回答问题部分的 Markdown 证据摘要。"
),
agent=researcher,
)
memo_task = Task(
description=(
"从证据摘要创建一份决策备忘录。保留源引用,说明不确定性,并推荐下一个测试。"
),
expected_output=(
"一份包含推荐、证据、风险、未知数和下一步行动的 Markdown 备忘录。"
),
agent=editor,
context=[research_task],
)
expected_output 是接受目标,而不是保证。生产代码应验证所需部分或在任务支持的地方使用结构化的 Pydantic 结果。
步骤 3:组装并运行团队
crew = Crew(
agents=[researcher, editor],
tasks=[research_task, memo_task],
process=Process.sequential,
verbose=True,
)
result = crew.kickoff(
inputs={
"topic": "是否采用新的检索模型",
"source_path": "data/approved-sources.md",
}
)
print(result.raw)
仅在设置模型选择器和该提供者所需的凭证后运行此代码。本文的代码经过语法检查,但实时启动需要支持的 Python 运行时、CrewAI 包、提供者帐户和真实源包。这些外部前提条件无法通过静态文章构建进行验证。
方法 2:将稳定的团队移动到 YAML 和注解
原型正常工作后,将长角色和任务描述移至 config/agents.yaml 和 config/tasks.yaml。然后在 crew.py 中使用 @CrewBase、@agent、@task 和 @crew 组装它们。CrewAI 注解指南 解释了配置键和装饰方法名称必须对应。
这种结构更便于审核,因为提示更改不会与 orchestration 更改混合。它还使特定于环境的模型选择变得更容易。保持三条规则:
- 给予配置键稳定的名称;仅重命名一侧会破坏映射。
- 保持工具构造在 Python 中,以便可以强制执行凭证和白名单。
- 测试最终组装的任务顺序;声明顺序和上下文依赖关系可能会产生不同的行为。
为您的团队提供一个受控的证据层
使用 Nstproxy Crawl 准备有限的网站内容,同时让 CrewAI 代理集中精力于分析、验证和报告。
尝试 Nstproxy Crawl
|
https://example.com/article
爬取
|
在不让代理享有无限制浏览器的情况下添加Web数据
研究团队需要新鲜的证据,但直接浏览并不是唯一架构。更安全的模式是首先获取批准的页面,存储来源,并向研究人员暴露只读检索。Nstproxy Crawl 可以通过网站深度、页面数量和路径规则限制收集,渲染JavaScript,并返回选定的输出,例如 Markdown、HTML、JSON、链接或PDF。
- 一个确定性的工作验证目标域是否符合政策。
- 爬虫收集授权页面并记录 URL 及检索时间。
- 解析器将干净的内容和元数据存储在证据库中。
- 研究代理获得对该证据库的只读检索。
- 编辑器查看证据摘要,而不是原始浏览指令。
这是许多 AI 代理项目 中使用的相同边界:工具获取或转换数据,而代理决定如何使用它。在添加嵌入之前,请查看 网页索引指南,以便首先定义文档身份、新鲜度和去重。
何时将团队包装在流程中
当执行必须分支、暂停、恢复或更新持久状态时,请使用流程。例如,路由低信心备忘录以进行审核、重试失败的获取步骤,并在政策违规后停止作业。CrewAI 流程文档 描述了事件驱动的步骤、状态、路由和持久性。
一个合理的生产边界是:
- 流程验证请求和源政策。
- 流程开始获取作业并处理可重试的失败。
- 小型团队分析检索到的证据。
- 确定性验证检查团队输出。
- 在发布或采取外部行动之前,请求人工批准。
不要使用代理来决定其输出是否通过验证。结构检查、允许域规则、必要的引用和最大运行预算应属于确定性代码。
在添加更多代理之前测试系统
评估应衡量整个任务,而不是转录听起来有多令人信服。建立一个包含预期证据和已知失败案例的小型测试集,然后跟踪:
- 声明支持率和引用有效性;
- 出现的缺失或矛盾证据;
- 结构化输出的有效性;
- 超出预定范围的工具调用;
- 每个完成备忘录的总模型和工具使用;
- 重试、超时和人工拒绝原因。
测试对抗性源文本,告诉代理忽略其任务、格式错误的工具响应、空检索和重复文档。如果双代理版本无法始终通过这些案例,则管理代理或更大的团队将增加更多失败路径,而不是解决设计缺陷。
一个自动化数据收集政策还应定义保留、刷新间隔、访问权和删除。对页面的技术访问并不能单独建立收集或重用的权限。
最终裁决:从一次明确的交接开始
要构建一个多代理系统与CrewAI,先从两个代理、两个可观察的任务输出和一个顺序过程开始。将确定性验证和生命周期控制移入流程,仅授予每个代理所需的工具,并仅在新角色创造了真实上下文或权限边界时添加代理。
下一步是针对一个小的批准证据包运行最小团队,保存其痕迹,并在连接实时工具之前编写失败断言。对于基于网站的研究,Nstproxy Crawl可以提供有界的、可重用的源材料,同时团队保持专注于分析。
为您的CrewAI系统准备可追溯的网络证据
使用Nstproxy Crawl将授权网站变成可控的源文物进行检索、评估和引用,而不是给每个代理独立的浏览访问。
常见问题
CrewAI是一个用于构建基于角色的代理、任务、团队和事件驱动流程的Python框架。团队支持自主协作,而流程提供更明确的应用控制。
对于第一个项目,通常两个代理就足够了,当它们之间有有意义的交接,例如研究人员到审阅者。如果需要不同的上下文、工具、权限或评估标准,则只需添加另一个代理。
当任务顺序已知时,从顺序开始,因为这更容易追踪和测试。仅在动态委托产生可衡量的收益时才考虑分层协调,这些收益足以证明额外模型调用和失败模式的合理性。
CrewAI代理可以使用已配置的网络工具,但访问应受限于域,尽可能为只读,并保护不受不信任指令的影响。一个单独的获取层可以提供更严格的控制。
Lena Zhou
Sep. 2nd 2026
立即访问住宅、数据中心、IPv6 与 ISP 高质量代理池。