Image Agent with Bytes
Analyze an image from raw bytes with DashScope's qwen3-vl-plus and search the web for context.
The qwen3-vl-plus model supports both image input and function calling, which this example uses for web search.
Code
from pathlib import Path
from agno.agent import Agent
from agno.media import Image
from agno.models.dashscope import DashScope
from agno.tools.websearch import WebSearchTools
from agno.utils.media import download_image
agent = Agent(
model=DashScope(id="qwen3-vl-plus"),
tools=[WebSearchTools()],
markdown=True,
)
image_path = Path(__file__).parent.joinpath("sample.jpg")
download_image(
url="https://upload.wikimedia.org/wikipedia/commons/a/a7/Camponotus_flavomarginatus_ant.jpg",
output_path=str(image_path),
)
# Read the image file content as bytes
image_bytes = image_path.read_bytes()
agent.print_response(
"Analyze this image of an ant. Describe its features, species characteristics, and search for more information about this type of ant.",
images=[
Image(content=image_bytes),
],
stream=True,
)The default endpoint is Singapore (https://dashscope-intl.aliyuncs.com/compatible-mode/v1). Use a DASHSCOPE_API_KEY issued for that service region and a model available there. Keys and endpoints must match the service region, regardless of your physical location. For another region, pass its base_url to DashScope; see Model Studio API keys and regional endpoints.
Usage
Set up your virtual environment
uv venv --python 3.12
source .venv/bin/activateSet your API key
export DASHSCOPE_API_KEY=xxxInstall dependencies
uv pip install -U openai ddgs agnoRun Agent
Save the code above as image_agent_bytes.py, then run:
python image_agent_bytes.py