En pocas palabras
Patrón en el que un LLM propone llamadas estructuradas a herramientas descritas mediante nombres, argumentos y propósito; la aplicación controla su validación y ejecución.
Qué problema resuelve
Limitación de un modelo que solo genera texto y no puede consultar estados reales ni actuar sobre sistemas externos por sí mismo.
Cuándo utilizarlo
Agentes, asistentes transaccionales y consultas a APIs. Ejemplo: interpretar una pregunta sobre una solicitud, pedir una consulta autorizada a su API y explicar el resultado.
De la idea a la práctica
Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.
En el Radar compartido: Trial (valoración de la edición aportada).
Cómo funciona
La aplicación entrega al modelo descripciones de herramientas. El modelo devuelve una propuesta de llamada; el ejecutor comprueba y realiza la operación, y devuelve el resultado para que el modelo continúe. Algunos proveedores también ofrecen herramientas ejecutadas en su infraestructura.
Ejemplo: contrato de consulta
Una definición de herramienta con el formato de herramientas de cliente de Anthropic:
{
"name": "consultar_estado",
"description": "Consultar el estado de una solicitud autorizada.",
"input_schema": {
"type": "object",
"properties": { "solicitud_id": { "type": "string" } },
"required": ["solicitud_id"],
"additionalProperties": false
}
}
La implementación debe comprobar el acceso al identificador recibido antes de consultar el sistema. Este contrato no ejecuta por sí mismo la función.
El bucle de herramientas
1. App → modelo: mensajes + definiciones de herramientas
2. Modelo → app: «llama a consultar_estado con {"solicitud_id": "S-881"}»
3. App: valida argumentos y permisos → ejecuta → obtiene resultado
4. App → modelo: resultado de la herramienta
5. Repetir 2–4 hasta que el modelo responde sin pedir herramientas
El modelo nunca ejecuta nada: propone. La aplicación decide si ejecutar, con qué identidad y con qué límites.
Implementación del bucle (SDK de Anthropic)
import json, anthropic
client = anthropic.Anthropic()
MAX_PASOS = 6
def responder(pregunta: str, usuario) -> str:
mensajes = [{"role": "user", "content": pregunta}]
for _ in range(MAX_PASOS):
r = client.messages.create(model="claude-sonnet-5-5", max_tokens=1024,
tools=HERRAMIENTAS, messages=mensajes)
mensajes.append({"role": "assistant", "content": r.content})
if r.stop_reason != "tool_use":
return "".join(b.text for b in r.content if b.type == "text")
resultados = []
for bloque in (b for b in r.content if b.type == "tool_use"):
try:
salida = ejecutar(bloque.name, bloque.input, usuario) # autoriza con el usuario real
resultados.append({"type": "tool_result", "tool_use_id": bloque.id,
"content": json.dumps(salida)})
except PermisoDenegado as e:
resultados.append({"type": "tool_result", "tool_use_id": bloque.id,
"content": f"Sin permiso: {e}", "is_error": True})
mensajes.append({"role": "user", "content": resultados})
return "No pude completar la consulta; un asesor revisará tu caso."
Los errores se devuelven al modelo como resultado (is_error) para que pueda corregir o explicar, en lugar de romper el flujo.
Diseño de herramientas
| Práctica | Ejemplo |
|---|---|
| Nombres y descripciones que digan cuándo usarla | «Úsala cuando el cliente pregunte por el estado de una solicitud ya enviada» |
| Pocas herramientas de alto nivel | resumen_credito en lugar de cinco llamadas a tablas |
| Parámetros con tipos estrictos y enums | canal: "app" | "web" | "sucursal" |
| Respuestas compactas | Campos necesarios, no el objeto completo de la base de datos |
| Errores accionables | «Formato de id inválido; debe ser S-NNN» |
Seguridad
- Autorización por el usuario real: la herramienta comprueba que ese usuario puede ver la solicitud recibida; nunca confíes en que el modelo «solo pedirá lo permitido».
- Herramientas de lectura y de escritura separadas; las de escritura con confirmación humana o reglas deterministas.
- Contenido devuelto como dato: resultados de herramientas pueden contener instrucciones maliciosas (correos, páginas web).
- Límites: número de pasos, tiempo total, coste y frecuencia por usuario.
- Idempotencia en acciones con efectos (idempotencia).
Para exponer herramientas a muchos clientes y agentes con un protocolo común, ver MCP.
Criterios de implementación
Utiliza una lista de herramientas permitidas, límites de tiempo y reintentos acotados. Para efectos externos, define idempotencia y la autorización adecuada a la operación. Registra llamadas y resultados sin exponer secretos y considera contenido malicioso en respuestas externas.
Continúa en las fuentes
Documentación oficial para verificar detalles y explorar más.