Agno 框架 Team 模式与子 Agent 机制深度解析
·
背景介绍
Agno(原agno)是一个轻量级的AI Agent开发框架,最近在开发者社区越来越受欢迎。它提供了非常灵活的多Agent协作机制,其中Team模式就是其核心功能之一。
今天我就结合源码来聊聊Agno的Team模式和子Agent是怎么工作的,以及我们该怎么用它们构建复杂的多Agent协作系统。
核心概念:什么是Team模式?
在Agno中,Team就是多个Agent(甚至嵌套Team)组成的协作团体。简单来说:
- Team:管理一组Agent成员的协作调度
- 成员:可以是普通Agent,也可以是另一个Team(原生支持嵌套)
- Leader:由Team本身的模型担任,负责任务分配和结果整合
这种设计非常灵活,你可以把不同能力的Agent组织在一起,让它们分工完成复杂任务。
Team的核心配置参数解析
我从源码里整理了几个最重要的配置参数,这些决定了Team的协作方式:
1. 执行模式 mode
Agno提供了几种不同的执行模式:
class TeamMode(StrEnum):
ROUTE = "route"
COORDINATE = "coordinate"
PLAN = "plan"
TASKS = "tasks"
TeamMode.ROUTE(值为"route"):直接把任务路由给最合适的成员TeamMode.COORDINATE(值为"coordinate"):Leader协调多个成员一步步协作完成TeamMode.PLAN(值为"plan"):Leader先做整体计划,再分配给成员执行TeamMode.TASKS(值为"tasks"):自动循环迭代,直到任务完成(完全自主模式)
2. 常用控制选项
| 参数 | 作用 |
|---|---|
respond_directly | 如果为True,成员的回复直接返回,不经过Leader处理 |
delegate_to_all_members | 是否把任务分给所有成员,而不是由Leader选择一部分 |
determine_input_for_members | 是否由Leader为每个成员定制输入 |
max_iterations | 自主模式下最大迭代次数(默认10) |
add_team_history_to_members | 是否把Team层面的历史对话发给成员 |
share_member_interactions | 是否把成员之间的交互分享给所有成员 |
这些参数可以灵活组合,适配不同的协作场景。
嵌套Team支持:Team中还能放Team
Agno的Team支持嵌套,也就是说,一个Team本身可以作为另一个Team的成员。这太有用了!你可以:
- 把相关的Agent分组,组成子Team
- 再把多个子Team组织成一个更大的Team
- 实现分层协作,就像公司的组织结构一样
从核心代码的类型定义就能看出来,嵌套是原生支持的:
members: Union[List[Union[Agent, "Team"]], Callable[..., List]]
成员类型明确支持Agent和Team两种,不用任何hack就能用。
一个完整的代码示例
下面我写一个简单的例子,演示怎么创建一个Team,包含两个子Agent:
from agno.agent import Agent
from agno.team import Team
from agno.models.openai import OpenAIChat
from agno.tools.website import WebSearchTool
# 初始化工具
web_search = WebSearchTool()
# 创建两个专门的子Agent
research_agent = Agent(
name="研究员",
role="负责收集信息和研究",
model=OpenAIChat(id="gpt-4o"),
tools=[web_search],
instructions=["Always cite sources", "Keep summaries concise"]
)
writing_agent = Agent(
name="撰稿人",
role="负责整理内容写出流畅的文章",
model=OpenAIChat(id="gpt-4o"),
instructions=["Write in a clear, engaging style", "Keep paragraphs short"]
)
# 创建一个Team,协调两个Agent工作
content_team = Team(
members=[research_agent, writing_agent],
name="内容创作团队",
model=OpenAIChat(id="gpt-4o"),
mode=TeamMode.PLAN, # 或者直接写字符串 "plan"
description="一个由研究员和撰稿人组成的内容创作团队",
instructions=[
"先让研究员收集必要信息",
"再让撰稿人整理成文章",
"确保内容准确,表达清晰"
],
show_tool_calls=True,
markdown=True
)
# 运行Team
content_team.print_response("写一篇关于Agno框架的介绍", stream=True)
嵌套Team的示例
我们也可以把Team作为成员,再组成更大的Team,实现完整的工作流:
# 在上面content_team的基础上,再创建一个审核agent
editor_agent = Agent(
name="编辑",
role="负责审核内容,修正错误",
model=OpenAIChat(id="gpt-4o")
)
# 创建包含子Team的大Team
publishing_team = Team(
members=[content_team, editor_agent],
name="发布团队",
model=OpenAIChat(id="gpt-4o"),
mode=TeamMode.COORDINATE, # 或者直接写字符串 "coordinate"
description="负责内容创作和审核的完整团队"
)
publishing_team.print_response("发布一篇关于Agno Team模式的文章", stream=True)
实际开发中的最佳实践
1. 模式选择
- 简单任务路由:用
TeamMode.ROUTE模式,让Leader直接分给最合适的agent - 多步顺序协作:用
TeamMode.COORDINATE模式,Leader一步步协调 - 复杂任务分解:用
TeamMode.PLAN先做计划再执行 - 完全自主完成:用
TeamMode.TASKS让它自己迭代,但是一定要设置合理的max_iterations
2. 嵌套分层
- 把相同领域的agent放到一个子Team里,职责更清晰
- 顶层Team负责整体协调,不用管下层细节
- 不要嵌套太多层(3层以内足够了),太深会增加沟通成本,还会快速消耗上下文token
3. 信息共享
如果需要成员之间互相看到交互过程,打开 share_member_interactions=True,这样上下文更连贯,协作起来更顺畅。
我的踩坑记录
- 迭代次数别设太大:默认10次真的足够了,太大容易陷入无意义循环,浪费不少token
- 嵌套Team注意token爆炸:每一层都会把历史带入,嵌套太深上下文膨胀得比你想象得快
respond_directly适合问答路由场景,需要协作的场景真别开respond_directly和delegate_to_all_members不要一起用,逻辑上就冲突
总结
Agno的Team模式设计得非常简洁灵活,原生支持嵌套,让我们可以轻松构建分层的多Agent协作系统。不管是简单的任务路由,还是复杂的多步协作,都能很好地适配。
我个人觉得,Agno在多Agent组织这块的API设计,比很多其他框架都要干净。如果你正在开发多Agent应用,不妨试试Agno的Team模式,真的很香!
更多推荐



所有评论(0)