第 18 章 · Agent Team 入门:协作模式
本章目标:理解 Agno Team 的"领导者-成员"架构,掌握 coordinate / route / broadcast / tasks 四种协作模式的机制与适用场景,动手搭建一个 researcher + writer 双成员团队。
18.1 为什么需要 Team
单个 Agent 的上下文和角色定位有限:让它既查资料又写报告又审校,提示词会越来越臃肿,工具也会互相干扰。Team 把任务拆给多个专职 Agent(members),由一个领导者(leader)模型负责分派、汇总——就像小团队分工:每人专注自己的事,组长对最终交付负责。
何时不用 Team
Team 的每次分派都是独立的模型调用,会带来更高的延迟、token 消耗和协调复杂度。官方建议:单领域能搞定的事就用单 Agent,不要为了"多智能体"而多智能体。
from agno.agent import Agent
from agno.team import Team
team = Team(
members=[
Agent(name="英语客服", role="用英语回答客户问题"),
Agent(name="中文客服", role="用中文回答客户问题"),
],
)18.2 四种协作模式
Agno 2.x 通过 mode 参数显式指定模式(从 agno.team.mode 导入 TeamMode),四种模式决定了领导者的分派路径:
| 模式 | 配置 | 行为 |
|---|---|---|
| Coordinate(默认) | mode=TeamMode.coordinate | 领导者挑选成员、为每人生成子任务、最后综合结果 |
| Route | mode=TeamMode.route | 领导者把请求路由给一个最合适的成员,直接返回其结果 |
| Broadcast | mode=TeamMode.broadcast | 同一任务发给所有成员,再汇总各方回答 |
| Tasks | mode=TeamMode.tasks | 领导者维护共享任务清单,逐项执行直到目标完成 |
版本说明
早期版本靠 respond_directly=True(等价 route)和 delegate_to_all_members=True(等价 broadcast)两个布尔开关组合表达模式,现已推荐统一使用 mode=;未设置 mode 时旧标志仍然兼容。
from agno.team import Team, TeamMode
router_team = Team(
name="语言路由台",
members=[english_agent, chinese_agent],
mode=TeamMode.route,
determine_input_for_members=False, # 用户原话直传成员,不经领导者改写
)选型口诀:要拆解综合选 coordinate,要分类转发选 route,要多角度交叉验证选 broadcast,要清单式推进选 tasks。
from agno.team import Team, TeamMode
# broadcast:同一任务发给全部成员再汇总(旧写法 delegate_to_all_members=True)
review_team = Team(
name="多视角评审团",
model=model,
members=[lawyer, engineer, marketer],
mode=TeamMode.broadcast,
)
# tasks:领导者维护共享任务清单逐项推进,适合长链路交付
delivery_team = Team(
name="交付小组",
model=model,
members=[planner, developer, tester],
mode=TeamMode.tasks,
)18.3 领导者如何分派
Coordinate 模式下的完整流程:
- Team 收到用户输入;
- 领导者分析输入,决定委派给哪些成员;
- 领导者为每个选中成员撰写具体子任务(不是简单转发);
- 成员各自执行并返回结果(无依赖的成员可并发执行);
- 领导者把所有产出综合成最终回复。
领导者同样可以自己调工具或直接作答(简单问题不必惊动成员)。给成员设置稳定的显式 id 有助于分派追踪与调试。
18.4 实战:研究员 + 作家双成员团队
# research_writer_team.py
import os
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.team import Team, TeamMode
from agno.tools.duckduckgo import DuckDuckGoTools
model = OpenAIChat(
id="deepseek-chat",
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com/v1",
)
researcher = Agent(
name="研究员",
id="researcher",
role="负责联网搜集资料,只输出事实与来源",
tools=[DuckDuckGoTools()], # 研究员专属工具:搜索
)
writer = Agent(
name="作家",
id="writer",
role="负责把资料改写成流畅的中文短文,不做事实核查",
)
team = Team(
name="内容编辑部",
model=model, # 领导者也需一个模型做分派与综合
members=[researcher, writer],
mode=TeamMode.coordinate,
instructions=[
"先委派研究员收集素材,再把素材交给作家成文。",
"最终输出一篇 300 字以内的短文,并附资料来源。",
],
markdown=True,
)
team.print_response("介绍一下 MCP 协议的核心价值")运行后观察日志可以看到两阶段:先出现研究员的工具调用与返回,随后作家基于素材生成文章,最后领导者润色输出。
18.5 调试与成本控制
- 看清分派链路:开启
debug_mode=True或阅读各成员独立的响应与 metrics,确认领导者是否把任务派给了对的成员; - 收敛指令:
instructions要明确"谁先谁后、产出什么",模糊指令会导致领导者来回摇摆; - 控制规模:成员数量通常 2–4 个为宜;更多角色应考虑嵌套 Team 或下一章的 Workflow 固定编排;
- 模型分级:领导者可用便宜快速的模型,重活成员按需配强模型。
本章小结
- Team = 领导者(分派/综合)+ 多个专职成员(执行),本质是用额外模型调用换取职责分离;
TeamMode四种模式:coordinate(拆解综合)、route(单路转发)、broadcast(全员并行)、tasks(任务清单推进),优先用mode=显式声明;- Coordinate 流程:分析 → 选人 → 写子任务 → 成员并发执行 → 综合回复;
determine_input_for_members=False可让用户输入原样直达成员;- 单 Agent 能解决的任务不要上 Team,注意延迟与 token 成本。
🧪 随堂测验
点击你认为正确的选项。答错时会展示正确答案与原因解析。
1. Agno 2.x 中 Team 默认的协作模式是?
2. 希望"同一个问题发给所有成员、再汇总多方观点",应该用哪种模式?
3. 关于 Team 与单 Agent 的取舍,下列说法正确的是?
4. 在 route 模式下想让用户的原始输入不加改写地传给成员,应设置什么参数?
🛠️ 动手实践
- 把 18.4 的团队改为
route模式并新增一个"翻译员"成员,观察请求是如何被路由到不同成员的。 - 用
broadcast模式让三个不同风格的成员同时点评同一段文案,对比领导者如何汇总分歧意见。 - 给研究员成员加一个自定义
@tool工具,验证团队成员可以拥有与领导者不同的工具集。
掌握了动态协作后,下一章学习确定性的流程编排:第 20 章:Workflow 入门。若想继续深入 Team 的共享状态与成员通信,请等待第 19 章。