메인 콘텐츠로 건너뛰기
OpenTelemetry (OTEL)을 사용하면 Weave에서 Agno 에이전트와 도구 호출을 트레이스할 수 있습니다. Agno는 공유 메모리, 지식, 추론을 갖춘 멀티 에이전트 시스템을 구축하기 위한 Python 프레임워크입니다. 가볍고 모델에 구애받지 않으며 높은 성능을 제공하도록 설계되었고, 텍스트, 이미지, 오디오, 비디오 처리 등 멀티모달 기능을 지원합니다. 이 가이드에서는 OTEL을 사용해 Agno 에이전트와 도구 호출을 트레이스하고, Weave에서 해당 트레이스를 시각화하는 방법을 설명합니다. 필요한 의존성을 설치하고, 데이터를 Weave로 전송하도록 OTEL 트레이서를 설정하고, Agno 에이전트와 도구를 계측하는 방법을 알아봅니다.
Weave의 OTEL 트레이싱에 대한 자세한 내용은 Send OTEL Traces to Weave를 참조하세요.

사전 요구 사항

  1. 필요한 의존성을 설치합니다:
    pip install agno openinference-instrumentation-agno opentelemetry-sdk opentelemetry-exporter-otlp-proto-http
    
  2. OpenAI API 키(또는 다른 모델 제공업체의 API 키)를 환경 변수로 설정합니다:
    export OPENAI_API_KEY=your_api_key_here
    
  3. Weave에서 OTEL 트레이싱 구성.

Weave에서 OTEL 트레이싱 설정

Agno에서 Weave로 트레이스를 전송하려면 TracerProviderOTLPSpanExporter를 사용해 OTEL을 설정하세요. exporter가 인증 및 프로젝트 식별에 필요한 올바른 엔드포인트와 HTTP 헤더를 사용하도록 설정하세요.

필수 설정

  • Endpoint: https://trace.wandb.ai/otel/v1/traces
  • 헤더:
    • Authorization: W&B API 키를 사용한 Basic 인증
    • project_id: W&B entity/프로젝트 이름(예: myteam/myproject)

Agno에서 Weave로 OTEL 트레이스 보내기

사전 요구 사항을 완료한 후에는 Agno에서 Weave로 OTEL 트레이스를 보낼 수 있습니다. 다음 코드 스니펫은 Agno 애플리케이션에서 Weave로 OTEL 트레이스를 보내도록 OTLP span exporter와 tracer provider를 설정하는 방법을 보여줍니다.
Weave가 Agno를 올바르게 트레이스할 수 있도록, 코드에서 Agno 컴포넌트를 사용하기 전에 전역 tracer provider를 설정하세요.
# tracing.py

import base64
import os
from openinference.instrumentation.agno import AgnoInstrumentor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk import trace as trace_sdk
from opentelemetry.sdk.trace.export import SimpleSpanProcessor
from opentelemetry import trace

# 환경 변수에서 민감한 값 로드
WANDB_BASE_URL = "https://trace.wandb.ai"
# W&B entity/프로젝트 이름 (예: "myteam/myproject")
PROJECT_ID = os.environ.get("WANDB_PROJECT_ID")  
# https://wandb.ai/settings 에서 W&B API 키 생성
WANDB_API_KEY = os.environ.get("WANDB_API_KEY")  

OTEL_EXPORTER_OTLP_ENDPOINT = f"{WANDB_BASE_URL}/otel/v1/traces"
AUTH = base64.b64encode(f"api:{WANDB_API_KEY}".encode()).decode()

OTEL_EXPORTER_OTLP_HEADERS = {
    "Authorization": f"Basic {AUTH}",
    "project_id": PROJECT_ID,
}

# 엔드포인트와 헤더로 OTLP 스팬 익스포터 생성
exporter = OTLPSpanExporter(
    endpoint=OTEL_EXPORTER_OTLP_ENDPOINT,
    headers=OTEL_EXPORTER_OTLP_HEADERS,
)

