agno

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Agno Skill

Agno Skill

Build production-ready AI agents with Agno - a lightweight, model-agnostic framework for agents, teams, workflows, and MCP integration.
使用 Agno 构建生产级 AI Agent——这是一个轻量级、模型无关的框架,可用于构建 Agent、团队、工作流和 MCP 集成。

When to Use This Skill

何时使用此 Skill

This skill should be triggered when:
  • Building AI agents with tools, memory, structured outputs, or knowledge
  • Creating multi-agent teams with role-based delegation
  • Implementing workflows with sequential, parallel, conditional, or routing steps
  • Integrating MCP servers (stdio, SSE, or Streamable HTTP)
  • Deploying agents with AgentOS (FastAPI-based runtime)
  • Working with the LearningMachine (user profiles, entity memory, session context)
  • Debugging agent behavior or optimizing performance
当出现以下情况时,应触发此 skill:
  • 使用 tools、memory、structured outputs 或 knowledge 构建 AI Agent
  • 创建具备基于角色的委派能力的 multi-agent 团队
  • 实现包含 sequential、parallel、conditional 或 routing 步骤的工作流
  • 集成 MCP Server(stdio、SSE 或 Streamable HTTP)
  • 使用 AgentOS(基于 FastAPI 的 runtime)部署 Agent
  • 使用 LearningMachine(用户资料、实体记忆、会话上下文)
  • 调试 Agent 行为或优化性能

Architecture Overview

架构概览

Agent          - Single autonomous AI unit (model + tools + instructions)
Team           - Multiple agents coordinated by a leader (route/broadcast/tasks modes)
Workflow       - Pipeline-based execution (Step, Parallel, Condition, Loop, Router)
AgentOS        - FastAPI runtime for deploying agents as production APIs
LearningMachine - Persistent learning across sessions (profiles, memory, knowledge)
Agent          - Single autonomous AI unit (model + tools + instructions)
Team           - Multiple agents coordinated by a leader (route/broadcast/tasks modes)
Workflow       - Pipeline-based execution (Step, Parallel, Condition, Loop, Router)
AgentOS        - FastAPI runtime for deploying agents as production APIs
LearningMachine - Persistent learning across sessions (profiles, memory, knowledge)

Quick Reference

快速参考

1. Basic Agent with Tools

1. 使用工具的基本 Agent

python
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.yfinance import YFinanceTools

agent = Agent(
    name="Finance Agent",
    model=Gemini(id="gemini-3-flash-preview"),
    tools=[YFinanceTools()],
    add_datetime_to_context=True,
    markdown=True,
)

agent.print_response("Give me a quick brief on NVIDIA", stream=True)
python
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.yfinance import YFinanceTools

agent = Agent(
    name="Finance Agent",
    model=Gemini(id="gemini-3-flash-preview"),
    tools=[YFinanceTools()],
    add_datetime_to_context=True,
    markdown=True,
)

agent.print_response("Give me a quick brief on NVIDIA", stream=True)

2. Structured Output with Pydantic

2. 使用 Pydantic 实现结构化输出

python
from typing import List, Optional
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.yfinance import YFinanceTools
from pydantic import BaseModel, Field

class StockAnalysis(BaseModel):
    ticker: str = Field(..., description="Stock ticker symbol")
    company_name: str = Field(..., description="Full company name")
    current_price: float = Field(..., description="Current price in USD")
    summary: str = Field(..., description="One-line summary")
    key_drivers: List[str] = Field(..., description="2-3 key growth drivers")
    recommendation: str = Field(..., description="Buy, Hold, or Sell")

agent = Agent(
    model=Gemini(id="gemini-3-flash-preview"),
    tools=[YFinanceTools()],
    output_schema=StockAnalysis,
)

response = agent.run("Analyze NVIDIA")
analysis: StockAnalysis = response.content
print(f"{analysis.company_name}: {analysis.recommendation}")
python
from typing import List, Optional
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.yfinance import YFinanceTools
from pydantic import BaseModel, Field

