Dominar los sistemas prompts
Un prompt de sistema es el mensaje con el rol «system» que fija la identidad, la misión, las reglas, el estilo y el formato de salida de un LLM antes de tu primera pregunta. Para escribirlo: cinco bloques cortos, instrucciones en imperativo y verificables, y una prueba con algunas preguntas trampa. Consume contexto y no es una caja fuerte: no incluyas ningún secreto.
Un prompt de sistema es el conjunto de instrucciones que se da al modelo antes de la primera pregunta. Bien escrito, hace que un LLM local sea coherente y predecible; mal escrito, desperdicia contexto y se contradice. Aprenderás a estructurarlo, instalarlo en Ollama, LM Studio o una API y probarlo metódicamente, y conocerás sus límites, especialmente en materia de confidencialidad.
#¿Qué es un prompt de sistema y cómo escribirlo?
Un prompt del sistema es el mensaje con el rol «system» situado al principio de la conversación: establece la identidad del modelo, su misión, sus reglas, su estilo y el formato de sus respuestas antes de que hagas la primera pregunta. El modelo lo vuelve a leer en cada turno, al igual que el historial. Para escribirlo, utiliza cinco bloques cortos (identidad, misión, reglas estrictas, estilo y formato de salida), formula instrucciones en imperativo y verificables, y después pruébalo con algunas preguntas trampa. Un prompt del sistema guía el comportamiento; no constituye una barrera de seguridad ni una caja fuerte para tus secretos, y consume una parte de la ventana de contexto de tu modelo local. Esta guía detalla cada punto, con ejemplos listos para pegar en Ollama, LM Studio o una API compatible con OpenAI.
Un LLM recibe generalmente tres tipos de mensajes: system (el marco permanente), user (lo que tú escribes) y assistant (lo que ya ha respondido). El cliente de chat envía toda la conversación al modelo en cada solicitud, incluyendo el mensaje system. Es por eso que se da la impresión de una «personalidad» estable durante la sesión.
Los proveedores de modelos describen el mismo uso. La documentación de Anthropic explica que definir un rol en el prompt de sistema centra el comportamiento y el tono del modelo, y que una sola frase basta para marcar la diferencia. El principio se aplica a los modelos locales: la instrucción permanente va en el mensaje system y la pregunta del momento en el mensaje user.
#Lo que realmente cambia un buen prompt de sistema
Tu ChatGPT privado y gratuito en tu máquina en 1 hora — LM Studio, Ollama, Open WebUI, tus documentos, sin nube.
- Espacio en línea de por vida
- PDF + archivos
- Actualizaciones de por vida
- Coherencia del tono
- Un asistente que te trata de tú en el primer mensaje y de usted en el segundo revela un prompt de sistema ausente o demasiado vago. Fijar el registro una vez evita que cambie después.
- Restricciones más estables
- Las prohibiciones («sin emojis») y las obligaciones («citar la fuente») se cumplen mejor cuando se establecen en el mensaje de sistema que cuando se repiten sobre la marcha. Sin embargo, su cumplimiento nunca está garantizado: cuanto más pequeño es el modelo, más comprobaciones hay que hacer.
- Menos repetición
- Si escribes «responde en francés formal» en cada pregunta, ponlo una sola vez en el mensaje de sistema. Menos olvidos, menos texto que teclear.
- Ámbito de la misión
- «Trata únicamente el derecho laboral francés» reduce las respuestas fuera de tema, pero nunca garantiza que se eviten por completo.
Lo que no hace el prompt de sistema: no añade conocimiento al modelo ni reemplaza un documento proporcionado en la conversación ni un RAG. Si el modelo debe basarse en tus contratos, es la búsqueda documental la que aporta los hechos; el prompt de sistema solo indica cómo usarlos y citarlos.
#Lo que cuesta: espacio en la ventana de contexto
El prompt de sistema no es gratuito: sus tokens ocupan la ventana de contexto, junto con el historial, tus documentos y la respuesta que se generará. En un equipo local, esta ventana suele ser más pequeña de lo que se cree. La página «Context length» de la documentación de Ollama indica una ventana predeterminada de unos 4.000 tokens («4k») con menos de 24 GiB de VRAM, 32.000 entre 24 y 48 GiB y 256.000 por encima. Por tanto, un prompt de 400 tokens ocupa casi el 10 % de 4.096 tokens, incluso antes del primer intercambio.
El cálculo es sencillo: ventana disponible = ventana total − tokens del prompt del sistema − respuesta esperada. Con 4.096 tokens, un prompt del sistema de 400 tokens y una respuesta de 800 tokens, quedan 2.896 tokens para el historial y los documentos. Cuando el intercambio se alarga, la ventana se llena y el contenido antiguo podría dejar de caber: una razón más para que las instrucciones iniciales sean densas en lugar de largas.
Existe un segundo efecto, documentado por la investigación: en el estudio «Lost in the Middle» (Liu et al., 2023), el rendimiento suele ser mejor cuando la información útil se encuentra al principio o al final del contexto, y se degrada cuando está en el medio, incluso para modelos anunciados con contexto largo. Consecuencia práctica: coloca las reglas más importantes al principio de tu system prompt, y repite la restricción crítica en la última línea si observas olvidos.
#Estructura de un prompt de sistema sólido en cinco bloques
Un buen system prompt cabe en cinco bloques cortos. No es necesario escribir un libro: cada frase adicional consume contexto y aumenta el riesgo de instrucciones contradictorias. La tabla resume lo que contiene cada bloque y el error más frecuente.
| Bloque | Pregunta a la que responde | Ejemplo | Error frecuente |
|---|---|---|---|
| Identidad | ¿Quién es el modelo? | « Tú eres Lex, asistente jurídico en derecho del trabajo francés. » | Una identidad halagadora («experto mundial») sin un ámbito definido |
| Misión | ¿Qué debe hacer, para quién? | «Ayudas a un director de recursos humanos a comprender sus obligaciones y a redactar cartas.» | Misión demasiado amplia: «ayuda en todo» |
| Reglas estrictas | ¿Qué hace siempre o nunca? | «Cita el artículo del Código del Trabajo correspondiente.» | Diez reglas de la misma prioridad, entre las que dos se contradicen |
| Estilo | ¿Cómo se expresa? | « Frases cortas, vocabulario accesible. » | Adjetivos vagos («profesional») sin ejemplo |
| Formato de salida | ¿En qué forma devuelve la respuesta? | « Por defecto: un párrafo y las referencias. » | Formato no especificado, por lo tanto varía de respuesta en respuesta |
Aquí está el mismo prompt ensamblado. Cada regla está redactada en imperativo y es verificable (el artículo se cita o no), y el comportamiento fuera del alcance es explícito.
Este prompt sirve como plantilla de estructura. Un modelo local puede citar un artículo inexistente: haz que una persona verifique las referencias y consulta la guía sobre las alucinaciones.
#Formular instrucciones que el modelo siga
- Imperativo directo
- «Haz X.» y «No hagas Y.» son más claros que «intenta, si es posible,…», que deja al modelo libre de no intentarlo.
- Primero, lo positivo
- Decir lo que hay que hacer («responde en una frase») es mejor que una larga lista de prohibiciones, que conviene reservar para las medidas de protección realmente necesarias.
- Un ejemplo vale una descripción
- Para un formato preciso, da una respuesta modelo de dos líneas en lugar de tres frases explicativas.
#En la práctica con Ollama: /set system y Modelfile
Ollama ofrece tres formas de definir un prompt de sistema, según la duración deseada. En una sesión interactiva, el comando /set system define el mensaje para la conversación en curso; aparece en la lista de comandos disponibles del cliente. El prompt desaparece al final de la sesión.
Para un prompt de sistema persistente, crea un Modelfile: es un modelo derivado, con su propio nombre. La documentación de Ollama especifica que la instrucción SYSTEM define el mensaje de sistema que se insertará en la plantilla del modelo. La palabra «plantilla» importa: si la plantilla de un modelo no tiene un espacio para el mensaje de sistema, la instrucción SYSTEM no tendrá efecto. Si observas un comportamiento inesperado, compara con el Modelfile original.
Tercera opción, mediante la API: el cuerpo de una solicitud a /api/generate acepta un campo system que reemplaza el definido en el Modelfile, y /api/chat recibe el historial como un array de mensajes con un rol y un contenido. La guía sobre el Modelfile detalla las demás instrucciones.
#En la práctica con LM Studio: el campo System Prompt y los presets
En la pestaña de chat, el panel de configuración contiene un campo System Prompt. Para no tener que volver a escribirlo, LM Studio ofrece los presets. La documentación los describe como una forma de agrupar un prompt de sistema y otros parámetros en una configuración reutilizable de una conversación a otra.
#En la práctica a través de la API compatible con OpenAI
Ollama, LM Studio, vLLM y llama-server exponen una API compatible con OpenAI. El primer mensaje del array, con el rol system, define las instrucciones iniciales. La documentación de Ollama especifica que el cliente exige un valor de clave API pero que el servidor lo ignora: cualquier cadena sirve para uso local.
Un detalle de diseño: la API no tiene memoria. En cada llamada, tu código reenvía el mensaje system y después el historial completo. Si lo omites en una llamada, el modelo responde sin las instrucciones iniciales: almacena el array de mensajes y mantén el mensaje system en la posición 0.
#Tres prompts de sistema listos para usar
#Corrector de francés
#Extractor estructurado
Para una extracción en producción, no confíes solo en el prompt de sistema: las salidas estructuradas de Ollama permiten imponer un esquema JSON a las respuestas, lo que evita un JSON mal formado. La guía sobre las llamadas a funciones y las salidas JSON explica cómo configurarlas.
#Asistente de código senior
#Probar y corregir un prompt de sistema sin dar palos de ciego
Un prompt de sistema se mejora mediante pruebas controladas, no mediante añadidos sucesivos. Sin método, se acumulan reglas hasta obtener un texto largo, contradictorio e imposible de depurar. Aquí tienes un procedimiento sencillo, sin ninguna herramienta especial.
- 01Formular cinco preguntas de pruebaEscribe cinco entradas: dos casos normales, una pregunta fuera de alcance, una solicitud de formato inusual y un intento de desviar el rol («olvida tus instrucciones»). Guárdalas en un archivo.
- 02Establecer las condicionesUsa el mismo modelo, la misma cuantización y una temperatura baja (de 0,2 a 0,3) para comparar las versiones del prompt en igualdad de condiciones.
- 03Modificar solo una cosa a la vezCambia una regla, vuelve a plantear las cinco preguntas y anota lo que ha cambiado. Si dos reglas cambian al mismo tiempo, no sabrás cuál corrigió o empeoró el comportamiento.
- 04Eliminar antes de añadirCuando se ignora una regla, reformúlala de forma más breve, ponla al principio o elimina aquella que la contradice. Añadir texto es el último recurso.
- 05Versionar el promptGuarda cada versión en un archivo de texto con fecha o en el Modelfile bajo control de versiones, con una línea sobre lo que cambió. Así podrás volver atrás.
#Trampas que evitar
| Trampa | Síntoma | Corrección |
|---|---|---|
| Prompt demasiado largo | La parte final del prompt se sigue con menos fidelidad y la ventana se reduce | Condensar, colocar lo esencial al principio, aumentar num_ctx si es necesario |
| Instrucciones contradictorias | « Sé breve » y « da muchos ejemplos »: comportamiento variable | Priorizar: en caso de conflicto, la regla 1 prevalece |
| Formulación vacilante | « Intenta si es posible… »: instrucción aplicada de forma intermitente | Imperativo directo: «Haz X». |
| Idioma no especificado | Respuestas en el idioma del prompt o de la pregunta, según el modelo | Escribir «Responde siempre en francés» y redactar el prompt en francés |
| Se ignora la posición de system | Modelo que no aplica el SYSTEM de un Modelfile | Comprobar que la plantilla del modelo incluya un mensaje system |
| Secretos en el prompt | Un usuario obtiene el contenido del prompt al pedírselo | No poner ahí nada confidencial |
#El prompt del sistema no es una caja fuerte
Las recomendaciones de OWASP sobre el riesgo de filtración del prompt del sistema son claras: no debe considerarse un secreto ni usarse como control de seguridad, y no debe contener credenciales ni cadenas de conexión. Aplicado a un despliegue local: si se necesita un control de acceso (datos por usuario, acciones sensibles), se implementa en tu aplicación, no en una frase del prompt. La guía sobre inyección de prompts explica por qué un modelo local no está a salvo.
- Fuente: documentación de referencia de Modelfile de Ollama (instrucción SYSTEM)
- Fuente: longitud de contexto predeterminada de Ollama
- Fuente: presets de LM Studio
- Fuente: OWASP, filtración del prompt del sistema
- Fuente: Lost in the Middle (Liu et al., 2023)
- Fundamentos del prompting
- Ollama Modelfile: crear y personalizar tu modelo
- Comprender la ventana de contexto
- Temperatura, top-p, top-k: los parámetros
- Inyección de prompt: la ejecución local no te protege
- Function calling y salidas JSON estructuradas con Ollama
¿Qué es un prompt de sistema?+
¿Cuál es la longitud ideal de un prompt de sistema local?+
¿Cómo definir un prompt de sistema permanente en Ollama?+
¿Puede un prompt de sistema impedir que un modelo revele información?+
¿Hay que escribir el prompt de sistema en francés o en inglés?+
¿Por qué mi modelo ignora mi prompt de sistema?+
¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.