Agno のツールを使用して AI エージェントを構築する方法を学習します。
エージェントはツールを使用してアクションを実行し、外部システムとやり取りします。ツールは、Agent がタスクを達成するために実行可能な関数です。
Agno 2.x : Learn : エージェント – ツール
作成 : クラスキャット・セールスインフォメーション
作成日時 : 10/31/2025
バージョン : Agno 2.2.1
* 本記事は docs.agno.com の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています。スニペットはできる限り日本語を使用しています :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
◆ お問合せ : 下記までお願いします。
- クラスキャット セールス・インフォメーション
- sales-info@classcat.com
- ClassCatJP
 

Agno 2.x : Learn : エージェント – ツール
Agno のツールを使用して AI エージェントを構築する方法を学習します。
エージェントはツールを使用してアクションを実行し、外部システムとやり取りします。
ツールは、Agent がタスクを達成するために実行可能な関数です。例えば: web 検索、SQL 実行、電子メール送信や API 呼び出し。ツールとして任意の python 関数が使用できて、事前構築済み Agno ツールキットも使用できます。
一般的な構文は :
from agno.agent import Agent
agent = Agent(
    # Add functions or Toolkits
    tools=[...],
)
ツールキットの使用
Agno は、エージェントに追加できる多くの事前構築済みツールキットを提供しています。例えば、DuckDuckGo ツールキットを使用して web を検索してみましょう。
💡 You can find more toolkits in the Toolkits guide.
- Web 検索エージェントの作成
ファイル web_search.py の作成 web_search.py from agno.agent import Agent from agno.models.openai import OpenAIChat from agno.tools.duckduckgo import DuckDuckGoTools agent = Agent( model=OpenAIChat(id="gpt-5-nano"), tools=[DuckDuckGoTools()], markdown=True) agent.print_response("フランスでは何が起こっているのですか?", stream=True)
- エージェントの実行
ライブラリのインストール pip install openai ddgs agnoエージェントの実行 python web_search.py出力例 ┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ ┃ ┃ フランスでは何が起こっているのですか? ┃ ┃ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━ Response (49.7s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ ┃ ┃ 以下は、直近の主要な話題を要約したものです。日々ニュースは変わるので、興味のある分野があればさらに詳しく追います。 ┃ ┃ ┃ ┃ • ブラッシャーイベント(国民的なお祝い) ┃ ┃ • 2025年7月14日(フランスの革命記念日)にパリで行われたイベント。シャンゼリゼ大通りの軍事パレードのほか、夜にはエッフェル ┃ ┃ 塔での花火などが開催され、国民的な祝祭ムードが高まりました。 ┃ ┃ • ルーヴル美術館の強盗事件(文化財・治安ニュース) ┃ ┃ • 2025年10月頃、ルーヴル美術館で19点ほどの美術品が盗まれる事件が報じられました。調査が進行中で、国内外の美術界にも大きな関 ┃ ┃ 心が寄せられています。 ┃ ┃ • 経済・政治の動向(経済成長の回復感と財政問題の継続性) ┃ ┃ • フランス経済は成長の回復傾向が見られる一方、財政運営や労働市場の動向については引き続き議論が続いています。物価動向や雇用 ┃ ┃ 情勢の動きにも注目が集まっています。 ┃ ┃ • その他の話題 ┃ ┃ • 海外ニュースサイトや日本語メディアで、フランス国内の政治・社会状況、外交動向、文化イベントに関する報道が並んでいます。具 ┃ ┃ 体的な話題を指定いただければ、最新情報をピックアップして詳しく要約します。 ┃ ┃ ┃ ┃ よろしければ、次のいずれかを教えてください。 ┃ ┃ ┃ ┃ • 政治、経済、治安、文化のどの分野を深掘りしますか? ┃ ┃ • 特定の出来事(例:ルーヴル事件、国の財政政策、労働改革など)について詳しく知りたいですか? ┃ ┃ • 最新ニュースの公式ソースへのリンク付きで詳しく解説します。 ┃ ┃ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 
独自ツールの作成
より良い制御のためには、独自の python 関数を作成してツールとしてエージェントに追加します。例えば、get_top_hackernews_stories ツールをエージェントに追加する方法が以下になります :
hn_agent.py
import json
import httpx
from agno.agent import Agent
from agno.models.openai import OpenAIChat
def get_top_hackernews_stories(num_stories: int = 10) -> str:
    """Use this function to get top stories from Hacker News.
    Args:
        num_stories (int): Number of stories to return. Defaults to 10.
    """
    # Fetch top story IDs
    response = httpx.get('https://hacker-news.firebaseio.com/v0/topstories.json')
    story_ids = response.json()
    # Fetch story details
    stories = []
    for story_id in story_ids[:num_stories]:
        story_response = httpx.get(f'https://hacker-news.firebaseio.com/v0/item/{story_id}.json')
        story = story_response.json()
        if "text" in story:
            story.pop("text", None)
        stories.append(story)
    return json.dumps(stories)
agent = Agent(
    model=OpenAIChat(id="gpt-5-nano"),
    tools=[get_top_hackernews_stories],
    markdown=True
)
agent.print_response("hackernews のトップ5 の記事を要約してくれますか?", stream=True)
出力例
┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ ┃ ┃ hackernews のトップ5 の記事を要約してくれますか? ┃ ┃ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┏━ Response (47.9s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ ┃ ┃ 以下は、いただいたトップ5の記事情報です。本文をまだ読んでいないため、正確な要約は現時点では作成できません。本文を共有いただけ ┃ ┃ れば、日本語で要約します。まずは記事の概要情報をリストします。 ┃ ┃ ┃ ┃ 1 タイトル: 987654321 / 123456789 ┃ ┃ ┃ ┃ • 著者: ColinWright ┃ ┃ • スコア: 126 ┃ ┃ • URL: https://www.johndcook.com/blog/2025/10/26/987654321/ ┃ ┃ ┃ ┃ 2 タイトル: Estimating the Perceived 'Claustrophobia' of New York City's Streets (2024) ┃ ┃ ┃ ┃ • 著者: jxmorris12 ┃ ┃ • スコア: 18 ┃ ┃ • URL: http://mfranchi.net/posts/claustrophobic-streets/ ┃ ┃ ┃ ┃ 3 タイトル: Uv is the best thing to happen to the Python ecosystem in a decade ┃ ┃ ┃ ┃ • 著者: todsacerdoti ┃ ┃ • スコア: 1943 ┃ ┃ • URL: https://emily.space/posts/251023-uv ┃ ┃ ┃ ┃ 4 タイトル: Show HN: In a single HTML file, an app to encourage my children to invest ┃ ┃ ┃ ┃ • 著者: roberdam ┃ ┃ • スコア: 59 ┃ ┃ • URL: https://roberdam.com/en/dinversiones.html ┃ ┃ ┃ ┃ 5 タイトル: Language models are injective and hence invertible ┃ ┃ ┃ ┃ • 著者: mazsa ┃ ┃ • スコア: 143 ┃ ┃ • URL: https://arxiv.org/abs/2510.15511 ┃ ┃ ┃ ┃ 次のいずれかの方法で要約を進められます。 ┃ ┃ ┃ ┃ • 本文をこちらに貼り付けてください。日本語で要約します。 ┃ ┃ • 私に各記事の本文を取得して要約してほしい場合は、本文の要約を可能にする形で情報を共有してください(例: ┃ ┃ 主要な段落抜粋や結論など)。 ┃ ┃ • 本文のURLを私が直接読める形で提供していただければ、要約作成プロセスを開始します(現在の環境では直接ウェブを読む機能はなく、 ┃ ┃ 提供された情報に基づく要約となりますが、本文の要点を教えていただければ正確に要約します)。 ┃ ┃ ┃ ┃ どう進めましょうか? ┃ ┃ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Read more about:
ツールで組み込みパラメータへのアクセス
ツール内で session_state, dependencies, agent と team のようなエージェント属性にアクセスできます。例えば :
from agno.agent import Agent
def get_shopping_list(session_state: dict) -> str:
    """Get the shopping list."""
    return session_state["shopping_list"]
agent = Agent(tools=[get_shopping_list], session_state={"shopping_list": ["milk", "bread", "eggs"]}, markdown=True)
agent.print_response("What's on my shopping list?", stream=True)
See more in the Tool Built-in Parameters section.
MCP ツール
Agno は Model Context Protocol (MCP) ツールをサポートします。一般的な構文は以下のとおりです :
from agno.agent import Agent
from agno.tools.mcp import MCPTools
async def run_mcp_agent():
    # Initialize the MCP tools
    mcp_tools = MCPTools(command=f"uvx mcp-server-git")
    # Connect to the MCP server
    await mcp_tools.connect()
    agent = Agent(tools=[mcp_tools], markdown=True)
    await agent.aprint_response("What is the license for this project?", stream=True)
    ...
💡 Learn more about MCP tools in the MCP tools guide.
以上