class StockAnalysis(BaseModel):
    ticker: str = Field(..., description="Stock ticker symbol")
    company_name: str = Field(..., description="Full company name")
    current_price: float = Field(..., description="Current price in USD")
    summary: str = Field(..., description="One-line summary")
    key_drivers: List[str] = Field(..., description="2-3 key growth drivers")
    recommendation: str = Field(..., description="Buy, Hold, or Sell")

agent = Agent(
    model=Gemini(id="gemini-3-flash-preview"),
    tools=[YFinanceTools()],
    output_schema=StockAnalysis,
)

response = agent.run("Analyze NVIDIA")
analysis: StockAnalysis = response.content
print(f"{analysis.company_name}: {analysis.recommendation}")

3. Agent with Storage (Session Persistence)

3. 带 Storage 的 Agent(会话持久化)

python
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.google import Gemini

agent = Agent(
    model=Gemini(id="gemini-3-flash-preview"),
    db=SqliteDb(db_file="tmp/agents.db"),
    add_history_to_context=True,
    num_history_runs=5,
    markdown=True,
)
python
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.google import Gemini

agent = Agent(
    model=Gemini(id="gemini-3-flash-preview"),
    db=SqliteDb(db_file="tmp/agents.db"),
    add_history_to_context=True,
    num_history_runs=5,
    markdown=True,
)

Same session_id = continuous conversation across runs

Same session_id = continuous conversation across runs

agent.print_response("Analyze NVDA", session_id="my-session", stream=True) agent.print_response("Compare that to Tesla", session_id="my-session", stream=True)
undefined
agent.print_response("Analyze NVDA", session_id="my-session", stream=True) agent.print_response("Compare that to Tesla", session_id="my-session", stream=True)
undefined

4. Agent with Memory (User Preferences)

4. 带 Memory 的 Agent(用户偏好)

python
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.memory import MemoryManager
from agno.models.google import Gemini

db = SqliteDb(db_file="tmp/agents.db")

agent = Agent(
    model=Gemini(id="gemini-3-flash-preview"),
    db=db,
    memory_manager=MemoryManager(
        model=Gemini(id="gemini-3-flash-preview"),
        db=db,
    ),
    enable_agentic_memory=True,  # Agent decides when to store/recall
    markdown=True,
)
python
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.memory import MemoryManager
from agno.models.google import Gemini

db = SqliteDb(db_file="tmp/agents.db")

agent = Agent(
    model=Gemini(id="gemini-3-flash-preview"),
    db=db,
    memory_manager=MemoryManager(
        model=Gemini(id="gemini-3-flash-preview"),
        db=db,
    ),
    enable_agentic_memory=True,  # Agent decides when to store/recall
    markdown=True,
)

Agent remembers user preferences across sessions

Agent remembers user preferences across sessions

agent.print_response( "I'm interested in AI stocks. My risk tolerance is moderate.", user_id="alice@example.com", stream=True, )
undefined
agent.print_response( "I'm interested in AI stocks. My risk tolerance is moderate.", user_id="alice@example.com", stream=True, )
undefined

5. Multi-Agent Team

5. Multi-Agent 团队

python
from agno.agent import Agent
from agno.models.google import Gemini
from agno.team.team import Team
from agno.tools.yfinance import YFinanceTools

bull = Agent(
    name="Bull Analyst",
    role="Make the investment case FOR a stock",
    model=Gemini(id="gemini-3-flash-preview"),
    tools=[YFinanceTools()],
)

bear = Agent(
    name="Bear Analyst",
    role="Make the investment case AGAINST a stock",
    model=Gemini(id="gemini-3-flash-preview"),
    tools=[YFinanceTools()],
)

