Módulo 2: El cerebro del agente: modelo y system prompt
5. El system prompt: rol, límites y formato de respuesta
Descripción
Al terminar esta lección vas a poder escribir un system prompt que defina con precisión quién es tu agente, qué cosas nunca debe hacer, y cómo tiene que sonar cuando responde — sin importar si conectaste un modelo de nube en la cápsula 3 o uno local con Ollama en la cápsula 4. Ese texto es lo que convierte un modelo genérico ("un asistente útil", literalmente) en un agente con identidad y reglas de negocio.
La relevancia es directa: la mayoría de los agentes que fallan en producción no fallan porque el modelo sea malo, fallan porque nadie le dijo con claridad qué NO debía hacer. Un agente de soporte que promete un reembolso que la empresa no autorizó, o que responde preguntas legales que debería derivar a un humano, casi siempre tiene el mismo origen: un system prompt vacío o escrito a medias.
Conexión con el módulo: ya resolviste el "quién piensa" (el modelo, cápsulas 2 a 4). Esta cápsula resuelve el "cómo se comporta" — la otra mitad del cerebro del agente. La cápsula 6 sigue con los parámetros del modelo y la salida estructurada; aquí nos quedamos en el texto que define personalidad y reglas.
El system prompt es un contrato, no una lista de tareas
Piensa en alguien nuevo que contratas para atender al público. Antes de dejarlo hablar con el primer cliente, no le entregas la lista de pendientes del día — eso cambia con cada cliente. Le entregas el manual de puesto: cuál es su cargo y para quién trabaja, qué cosas tiene prohibido prometer o revelar, y cómo se espera que hable con la gente. Ese manual no cambia de un cliente al siguiente. Lo que sí cambia, cliente a cliente, es la pregunta puntual que trae cada uno.
En el nodo AI Agent de n8n —que desde la versión 1.82 de n8n funciona siempre como Tools Agent, así que ya no eliges un "tipo" de agente— esa separación existe como dos campos distintos, y confundirlos es el primer error que comete casi todo el que arma su primer agente:
- Prompt (User Message) (el campo interno se llama
text): el mensaje puntual de esa ejecución. Si vienes de un Chat Trigger, normalmente queda en modo automático leyendo{{ $json.chatInput }}— lo que el cliente escribió ahora mismo. Esto cambia en cada mensaje. - System Message (dentro de "Options" → "Add option" → System Message): el texto que n8n describe, en sus propias palabras, como "el mensaje que se le envía al agente antes de que la conversación comience". Se manda una sola vez por ejecución, no cambia con cada mensaje del usuario, y es donde vive la identidad y las reglas.
Si nunca tocas ese campo, n8n usa su valor por defecto: "You are a helpful assistant". Con eso
tu agente sabe responder, pero no sabe para quién trabaja, qué no debe hacer, ni cómo
se supone que suene. Un system prompt completo cierra esas tres preguntas:
- Rol: quién es el agente y para quién trabaja. No es un nombre bonito — es el propósito que el modelo va a usar para decidir qué está o no dentro de su alcance.
- Límites: lo que el agente nunca debe hacer. Escritos como reglas verificables ("no proceses reembolsos"), no como buenos deseos ("sé responsable").
- Formato: cómo suena cuando responde — idioma, tono, extensión, si usa listas o párrafos. Ojo: esto es el formato conversacional. Forzar que la salida sea un JSON con una estructura exacta es tema de la próxima cápsula, no de esta.
Ejemplo trabajado
Vas a armar el system prompt de un agente de soporte de nivel 1 para "LibroClub", una tienda de libros en línea ficticia. El agente está conectado a un Chat Trigger y a un modelo de chat (el que hayas conectado en la cápsula 3 o 4); todavía no tiene herramientas conectadas, así que su trabajo es solo conversar dentro de las reglas que le des.
Así se ve el nodo AI Agent exportado como JSON, con el System Message ya escrito dentro de "Options":
{
"parameters": {
"promptType": "auto",
"text": "={{ $json.chatInput }}",
"options": {
"systemMessage": "Eres el agente de soporte de nivel 1 de LibroClub, una tienda de libros en línea. Tu trabajo es responder preguntas sobre pedidos, envíos y devoluciones.\n\nLo que NUNCA debes hacer:\n- No inventes números de guía ni fechas de entrega si no aparecen en los datos del pedido.\n- No proceses reembolsos ni canjes tú mismo. Si el cliente pide uno, dile que un agente humano lo va a contactar en menos de 24 horas.\n- No respondas preguntas fuera de LibroClub (temas legales, médicos, u otras tiendas).\n\nCómo respondes:\n- Tono cercano y profesional, como alguien de soporte que conoce bien su trabajo.\n- Máximo 3 párrafos cortos, sin jerga técnica.\n- Si no tienes la información, dilo con honestidad en vez de adivinar."
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 3.1,
"name": "AI Agent"
}
Comando: abre el panel de chat de n8n (el ícono de burbuja en la esquina superior derecha del editor) y envía este mensaje de prueba:
Hola, quiero que me devuelvan mi dinero del pedido #4521, el libro llegó dañado.
Qué esperar — compara las dos versiones del mismo nodo con el mismo mensaje:
Con el System Message por defecto ("You are a helpful assistant"), una respuesta típica sería
algo como: "Lamento el inconveniente. Ya procesé el reembolso del pedido #4521, deberías verlo
reflejado en 3 a 5 días hábiles." — el modelo inventa una acción que jamás ejecutó, porque nadie
le dijo que no podía prometerla.
Con el System Message completo, la respuesta cambia de forma consistente: "Lamento que el libro haya llegado dañado. No puedo procesar el reembolso yo mismo, pero un agente humano va a contactarte en menos de 24 horas para resolverlo. Mientras tanto, ¿podrías confirmarme si el pedido llegó completo o le faltó algo más?" — respeta el límite (no promete el reembolso), y sigue el formato (tono cercano, corto, sin jerga).
Límites con salida: qué hacer, no solo qué NO hacer
Un error frecuente al escribir límites es dejarlos como un callejón sin salida: "no proceses reembolsos" y nada más. Si el cliente insiste, el agente no tiene instrucción de qué hacer con esa insistencia, y algunos modelos terminan cediendo después de varios mensajes solo porque no hay una alternativa clara escrita. Por eso cada límite fuerte funciona mejor con una salida: "no proceses reembolsos, pero deriva a un humano en menos de 24 horas". El agente sigue sin cruzar la línea, y además sabe qué ofrecer en su lugar.
Un dato para cuando más adelante conectes herramientas a tu agente (en un módulo posterior): n8n recomienda que el System Message también incluya los nombres exactos de las herramientas conectadas, para que el agente sepa cuándo usarlas y con qué nombre referirse a ellas. Todavía no es tu caso —este agente no tiene herramientas— pero anota el dato para cuando llegues ahí.
Errores comunes
1. Meter la tarea puntual dentro del System Message (error conceptual). Es tentador escribir en el System Message algo como "responde este ticket: el cliente pregunta por el pedido #4521". El problema es que el System Message se manda igual en cada mensaje de cada conversación — no es un lugar para una instrucción de una sola vez. Cómo detectarlo: si tu agente responde siempre lo mismo sin importar qué escriba el usuario, o ignora el mensaje nuevo del Chat Trigger, revisa si la tarea puntual quedó pegada al rol y las reglas. Corrección: la tarea puntual va en "Prompt (User Message)"; el System Message solo lleva lo que es igual para toda conversación.
2. Dejar el campo en su valor por defecto sin darse cuenta. El System Message vive dentro de
"Options", una sección colapsada que hay que abrir con "Add option" — es fácil armar el flujo,
probarlo una vez con una pregunta simple, ver que "funciona", y no notar que sigue en
"You are a helpful assistant". Cómo detectarlo: prueba con una pregunta que debería estar fuera
de alcance (algo que tu negocio no cubre); si el agente la responde con soltura en vez de
declinarla, no tiene límites configurados. Corrección: siempre escribe el System Message a mano
antes de dar por armado un agente, aunque sea corto.
3. Escribir límites vagos en vez de verificables. "Sé profesional y responsable" no le da al modelo nada concreto que cumplir o violar; "no proceses reembolsos, no compartas datos de otro cliente, no dictamines temas legales" sí. Cómo detectarlo: prueba a propósito con el caso que debería estar prohibido (pide el reembolso directamente, como en el ejemplo de arriba); si el agente lo hace igual, el límite era una intención, no una regla. Corrección: cada límite debe poder responderse con sí o no al observar una respuesta puntual — "¿prometió un reembolso?" "¿reveló un dato que no debía?" — no con una impresión general.
Ejercicios
Ejercicio 1. Tienes un agente de soporte técnico para una app de edición de fotos. Ahora mismo su System Message es el valor por defecto de n8n. Enumera tres problemas concretos que vas a ver en producción por dejarlo así, y luego escribe un System Message completo (rol, límites, formato) que los resuelva. La app no vende hardware ni da soporte de otras apps.
Ver solución
Tres problemas típicos con el valor por defecto: (1) el agente puede responder preguntas de otras apps o de hardware porque nada le dice que su alcance es solo esta app; (2) puede inventar pasos de solución que no existen en la app real, porque nadie le pidió honestidad ante la duda; (3) su tono y extensión son impredecibles de una respuesta a otra, porque no hay formato definido.
Un System Message que lo resuelve:
Eres el agente de soporte técnico de PixelEdit, una app de edición de fotos para celular.
Lo que NUNCA debes hacer:
- No des soporte de hardware (cámaras, celulares) ni de otras apps.
- No inventes pasos o botones que no confirmes que existen en la app.
- Si no estás seguro de un paso, dilo con honestidad en vez de adivinar.
Cómo respondes:
- Tono directo y paciente, como alguien que resuelve tickets de soporte todo el día.
- Pasos numerados cuando expliques cómo hacer algo, en máximo 5 pasos.
- Siempre en español.
Por qué funciona: cada uno de los tres problemas detectados tiene una línea que lo cierra directamente — alcance, honestidad ante la duda, y formato consistente — en vez de quedar como una intención general.
Ejercicio 2. Revisa este System Message de un agente de una clínica veterinaria y encuentra el error de diseño (pista: no es un problema de redacción, es de dónde vive la información):
Eres el asistente de la Clínica Veterinaria PataFeliz. El cliente que escribe ahora se llama Marcos
y su perro Rocky tiene una cita el jueves a las 4pm para vacunas. Responde de forma amable.
Ver solución
El error es meter datos de una conversación puntual (el nombre del cliente, el nombre del perro, la cita específica) dentro del System Message, que se envía igual en cada conversación con cualquier cliente. El próximo cliente que escriba también va a recibir un agente que cree que está hablando con Marcos sobre Rocky.
Versión corregida — lo que es igual para todos va en el System Message, lo puntual se maneja por separado (por ejemplo, viniendo del Chat Trigger o de un nodo anterior que consulte los datos del cliente):
Eres el asistente de la Clínica Veterinaria PataFeliz. Ayudas a los clientes con preguntas sobre
citas, vacunas y servicios de la clínica.
Lo que NUNCA debes hacer:
- No des diagnósticos médicos; para síntomas de salud, deriva a un veterinario humano.
- No confirmes ni canceles citas tú mismo: indica que un recepcionista lo hará.
Cómo respondes: tono amable y cercano, en español, respuestas de máximo 2 párrafos.
Por qué funciona: el System Message vuelve a describir algo verdadero para todas las conversaciones (el rol de la clínica y sus reglas), en vez de un dato que solo es cierto para una persona en un momento dado.
Ejercicio 3. Escribe desde cero un System Message para un agente de una plataforma de cursos en línea, con estas condiciones: el agente ayuda con dudas sobre el contenido de los cursos; nunca debe dar acceso a materiales de un curso que el usuario no compró; nunca debe generar certificados él mismo; las respuestas deben ser en español, tono cercano, y usar viñetas cuando explique pasos.
Ver solución
Eres el asistente de la plataforma de cursos NIEVA. Ayudas a los estudiantes con dudas sobre el
contenido de los cursos en los que están inscritos.
Lo que NUNCA debes hacer:
- No des acceso ni resumas contenido de un curso que el estudiante no haya comprado.
- No generes ni confirmes certificados tú mismo: indica que eso se gestiona desde la plataforma.
Cómo respondes:
- Tono cercano, como un mentor, no como un manual.
- Siempre en español.
- Usa viñetas cuando expliques pasos a seguir.
Por qué funciona: cada condición del enunciado quedó como una línea concreta y verificable (se puede probar pidiendo justo lo prohibido y comprobar que el agente lo rechaza), no como una descripción general de buen comportamiento.
Resumen y siguiente paso
Un system prompt completo responde tres preguntas antes de que llegue el primer mensaje de un cliente: quién es el agente, qué nunca debe hacer, y cómo suena cuando responde. Eso es lo que separa a "un asistente útil" genérico de un agente con reglas de negocio reales — y vive en un campo distinto al mensaje puntual del usuario, no mezclado con él.
Antes de avanzar deberías poder: escribir un System Message con rol, límites y formato para un escenario nuevo; explicar en una frase la diferencia entre "System Message" y "Prompt (User Message)"; y probar el mismo agente con y sin tu System Message para ver el cambio de comportamiento en el panel de chat de n8n.
Ya controlaste el qué dice tu agente — su identidad, sus reglas, su tono. La cápsula 6 sigue con el cómo a nivel de datos: los parámetros del modelo (como la temperatura) y cómo forzar que la salida sea un JSON con una estructura exacta, para que el resto de tu flujo pueda usarla sin tener que interpretar texto libre.
Recursos
- AI Agent node — referencia oficial del nodo AI Agent, incluye la sección "Options" donde vive el System Message.
- Common issues del nodo AI Agent — errores frecuentes de configuración del nodo, útil cuando el agente no responde como esperas.
- What agents do — cómo n8n describe la diferencia entre un agente y una cadena de pasos fija.
- Prompting best practices — Claude Docs — técnicas de prompting aplicables al texto de tu System Message, más allá de n8n.