전체 그래프
Agno

Agno Agent

aiagent-frameworkagno

상위: Agno

요약

Agno의 Agent는 LLM을 두뇌로, 도구와 인스트럭션을 가이드로 사용하는 자율적 AI 프로그램이다. 고정된 실행 순서가 아니라 모델이 런타임에 다음 행동을 결정한다. 도구, 메모리, 지식, 스토리지, 추론 등을 플러그인 방식으로 조합한다.

Agent의 구성 요소

from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.knowledge.pdf import PDFKnowledgeBase
from agno.vectordb.pgvector import PgVector
from agno.db.sqlite import SqliteDb

agent = Agent(
    # 두뇌: LLM 모델
    model=Claude(id="claude-sonnet-4-6"),

    # 도구: 외부 시스템과 상호작용
    tools=[DuckDuckGoTools()],

    # 인스트럭션: 행동 가이드
    instructions="Always cite sources. Use tables for data.",

    # 지식: RAG 기반 정보 검색
    knowledge=PDFKnowledgeBase(
        path="data/docs/",
        vector_db=PgVector(table_name="docs", db_url="..."),
    ),

    # 스토리지: 세션 상태 영속화
    db=SqliteDb(db_file="agent.db"),

    # 메모리: 대화 히스토리 컨텍스트
    add_history_to_context=True,
    num_history_runs=5,

    # 구조화된 출력
    response_model=MyPydanticModel,

    # 마크다운 포매팅
    markdown=True,
)

Model (두뇌)

23+ 모델 프로바이더를 플러그 앤 플레이로 교체할 수 있다. 코드 변경 없이 모델만 바꾸면 된다.

프로바이더클래스예시
OpenAIOpenAIResponses / OpenAIChatgpt-5.2, gpt-4o
AnthropicClaudeclaude-sonnet-4-6
GoogleGeminigemini-2.5-flash
OllamaOllamallama3, mistral
AWSBedrock다양한 모델
GroqGroqllama-3.3-70b, deepseek-r1
LiteLLMLiteLLM모든 프로바이더 게이트웨이

OpenAIResponses vs OpenAIChat: OpenAIResponses는 OpenAI Responses API 기반(최신), OpenAIChat은 Chat Completions API 기반. 최신 예시들은 OpenAIResponses를 사용한다.

Tools (도구)

도구는 에이전트가 외부 시스템과 상호작용하는 함수이다. 100+ 내장 통합을 제공하고, 커스텀 도구도 쉽게 추가할 수 있다.

from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.yfinance import YFinanceTools
from agno.tools.mcp import MCPTools

# 커스텀 도구
def get_weather(city: str) -> str:
    """Get weather for a city."""
    return f"The weather in {city} is sunny."

agent = Agent(
    tools=[
        DuckDuckGoTools(),
        YFinanceTools(),
        get_weather,  # 일반 Python 함수도 도구로 사용
    ],
)

주요 내장 도구: DuckDuckGo, YFinance, HackerNews, Newspaper, Wikipedia, Exa, Firecrawl, SQL, Shell, File, MCP 등.

Knowledge (지식)

벡터 DB 기반 RAG로 에이전트에 도메인 지식을 제공한다. Agentic RAG — 에이전트가 스스로 검색 쿼리를 결정한다.

지원 형식: PDF, CSV, JSON, Text, 웹페이지, Docx 등 지원 벡터 DB: PgVector, Pinecone, Qdrant, ChromaDB, LanceDB, Milvus 등

Memory (메모리)

  • Short-term: 세션 내 대화 히스토리 (add_history_to_context=True)
  • Long-term: DB에 영속화되는 사용자별 메모리 (MemoryTools)
  • 세션 간 컨텍스트 유지, 사용자 선호도 기억

Storage (스토리지)

세션 상태를 DB에 영속화한다. SQLite, PostgreSQL 지원. 에이전트 재시작 후에도 상태가 유지된다.

Structured Output (구조화된 출력)

Pydantic 모델을 response_model로 지정하면 에이전트가 해당 스키마에 맞는 JSON을 반환한다.

from pydantic import BaseModel

class StockAnalysis(BaseModel):
    symbol: str
    price: float
    recommendation: str

agent = Agent(
    model=OpenAIChat(id="gpt-4o"),
    response_model=StockAnalysis,
)

Session State

Agno Session State 참조. session_state 딕셔너리, RunContext, 인스트럭션 템플릿 참조, 도구에서 접근, Workflow 연동.


에이전트 실행

# 동기 실행
response = agent.run("Analyze AAPL stock")

# 스트리밍
agent.print_response("Analyze AAPL stock", stream=True)

# 비동기
response = await agent.arun("Analyze AAPL stock")

스트리밍과 비동기 실행을 1급(first-class)으로 지원한다. 에이전트는 실행 중 일시 중지 → 승인 대기 → 재개가 가능하다 (HITL).

RunEvent — 스트리밍 이벤트

stream_events=True로 에이전트 실행의 세부 이벤트를 모니터링한다:

RunEvent설명
run_started / run_completed실행 시작/완료
run_content응답 콘텐츠 청크
tool_call_started도구 호출 시작 (tool.tool_name, tool.tool_args)
tool_call_completed도구 호출 완료 (tool.result)
reasoning_started추론 시작
reasoning_content_delta추론 내용 청크
from agno.agent import Agent, RunEvent

for event in agent.run("Query", stream=True, stream_events=True):
    if event.event == RunEvent.tool_call_started:
        print(f"Tool: {event.tool.tool_name}")
    elif event.event == RunEvent.run_content:
        print(event.content, end="", flush=True)

RunOutput 메트릭

메트릭설명
metrics.reasoning_tokens추론 토큰
metrics.audio_input_tokens / audio_output_tokens오디오 토큰
metrics.cache_read_tokens / cache_write_tokens캐시 토큰

관련 개념