# 트레이서 프로바이더 생성 및 익스포터 추가
tracer_provider = trace_sdk.TracerProvider()
tracer_provider.add_span_processor(SimpleSpanProcessor(exporter))

# Agno 임포트/사용 전에 전역 트레이서 프로바이더 설정
trace.set_tracer_provider(tracer_provider)

OTEL로 Agno 에이전트 트레이스하기

트레이서 프로바이더를 설정한 후에는 자동 트레이싱으로 Agno 에이전트를 생성하고 실행할 수 있습니다. 다음 예제에서는 도구가 포함된 단순한 에이전트를 만드는 방법을 보여줍니다:
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.yfinance import YFinanceTools

from dotenv import load_dotenv
load_dotenv()

# 위에서 생성한 파일에서 AgnoInstrumentor 로드
from tracing import AgnoInstrumentor

# Agno 계측 시작
AgnoInstrumentor().instrument()

# 금융 에이전트 생성
finance_agent = Agent(
    name="Finance Agent",
    model=OpenAIChat(id="gpt-4o-mini"),
    tools=[
        YFinanceTools(
            stock_price=True,
            analyst_recommendations=True,
            company_info=True,
            company_news=True
        )
    ],
    instructions=["Use tables to display data"],
    show_tool_calls=True,
    markdown=True,
)

# 에이전트 사용 - 자동으로 트레이스됩니다
finance_agent.print_response(
    "What is the current stock price of Apple and what are the latest analyst recommendations?",
    stream=True
)
모든 에이전트 오퍼레이션은 자동으로 트레이스되어 Weave로 전송되므로, 실행 흐름, 모델 호출, 추론 단계, 도구 호출을 시각화할 수 있습니다.
Agno 에이전트의 트레이스 시각화

OTEL로 Agno 도구 트레이스하기

Agno에서 도구를 정의하고 사용하면 이러한 도구 호출도 트레이스에 캡처됩니다. OTEL 인테그레이션은 에이전트의 추론 과정과 개별 도구 실행을 모두 자동으로 계측하여 에이전트 동작을 종합적으로 볼 수 있는 뷰를 제공합니다. 다음은 여러 도구를 사용하는 예시입니다:
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.yfinance import YFinanceTools

from dotenv import load_dotenv
load_dotenv()

# 위에서 생성한 파일에서 AgnoInstrumentor 로드
from tracing import AgnoInstrumentor

# Agno 계측 시작
AgnoInstrumentor().instrument()

# 여러 도구를 사용하는 에이전트 생성
research_agent = Agent(
    name="Research Agent",
    model=OpenAIChat(id="gpt-4o-mini"),
    tools=[
        DuckDuckGoTools(),
        YFinanceTools(stock_price=True, company_info=True),
    ],
    instructions=[
        "최신 정보 및 금융 데이터 검색",
        "항상 출처 포함",
        "금융 데이터는 표로 표시"
    ],
    show_tool_calls=True,
    markdown=True,
)

# 에이전트 사용 - 도구 호출이 트레이스됨
research_agent.print_response(
    "Tesla의 최근 실적과 뉴스를 조사하세요. 주가와 최근 동향을 포함하세요.",
    stream=True
)
Agno 도구 호출에 대한 트레이스 시각화

OTEL로 멀티 에이전트 팀 트레이스하기

Agno의 강력한 멀티 에이전트 아키텍처를 사용하면 서로 협업하고 컨텍스트를 공유할 수 있는 에이전트 팀을 만들 수 있습니다. 이러한 팀 상호작용도 모두 트레이스됩니다:
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.duckduckgo import DuckDuckGoTools
from agno.tools.yfinance import YFinanceTools

from dotenv import load_dotenv
load_dotenv()

# tracin.py 파일에서 AgnoInstrumentor 로드
from tracing import AgnoInstrumentor

# Agno 계측 시작
AgnoInstrumentor().instrument()

# 전문화된 에이전트 생성
web_agent = Agent(
    name="Web Agent",
    role="Search the web for information",
    model=OpenAIChat(id="gpt-4o-mini"),
    tools=[DuckDuckGoTools()],
    instructions="Always include sources",
    show_tool_calls=True,
    markdown=True,
)

