Agno 2.x : エージェント – マルチモーダル・エージェント

Agno エージェントは、テキスト、画像、音声、動画とファイル入力をサポートし、出力としてテキスト、画像、音声、動画とファイルを生成できます。
まずは、画像を理解して、必要に応じてツール呼び出しを行うことができるエージェントを作成します。

Agno 2.x : Learn : エージェント – マルチモーダル・エージェント

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

* 本記事は docs.agno.com の以下のページを独自に翻訳した上で、補足説明を加えてまとめ直しています。スニペットはできる限り日本語を使用しています :

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

 

クラスキャット 人工知能 研究開発支援サービス ⭐️ 創立30周年(30th Anniversary)🎉💐

クラスキャット は人工知能に関する各種サービスを提供しています。お気軽にご相談ください :

  • 人工知能導入個別相談会(無償)実施中! [詳細]

  • 人工知能研究開発支援 [詳細]
    1. 自社特有情報を含むチャットボット構築支援
    2. 画像認識 (医療系含む) / 画像生成

  • PoC(概念実証)を失敗させないための支援 [詳細]

お問合せ : 下記までお願いします。

  • クラスキャット セールス・インフォメーション
  • sales-info@classcat.com
  • ClassCatJP

 

 

Agno 2.x : Learn : エージェント – マルチモーダル・エージェント

Agno エージェントは、テキスト、画像、音声、動画とファイル入力をサポートし、出力としてテキスト、画像、音声、動画とファイルを生成できます。

マルチモーダル・サポートの完全な概要については、multimodal ドキュメントを確認してください。

💡 Not all models support multimodal inputs and outputs. To see which models support multimodal inputs and outputs, please checkout the compatibility matrix.

 

エージェントへのマルチモーダル入力

画像を理解して、必要に応じてツール呼び出しを行うことができるエージェントを作成しましょう。

 

画像エージェント

image_agent.py

from agno.agent import Agent
from agno.media import Image
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(
    "この画像について説明してください、そしてこの画像に関する最新のニュースも教えてください。",
    images=[
        Image(
            url="https://upload.wikimedia.org/wikipedia/commons/0/0c/GoldenGateBridge-001.jpg"
        )
    ],
    stream=True,
)

出力例

┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                                                                                                                ┃
┃ この画像について説明してください、そしてこの画像に関する最新のニュースも教えてください。                                       ┃
┃                                                                                                                                ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (34.5s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                                                                                                                ┃
┃ 以下の2点をお届けします。                                                                                                      ┃
┃                                                                                                                                ┃
┃  1 画像の説明                                                                                                                  ┃
┃                                                                                                                                ┃
┃  • これはサンフランシスコ湾に架かるゴールデンゲートブリッジの写真です。                                                        ┃
┃  • 鋼鉄製の赤橙色(国際オレンジ)の塔が2本、長い吊りケーブルと垂直ケーブルで橋桁を支えています。                               ┃
┃  • 手前の塔と長い橋桁、そして海を挟んで奥には対岸の丘陵地帯が見えます。橋上には車が走っており、右側には小さなヨットが水面を航  ┃
┃    行しています。空は晴れており、全体的に美しい日の入り前の光景です。                                                          ┃
┃                                                                                                                                ┃
┃  2 最新ニュース(この画像の主題=ゴールデンゲートブリッジ関連の動向と、同じ呼称をもつ橋の話題を含みます)                      ┃
┃                                                                                                                                ┃
┃  • サンフランシスコのゴールデンゲートブリッジの大規模改修計画が進展中                                                          ┃
┃     • 要点:                                                                                                                    ┃
┃       ゴールデンゲートブリッジの地震対策として約10億ドル規模の改修計画が承認され、4段階の工事、完了までおよそ11年を見込む段階  ┃
┃       に入っています。                                                                                                         ┃
┃     • 出典: ABC 7 San Francisco、2025-10-29                                                                                    ┃
┃     • 意味: 安全性と耐震性を強化する長期プロジェクトとして、 bridge の老朽化対策が正式に動き出しています。                     ┃
┃     • 参考リンク(記事の概要):                                                                                                ┃
┃       https://www.msn.com/en-us/money/companies/golden-gate-bridge-approved-for-1-billion-seismic-retrofit-work/ar-AA1PslcL    ┃
┃  • 同名の「Little Golden Gate Bridge(アーカンソー州)」に関するニュースも最近話題に                                           ┃
┃     • 要点: アーカンソー州キャロル郡にある小さな橋「Little Golden Gate                                                         ┃
┃       Bridge」が修理完了後に再開通する見込み。長期間の閉鎖を経て、今週再開の見通し。                                           ┃
┃     • 出典: Arkansas Democrat-Gazette、2025-10-29                                                                              ┃
┃     • 備考: 本記事はSFのゴールデンゲートブリッジとは別の橋です。名称の混同にご留意ください。                                   ┃
┃     • 参考リンク: https://www.arkansasonline.com/news/2025/oct/29/little-golden-gate-bridge-in-carroll-county-set/             ┃
┃  • その他関連ニュース(同名の別橋に関する動き)                                                                                ┃
┃     • Little Golden Gate Bridge の再開に関する報道(KARKや5NEWSなど、2025-10-29〜10-30頃の報道)もあり。                       ┃
┃     • 参考: https://www.msn.com/en-us/news/us/little-golden-gate-bridge-reopening-in-carroll-county-after-repairs/ar-AA1Ps0za  ┃
┃     • 参考: https://www.msn.com/en-us/travel/tripideas/historic-little-golden-gate-bridge-in-arkansas-reopens/ar-AA1PwIIP      ┃
┃                                                                                                                                ┃
┃ 補足                                                                                                                           ┃
┃                                                                                                                                ┃
┃  • この写真の主題はサンフランシスコのゴールデンゲートブリッジです。一方で「Little Golden Gate Bridge」という名称を冠する       ┃
┃    Arkansas の橋もニュースになっています。ニュースを探す際にはこの違いに注意してください。                                     ┃
┃                                                                                                                                ┃
┃ もし特定のニュース記事を詳しく読みたい、あるいはSFのゴールデンゲートブリッジの改修計画について技術的な点を深掘りしてほしい、な ┃
┃ どのリクエストがあれば教えてください。さらに詳しく整理してお伝えします。                                                       ┃
┃                                                                                                                                ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

See Image as input for more details.

 

音声エージェント

audio_agent.py

import base64

import requests
from agno.agent import Agent
from agno.media import Audio
from agno.models.openai import OpenAIChat

# Fetch the audio file and convert it to a base64 encoded string
url = "https://openaiassets.blob.core.windows.net/$web/API/docs/audio/alloy.wav"
response = requests.get(url)
response.raise_for_status()
wav_data = response.content

agent = Agent(
    model=OpenAIChat(id="gpt-4o-audio-preview", modalities=["text"]),
    markdown=True,
)
agent.print_response(
    "この音声ファイルには何が含まれていますか?文字起こしして?", audio=[Audio(content=wav_data, format="wav")]
)

出力例

┏━ Message ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                                                                                                                ┃
┃ この音声ファイルには何が含まれていますか?文字起こしして?                                                                     ┃
┃                                                                                                                                ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━ Response (5.3s) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃                                                                                                                                ┃
┃ 音声の内容は以下の通りです。                                                                                                   ┃
┃                                                                                                                                ┃
┃ "The sun rises in the east and sets in the west. This simple fact has been observed by humans for thousands of years."         ┃
┃                                                                                                                                ┃
┃ 日本語訳: 「太陽は東から昇り、西に沈みます。この単純な事実は、何千年にもわたって人々によって観察されてきました。」             ┃
┃                                                                                                                                ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

 

動画エージェント

Info : Currently Agno only supports video as an input for Gemini models.

 

エージェントからのマルチモーダル出力

マルチモーダル入力の提供と同様に、エージェントからマルチモーダル出力を取得することもできます。

 

画像生成

次の例は、エージェントで DALL-E を使用して画像を生成する方法を実演します。

image_agent.py

from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.dalle import DalleTools

image_agent = Agent(
    model=OpenAIChat(id="gpt-5-nano"),
    tools=[DalleTools()],
    description="You are an AI agent that can generate images using DALL-E.",
    instructions="When the user asks you to create an image, use the `create_image` tool to create the image.",
    markdown=True,
)

response = image_agent.run("三毛の子猫と黒い子猫が日本の山の麓で雪景色の中、焚き火の近くで、ボール遊びしている画像を生成して")

if response.images:
    for image_response in response.images:
        print(image_response.url)

 

音声応答

次の例はエージェントからテキストと音声レスポンスの両方を取得する方法を実演します。エージェントは、テキストと (ファイルに保存できる) 音声バイトで応答します。

audio_agent.py

from agno.agent import Agent, RunOutput
from agno.models.openai import OpenAIChat
from agno.utils.audio import write_audio_to_file

agent = Agent(
    model=OpenAIChat(
        id="gpt-4o-audio-preview",
        modalities=["text", "audio"],
        audio={"voice": "alloy", "format": "wav"},
    ),
    markdown=True,
)
response: RunOutput = agent.run("5秒間の怖い話を聞かせてください")

if response.response_audio is not None:
    write_audio_to_file(
        audio=response.response_audio.content,
        filename="tmp/scary_story.wav"
    )

 

マルチモーダル入力と出力の組み合わせ

マルチモーダルな入力を受け取り、マルチモーダルな出力を返すエージェントを作成できます。以下の例は、音声とテキスト入力の組み合わせをエージェントに提供し、テキストと音声出力の両方を取得する方法を実演します。

 

​音声入力と音声出力

audio_agent.py

import base64

import requests
from agno.agent import Agent, RunOutput
from agno.media import Audio
from agno.models.openai import OpenAIChat
from agno.utils.audio import write_audio_to_file

# Fetch the audio file.
url = "https://openaiassets.blob.core.windows.net/$web/API/docs/audio/alloy.wav"
response = requests.get(url) # type: ignore
response.raise_for_status()
wav_data = response.content

agent = Agent(
    model=OpenAIChat(
        id="gpt-4o-audio-preview",
        modalities=["text", "audio"],
        audio={"voice": "alloy", "format": "wav"},
    ),
    markdown=True,
)

response: RunOutput = agent.run("What's in these recording?", audio=[Audio(content=wav_data, format="wav")])

print("=== テキスト応答 ===")
print(response.content)

if response.response_audio is not None:
    write_audio_to_file(
        audio=response.response_audio.content,
        filename="tmp/result.wav"
    )

出力例

=== テキスト応答 ===
The recording contains a factual statement about the movement of the Sun in the sky, noting that it rises in the east and sets in the west. It also mentions that this observation has been made by humans for thousands of years.
INFO Audio file saved to tmp/result.wav                                                                                           

 

以上