Tool Use en LLMs
Nivel intermedio — diseño de herramientas efectivas: nombres, descripciones y schemas que maximizan la precisión del agente.
El problema
Situación típica: tienes dos herramientas similares — get_user(id) obtiene usuario por ID numérico, find_user(email) busca por email. El agente recibe "busca al usuario juan@empresa.com" y llama a get_user("juan@empresa.com"), causando un error porque esperaba un número. // una herramienta mal diseñada causa errores en cascada: el agente recibe el error, intenta recuperarse, y a veces empeora la situación
El diseño de herramientas es donde el desarrollador tiene mayor control sobre el comportamiento del agente.
Los 3 elementos de una herramienta
El LLM decide qué herramienta usar basándose en: Nombre (descriptivo y distinguible), Descripción (explica cuándo y para qué usarla), y Schema (define exactamente qué parámetros acepta).
| Principio | Mal ejemplo | Buen ejemplo |
|---|---|---|
| Nombres únicos | get(), fetch() | get_user_by_id() |
| Descripciones específicas | "Obtiene datos" | "Obtiene el perfil completo de un usuario dado su ID numérico" |
| Un propósito | manage_user(action, ...) | create_user(), update_user(), delete_user() |
| Parámetros tipados | id: any | user_id: integer, minimum: 1 |
| Ejemplos en descripción | (ninguno) | "Formato: ORD-12345" |
5 tipos de herramientas
| Tipo | Ejemplos | Características |
|---|---|---|
| Lectura | search, get_user, query_db | Sin efectos secundarios, seguras de reintentar |
| Escritura | create_order, send_email | Efectos secundarios, requieren confirmación |
| Cálculo | calculator, convert_currency | Deterministas, rápidas |
| Externas | web_search, call_api | Latencia variable, pueden fallar |
| Sistema | read_file, execute_code | Privilegiadas, requieren sandboxing |
El troubleshooting de esta lección lo deja claro: un error no manejado en execute_tool puede tumbar todo el agente, y un mensaje de error puramente técnico deja al LLM sin poder recuperarse de forma útil. Diseñar una herramienta no termina en el schema — el mensaje de error que devuelve cuando algo falla es, para el modelo, información tan importante como el resultado exitoso.
Checklist de diseño
Nombre: get_user_by_email ✓ (acción clara, específica el método) — no get_user ✗ (ambiguo, ¿por qué campo?) ni user ✗ (no indica acción).
Descripción: "Busca un usuario por su dirección de email. Usa esta herramienta cuando el usuario proporcione un email. Para buscar por ID numérico, usa get_user_by_id." ✓ — no "Obtiene usuario" ✗ (vago) ni mezclar idiomas en la descripción ✗.
Schema: usa pattern, enum y format para acotar qué valores son válidos, con descripciones que incluyan un ejemplo concreto (ej. formato de email o de código de pedido).
Practica: herramientas para un agente de e-commerce
Construye un sistema de herramientas para un agente que pueda consultar productos, verificar inventario, y calcular costos de envío. Implementa 4 herramientas con características distintas: lectura simple, lectura con filtros, cálculo, y una que demuestre manejo de errores robusto (try/except con mensajes descriptivos para el LLM, no técnicos).