Agno 再入門 : SDK – チームの構築

チームとは、連携して作業するエージェント (またはサブチーム) のコレクションです。チームリーダーは、メンバーの役割に基づいてタスクを委任し割り当てます。

Agno 再入門 : SDK – 基本 : チーム (概要, 構築)

作成 : クラスキャット・セールスインフォメーション
作成日時 : 06/19/2026
バージョン : v2.6.18

* 本記事は docs.agno.com の以下のページを参考にしています :

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。

 

 

Agno 再入門 : SDK – 基本 : チーム (概要, 構築)

What are Teams?

複雑なタスクを解決するために連携するエージェントのグループ。

チームとは、連携して作業するエージェント (またはサブチーム) のコレクションです。チームリーダーは、メンバーの役割に基づいてタスクを委任し割り当てます。

from agno.team import Team
from agno.agent import Agent

team = Team(members=[
    Agent(name="English Agent", role="You answer questions in English"),
    Agent(name="Chinese Agent", role="You answer questions in Chinese"),
    Team(
        name="Germanic Team",
        role="You coordinate the team members to answer questions in German and Dutch",
        members=[
            Agent(name="German Agent", role="You answer questions in German"),
            Agent(name="Dutch Agent", role="You answer questions in Dutch"),
        ],
    ),
])

 

Why Teams?

単一エージェントではすぐに限界に達します。コンテキストウィンドウがいっぱいになり、意思決定が困難になり、デバッグが不可能になります。

チームでは、専門エージェント間で作業を分担 (分散) します :

  • (メリット – 説明)

  • 特化 (Specialization) – 各エージェントはあらゆる分野で平凡 (mediocre) になるのではなく、特定の領域をマスターします。

  • 並列処理 – 複数のエージェントが独立したサブタスクを同時に作業します。

  • 保守性 – 問題が発生した場合、どのエージェントを修正すればよいかが正確にわかります。

  • スケーラビリティ – すべてを書き換えるのではなく、エージェントを追加することで機能を追加できます。

トレードオフ : 協調 (coordination) のオーバーヘッド。エージェントは通信し、状態を共有する必要があります。これを誤ると、よりコストのかかる障害モードを構築してしまうことになります。

 

When to Use Teams

次のような場合にチームを使用します :

  • タスクに、異なるツールや専門知識を持つ複数の専門エージェントが必要な場合

  • 単一のエージェントのコンテキストウィンドウを超えてしまう場合

  • 各エージェントに狭い範囲の作業に集中させたい場合

次のような場合には、単一のエージェントを使用します :


  • タスクが単一の専門分野に当てはまる場合

  • トークンコストの最小化が重要な場合

  • まだ判断がつかない場合(シンプルな構成から始め、制限に達したらエージェントを追加します)

 

チームの機能

モジュール式実行

Agno のエージェントとチームはモジュール構造になっています。メッセージ構築、セッション処理、ストレージ、バックグラウンド・マネージャは、API との連携ロジックを分離するために、それぞれ専用のコンポーネントに分割されています。

 

呼び出し可能ファクトリ

ツール、ナレッジ、メンバーなどの静的リストの代わりに、関数を渡します。Agno は各実行の開始時にこの関数を呼び出し、関数のパラメータ名に基づいてコンテキストを注入します。

  • (動作 – 詳細)

  • 注入されたパラメータ – agent, team, run_context, session_state

  • キャッシュ – カスタム key > user_id > session_i によりキャッシュされます。`cache_callables=False` で無効になります。

  • 戻り値の型 – ツールとメンバーはリストまたはタプルを返します。ナレッジは KnowledgeProtocol インスタンスまたは None を返します。

knowledge, tools, members はすべて呼び出し可能ファクトリを受け入れます。エージェントも knowledge と tools 用の呼び出し可能ファクトリをサポートしています。See callable factories for examples and caching settings for cache key configuration.

 

チームモード

Team 2.0 では、コラボレーションスタイルを明示的にするための TeamMode が導入されました。respond_directly や delegate_to_all_members を直接切り替えるのではなく、`mode=` を指定することを勧めます。

from agno.team import Team, TeamMode

team = Team(
    name="Research Team",
    members=[...],
    mode=TeamMode.broadcast,
)

モード 設定 ユースケース
協調 (Coordinate) mode=TeamMode.coordinate (default) 作業を分割し、メンバーに委任し、結果を統合します
ルーティング mode=TeamMode.route 単一の専門家にルーティングし、その応答を直接返します
ブロードキャスト mode=TeamMode.broadcast 同じタスクをすべてのメンバーに委任し、結果を統合します
タスク mode=TeamMode.tasks 目標が達成されるまでタスクリストのループを実行します

モードは明示的なオーケストレーションパターンです。これらを使用することで、エージェントロジックを変更することなく、協調トポロジーに名前を付けたり、切り替えたりできます。チーム実行は、human-in-the-loop が必要な場合に一時停止し、承認後に再開できます。

See Delegation for details.

 

チームの構築

複数エージェントの協調におけるチームメンバー、ロール、構造を定義します。

