Agno 代理支持文本、图像、音频和视频输入,并可生成文本、图像、音频和视频输出。如需完整概述,请查看兼容性矩阵

多模态输入到代理

我们来创建一个能够理解图像并在需要时调用工具的代理。

图像代理

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-4o"),
    tools=[DuckDuckGoTools()],
    markdown=True,
)

agent.print_response(
    "告诉我关于这张图片的信息,并给我它的最新新闻。",
    images=[
        Image(
            url="https://upload.wikimedia.org/wikipedia/commons/0/0c/GoldenGateBridge-001.jpg"
        )
    ],
    stream=True,
)

运行代理:

python image_agent.py

与图像类似,您也可以使用音频和视频作为输入。

音频代理

audio_agent.py
import base64

import requests
from agno.agent import Agent, RunResponse  # noqa
from agno.media import Audio
from agno.models.openai import OpenAIChat

# 获取音频文件并将其转换为 base64 编码字符串
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")]
)

视频代理

目前 Agno 只支持 Gemini 模型作为视频输入。
video_agent.py
from pathlib import Path

from agno.agent import Agent
from agno.media import Video
from agno.models.google import Gemini

agent = Agent(
    model=Gemini(id="gemini-2.0-flash-exp"),
    markdown=True,
)

# 请使用以下命令下载 "GreatRedSpot.mp4"
# wget https://storage.googleapis.com/generativeai-downloads/images/GreatRedSpot.mp4
video_path = Path(__file__).parent.joinpath("GreatRedSpot.mp4")

agent.print_response("告诉我关于这个视频的内容", videos=[Video(filepath=video_path)])

多模态输出

与提供多模态输入类似,您也可以从代理获取多模态输出。

图像生成

以下示例演示了如何使用 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-4o"),
    tools=[DalleTools()],
    description="您是一个可以使用 DALL-E 生成图像的 AI 代理。",
    instructions="当用户要求您创建图像时,请使用 `create_image` 工具来创建图像。",
    markdown=True,
    show_tool_calls=True,
)

image_agent.print_response("生成一张白色的暹罗猫的图片")

images = image_agent.get_images()
if images and isinstance(images, list):
    for image_response in images:
        image_url = image_response.url
        print(image_url)

音频响应

以下示例演示了如何从代理获取文本和音频响应。代理将以文本和可以保存到文件的音频字节形式进行响应。

audio_agent.py
from agno.agent import Agent, RunResponse
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: RunResponse = agent.run("讲一个 5 秒钟的恐怖故事")

# 将响应音频保存到文件
if response.response_audio is not None:
    write_audio_to_file(
        audio=agent.run_response.response_audio.content, filename="tmp/scary_story.wav"
    )

多模态输入和输出在一起

您可以创建能够接受多模态输入并返回多模态输出的代理。以下示例演示了如何向代理提供音频和文本输入的组合,并获取文本和音频输出。

音频输入和音频输出

audio_agent.py
import base64

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

# 获取音频文件并将其转换为 base64 编码字符串
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", "audio"],
        audio={"voice": "alloy", "format": "wav"},
    ),
    markdown=True,
)

agent.run("这些录音有什么内容?", audio=[Audio(content=wav_data, format="wav")])

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