Llamada a Funciones (Function Calling / Tool Calling)
Protocolo técnico y estándar de interacción entre LLM y software externo. En lugar de texto libre, el modelo devuelve un JSON válido con el nombre de la función y argumentos tipados según el esquema JSON Schema, permitiendo al backend ejecutar acciones de manera determinista en APIs reales.
1. Visión general del concepto y problema sistémico
El modelo de lenguaje está encerrado en su propio contexto: no conoce la hora exacta actual, no puede retirar fondos de una cuenta o verificar el estado de un contenedor en Docker.
Sin un mecanismo de interacción con el código, el chatbot solo podría simular acciones, devolviendo texto vago: “He revisado su saldo, hay $50” (incluso si el saldo es $0).
Function Calling (Llamada a funciones o Tool Calling) transforma al generador de texto en un orquestador de sistemas. El modelo analiza el prompt, entiende que le faltan datos y en lugar de texto genera un JSON legible por máquina:
{
"name": "fetch_user_balance",
"arguments": "{\"account_id\": \"ACC-9481\"}"
}
Modelo mental: si LLM es el cerebro, Function Calling son los impulsos nerviosos que envían comandos a los músculos (su código y API) para ejecutar una acción física.
┌─────────────────────────────────────────────────────────────┐
│ ARQUITECTURA FUNCTION CALLING │
├─────────────────────────────────────────────────────────────┤
│ 1. SOLICITUD DEL USUARIO: │
│ «¿Cuál es el clima en Lviv?» │
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Solicitud a LLM (junto con el esquema) │
├─────────────────────────────────────────────────────────────┤
│ 2. RESPUESTA DE LLM (finish_reason: "tool_calls"): │
│ { "name": "get_weather", "args": { "city": "Lviv" } } │
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Backend ejecuta la solicitud API real │
├─────────────────────────────────────────────────────────────┤
│ 3. SU SERVIDOR ➔ OpenWeatherMap ➔ Recibe { temp: 18, rain: 0}│
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Envío del resultado de vuelta a LLM │
├─────────────────────────────────────────────────────────────┤
│ 4. RESPUESTA FINAL AL HUMANO: │
│ «En Lviv ahora hay +18°C, sin precipitaciones, ¡que tenga un buen día!» │
└─────────────────────────────────────────────────────────────┘
2. Taxonomía arquitectónica y modelo mental
Así es como se registra una herramienta en el estándar OpenAI / Anthropic Tool Calling:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "Bloquea la tarjeta del usuario 5501"}
],
"tools": [
{
"type": "function",
"function": {
"name": "block_payment_card",
"description": "Bloqueo seguro de la tarjeta bancaria del usuario en caso de pérdida",
"parameters": {
"type": "object",
"properties": {
"card_id": {
"type": "integer",
"description": "Identificador único de la tarjeta en el sistema"
},
"reason": {
"type": "string",
"enum": ["lost", "stolen", "fraud"],
"description": "Razón del bloqueo"
}
},
"required": ["card_id", "reason"]
}
}
}
],
"tool_choice": "auto"
}'
Lo que devuelve el modelo:
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "block_payment_card",
"arguments": "{\"card_id\": 5501, \"reason\": \"lost\"}"
}
}
]
}
3. Cuatro reglas de seguridad al trabajar con Function Calling
- Validación estricta de argumentos (Pydantic / Zod): Nunca confíe ciegamente en los argumentos del modelo JSON. Siempre analícelos a través de un esquema de validación antes de ejecutar una consulta SQL o retirar fondos.
- Puerta de control para acciones destructivas (Human-in-the-Loop): Si la función ejecuta una operación irreversible (
delete_database,transfer_funds), el backend debe detener la ejecución y solicitar la confirmación de una persona real. - Limitación del contexto de herramientas: No pase cientos de funciones al modelo al mismo tiempo. Esto diluye la atención (Attention Saturation) y aumenta la probabilidad de una llamada errónea. Utilice filtrado dinámico o MCP.
- Protección contra bucles infinitos (Infinite Tool Loop): Siempre establezca un límite estricto en la cantidad de llamadas a funciones consecutivas (por ejemplo, no más de 5 iteraciones por solicitud).
4. Escenarios prácticos de ingeniería en producción
Function Calling es el puente que conecta el mundo del modelado estadístico del lenguaje con el mundo determinista de la programación. Este mecanismo es el núcleo de todos los modernos AI-agents, servidores MCP y asistentes autónomos para desarrolladores.
FAQ: Llamada a Funciones (Function Calling / Tool Calling)
Términos relacionados
Esquemas de Herramientas (Tools & JSON Schema)
Estándar de descripción formalizada de interfaces de herramientas (Tools) para grandes modelos de lenguaje utilizando el estándar JSON Schema. Incluye el nombre de la función, una descripción detallada de su propósito, una lista de parámetros obligatorios y tipos de valores.
Agentes de IA (Agentes Autónomos)
Sistema autónomo basado en un modelo de lenguaje grande que no solo responde a mensajes, sino que planifica secuencias de acciones, utiliza herramientas externas (navegador, terminal, bases de datos) y ejecuta tareas complejas sin supervisión constante humana.
Ciclo de Acción del Agente (Thought ➔ Action ➔ Observation / ReAct)
Patrón algorítmico fundamental para el funcionamiento de agentes autónomos (conocido como ReAct: Reasoning + Acting). Consiste en un ciclo infinito de tres pasos: 1) Pensamiento (Thought) — análisis de la situación; 2) Acción (Action) — llamada a la herramienta; 3) Observación (Observation) — análisis del resultado y ajuste del plan.
MCP (Model Context Protocol)
Estándar abierto de Anthropic basado en JSON-RPC 2.0 para la conexión bidireccional unificada de asistentes de IA a herramientas externas, bases de datos y entornos de sistema.