finance_agent = Agent(
    name="Finance Agent", 
    role="Get financial data",
    model=OpenAIChat(id="gpt-4o-mini"),
    tools=[YFinanceTools(stock_price=True, analyst_recommendations=True)],
    instructions="Use tables to display data",
    show_tool_calls=True,
    markdown=True,
)

# 에이전트 팀 생성
agent_team = Agent(
    team=[web_agent, finance_agent],
    model=OpenAIChat(id="gpt-4o"),
    instructions=["Always include sources", "Use tables to display data"],
    show_tool_calls=True,
    markdown=True,
)

# 팀 사용 - 모든 에이전트 상호작용이 트레이스됨
agent_team.print_response(
    "What's the current market sentiment around NVIDIA? Include both news analysis and financial metrics.",
    stream=True
)
이 멀티 에이전트 트레이스는 Weave에서 여러 에이전트가 어떻게 협업하는지 보여주며, 작업이 에이전트 팀 전체에 어떻게 분배되고 실행되는지 파악할 수 있게 해줍니다.
Agno 멀티 에이전트 팀의 트레이스 시각화

추론 에이전트 활용하기

Agno는 에이전트가 문제를 step-by-step으로 추론할 수 있도록 돕는 기본 제공 추론 기능을 제공합니다. 이러한 추론 과정은 트레이스에도 기록됩니다:
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.tools.reasoning import ReasoningTools
from agno.tools.yfinance import YFinanceTools

from dotenv import load_dotenv
load_dotenv()

# tracin.py 파일에서 AgnoInstrumentor 로드
from tracing import AgnoInstrumentor

# Agno 계측 시작
AgnoInstrumentor().instrument()

# 추론 에이전트 생성
reasoning_agent = Agent(
    name="Reasoning Finance Agent",
    model=OpenAIChat(id="gpt-4o"),
    tools=[
        ReasoningTools(add_instructions=True),
        YFinanceTools(
            stock_price=True,
            analyst_recommendations=True,
            company_info=True,
            company_news=True
        ),
    ],
    instructions="Use tables to display data and show your reasoning process",
    show_tool_calls=True,
    markdown=True,
)

# 추론 에이전트 사용
reasoning_agent.print_response(
    "Should I invest in Apple stock right now? Analyze the current situation and provide a reasoned recommendation.",
    stream=True
)
추론 step은 트레이스에서 확인할 수 있으며, 에이전트가 복잡한 문제를 어떻게 세분화하고 의사결정을 내리는지 보여줍니다.
Agno 추론 에이전트의 트레이스 시각화

메모리와 지식 활용하기

Agno 에이전트는 메모리를 유지하고 지식 베이스에 액세스할 수 있습니다. 이러한 오퍼레이션도 트레이스됩니다:
from agno.agent import Agent
from agno.models.openai import OpenAIChat
from agno.memory import AgentMemory
from agno.storage.sqlite import SqliteStorage

from dotenv import load_dotenv
load_dotenv()

# tracin.py 파일에서 AgnoInstrumentor 로드
from tracing import AgnoInstrumentor

# Agno 계측 시작
AgnoInstrumentor().instrument()


# 메모리가 있는 에이전트 생성
memory_agent = Agent(
    name="Memory Agent",
    model=OpenAIChat(id="gpt-4o-mini"),
    memory=AgentMemory(),
    storage=SqliteStorage(
        table_name="agent_sessions",
        db_file="agent_memory.db"
    ),
    instructions="Remember our conversation history",
    show_tool_calls=True,
    markdown=True,
)

# 첫 번째 상호작용
memory_agent.print_response("My name is John and I'm interested in AI investing strategies.")

# 두 번째 상호작용 - 에이전트가 이전 컨텍스트를 기억함
memory_agent.print_response("What specific AI companies would you recommend for my portfolio?")
Agno 메모리 사용에 대한 트레이스 시각화
대화 이력 저장 및 불러오기를 포함한 메모리 오퍼레이션은 트레이스에 표시됩니다.

더 알아보기