Ollama se ha establecido como una solución popular para ejecutar modelos de lenguaje de gran tamaño (Large Language Models, LLMs) de forma local en la propia hardware. Sin embargo, muchos usuarios se encuentran con problemas misteriosos al integrarlo con herramientas como OpenCode.
Las funciones de tipo “Tool Calls” no funcionan correctamente; los agentes pierden el contexto necesario para llevar a cabo sus tareas, y la generación de código queda muy por debajo de las expectativas. La causa de estos problemas suele no residir en el modelo en sí, sino en un parámetro a menudo pasado por alto: la ventana de contexto (Context Window).
El problema de la ventana de contexto: ¿por qué no son suficientes 4096 tokens?
Ollama utiliza por defecto una ventana de contexto que contiene únicamente 4096 tokens, independientemente del tamaño teórico del modelo. Este valor puede ser suficiente para interacciones de chat sencillas, pero se convierte en un obstáculo importante cuando se tratan tareas más complejas.
Para aplicaciones exigentes, como:
- Generación de código y refactorización
- Llamada a una herramienta que contiene varias funciones
- Flujos de trabajo basados en agentes
- Integración con OpenCode
Este estándar es, en la práctica, siempre demasiado reducido. El modelo no puede hacer uso de su contexto teórico (de 32k, 128k o incluso 256k tokens), ya que Ollama lo limita artificialmente.
Me pregunté por qué OpenCode no funcionaba en mi ordenador, aun cuando utilizaba varios modelos locales, y decidí investigar el asunto.
Ahora entiendo por qué al principio no tuve éxito, y por qué el sistema LLM no funcionaba del modo que esperaba. Estuve a punto de rendirme, pero finalmente he encontrado la solución.
Comprender y configurar la ventana de contexto
El contexto se controla a través del parámetro num_ctx. Con una simple orden, se puede verificar qué valor está activo en ese momento.
ollama ps
La publicación muestra claramente el problema.
NAME ID SIZE PROCESSOR CONTEXT UNTIL
qwen2.5-coder:7b dae161e27b0e 4.9 GB 100% GPU 4096 4 minutes from now
A pesar de contar con hardware de alta potencia y un modelo que, en teoría, podría procesar mucho más datos, solo están disponibles 4096 tokens.
Solución 1: El contexto global a través de systemd
La solución más elegante para lograr una configuración consistente es establecer una variable de entorno a nivel del sistema. De esta manera, todos los modelos se cargarán automáticamente con el contexto deseado.
sudo systemctl edit ollama.service
De forma alternativa, se puede editar directamente el archivo de sobrescritura (override file).
sudo nvim /etc/systemd/system/ollama.service.d/override.conf
El siguiente registro aumenta el contexto estándar a 16384 tokens:
[Service]
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_CONTEXT_LENGTH=16384"
Tras volver a cargar, el cambio se activa.
sudo systemctl daemon-reload
sudo systemctl restart ollama
La verificación con otro modelo demuestra el éxito.
NAME ID SIZE PROCESSOR CONTEXT UNTIL
qwen3-coder:30b 06c1097efce0 20 GB 100% GPU 16384 4 minutes from now
Solución 2: Ajuste manual del contexto en el chat
Para pruebas o uso ocasional, el contexto también se puede establecer directamente en el chat de Ollama.
ollama run qwen3:32b
En el chat:
/set parameter num_ctx 12288
Sugerencia: Con el comando /save qwen3-12k:32b, incluso es posible guardar una nueva variante del modelo utilizando ese contexto. La próxima vez que se utilice ollama list, dicha nueva variante estará disponible.
Solución 3: Archivos de modelo: el método profesional
La solución más sostenible son los archivos de configuración (model files). Su creación solo requiere unos segundos, no ocupan casi espacio en el disco y documentan perfectamente la configuración del sistema.
Archivo de modelo de ejemplo para Ministral-3 con un contexto de 64k:
FROM ministral-3:14b
PARAMETER num_ctx 65536
Crear:
ollama create ministral-3-64k:14b -f ministral-3-64k-14b.Modelfile
El resultado:
NAME ID SIZE PROCESSOR CONTEXT UNTIL
ministral-3-64k:14b e1befb46cf0d 20 GB 100% GPU 65536 4 minutes from now
Límites del hardware: ¿Qué es posible con una RTX 4090?
Un contexto más amplio no representa una posibilidad ilimitada, sino que está determinado por el presupuesto de hardware disponible. Es la GPU la que decide qué opciones son realmente viables y utilizables.
En mis pruebas con una RTX 4090 (24 GB de RAM), se obtuvieron los siguientes valores óptimos:
| Modelo | Contexto más relevante | Contexto Máximo | Uso de la VRAM |
|---|---|---|---|
| qwen2.5-coder:7b | 32k | 32k | 8,2 GB |
| ministral-3:14b | 64k | 256k | 20 GB |
| qwen3-coder:30b | 32k | 256k | 22 GB |
| deepseek-r1:32b | 10k | 128k | 22 GB |
| GPT-OSS:20B | 128k | 128k | 17 GB |
Un valor demasiado alto para num_ctx conduce a lo siguiente:
- Errores por falta de memoria.
- Respuestas extremadamente lentas.
- Función de llamada a herramientas inestables (Instable Tool Calling).
- Uso compartido de la CPU y la GPU en lugar de utilizar únicamente la GPU.
Ejemplo de un modelo sobrecargado:
NAME ID SIZE PROCESSOR CONTEXT UNTIL
qwen3:32b 030ee887880f 29 GB 22%/78% CPU/GPU 32768 4 minutes from now
La proporción de uso de la CPU indica que la GPU está sobrecargada; como resultado, se observan reducciones en el rendimiento.
¿Qué modelos funcionan con OpenCode?
Tras realizar pruebas exhaustivas, se ha determinado que tres modelos son especialmente adecuados.
qwen3-coder:30b – El especialista en programación
Con una ventana de contexto de 32k, este modelo funciona de manera óptima en la RTX 4090. El uso de las herramientas es fiable y la velocidad es impresionante. El resultado se acerca mucho a la sensación que ofrece Claude Code aunque Claude sigue siendo, por supuesto, un caso aparte.
devstral-small-2:24b: Un modelo versátil y de calidad
Basándose en un modelo predefinido, este programa crea archivos y los modifica según las especificaciones proporcionadas. Ocasionalmente se producen pequeños errores en el manejo del contexto (context handling), pero en general ofrece un rendimiento estable, incluso con hasta 32k elementos de contexto (contexts).
GPT-OSS:20B – El campeón de análisis
El verdadero punto destacado: una capacidad de análisis del contexto de 128k sin que se reduzca el rendimiento del sistema. Perfecto para revisiones de código, análisis de documentación y proyectos de gran envergadura. Incluso si las llamadas a los herramientas fallan, el modelo se corrige automáticamente.
El único inconveniente es que las tablas creadas con Markdown no se renderizaban de manera óptima en OpenCode; sin embargo, ya he encontrado una solución para este problema: Este plugin.
qwen2.5-coder:7b – No se recomienda
A pesar de contar con un contexto de 32k, el modelo es demasiado simplificado (con solo 7 mil millones de parámetros) para ser utilizado como una herramienta fiable para la generación de código en OpenCode.
Recomendación práctica para los usuarios de la RTX 4090
Mi recomendación actual, basada en mis propios ensayos, recae en estos modelos:
| Caso de Uso | Modelo | Contexto |
|---|---|---|
| Programación/Herramientas | Qwen3-Coder-30B | 16–32k |
| Revisión/Análisis | GPT-OSS-20B | 64–128k |
| Documentos extensos / Conocimientos | Ministral-14B | 32–64k |
Gestión de archivos de modelo: La organización lo es todo
Tiene su recompensa contar con un directorio dedicado específicamente a los archivos de modelo.
/mnt/sumpf/ai/opencode/ollama/modelfiles/
├── gpt-oss-64k-20b.Modelfile
├── gpt-oss-128k-20b.Modelfile
└── ministral-3-64k-14b.Modelfile
Por lo tanto, sigue siendo comprensible por qué se configuró un modelo de determinada manera, incluso después de varios meses.
Mantenimiento y actualizaciones
Durante las actualizaciones del sistema en Arch Linux, los cambios realizados en el archivo override.conf se mantienen automáticamente. En caso de modificaciones manuales, basta con asegurarse de que estas se hayan aplicado correctamente.
sudo systemctl daemon-reload
sudo systemctl restart ollama
Conclusión: el contexto no es una característica, sino un presupuesto
La «Ventana de Contexto» (Context Window) es ese elemento invisible que representa el «cuello de la botella» en muchos sistemas de tipo Ollama. Quienes deseen utilizar herramientas como OpenCode o similares deben modificar obligatoriamente el valor predeterminado de 4096 tokens.
Los tres métodos para resolver este problema —las variables de entorno a nivel global, los comandos de chat o los archivos de modelo— ofrecen la flexibilidad adecuada para cada escenario. Lo esencial es comprender que un contexto más amplio no constituye una característica ilimitada, sino que debe siempre considerarse en función del hardware disponible.
Con las configuraciones adecuadas, Ollama se convierte en una potente infraestructura de IA local capaz de respaldar de manera fiable incluso flujos de trabajo complejos.
Ahora también puedo permitir que uno de los modelos de lenguaje largo mencionados (LLM) acceda a mi wiki local, para que lo complete con información contextual que pueda ser procesada directamente. Es realmente asombroso lo que se puede hacer hoy en día. Aprendo algo nuevo cada día, y me divierte mucho.
¿Qué experiencias has tenido con Ollama y OpenCode? ¿Cuál de estos modelos funciona mejor para ti? No dudes en escribirme tus recomendaciones y consejos de configuración en los comentarios; estoy muy interesado en tu opinión.