📝

[AI Agent Jump Start 基礎編#7] マルチエージェントAPI 実装答え合わせ

に公開

✅ マルチエージェントAPI 実装まとめ(答え合わせ編)

このパートでは、前回の課題として提示された4つのエージェントファイルの実装例を紹介し、想定される動作と最終的なゴールを振り返ります。


📂 対象ファイル一覧

agents_core/agents/
├── answer_agent.py      # 汎用QAエージェント
├── search_agent.py      # Web検索エージェント
├── mcp_agent.py         # 翻訳エージェント(MCP経由)
└── router_agent.py      # ルーター

🧩 実装のポイントと想定

🟦 agents_core/answer_agent.py

from agents_core.settings import model
from agents import Agent

answer_agent = Agent(
    name="Answer Agent",
    instructions="あなたは質問に対して簡潔に答えるエージェントです。",
    model=model,
)

🟦 agents_core/search_agent.py

from agents import Agent
from agents_core.settings import model
from agents_core.tools.web_search import web_search  # Tavily検索ツール

search_agent = Agent(
    name="Search Agent",
    instructions="""
あなたはWeb検索を活用して、ユーザーの質問に答えるエージェントです。
必要に応じて web_search ツールを使用し、最新情報をもとに簡潔かつ信頼できる回答を返してください。
""",
    model=model,
    tools=[web_search],
)

🟦 agents_core/mcp_agent.py

from agents import Agent
from agents_core.tools.translate_via_mcp import translate_via_mcp
from agents_core.settings import model

mcp_agent = Agent(
    name="MCP Agent",
    instructions="""
あなたは翻訳に関するタスクを処理するエージェントです。
必ず translate_via_mcp ツールを使って翻訳してください。
""",
    model=model,
    tools=[translate_via_mcp],
)

🟦 agents_core/router_agent.py

from agents import RouterAgent, Route
from agents_core.settings import model
from agents_core.agents.answer_agent import answer_agent
from agents_core.agents.search_agent import search_agent
from agents_core.agents.mcp_agent import mcp_agent

router_agent = RouterAgent(
    name="Router Agent",
    model=model,
    instructions="""
あなたは入力文に対して、適切なエージェントにルーティングする役割を担います。

各エージェントの用途は以下の通りです:

- SearchAgent:最近の出来事やWeb検索が必要な内容
- MCPAgent:翻訳や言語変換に関する指示
- AnswerAgent:一般的な知識や質問に対する回答

ユーザーの意図を理解し、最も適したエージェントを1つ選んでください。
選択肢は "search", "mcp", "answer" のいずれかで答えてください。
""",
)

@router_agent.route
async def classify_by_model(input_text: str) -> Route:
    choice = await router_agent.classify(
        input_text,
        options={
            "search": "Web検索が必要な質問(例:最近の出来事、調べてなど)",
            "mcp": "翻訳や言語変換の依頼(例:英語に訳して、translateなど)",
            "answer": "通常の質問や一般知識への回答",
        },
    )

    if choice == "search":
        return Route(to=search_agent)
    elif choice == "mcp":
        return Route(to=mcp_agent)
    else:
        return Route(to=answer_agent)


📬 想定されるレスポンス例

入力:

{"input": "『私は寿司が好きです』を英語に訳して"}

レスポンス:

{
  "response": "『私は寿司が好きです』は英語で『I like sushi.』です。"
}

🔚 最後に

このマルチエージェント構成を通じて、

  • ツールを持つエージェントと持たないエージェントの違い
  • MCP のような外部呼び出しを仲介する仕組み
  • RouterAgent によるエージェント切り替え
  • FastAPI を通じた一貫したエンドポイント化

を体験できたと思います。


🎉 ここまでできたら、おめでとうございます!

あなたは 複数のエージェントを統括して動かす基盤 を手に入れました。
この仕組みは社内AIアシスタントや業務支援Botのベースにもなります。

さらなる発展としては、以下のような工夫が可能です:

  • Router の LLMベース自動判定化(function-calling)
  • エージェント間のマルチターン連携
  • ユーザーごとの履歴保存やセッション管理

今後の開発にぜひ活かしてみてください!🚀

DXC Lab

Discussion