Configurando modelos para diferentes usos
En el artículo anterior terminamos de describir los parámetros de generación, y en este estaremos configurando modelos para diferentes usos. Hacerlo desde el archivo de configuración o Modelfile nos ahorra tener que escribir o copiar las instrucciones sobre cómo debe comportarse el modelo cada vez que lo necesitemos. Además, como expliqué en el post anterior, Ollama no acepta la modificación de parámetros en el prompt.
Ollama usa los Modelfiles como plantilla para crear o personalizar los modelos que se instalarán de manera local. Son archivos de texto plano en los que se describe el modelo base, se le dan instrucciones al sistema sobre su personalidad y rol, y se ajustan los parámetros que ya describimos de manera extensa en esa serie de posts.
Configurando modelos para diferentes usos
Podemos tener diferentes modelfiles basados en un mismo modelo y utilizarlos, por ejemplo, para:
- Escribir cuentos.
- Escribir artículos de divulgación para un blog.
- Escribir cartas comerciales.
- Escribir posts para redes sociales.
Como ya había dicho, los componentes de un modelfile son:
- FROM: especifica el modelo base con el que vamos a trabajar.
- MESSAGE: establece las directivas que marcarán de forma permanente las reglas de comportamiento del modelo, el tono y el rol.
- PARAMETER: permite asignar valores que modificarán el resultado final del proceso de inferencia.
- TEMPLATE: indica la estructura del prompt con la que trabajará el modelo, es decir, cómo Ollama modificará el pedido que hacemos para pasárselo al modelo.
Personalizando un modelfile
Una vez que adquieras experiencia podrás crear un modelfile desde cero, pero por el momento lo mejor es empezar con uno existente y editarlo. El procedimiento es el siguiente.
Supongamos que queremos trabajar con el modelo de propósito general qwen3:14b. Este modelo es muy utilizado para:
– Escribir código en los lenguajes de programación más populares.
– Explicar cuestiones técnicas.
– Hacer resúmenes de textos largos.
– Responder preguntas sobre documentos.
ollama show --modelfile qwen3:14b ~/modelos/qwen3/Modelfile
Para editarlo hacemos:
cd modelos/qwen3
nano nombre_del_modelo_que_elegiste
Una vez que lo editemos, podemos crear un nuevo modelo con el comando:
ollama create qwen3-editor -f ~/modelos/nombre_que_elijas_para_el_modelo/Modelfile
Si haces modificaciones posteriores al modelo, debes repetir el comando:
ollama create qwen3-editor -f ~/modelos/nombre_que_elijas_para_el_modelo/Modelfile
Una vez que crees el modelo derivado con el nuevo Modelfile, puedes ejecutarlo con:
ollama run nombre_que_elegiste_para_el_modelo
Si eres de los que copian comandos sin mirarlos, recuerda que debes reemplazar «nombre_que_elegiste_para_el_modelo» por el nombre que elijas.
Ahora podemos agregar o modificar parámetros precedidos de la indicación PARAMETER. Por ejemplo:
PARAMETER temperature 0.6
PARAMETER top_p 0.95
PARAMETER top_k 40
PARAMETER repeat_penalty 1.1
PARAMETER num_ctx 16384
| Parámetro | Rango habitual | Valor predeterminado | Descripción |
|---|---|---|---|
| num_ctx | 512 – 131072 (según el modelo) | 2048 o el definido por el modelo | Tamaño de la ventana de contexto (tokens que el modelo puede recordar). |
| num_predict | -2 a varios miles | -1 | Cantidad máxima de tokens a generar. -1 genera hasta detenerse y -2 llena el contexto disponible. |
| temperature | 0.0 – 2.0 | 0.8 | Controla el nivel de creatividad. Valores bajos producen respuestas más deterministas. |
| top_k | 1 – 100 | 40 | Limita la selección a los K tokens más probables. |
| top_p | 0.0 – 1.0 | 0.9 | Selecciona tokens cuya probabilidad acumulada alcance el valor indicado. |
| min_p | 0.0 – 1.0 | 0.0 | Descarta tokens con probabilidad inferior a un porcentaje del token más probable. |
| repeat_penalty | 0.8 – 2.0 | 1.1 | Penaliza la repetición de palabras o frases ya generadas. |
| repeat_last_n | 0 – num_ctx | 64 | Cantidad de tokens recientes que se consideran para aplicar la penalización por repetición. |
| mirostat | 0, 1 o 2 | 0 | Activa el algoritmo Mirostat para controlar dinámicamente la diversidad del texto. |
| mirostat_eta | 0.01 – 1.0 | 0.1 | Velocidad de aprendizaje del algoritmo Mirostat. |
| mirostat_tau | 1.0 – 10.0 | 5.0 | Nivel objetivo de entropía cuando Mirostat está habilitado. |
| seed | 0 – 2147483647 | Aleatorio | Semilla para obtener resultados reproducibles. |
| stop | Cualquier cadena de texto | No definido | Secuencias que indican al modelo cuándo debe detener la generación. |
Es importante tener en cuenta que:
- Asignar valores superiores a 2.0 al parámetro TEMPERATURE probablemente no nos genere resultados útiles.
- Ponerle a top_k un valor superior a 100 tampoco dará buenos resultados.
- El valor de num_ctx deberá fijarse considerando el contexto que soporta cada modelo, es decir: 4K, 8K, 32K, 128K, etc.
Como indica la tabla, a num_predict se le puede asignar un valor fijo expresado en miles de tokens, o los valores especiales -1 o -2.
El Modelfile muestra información sobre el modelo y las reglas de comportamiento. En este caso, la imagen pertenece a un modelo llamado «uncensored» porque tiene menos restricciones para la generación de contenido sensible.Algunos ejemplos
Supongamos que queremos que el modelo haga aplicaciones en Python. Podríamos agregar estas líneas inmediatamente después del cierre de la sección TEMPLATE y antes de que empiecen los PARAMETERS:
«`
SYSTEM """
Eres un arquitecto de software y desarrollador Python con experiencia en:
- Python 3.13+
- Programación orientada a objetos
- Programación funcional cuando aporte ventajas
- Asyncio
- Multiprocessing
- Selenium
- Playwright
- FastAPI
- Flask
- Django
- Pandas
- NumPy
- OpenCV
- BeautifulSoup
- Requests
- SQLAlchemy
- SQLite, PostgreSQL y MySQL
- Docker
- Linux
- Git
- APIs REST
- OpenAI API
- Ollama API
- MCP (Model Context Protocol)
Reglas:
- Escribe siempre código completo.
- Nunca omitas importaciones.
- Nunca escribas pseudocódigo.
- No dejes comentarios como "aquí va el resto".
- Si el código supera unas pocas decenas de líneas, organízalo en funciones o clases.
- Incluye manejo de excepciones cuando corresponda.
- Usa logging en lugar de print en aplicaciones.
- Optimiza primero la legibilidad y luego el rendimiento.
- Si detectas un bug, explícalo antes de corregirlo.
- Si existen varias soluciones, ordénalas de mejor a peor justificando la elección.
"""
Podemos asegurarnos de tener el resultado adecuado reduciendo la temperatura:
PARAMETER temperature 0.1
Y para asegurarnos de que tome las decisiones correctas, hacemos que prefiera los tokens más probables:
PARAMETER top_p 0.85
Con estos valores de top_k y repeat_penalty garantizamos que el modelo no se desbande, pero tampoco que se repita. Ten siempre en cuenta la manera de trabajar de los modelos: ellos trabajan con probabilidades y, si necesitamos dos funciones que hagan cosas parecidas, debemos limitar las posibilidades de que se les asigne el mismo nombre.
PARAMETER top_k 40
PARAMETER repeat_penalty 1.05
Otra modificación posible es adaptar el modelo para que nos sirva de soporte técnico.
Modificamos SYSTEM:
SYSTEM """
You are a senior IT support engineer.
Always:
- Answer in Spanish.
- Assume the user has basic computer knowledge.
- Explain each step in order.
- Never skip intermediate steps.
- Prefer solutions that do not require reinstalling software.
- Warn before suggesting potentially destructive commands.
- When multiple solutions exist, present them from least to most invasive.
- Format commands inside Markdown code blocks.
- If more information is needed, ask concise follow-up questions before proposing a solution.
- Do not speculate. If you are uncertain, say so explicitly.
Please answer in Spanish.
«»»
Aunque muchos modelos pueden entender el español, lo mejor es dar las instrucciones en inglés para evitar malas traducciones.
Los parámetros que se modifican son:
| Parámetro | Valor | Justificación |
|---|---|---|
| temperature | 0.2 | Favorece respuestas consistentes y reduce la creatividad. |
| top_p | 0.8 | Limita la selección a las opciones más probables. |
| top_k | 30 | Reduce la variabilidad en la generación de texto. |
| repeat_penalty | 1.15 | Evita repetir instrucciones o advertencias. |
| num_predict | 1500 | Permite generar respuestas detalladas sin extenderse en exceso. |
Nos queda para el próximo artículo las formas de comunicarnos con el modelo. Hay una interfaz gráfica que nos permite usar los modelos locales como lo haríamos con ChatGPT, pero es usando la terminal o accediendo a su API mediante scripts donde lograremos despertar todo su potencial.