まずはシンプルなモデル、チームメンバー、指示から始めます。必要に応じて機能を追加していきます。

 

最小限の例

research_team.py

from agno.team import Team
from agno.agent import Agent
from agno.models.openai import OpenAIResponses
from agno.tools.hackernews import HackerNewsTools
from agno.tools.yfinance import YFinanceTools

news_agent = Agent(
    name="News Agent",
    role="Get trending tech news from HackerNews",
    tools=[HackerNewsTools()]
)

finance_agent = Agent(
    name="Finance Agent",
    role="Get stock prices and financial data",
    tools=[YFinanceTools()]
)

team = Team(
    name="Research Team",
    members=[news_agent, finance_agent],
    model=OpenAIResponses(id="gpt-4o"),
    instructions="Delegate to the appropriate agent based on the request."
)

team.print_response("What are the trending AI stories and how is NVDA stock doing?", stream=True)

出力例

INFO Agent 'News Agent' inheriting model from Team: gpt-4o                                                                                         
INFO Agent 'Finance Agent' inheriting model from Team: gpt-4o                                                                                      
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                                                                                                                                 ┃
┃ What are the trending AI stories and how is NVDA stock doing?                                                                                   ┃
┃                                                                                                                                                 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Team Tool Calls ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                                                                                                                                 ┃
┃ • delegate_task_to_member(member_id=news-agent, task=Get the trending tech news from HackerNews related to AI.                                  ┃
┃   Provide a summary of the top stories.)                                                                                                        ┃
┃                                                                                                                                                 ┃
┃ • delegate_task_to_member(member_id=finance-agent, task=Fetch the current stock price and recent performance                                    ┃
┃   data for NVIDIA (NVDA). Provide a brief summary.)                                                                                             ┃
┃                                                                                                                                                 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (29.8s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                                                                                                                                 ┃
┃ こちらがAIに関連する最新の技術ニュースとNVIDIA(NVDA)の株式情報です。                                                                          ┃
┃                                                                                                                                                 ┃
┃ ### AI関連の最新ニュース                                                                                                                        ┃
┃ 1. **スタートアップのAI活用ガイド**                                                                                                             ┃
┃    - AIをコアに持つスタートアップの戦略を紹介しています。                                                                                       ┃
┃                                                                                                                                                 ┃
┃ 2. **ローカルモデルの利点**                                                                                                                     ┃
┃    - クラウドではなくローカルでAIモデルを実行する利点について説明しています。                                                                   ┃
┃                                                                                                                                                 ┃
┃ 3. **Wolfram LanguageおよびMathematicaバージョン15の発表**                                                                                      ┃
┃    - AIが組み込まれた新しい機能について紹介しています。                                                                                         ┃
┃                                                                                                                                                 ┃
┃ 4. **AIとセルフヘルプノンフィクションの影響**                                                                                                   ┃
┃    - AIが従来のノンフィクションをどのように変革しているかについての考察です。                                                                   ┃
┃                                                                                                                                                 ┃
┃ 5. **オランダ向けGPT-NLの導入**                                                                                                                 ┃
┃    - オランダ語の処理能力を向上させる新しい言語モデルです。                                                                                     ┃
┃                                                                                                                                                 ┃
┃ ### NVIDIA(NVDA)の最新株情報                                                                                                                  ┃
┃ - **現在の株価:** $207.41                                                                                                                       ┃
┃ - **最近のパフォーマンス:**                                                                                                                     ┃
┃   - ゲームやAI技術への需要増加により、着実に成長しています。                                                                                    ┃
┃   - GPU技術の進化やAIおよびデータセンター市場への進出により、収益の大幅増加を実現しています。                                                   ┃
┃                                                                                                                                                 ┃
┃ NVIDIAはAIと技術革新への戦略的な取り組みにより、引き続きテクノロジー業界で強力な地位を築いています。                                            ┃
┃                                                                                                                                                 ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

 

チームモード

チームはデフォルトで協調 (coordinate) モード (リーダーが委任し、統合する) になっています。モードを設定することで、リーダーとメンバーの協調方法を変更できます。

from agno.team.mode import TeamMode
from agno.models.openai import OpenAIResponses

team = Team(
    name="Language Router",
    members=[...],
    model=OpenAIResponses(id="gpt-4o"),
    mode=TeamMode.route
)

モード 設定 ユースケース
協調 (Coordinate) mode=TeamMode.coordinate (default) 作業を分割し、メンバーに委任し、結果を統合します
ルーティング mode=TeamMode.route 単一の専門家にルーティングし、その応答を直接返します
ブロードキャスト mode=TeamMode.broadcast 同じタスクをすべてのメンバーに委任し、結果を統合します
タスク mode=TeamMode.tasks 目標が達成されるまでタスクリストのループを実行します

タスクモードでは、反復的なタスクループが実行されます。リーダーが実行できるサイクル数の上限は、max_iterations で設定できます。

from agno.models.openai import OpenAIResponses

team = Team(
    name="Ops Team",
    members=[...],
    model=OpenAIResponses(id="gpt-4o"),
    mode=TeamMode.tasks,
    max_iterations=6
)

 

チームメンバー

各メンバーには name と role が割り当てられます。チームリーダーはこれらを使用して、誰が何を担当するかを決定します。

news_agent = Agent(
    name="News Agent",                              # Identifies the agent
    role="Get trending tech news from HackerNews",  # Tells the leader what this agent does
    tools=[HackerNewsTools()]
)

For better tracing, also set an id:

news_agent = Agent(
    id="news-agent",
    name="News Agent",
    role="Get trending tech news from HackerNews",
    tools=[HackerNewsTools()]
)

メンバーに id と name の両方が設定されている場合、チーム委任では id をメンバー識別子として使用します。

 

ネストされたチーム

チームは他のチームを含むことができます。最上位の (top-level) リーダーは下位 (sub) チームのリーダーに委任し、下位チームのリーダーはさらにそのメンバーに委任します。

from agno.team import Team
from agno.agent import Agent

team = Team(
    name="Language Team",
    members=[
        Agent(name="English Agent", role="Answer in English"),
        Agent(name="Chinese Agent", role="Answer in Chinese"),
        Team(
            name="Germanic Team",
            role="Handle German and Dutch questions",
            members=[
                Agent(name="German Agent", role="Answer in German"),
                Agent(name="Dutch Agent", role="Answer in Dutch"),
            ],
        ),
    ],
)

 

モデルの継承

チームメンバーは、明示的に設定されていない限り、親チームからモデルを継承します。

from agno.team import Team
from agno.agent import Agent
from agno.models.openai import OpenAIResponses
from agno.models.anthropic import Claude

# This agent uses its own model (Claude)
agent_with_model = Agent(
    name="Claude Agent",
    model=Claude(id="claude-sonnet-4-5"),
    role="Research with Claude"
)

# This agent inherits gpt-4o from the team
agent_without_model = Agent(
    name="Inherited Agent",
    role="Research with inherited model"
)

team = Team(
    name="Research Team",
    model=OpenAIResponses(id="gpt-4o"),  # Default for team and members without a model
    members=[agent_with_model, agent_without_model]
)

 

呼び出し可能ファクトリ

メンバー、ツール、ナレッジの静的リストの代わりに、関数を渡します。この関数は各実行の開始時に呼び出されるため、構成はユーザーまたはセッションごとに変化させることができます。

team_callable_members.py

from agno.agent import Agent
from agno.models.openai import OpenAIResponses
from agno.team import Team

writer = Agent(
    name="Writer",
    role="Content writer",
    model=OpenAIResponses(id="gpt-5-mini"),
    instructions=["Write clear, concise content."],
)

researcher = Agent(
    name="Researcher",
    role="Research analyst",
    model=OpenAIResponses(id="gpt-5-mini"),
    instructions=["Research topics and summarize findings."],
)


def pick_members(session_state: dict):
    if session_state.get("needs_research", False):
        return [researcher, writer]
    return [writer]


team = Team(
    name="Content Team",
    model=OpenAIResponses(id="gpt-5-mini"),
    members=pick_members,
    cache_callables=False,
)

team.print_response(
    "Write a haiku about Python",
    session_state={"needs_research": False},
    stream=True,
)

team.print_response(
    "Research the history of Python and write a short summary",
    session_state={"needs_research": True},
    stream=True,
)

ツールとナレッジについても同様のパターンが適用されます。エージェントは、ツールとナレッジのための呼び出し可能ファクトリもサポートしています。

 

注入パラメータ

ファクトリ関数のパラメータに名前を付けて、コンテキストを自動的に受け取れるようにします。

  • (パラメータ – 型 – 説明)

  • agent – Agent – 現在のエージェントインスタンス

  • team – Team – 現在のチームインスタンス

  • run_context – RunContext – user_id、session_id、session_state を含む実行コンテキスト

  • session_state – dict – セッション状態辞書 (None の場合は {} がデフォルト)

どのような組み合わせでも構いません。引数なしのファクトリも動作します。

 

add_tool と set_tools

add_tool() は、tools が呼び出し可能なファクトリである場合に RuntimeError を発生させます。ファクトリを完全に置き換えるには、set_tools() を使用します :

team = Team(tools=tools_for_user, ...)

team.add_tool(some_tool)              # raises RuntimeError

team.set_tools(new_factory)           # replace with a new factory
team.set_tools([DuckDuckGoTools()])   # replace with a static list

 

チーム機能

チームはエージェントと同様の機能をサポートしています :

  • (機能 – 説明)

  • 指示 (Instructions) – チ​​ームリーダーに協調方法をガイドします

  • モード – 協調ストラテジー(協調、ルーティング、ブロードキャスト、タスク)を選択します

  • データベース – セッション履歴と状態を永続化します

  • 推論 – リーダーが委任前に計画を立てられるようにする

  • ナレッジ – リーダーがナレッジベースにアクセスできるようにする

  • メモリ – セッション間で情報を保存および想起する

  • ツール – リーダーが直接使用できるツールを提供する。

  • スキル – 指示、スクリプト、リファレンスを通じて、リーダーに専門知識を提供する。

 

以上