Agno : コンセプト : チーム – チームモード : ルート

Route モードでは、チームリーダーはリクエストの内容に基づいて、ユーザのクエリーを最も適切なチームメンバーに振り分けます。チームリーダーはスマートルーターとして機能し、クエリーを分析してそれを処理する最適なエージェントを選択します。それからメンバーの応答がユーザに直接返されます。

Agno : ユーザガイド : コンセプト : チーム – ルート

作成 : クラスキャット・セールスインフォメーション
作成日時 : 07/28/2025
バージョン : Agno 1.7.5

* 本記事は docs.agno.com の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています :

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

 

Agno ユーザガイド : コンセプト : チーム – ルート

Route モードでは、チームリーダーはリクエストの内容に基づいて、ユーザのクエリーを最も適切なチームメンバーに振り分けます。

チームリーダーはスマートルーターとして機能し、クエリーを分析してそれを処理する最適なエージェントを選択します。それからメンバーの応答がユーザに直接返されます。

 

ルートモードはどのように動作するか

「ルート」モードでは :

  1. チームがユーザクエリーを受け取ります。

  2. チームリーダーがクエリーを分析して、どのチームメンバーが適切な専門知識を持っているか判断します。

  3. クエリーは選択されたチームメンバーにフォワードされます。

  4. チームメンバーからの応答はユーザに直接返されます。

このモードは、異なる専門領域を持つ専門エージェントがあり、クエリーを適切な専門家に自動的に転送したい場合に、特に有用です。

  1. 多言語チームの作成

    ファイル multi_language_team.py を作成します。

    multi_language_team.py

    from agno.agent import Agent
    from agno.models.anthropic import Claude
    from agno.models.deepseek import DeepSeek
    from agno.models.mistral.mistral import MistralChat
    from agno.models.openai import OpenAIChat
    from agno.team.team import Team
    
    english_agent = Agent(
        name="English Agent",
        role="You can only answer in English",
        model=OpenAIChat(id="gpt-4.5-preview"),
        instructions=[
            "You must only respond in English",
        ],
    )
    
    japanese_agent = Agent(
        name="Japanese Agent",
        role="You can only answer in Japanese",
        model=DeepSeek(id="deepseek-chat"),
        instructions=[
            "You must only respond in Japanese",
        ],
    )
    chinese_agent = Agent(
        name="Chinese Agent",
        role="You can only answer in Chinese",
        model=DeepSeek(id="deepseek-chat"),
        instructions=[
            "You must only respond in Chinese",
        ],
    )
    spanish_agent = Agent(
        name="Spanish Agent",
        role="You can only answer in Spanish",
        model=OpenAIChat(id="gpt-4.5-preview"),
        instructions=[
            "You must only respond in Spanish",
        ],
    )
    
    french_agent = Agent(
        name="French Agent",
        role="You can only answer in French",
        model=MistralChat(id="mistral-large-latest"),
        instructions=[
            "You must only respond in French",
        ],
    )
    
    german_agent = Agent(
        name="German Agent",
        role="You can only answer in German",
        model=Claude("claude-3-5-sonnet-20241022"),
        instructions=[
            "You must only respond in German",
        ],
    )
    multi_language_team = Team(
        name="Multi Language Team",
        mode="route",
        model=OpenAIChat("gpt-4.5-preview"),
        members=[
            english_agent,
            spanish_agent,
            japanese_agent,
            french_agent,
            german_agent,
            chinese_agent,
        ],
        show_tool_calls=True,
        markdown=True,
        instructions=[
            "You are a language router that directs questions to the appropriate language agent.",
            "If the user asks in a language whose agent is not a team member, respond in English with:",
            "'I can only answer in the following languages: English, Spanish, Japanese, French and German. Please ask your question in one of these languages.'",
            "Always check the language of the user's input before routing to an agent.",
            "For unsupported languages like Italian, respond in English with the above message.",
        ],
        show_members_responses=True,
    )
    
    
    # Ask "How are you?" in all supported languages
    multi_language_team.print_response(
        "How are you?", stream=True  # English
    )
    
    multi_language_team.print_response(
        "你好吗?", stream=True  # Chinese
    )
    
    multi_language_team.print_response(
        "お元気ですか?", stream=True  # Japanese
    )
    
    multi_language_team.print_response(
        "Comment allez-vous?",
        stream=True,  # French
    )
    

  2. チームの実行

    ライブラリをインストールします

    pip install openai mistral agno
    

    チームを実行します

    python multi_language_team.py
    

 

ルートモードによる構造化出力

ルートモードの強力な機能の一つは、メンバーエージェントからの構造化出力を保持できることです。応答用に Pydantic モデルを使用すると、選択されたチームメンバーからの応答は指定された構造に自動的にパースされます。

 

構造化出力モデルの定義

from pydantic import BaseModel
from typing import List, Optional
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.team import Team


class StockAnalysis(BaseModel):
    symbol: str
    company_name: str
    analysis: str

class CompanyAnalysis(BaseModel):
    company_name: str
    analysis: str

stock_searcher = Agent(
    name="Stock Searcher",
    model=OpenAIChat("gpt-4o"),
    response_model=StockAnalysis,
    role="Searches for information on stocks and provides price analysis.",
    tools=[
        YFinanceTools(
            stock_price=True,
            analyst_recommendations=True,
        )
    ],
)

company_info_agent = Agent(
    name="Company Info Searcher",
    model=OpenAIChat("gpt-4o"),
    role="Searches for information about companies and recent news.",
    response_model=CompanyAnalysis,
    tools=[
        YFinanceTools(
            stock_price=False,
            company_info=True,
            company_news=True,
        )
    ],
)

team = Team(
    name="Stock Research Team",
    mode="route",
    model=OpenAIChat("gpt-4o"),
    members=[stock_searcher, company_info_agent],
    markdown=True,
)

# This should route to the stock_searcher
response = team.run("What is the current stock price of NVDA?")
assert isinstance(response.content, StockAnalysis)

 

以上