背景介绍

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的成员。这太有用了!你可以:

  1. 把相关的Agent分组,组成子Team
  2. 再把多个子Team组织成一个更大的Team
  3. 实现分层协作,就像公司的组织结构一样

从核心代码的类型定义就能看出来,嵌套是原生支持的:

members: Union[List[Union[Agent, "Team"]], Callable[..., List]]

成员类型明确支持AgentTeam两种,不用任何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,这样上下文更连贯,协作起来更顺畅。

我的踩坑记录

  1. 迭代次数别设太大:默认10次真的足够了,太大容易陷入无意义循环,浪费不少token
  2. 嵌套Team注意token爆炸:每一层都会把历史带入,嵌套太深上下文膨胀得比你想象得快
  3. respond_directly 适合问答路由场景,需要协作的场景真别开
  4. respond_directlydelegate_to_all_members 不要一起用,逻辑上就冲突

总结

Agno的Team模式设计得非常简洁灵活,原生支持嵌套,让我们可以轻松构建分层的多Agent协作系统。不管是简单的任务路由,还是复杂的多步协作,都能很好地适配。

我个人觉得,Agno在多Agent组织这块的API设计,比很多其他框架都要干净。如果你正在开发多Agent应用,不妨试试Agno的Team模式,真的很香!


Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