Skip to content
BotServBotServ
OllamaFunction CallingToolsAPIJSON

Ollama Function Calling

Function Calling con Ollama. Define herramientas, salida JSON, limitaciones del modelo y ejemplos prácticos.

S

schutzgeist

3 min read
Ollama Function Calling

Funciones en Ollama (Function Calling)

Qué cubre este artículo

  • Qué es Function Calling.
  • Cómo definir herramientas en Ollama.
  • Modo JSON y force-output.
  • Qué modelos soportan funciones.
  • Ejemplo práctico en Python.

Introducción: Funciones en Ollama (Function Calling)

Function Calling permite que los modelos de lenguaje desencadenen acciones devolviendo parámetros estructurados para funciones externas. En lugar de formular la respuesta directamente, el modelo invoca una función herramienta, por ejemplo para consultar el clima, realizar un cálculo o buscar datos. En Ollama, Function Calling está disponible de forma limitada y normalmente requiere salida JSON y un modelo que entienda herramientas.

Este artículo explica cómo funciona Function Calling con Ollama.

Conceptos clave

  • Function Calling: El modelo invoca funciones externas.
  • Tool: Función externa conocida por el modelo.
  • Schema: Esquema JSON para los parámetros de la función.
  • JSON-Modus: Fuerza salida JSON válida.
  • force: Obliga al modelo a invocar una función específica.
  • OpenAI Tools: Estándar de la industria para Function Calling.
  • Ollama tools: Implementación específica de Ollama.
  • Stop/Start: Caracteres de control para JSON.

Soporte en Ollama

Function Calling en Ollama es relativamente nuevo y menos completo que en OpenAI. Algunos modelos como Qwen 2.5, Llama 3.1 y ciertas variantes de Mistral pueden usar herramientas. La API sigue el formato de herramientas de OpenAI.

Definir una herramienta

{
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Devuelve el clima actual para una ubicación.",
        "parameters": {
          "type": "object",
          "properties": {
            "location": {
              "type": "string",
              "description": "Ciudad o lugar"
            },
            "unit": {
              "type": "string",
              "enum": ["celsius", "fahrenheit"]
            }
          },
          "required": ["location"]
        }
      }
    }
  ]
}

Ejemplo en Python

import requests

url = "http://localhost:11434/api/chat"
payload = {
    "model": "qwen2.5:7b",
    "messages": [
        {"role": "user", "content": "¿Cuál es el clima en Berlín?"}
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Devuelve el clima actual.",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {"type": "string"},
                        "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
                    },
                    "required": ["location"]
                }
            }
        }
    ],
    "stream": False
}

response = requests.post(url, json=payload)
print(response.json())

Evaluar el resultado

El modelo responde con una estructura tool_calls:

{
  "message": {
    "role": "assistant",
    "tool_calls": [
      {
        "function": {
          "name": "get_weather",
          "arguments": {"location": "Berlín", "unit": "celsius"}
        }
      }
    ]
  }
}

Ejecutar la función

La aplicación ejecuta la función y añade el resultado al historial de conversación:

tool_result = get_weather("Berlín", "celsius")

payload["messages"].append({
    "role": "tool",
    "content": tool_result,
    "name": "get_weather"
})

response = requests.post(url, json=payload)
print(response.json()["message"]["content"])

Forzar modo JSON

{
  "format": "json"
}

Esto ayuda si el modelo envuelve el output JSON en bloques Markdown.

Modelfile de Ollama con herramientas

FROM qwen2.5:7b

PARAMETER temperature 0.1
SYSTEM "Eres un asistente que utiliza herramientas para completar tareas."

No todos los parámetros definen herramientas directamente, se pasan a través de la API.

Consejos

  • Elige un modelo que soporte herramientas.
  • Mantén los esquemas claros y simples.
  • Usa nombres descriptivos para las herramientas.
  • Valida siempre las respuestas.
  • Maneja errores si el modelo alucina.
  • Usa pocas herramientas por solicitud.
  • Define los tipos de parámetros explícitamente.

Errores comunes

  • El modelo no soporta herramientas: Los modelos pequeños o antiguos ignoran las herramientas.
  • Sin salida de herramienta: El modelo responde normalmente en lugar de invocar.
  • Errores JSON: El output debe poder parsearse.
  • Parámetros incorrectos: El esquema es demasiado complejo.
  • Múltiples invocaciones: La aplicación debe procesar varios llamados.
  • CORS/Red: El cliente no puede alcanzar la API.

Enlaces y recursos adicionales

Preguntas frecuentes: Funciones en Ollama

¿Qué modelos soportan Function Calling? Qwen 2.5, Llama 3.1 y algunas variantes de Mistral.

¿Debo definir herramientas en el Modelfile? No, se pasan a través de la API.

¿Puedo usar múltiples herramientas simultáneamente? Sí, dependiendo del modelo y la solicitud.

¿Cómo fuerzo salida JSON? Con "format": "json".

¿Funciona Function Calling en todos los modelos? No, solo en aquellos entrenados para esto.

Fuentes y lecturas adicionales

Resumen: Funciones en Ollama (Function Calling)

Function Calling permite que los modelos de Ollama invoquen herramientas externas. Las herramientas se definen como esquemas JSON y se pasan a través de la API. Modelos como Qwen 2.5 y Llama 3.1 soportan este modo. La aplicación debe recibir las invocaciones de herramientas, ejecutar las funciones y devolver los resultados. Con esquemas claros, salida JSON y validación, es posible implementar flujos de agentes incluso de forma local.

Volver al blog
Share:

Entradas relacionadas