team = Team(
    name="Investment Research",
    model=Gemini(id="gemini-3-flash-preview"),
    members=[bull, bear],
    instructions=["Get both perspectives, then synthesize a balanced recommendation"],
    show_members_responses=True,
    markdown=True,
)

team.print_response("Should I invest in NVIDIA?", stream=True)
python
from agno.agent import Agent
from agno.models.google import Gemini
from agno.team.team import Team
from agno.tools.yfinance import YFinanceTools

bull = Agent(
    name="Bull Analyst",
    role="Make the investment case FOR a stock",
    model=Gemini(id="gemini-3-flash-preview"),
    tools=[YFinanceTools()],
)

bear = Agent(
    name="Bear Analyst",
    role="Make the investment case AGAINST a stock",
    model=Gemini(id="gemini-3-flash-preview"),
    tools=[YFinanceTools()],
)

team = Team(
    name="Investment Research",
    model=Gemini(id="gemini-3-flash-preview"),
    members=[bull, bear],
    instructions=["Get both perspectives, then synthesize a balanced recommendation"],
    show_members_responses=True,
    markdown=True,
)

team.print_response("Should I invest in NVIDIA?", stream=True)

6. Sequential Workflow

6. 顺序工作流

python
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.yfinance import YFinanceTools
from agno.workflow import Step, Workflow

data_agent = Agent(name="Data Gatherer", model=Gemini(id="gemini-3-flash-preview"), tools=[YFinanceTools()])
analyst = Agent(name="Analyst", model=Gemini(id="gemini-3-flash-preview"))
writer = Agent(name="Report Writer", model=Gemini(id="gemini-3-flash-preview"), markdown=True)

workflow = Workflow(
    name="Research Pipeline",
    steps=[
        Step(name="Gather Data", agent=data_agent),
        Step(name="Analyze", agent=analyst),
        Step(name="Write Report", agent=writer),
    ],
)

workflow.print_response("Analyze NVIDIA for investment", stream=True)
python
from agno.agent import Agent
from agno.models.google import Gemini
from agno.tools.yfinance import YFinanceTools
from agno.workflow import Step, Workflow

data_agent = Agent(name="Data Gatherer", model=Gemini(id="gemini-3-flash-preview"), tools=[YFinanceTools()])
analyst = Agent(name="Analyst", model=Gemini(id="gemini-3-flash-preview"))
writer = Agent(name="Report Writer", model=Gemini(id="gemini-3-flash-preview"), markdown=True)

workflow = Workflow(
    name="Research Pipeline",
    steps=[
        Step(name="Gather Data", agent=data_agent),
        Step(name="Analyze", agent=analyst),
        Step(name="Write Report", agent=writer),
    ],
)

workflow.print_response("Analyze NVIDIA for investment", stream=True)

7. MCP Server Integration (stdio)

7. MCP Server 集成(stdio)

python
import asyncio
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.mcp import MCPTools

async def run_agent(message: str) -> None:
    async with MCPTools(command="uvx mcp-server-git") as mcp_tools:
        agent = Agent(model=Claude(id="claude-sonnet-4-5-20250929"), tools=[mcp_tools])
        await agent.aprint_response(message, stream=True)

asyncio.run(run_agent("What is the license for this project?"))
python
import asyncio
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.mcp import MCPTools

async def run_agent(message: str) -> None:
    async with MCPTools(command="uvx mcp-server-git") as mcp_tools:
        agent = Agent(model=Claude(id="claude-sonnet-4-5-20250929"), tools=[mcp_tools])
        await agent.aprint_response(message, stream=True)

asyncio.run(run_agent("What is the license for this project?"))

8. MCP Server (Streamable HTTP)

8. MCP Server(Streamable HTTP)

python
import asyncio
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.mcp import MCPTools

async def run_agent(message: str) -> None:
    async with MCPTools(
        transport="streamable-http",
        url="https://docs.agno.com/mcp",
    ) as mcp_tools:
        agent = Agent(model=Claude(id="claude-sonnet-4-5-20250929"), tools=[mcp_tools], markdown=True)
        await agent.aprint_response(message, stream=True)

