Modelos abiertos con tool calling: cuál elegir
Índice de contenidos
- Puntos clave
- ¿Por qué no todos los modelos abiertos usan herramientas igual?
- ¿Qué familias abiertas manejan mejor el tool calling?
- ¿Qué es el Berkeley Function-Calling Leaderboard?
- ¿Cómo influyen la plantilla y los parsers?
- ¿Cómo elegir según tu hardware?
- Preguntas frecuentes
- ¿Un modelo abierto pequeño puede usar herramientas mejor que uno grande de propósito general?
- ¿Necesito Internet para ejecutar un modelo abierto con herramientas?
- ¿Cómo sé qué modelo elegir hoy?
- Conclusión
- Fuentes
No todos los modelos abiertos llaman a herramientas igual de bien: la familia Qwen3, los Hermes de Nous, Llama 3.1 y Mistral destacan porque se entrenaron para ello. Para elegir, mira el Berkeley Function-Calling Leaderboard, comprueba que exista un parser para su plantilla y ajústalo a la VRAM de tu GPU.
Cualquier modelo de chat sabe conversar, pero solo algunos modelos abiertos emiten llamadas a herramientas fiables, y esa es la diferencia entre una demo y un agente que funciona. El tool calling (o llamada a funciones) es lo que permite a un modelo decidir cuándo consultar una API, una base de datos o una calculadora en lugar de inventarse la respuesta. En esta guía verás por qué no todos los modelos abiertos lo hacen igual de bien, qué familias destacan, cómo leer el Berkeley Function-Calling Leaderboard, por qué la plantilla y el parser importan tanto como el modelo, y cómo elegir según tu hardware. La misma explicación está disponible en inglés.
Puntos clave
- El tool calling depende del afinado, no del tamaño: un modelo de 8B entrenado para ello supera a uno de 70B que nunca vio ejemplos de herramientas.
- Cuatro familias abiertas destacan hoy: Qwen3 (Apache 2.0, del 0,6B al 235B-A22B), Nous Hermes 3 y 4, Llama 3.1 y Mistral.
- El Berkeley Function-Calling Leaderboard (BFCL), en su edición V4, es la referencia pública: puntúa las llamadas con coincidencia de árbol sintáctico (AST) y con ejecución real.
- La plantilla y el parser son críticos: cada familia envuelve la llamada de forma distinta, y servidores como vLLM traen un parser específico (
hermes,mistral,llama3_json) que debes activar. - Puedes probar el tool calling en tu propia máquina: Ollama admite herramientas desde el 25 de julio de 2024 y ejecuta Qwen3 sin trucos.
¿Por qué no todos los modelos abiertos usan herramientas igual?
Un modelo no "ejecuta" nada por sí mismo. Cuando le describes una función (nombre, descripción y parámetros), lo único que hace es generar un texto estructurado que dice "llama a esta función con estos argumentos"; tu código la ejecuta y le devuelve el resultado. Que ese texto salga bien formado, con el nombre correcto y los tipos correctos, depende por completo de si el modelo se afinó con ejemplos de ese formato.
Ahí está la trampa. Muchos modelos abiertos son excelentes conversando pero nunca vieron miles de ejemplos de llamadas a herramientas durante el entrenamiento, así que improvisan: se saltan un parámetro obligatorio, inventan una función que no existe o devuelven un JSON roto. Por eso un modelo pequeño entrenado explícitamente para herramientas, como un Qwen3 de 8B, suele ser más fiable en un agente que un modelo generalista mucho mayor.
La consecuencia práctica es que no debes elegir por el ranking general de un modelo, sino por su rendimiento concreto en tareas de función. Y para eso conviene mirar dos cosas: un benchmark específico y el soporte de tu servidor de inferencia.
¿Qué familias abiertas manejan mejor el tool calling?
Cuatro linajes concentran hoy casi todo el trabajo serio con herramientas en abierto. Qwen3, publicado el 28 de abril de 2025 bajo licencia Apache 2.0, es la apuesta más segura: lleva el tool calling integrado en su plantilla de chat, entrena razonamiento y herramientas a la vez, y va del 0,6B al gigante 235B-A22B (un modelo de expertos con 22B de parámetros activos). Su entrenamiento sobre unos 36 billones de tokens en 119 idiomas lo hace además muy competente en español.
Los Nous Hermes (3 y 4) parten de los pesos de Llama y añaden una alineación neutra y un formato de herramientas propio con etiquetas <tool_call>; son la opción cuando quieres un modelo muy dirigible. Llama 3.1 de Meta trae su propia plantilla de tool calling y fue de los primeros modelos abiertos que Ollama soportó. Y Mistral (desde Mistral 7B Instruct v0.3) ofrece function calling nativo con un token [TOOL_CALLS] y modelos compactos muy rápidos.
| Familia | Licencia | Formato de herramientas | Cuándo elegirla |
|---|---|---|---|
| Qwen3 | Apache 2.0 | Estilo Hermes (ChatML) | Opción por defecto, del portátil al servidor |
| Nous Hermes 3/4 | Comunidad Llama | <tool_call> propio |
Máxima obediencia al mensaje de sistema |
| Llama 3.1/3.3 | Comunidad Llama | Plantilla JSON de Llama | Ecosistema y soporte amplios |
| Mistral | Apache 2.0 | Token [TOOL_CALLS] |
Modelos pequeños y veloces |
Si vas a construir tu primer agente local, Qwen3 y Nous Hermes 3 son los dos nombres por los que empezar.
¿Qué es el Berkeley Function-Calling Leaderboard?
El Berkeley Function-Calling Leaderboard (BFCL), del equipo Gorilla de la Universidad de California en Berkeley, es el banco de pruebas público de referencia para medir cómo de bien un modelo llama a funciones. En lugar de fijarse en el conocimiento general, evalúa exactamente lo que necesita un agente: dado un mensaje y un conjunto de esquemas de función, ¿emite el modelo la llamada correcta, con los argumentos y los tipos correctos?
Su edición actual, V4, ha ido creciendo por capas. La primera versión introdujo la coincidencia de árbol sintáctico (AST); la segunda añadió funciones de empresa y aportadas por la comunidad; la tercera incorporó conversaciones de varios turnos; y la V4 suma una capa "agéntica" con una categoría de búsqueda web. Dentro mide casos simples, múltiples y paralelos, además de situaciones difíciles como que falte un parámetro (el modelo debería preguntar, no inventar) o que ninguna función encaje (debería reconocerlo).
Puntúa de dos formas complementarias. La coincidencia AST analiza la llamada como un árbol y comprueba nombre, parámetros, valores y tipos sin importar el orden; es rápida y determinista. La evaluación ejecutable ejecuta de verdad la llamada contra APIs reales o simuladas y compara el resultado; es más lenta, pero demuestra que la llamada funciona. Los modelos de la familia Qwen encabezan de forma sostenida la clasificación abierta, aunque conviene consultar la tabla en vivo antes de decidir, porque cambia con cada lanzamiento.
¿Cómo influyen la plantilla y los parsers?
Aquí está el detalle que hace fracasar a mucha gente: el modelo emite la llamada envuelta en un formato concreto, y tu servidor tiene que saber desenvolverla. Cada familia usa una convención distinta. Qwen y Hermes envuelven la llamada en etiquetas <tool_call> sobre la plantilla ChatML; Llama 3.1 usa su propia plantilla JSON; Mistral emite un token especial [TOOL_CALLS]. Si sirves el modelo con el parser equivocado, el texto de la llamada llega intacto como si fuera una respuesta normal y tu agente se rompe.
Por eso vLLM, el servidor de inferencia más habitual en producción, incluye un parser por familia que debes activar al arrancar. Para Qwen y Hermes se usa hermes; para Mistral, mistral; para Llama 3.1, llama3_json. La documentación resume la clave: para Qwen2.5 "la plantilla de chat ya incluye soporte de uso de herramientas al estilo Hermes, así que puedes usar el parser hermes".
# Servir Qwen3 con el parser de herramientas correcto (estilo Hermes)
vllm serve Qwen/Qwen3-8B \
--enable-auto-tool-choice \
--tool-call-parser hermes
# Para un modelo de Mistral, el parser cambia
vllm serve mistralai/Mistral-7B-Instruct-v0.3 \
--enable-auto-tool-choice \
--tool-call-parser mistral
En Ollama esto es más sencillo, porque el parser correcto ya viene activado para los modelos compatibles. Puedes pasar las funciones directamente y recuperar la llamada estructurada:
from ollama import chat
def temperatura(ciudad: str) -> str:
"""Devuelve la temperatura de una ciudad."""
return {"Madrid": "22C", "Londres": "15C"}.get(ciudad, "?")
resp = chat(
model="qwen3",
messages=[{"role": "user", "content": "¿Qué temperatura hace en Madrid?"}],
tools=[temperatura],
)
print(resp.message.tool_calls)
Si trabajas con salidas totalmente deterministas, este mismo problema se resuelve por la vía de la generación restringida; lo tienes explicado en function calling con Ollama en tu propia máquina.
¿Cómo elegir según tu hardware?
El tool calling no exige un modelo enorme, así que la pregunta real es cuánta VRAM tienes. Con una GPU de consumo o incluso una CPU con cuantización, un modelo de 7B a 8B basta para agentes con unas pocas herramientas bien definidas. A partir de ahí, subir de tamaño mejora sobre todo el razonamiento cuando hay que elegir entre muchas herramientas o encadenar varios pasos.
| VRAM disponible | Tamaño razonable | Ejemplos abiertos |
|---|---|---|
| 8-12 GB | 7B-8B cuantizado | Qwen3 8B, Hermes 3 8B, Mistral 7B |
| 16-24 GB | 14B-32B | Qwen3 14B o 32B |
| 48 GB o más | 70B o modelo de expertos | Llama 3.3 70B, Qwen3 235B-A22B |
La regla práctica: empieza pequeño, mide la fiabilidad de las llamadas en tus propias tareas y sube solo si te quedas corto. Un Qwen3 de 8B con Ollama es un punto de partida sensato, y desde ahí puedes escalar a vLLM cuando necesites servir el modelo en producción con alta concurrencia.
Preguntas frecuentes
¿Un modelo abierto pequeño puede usar herramientas mejor que uno grande de propósito general?
Sí, y ocurre a menudo. La fiabilidad al emitir una llamada bien formada depende del afinado, no del número de parámetros. Un modelo de 8B entrenado explícitamente para tool calling, como Qwen3 8B o Hermes 3 8B, suele acertar más que un modelo generalista mucho mayor que nunca practicó ese formato. Por eso el tamaño es lo último que deberías mirar.
¿Necesito Internet para ejecutar un modelo abierto con herramientas?
No para el modelo. Descargas los pesos una vez y el modelo corre entero en tu máquina con Ollama, vLLM o llama.cpp, sin enviar nada a una API de pago. Otra cosa son las herramientas: si una de ellas consulta una API externa, un buscador o el clima, esa función concreta sí necesitará red cuando tu código la ejecute.
¿Cómo sé qué modelo elegir hoy?
Cruza tres fuentes. Consulta el Berkeley Function-Calling Leaderboard para ver el rendimiento en función pura, comprueba en la biblioteca de Ollama o en Hugging Face que el modelo tenga soporte de herramientas, y confirma que tu servidor de inferencia trae un parser para su plantilla. Si las tres coinciden, prueba el modelo con tus propias tareas antes de comprometerte.
Conclusión
Elegir un modelo abierto con tool calling no va de buscar el más grande, sino el que fue entrenado para la tarea y que tu infraestructura sabe interpretar. Empieza por una de las cuatro familias sólidas (Qwen3, Hermes, Llama 3.1 o Mistral), consulta su posición en el Berkeley Function-Calling Leaderboard, asegúrate de servirlo con el parser correcto y ajústalo a tu VRAM. Con eso tendrás la base de un agente que llama a herramientas de forma fiable y que controlas de principio a fin.