← Volver al módulo AG01

Lab AG01: Agentes con Claude SDK y Agno

Tiempo estimado: 45-60 minutos

Paso 1: Instalar dependencias

Instala los dos SDKs y configura tu API key:

pip install anthropic agno

Configura tu clave de API de Anthropic:

export ANTHROPIC_API_KEY="sk-ant-..."
Necesitas una cuenta en console.anthropic.com. El tier gratuito incluye creditos para empezar.

Paso 2: Construir agente con Claude SDK (~20 lineas)

Crea un fichero agent_claude.py con 3 tools: search_kb, create_ticket y send_notification.

import anthropic, json

client = anthropic.Anthropic()

tools = [
    {"name": "search_kb", "description": "Busca en la base de conocimiento",
     "input_schema": {"type": "object", "properties": {"query": {"type": "string"}}, "required": ["query"]}},
    {"name": "create_ticket", "description": "Crea un ticket de soporte",
     "input_schema": {"type": "object", "properties": {"title": {"type": "string"}, "priority": {"type": "string"}}, "required": ["title"]}},
    {"name": "send_notification", "description": "Envia notificacion al equipo",
     "input_schema": {"type": "object", "properties": {"message": {"type": "string"}}, "required": ["message"]}}
]

def handle_tool(name, input):
    if name == "search_kb": return f"Resultado KB: documento sobre '{input['query']}' encontrado."
    if name == "create_ticket": return f"Ticket '{input['title']}' creado (prioridad: {input.get('priority','media')})."
    if name == "send_notification": return f"Notificacion enviada: {input['message']}"

def run(prompt):
    messages = [{"role": "user", "content": prompt}]
    while True:
        resp = client.messages.create(model="claude-sonnet-4-20250514",
            max_tokens=1024, tools=tools, messages=messages)
        if resp.stop_reason == "tool_use":
            tool_block = next(b for b in resp.content if b.type == "tool_use")
            result = handle_tool(tool_block.name, tool_block.input)
            messages.append({"role": "assistant", "content": resp.content})
            messages.append({"role": "user", "content": [
                {"type": "tool_result", "tool_use_id": tool_block.id, "content": result}]})
        else:
            return next(b.text for b in resp.content if hasattr(b, "text"))

# Prueba con 5 preguntas
print(run("Busca info sobre politica de devoluciones"))

Prueba con estas 5 preguntas:

  1. "Busca info sobre politica de devoluciones"
  2. "Crea un ticket urgente: servidor caido"
  3. "Notifica al equipo que el deploy esta listo"
  4. "Busca como resetear password y crea ticket si no hay doc"
  5. "Busca errores recientes, crea ticket y notifica al equipo"
Las preguntas 4 y 5 requieren que el agente encadene varias tools de forma autonoma. Observa como el loop while True maneja la secuencia.

Paso 3: Construir el mismo agente con Agno (~5 lineas)

Crea un fichero agent_agno.py con las mismas 3 tools:

from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.tools import tool

@tool
def search_kb(query: str) -> str:
    """Busca en la base de conocimiento."""
    return f"Resultado KB: documento sobre '{query}' encontrado."

@tool
def create_ticket(title: str, priority: str = "media") -> str:
    """Crea un ticket de soporte."""
    return f"Ticket '{title}' creado (prioridad: {priority})."

@tool
def send_notification(message: str) -> str:
    """Envia notificacion al equipo."""
    return f"Notificacion enviada: {message}"

agent = Agent(
    model=Claude(id="claude-sonnet-4-20250514"),
    tools=[search_kb, create_ticket, send_notification],
    markdown=True
)

# Prueba con las mismas 5 preguntas
agent.print_response("Busca info sobre politica de devoluciones")

Ejecuta las mismas 5 preguntas del Paso 2 y compara resultados.

Observa: el agente funcional se define en 5 lineas (Agent + model + tools). Agno abstrae el loop, el parsing de tools y el manejo de respuestas.

Paso 4: Escribe tu comparativa

Crea un documento con esta tabla comparativa basada en tu experiencia:

No hay respuesta correcta. Claude SDK = mas control y estabilidad. Agno = mas velocidad y flexibilidad. La decision depende de tu caso de uso.

Checklist de entrega

Hacer quiz AG01 →