asyncio.run(run_agent("What is Agno?"))
python
import asyncio
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.mcp import MCPTools

async def run_agent(message: str) -> None:
    async with MCPTools(
        transport="streamable-http",
        url="https://docs.agno.com/mcp",
    ) as mcp_tools:
        agent = Agent(model=Claude(id="claude-sonnet-4-5-20250929"), tools=[mcp_tools], markdown=True)
        await agent.aprint_response(message, stream=True)

asyncio.run(run_agent("What is Agno?"))

9. Multiple MCP Servers

9. 多个 MCP Server

python
import asyncio
from os import getenv
from agno.agent import Agent
from agno.tools.mcp import MultiMCPTools

async def run_agent(message: str) -> None:
    mcp_tools = MultiMCPTools(
        commands=["npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt"],
        urls=["http://localhost:8000/mcp"],
        urls_transports=["streamable-http"],
        timeout_seconds=30,
    )
    await mcp_tools.connect()
    agent = Agent(tools=[mcp_tools], markdown=True)
    await agent.aprint_response(message, stream=True)
    await mcp_tools.close()

asyncio.run(run_agent("Find listings in Barcelona"))
python
import asyncio
from os import getenv
from agno.agent import Agent
from agno.tools.mcp import MultiMCPTools

async def run_agent(message: str) -> None:
    mcp_tools = MultiMCPTools(
        commands=["npx -y @openbnb/mcp-server-airbnb --ignore-robots-txt"],
        urls=["http://localhost:8000/mcp"],
        urls_transports=["streamable-http"],
        timeout_seconds=30,
    )
    await mcp_tools.connect()
    agent = Agent(tools=[mcp_tools], markdown=True)
    await agent.aprint_response(message, stream=True)
    await mcp_tools.close()

asyncio.run(run_agent("Find listings in Barcelona"))

10. LearningMachine (Persistent Learning)

10. LearningMachine(持久化学习)

python
from agno.agent import Agent
from agno.db.postgres import PostgresDb
from agno.learn import LearningMachine, LearningMode, UserProfileConfig
from agno.models.openai import OpenAIResponses

db = PostgresDb(db_url="postgresql+psycopg://ai:ai@localhost:5532/ai")

agent = Agent(
    model=OpenAIResponses(id="gpt-5.2"),
    db=db,
    learning=LearningMachine(
        user_profile=UserProfileConfig(mode=LearningMode.ALWAYS),
    ),
    markdown=True,
)

agent.print_response("Hi! I'm Alice, call me Ali.", user_id="alice@example.com", stream=True)
python
from agno.agent import Agent
from agno.db.postgres import PostgresDb
from agno.learn import LearningMachine, LearningMode, UserProfileConfig
from agno.models.openai import OpenAIResponses

db = PostgresDb(db_url="postgresql+psycopg://ai:ai@localhost:5532/ai")

agent = Agent(
    model=OpenAIResponses(id="gpt-5.2"),
    db=db,
    learning=LearningMachine(
        user_profile=UserProfileConfig(mode=LearningMode.ALWAYS),
    ),
    markdown=True,
)

agent.print_response("Hi! I'm Alice, call me Ali.", user_id="alice@example.com", stream=True)

Profile fields (name, preferred_name) captured automatically

Profile fields (name, preferred_name) captured automatically

undefined
undefined

Key Patterns

关键模式

Pattern: MCP Connection Lifecycle

模式:MCP 连接生命周期

Always close MCP connections. Use async context managers or try/finally:
python
undefined
始终关闭 MCP 连接。使用 async context manager 或 try/finally:
python
undefined

Preferred: context manager

Preferred: context manager

