Skip to Content
DocumentaciónGuíasLlamada a funciones

Llamada a funciones (Function Calling)

La llamada a funciones permite que los modelos seleccionen y llamen automáticamente funciones predefinidas según las necesidades del usuario, habilitando capacidades como consultas de datos, llamadas a APIs y ejecución de tareas.

Conceptos básicos

Flujo completo de la llamada a funciones:

  1. Definir herramientas — Describir las funciones disponibles y sus parámetros en la solicitud
  2. Decisión del modelo — El modelo determina si necesita llamar a una herramienta
  3. Retorno de la llamada — El modelo devuelve el nombre de la función y los parámetros
  4. Ejecutar la función — Usted ejecuta la función y obtiene el resultado
  5. Continuar la conversación — Enviar el resultado de vuelta al modelo para generar la respuesta final

Protocolo OpenAI

function_calling.py
from openai import OpenAI import json client = OpenAI( base_url="https://api.ofox.ai/v1", api_key="<su OFOXAI_API_KEY>" ) # 1. Definir herramientas tools = [{ "type": "function", "function": { "name": "get_weather", "description": "Obtener información meteorológica en tiempo real de una ciudad", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "Nombre de la ciudad, p. ej.: Madrid, Barcelona" }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"], "description": "Unidad de temperatura" } }, "required": ["city"] } } }] # 2. Enviar solicitud messages = [{"role": "user", "content": "¿Cómo está el clima hoy en Madrid?"}] response = client.chat.completions.create( model="openai/gpt-4o", messages=messages, tools=tools, tool_choice="auto" ) message = response.choices[0].message # 3. Procesar la llamada a herramienta if message.tool_calls: for tool_call in message.tool_calls: args = json.loads(tool_call.function.arguments) # 4. Ejecutar su función result = get_weather(args["city"]) # Su propia implementación # 5. Enviar el resultado de vuelta al modelo messages.append(message) messages.append({ "role": "tool", "tool_call_id": tool_call.id, "content": json.dumps(result) }) # Obtener la respuesta final final = client.chat.completions.create( model="openai/gpt-4o", messages=messages, tools=tools ) print(final.choices[0].message.content)

Protocolo Anthropic

Anthropic usa el parámetro tools con un formato ligeramente diferente:

anthropic_tools.py
import anthropic client = anthropic.Anthropic( base_url="https://api.ofox.ai/anthropic", api_key="<su OFOXAI_API_KEY>" ) response = client.messages.create( model="anthropic/claude-sonnet-4.5", max_tokens=1024, tools=[{ "name": "get_weather", "description": "Obtener información meteorológica en tiempo real de una ciudad", "input_schema": { "type": "object", "properties": { "city": {"type": "string", "description": "Nombre de la ciudad"} }, "required": ["city"] } }], messages=[{"role": "user", "content": "¿Cómo está el clima hoy en Madrid?"}] ) # Procesar el bloque de contenido tool_use for block in response.content: if block.type == "tool_use": print(f"Llamando herramienta: {block.name}, parámetros: {block.input}")

Llamadas a funciones en paralelo

El modelo puede devolver múltiples llamadas a herramientas en una sola respuesta; debería ejecutarlas en paralelo:

# El modelo puede solicitar múltiples llamadas a herramientas simultáneamente if message.tool_calls: # Ejecutar todas las llamadas a herramientas en paralelo import asyncio async def execute_tools(tool_calls): tasks = [] for tc in tool_calls: args = json.loads(tc.function.arguments) tasks.append(execute_function(tc.function.name, args)) return await asyncio.gather(*tasks)

Parámetro tool_choice

ValorDescripción
"auto"El modelo decide automáticamente si llamar herramientas (predeterminado)
"none"Prohibir llamadas a herramientas
"required"Forzar la llamada a herramientas
{"type": "function", "function": {"name": "xxx"}}Forzar la llamada a una herramienta específica

Modelos compatibles

Los siguientes modelos soportan Function Calling:

  • OpenAI: gpt-4o, gpt-4o-mini, o1, o3-mini
  • Anthropic: claude-opus-4, claude-sonnet-4, claude-3-5-haiku
  • Google: gemini-3.1-pro-preview, gemini-3-flash-preview, gemini-3-pro-preview
  • Otros: deepseek-chat, qwen-max, glm-4
Last updated on