¿Cómo descubre el LLM qué herramientas tiene disponibles y cuándo usarlas?
En LangChain, el decorador @tool y la descripción de la función son el "prompt" que instruye al LLM sobre cuándo invocar cada herramienta. El patrón "Use this when..." es la clave.
La pregunta real
Cuando conectas herramientas a un agente LangChain — una que consulta disponibilidad en Google Calendar, otra que crea citas en el CRM, otra que busca en la base de datos — el LLM necesita saber dos cosas: que esas herramientas existen y cuándo invocarlas. ¿Cómo ocurre eso? No es magia: es texto. Específicamente, es la descripción que tú escribes para cada tool.
En LangChain, el decorador @tool registra la función como una herramienta disponible para el agente. El docstring de la función — su descripción — se convierte en el "prompt" que le dice al LLM cuándo y cómo invocarla. La calidad de esa descripción determina directamente la fiabilidad con la que el agente usará la herramienta.
El patrón "Use this when…" y el tool loop
La convención más efectiva para escribir descripciones de tools es empezar siempre con "Use this when…" seguido de las condiciones que deben cumplirse en el input del usuario. No describes lo que hace la función internamente — describes el intent del usuario que debería activarla.
from langchain.tools import tool
@tool
def check_availability(date: str, service_type: str) -> list[dict]:
"""Use this when the user asks about available appointment slots,
wants to know when the doctor is free, or asks about scheduling
availability for any service. Returns available time blocks.
Args:
date: Date in YYYY-MM-DD format (extract from user message)
service_type: Type of service requested (e.g. 'general', 'surgery')
"""
# Aquí va el código real: llamada a Google Calendar API, etc.
return google_calendar.get_slots(date, service_type)
@tool
def book_appointment(date: str, time: str, pet_name: str, service: str) -> dict:
"""Use this when the user wants to book, schedule, reserve, or
confirm an appointment. Only call this after confirming availability
with check_availability.
Args:
date: Date in YYYY-MM-DD format
time: Time in HH:MM format
pet_name: Name of the patient's pet
service: Type of service to book
"""
return crm.create_appointment(date, time, pet_name, service)El loop que sigue cuando el LLM recibe un mensaje con tools disponibles:
Input recibido
El LLM recibe: system prompt + historial + chunks RAG + input del usuario.
¿Necesito una tool?
El modelo evalúa si alguna de las tools disponibles aplica al intent detectado. Compara la query del usuario contra las descripciones de las tools.
Tool call
Si decide usar una tool, genera una llamada estructurada con los parámetros extraídos del mensaje del usuario (slots filling).
Ejecución real
Tu código Python/TypeScript ejecuta la función: llama a Google Calendar, consulta el CRM, ejecuta una query SQL. Sin LLM en este paso.
Re-inyección del output
El resultado de la tool se inyecta de vuelta en el contexto del LLM. El modelo evalúa si necesita otra tool o puede responder directamente.
Respuesta final
El LLM genera la respuesta para el usuario usando la información de la tool. El loop puede repetirse hasta 5 iteraciones.
Buenas vs. malas descripciones de tools
La diferencia entre una tool que el LLM invoca de forma fiable y una que ignora frecuentemente está casi siempre en la calidad de la descripción, no en la implementación técnica:
"Use this when the user asks about available appointment slots or wants to check the doctor's calendar."
Define el trigger condition: qué tiene que decir el usuario para que se invoque.
"Returns a list of available appointment slots from the Google Calendar API."
Describe el output interno, no cuándo usarla. El LLM no sabe qué query del usuario activa esta tool.
"Use this when the user wants to book, schedule, or reserve an appointment for their pet."
Enumera sinónimos del intent ("book", "schedule", "reserve") para mayor cobertura semántica.
"Creates a new appointment entry in the CRM database."
Describe la implementación técnica, no el intent del usuario. Inútil para el LLM como trigger.
Insight de arquitectura: un LLM por tool si lo necesitas
Una de las decisiones de diseño más poderosas (y menos conocidas) en sistemas multi-tool es que cada tool puede usar un LLM diferente internamente. El LLM que orquesta la conversación (el que decide qué tool llamar y cuándo) está completamente desacoplado del LLM que podría ejecutarse dentro de una tool específica.
Esto permite optimizar por caso de uso: un modelo rápido y económico para la extracción de slots en herramientas simples, un modelo más potente para el razonamiento principal de la conversación, y un modelo especializado para tareas que lo requieran (por ejemplo, un modelo con fine-tuning médico para clasificar síntomas en un bot veterinario).
Buena práctica adicional: mantén cada tool en un archivo separado. Un directorio tools/ con un archivo por herramienta hace el sistema más fácil de testear en aislamiento, más fácil de depurar cuando una tool falla y más fácil de documentar para el resto del equipo.
El tool loop puede repetirse hasta 5 iteraciones porque el LLM no sabe qué va a devolver una tool hasta que la ejecuta. En algunos flujos complejos (por ejemplo, verificar disponibilidad → reservar → enviar confirmación → actualizar CRM), son necesarias varias rondas de tool calls secuenciales antes de poder generar la respuesta final.
Resumen rápido
La descripción ES el prompt de la tool
El docstring de cada función decorada con @tool se convierte en la instrucción que el LLM usa para decidir cuándo invocarla. Empieza siempre con "Use this when…".
El tool loop puede repetirse hasta 5 veces
El LLM llama a la tool, recibe el output, lo procesa y decide si necesita otra tool o puede responder. Este ciclo se repite hasta alcanzar la respuesta final o el límite de iteraciones.
Tools y LLM orquestador son capas desacopladas
La tool ejecuta código real (API calls, queries SQL). No hay LLM dentro de la tool salvo que tú lo pongas explícitamente. Cada tool puede usar un modelo distinto al orquestador.
¿Quieres aplicar esto en tu equipo?
En Kuuli Technologies llevamos estas metodologías a equipos reales. Escríbenos si quieres una sesión de trabajo o una consultoría sobre agentes IA y SDD.