async with MCPTools(command="uvx mcp-server-git") as tools: agent = Agent(tools=[tools]) await agent.aprint_response("query")
async with MCPTools(command="uvx mcp-server-git") as tools: agent = Agent(tools=[tools]) await agent.aprint_response("query")

Alternative: manual lifecycle

Alternative: manual lifecycle

tools = MCPTools(command="uvx mcp-server-git") await tools.connect() try: agent = Agent(tools=[tools]) await agent.aprint_response("query") finally: await tools.close()
undefined
tools = MCPTools(command="uvx mcp-server-git") await tools.connect() try: agent = Agent(tools=[tools]) await agent.aprint_response("query") finally: await tools.close()
undefined

Pattern: Production Database (PostgreSQL)

模式:生产数据库(PostgreSQL)

python
from agno.db.postgres import PostgresDb
db = PostgresDb(db_url="postgresql+psycopg://user:pass@localhost:5432/agno")
agent = Agent(db=db, add_history_to_context=True)
python
from agno.db.postgres import PostgresDb
db = PostgresDb(db_url="postgresql+psycopg://user:pass@localhost:5432/agno")
agent = Agent(db=db, add_history_to_context=True)

Pattern: Debug Mode

模式:调试模式

python
agent = Agent(debug_mode=True)  # Detailed logs of messages, tools, tokens
python
agent = Agent(debug_mode=True)  # Detailed logs of messages, tools, tokens

Pattern: Custom Tools

模式:自定义工具

python
from agno.tools.decorator import tool

@tool
def get_weather(city: str) -> str:
    """Get current weather for a city."""
    return f"Weather in {city}: 72F, sunny"

agent = Agent(tools=[get_weather])
python
from agno.tools.decorator import tool

@tool
def get_weather(city: str) -> str:
    """Get current weather for a city."""
    return f"Weather in {city}: 72F, sunny"

agent = Agent(tools=[get_weather])

Important Rules

重要规则

  • Never create agents in loops - reuse agents for performance
  • Use
    output_schema
    for structured responses (not free-form parsing)
  • PostgreSQL for production, SQLite only for development
  • Both sync and async - all public methods have async variants (prefix with
    a
    )
  • Always close MCP connections - use try/finally or async context managers
  • Enable
    debug_mode=True
    when troubleshooting
  • 绝不要在循环中创建 Agent——复用 Agent 以提升性能
  • 使用
    output_schema
    实现结构化响应(不要依赖自由格式解析)
  • 生产环境使用 PostgreSQL,SQLite 仅用于开发
  • 同步和异步方式都支持——所有公开方法都有 async 变体(前缀为
    a
    )
  • 始终关闭 MCP 连接——使用 try/finally 或 async context manager
  • 排查问题时启用
    debug_mode=True

Reference Files

参考文件

Detailed documentation is available in
references/
:
  • agents.md - Agent parameters, configuration, tools, memory, knowledge, guardrails
  • teams.md - Team modes (route/broadcast/tasks), member coordination
  • workflows.md - Step types (Step, Parallel, Condition, Loop, Router)
  • mcp.md - MCP integration (stdio, SSE, Streamable HTTP), MultiMCPTools
  • tools.md - Built-in tools list, custom tool creation, tool hooks
  • learning.md - LearningMachine stores (profile, memory, session, knowledge, entity)
  • models.md - Supported model providers and configuration
references/
中提供了详细文档:
  • agents.md - Agent 参数、配置、tools、memory、knowledge 和 guardrails
  • teams.md - Team 模式(route/broadcast/tasks)、成员协调
  • workflows.md - Step 类型(Step、Parallel、Condition、Loop、Router)
  • mcp.md - MCP 集成(stdio、SSE、Streamable HTTP)、MultiMCPTools
  • tools.md - 内置 tools 列表、自定义 tool 创建、tool hooks
  • learning.md - LearningMachine stores(profile、memory、session、knowledge、entity)
  • models.md - 支持的模型提供商和配置

Resources

资源