24 de marzo de 2026

Claude Code: Cómo escribir prompts que realmente funcionen


En los artículos anteriores de esta serie vimos qué es Claude Code, cómo instalarlo y cómo manejar sesiones y memoria. En algún punto de esas lecturas probablemente notaste que casi todo lo que escribes para comunicarte con el agente es texto libre en lenguaje natural. Sin sintaxis especial, sin métodos, sin tipos. Solo texto.

Eso suena simple, pero tiene una trampa: cuando el medio de comunicación es el lenguaje natural, la calidad de lo que escribes importa mucho más de lo que intuitivamente esperarías. El mismo agente, con el mismo modelo, puede darte respuestas brillantes o respuestas mediocres dependiendo de cómo le formules la misma tarea. Y la diferencia entre las dos formulaciones puede ser más pequeña de lo que piensas.

En este artículo vamos a entender por qué ocurre eso, y qué puedes hacer al respecto. Empezamos desde los fundamentos: qué es exactamente un prompt, cómo lo procesa el modelo, qué son los tokens y por qué importan. Después pasamos a los tips concretos. Y terminamos con la pregunta que todo el mundo tiene pero pocos admiten haber buscado: ¿debo decirle "por favor" y "gracias" al modelo?

Sin más, vamos al tema.


¿Qué es exactamente un prompt?

En el contexto de los modelos de lenguaje, un prompt es toda la información que el modelo recibe como entrada antes de generar su respuesta. Cuando abres Claude Code y escribes "refactoriza esta clase", eso es un prompt. Pero en realidad el prompt es más que solo tu mensaje. Incluye todo lo que está en la ventana de contexto en ese momento:

  • Las instrucciones del sistema (cómo debe comportarse Claude Code)
  • El historial completo de la conversación: todos tus mensajes y todas las respuestas anteriores
  • El contenido del CLAUDE.md si está configurado
  • Los resultados de las herramientas ejecutadas (archivos leídos, comandos corridos)
  • Tu mensaje nuevo

Todo eso junto es el prompt que el modelo procesa cada vez que generas una respuesta. Esto explica algo que desconcierta a mucha gente al principio: por qué el agente "recuerda" cosas de mensajes anteriores. No las recuerda en ningún sentido humano. Es simplemente que todo el historial se incluye como parte del prompt en cada turno.

Un prompt no es solo lo que escribes en este momento. Es la foto completa de todo lo que el modelo puede ver. Entender eso cambia cómo piensas sobre la comunicación con el agente.

Cómo interpreta el modelo lo que escribes

Para escribir buenos prompts, conviene tener un modelo mental (aunque sea simplificado) de lo que hace el modelo cuando recibe tu texto. Porque no lo está "leyendo" de la misma forma en que lo harías tú.

El modelo no entiende: predice

Un modelo de lenguaje no comprende el significado de las palabras en el sentido semántico. Lo que hace es, fundamentalmente, predecir qué tokens tienen más probabilidad de venir a continuación dado todo lo que ha visto hasta ese momento. Fue entrenado con cantidades masivas de texto humano, y aprendió los patrones estadísticos de ese texto. Cuando le escribes, está buscando el patrón más probable de continuación.

Esto tiene implicaciones concretas:

  • Un prompt ambiguo activa múltiples patrones al mismo tiempo y el modelo tiene que "apostar" por uno. Si apostó mal, obtienes una respuesta que no querías.
  • El texto que produces regularmente en el mundo real tiende a estar escrito con ciertos patrones: preguntas claras, respuestas claras, instrucciones directas. Cuanto más se parezca tu prompt a esos patrones, más predecible (y útil) será la respuesta.
  • El contexto circundante influye en la interpretación de cada parte del prompt. La misma frase puede interpretarse diferente según qué hay antes y después de ella.

El modelo es sensible a la estructura, no solo al contenido

Aquí hay algo contraintuitivo: la forma en que organizas la información en tu prompt influye tanto como el contenido de esa información. No es lo mismo poner el contexto al principio que al final. No es lo mismo usar una lista que un párrafo. No es lo mismo pedir una cosa o pedirla y luego especificar exactamente cómo debe presentarse la respuesta.

Anthropic describe este concepto como "context engineering": no se trata solo de encontrar las palabras correctas, sino de configurar el conjunto óptimo de tokens que maximice la probabilidad de obtener el comportamiento deseado del modelo.


Tokens: la unidad de medida de todo

Antes de hablar de técnicas específicas de prompting, necesitamos hablar de tokens. Es el concepto técnico más importante para entender cómo funciona todo esto, y el que más se subestima en tutoriales básicos.

¿Qué es un token?

El modelo no procesa texto directamente: convierte el texto en números. Un token es la unidad básica de ese proceso: puede ser una palabra completa, parte de una palabra, o incluso un solo carácter, dependiendo del algoritmo de tokenización que use cada modelo.

Para hacer esto tangible, aquí está cómo se tokenizaría la frase "Refactoriza el método de pago":

Refactoriza  el  método  de  pago

Esa frase de 5 palabras se convierte en 7 tokens. Cada color representa un token diferente. Nota cómo "Refactoriza" se divide en tres piezas: el modelo nunca ha visto esa palabra tan frecuentemente como para tratarla como una unidad. En cambio, "método", "el", "de" y "pago" son tan comunes en texto en español que cada uno tiene su propio token.

Por qué los tokens importan en la práctica

Los tokens son la unidad de medida de casi todo en el mundo de los LLMs:

Factor Relación con los tokens
Ventana de contexto Se mide en tokens (Claude tiene ~200,000). Todo lo que cabe en el prompt se cuenta en tokens.
Costo por API Se factura por tokens de entrada + tokens de salida. Prompts largos e innecesarios cuestan dinero real.
Velocidad de respuesta Más tokens en el prompt ralentizan el tiempo de respuesta. En sesiones largas esto se acumula.
Calidad de la atención A medida que crece el contexto, el modelo pierde precisión para recuperar información de partes anteriores del prompt. Más tokens no siempre es mejor.

Regla empírica de conversión

Para español, la relación aproximada es: 100 tokens ≈ 65-75 palabras. El español genera más tokens por palabra que el inglés (así es, tu YouTuber o influencer favorito no escribe sus promts en inglés porque sea más cool, lo hace porque es más "barato"). La razón de esto es que el español tiene más morfología (conjugaciones, sufijos, acentos). Una clase Java de 200 líneas puede consumir entre 800 y 1,500 tokens dependiendo de la complejidad.

Herramienta útil: Si quieres ver exactamente cómo se tokeniza un texto, OpenAI tiene un tokenizador en línea en https://platform.openai.com/tokenizer. Es útil para calibrar el tamaño de tus prompts antes de usarlos en producción.

Anatomía de un buen prompt

La mayoría de los prompts efectivos tienen cuatro componentes. No todos son obligatorios siempre, pero conocerlos te ayuda a saber qué le falta a un prompt que no está dando los resultados que esperas.

Componente Qué es Ejemplo
Rol o persona Quién o qué debe ser el modelo en esta respuesta "Actúa como un senior developer con experiencia en Spring Security"
Tarea Qué necesitas que haga, expresado como acción concreta "Revisa esta implementación de JWT y señala vulnerabilidades de seguridad"
Contexto La información de fondo que necesita para hacer la tarea bien "El proyecto usa Spring Boot 3.2, los tokens expiran en 24h, y el cliente espera un JSON con campos 'token' y 'expires_at'"
Formato de salida Cómo quieres que presente la respuesta "Muestra primero los problemas críticos en una lista numerada, luego el código corregido"

Un prompt que incluye los cuatro componentes se ve así en la práctica:

> Actúa como un senior developer especializado en seguridad para Java.
 
  Revisa la siguiente implementación de autenticación JWT en nuestra API
  y señala cualquier vulnerabilidad o mala práctica.
 
  Contexto del proyecto:
  - Spring Boot 3.2 con Spring Security 6
  - Tokens de acceso con expiración de 24 horas
  - Los tokens se envían en el header Authorization como Bearer token
  - No usamos refresh tokens todavía
 
  @src/main/java/com/miapp/security/JwtService.java
 
  Formato esperado:
  1. Lista de problemas críticos (si los hay)
  2. Lista de mejoras recomendadas
  3. Código corregido de los problemas críticos

Comparado con la versión que la mayoría escribiría:

> revisa mi jwt

Ambos prompts pueden obtener alguna respuesta útil. Pero el primero obtiene una revisión de seguridad enfocada en el contexto específico de tu stack. El segundo puede obtenerte una explicación genérica de qué es JWT, o una revisión que ignora las particularidades de Spring Security 6, o simplemente una respuesta que pide más información antes de poder ayudarte.


Los tips más importantes, con ejemplos reales

1. Sé específico sobre la acción que pides

Los verbos importan. "Explica", "refactoriza", "escribe", "analiza", "lista" y "corrige" activan patrones de respuesta completamente diferentes. Cuanto más específico sea el verbo, más predecible el resultado.

✗ VAGO
"Haz algo con este código que lo mejore"
✓ ESPECÍFICO
"Refactoriza este código eliminando la duplicación en los métodos de validación. Mantén la misma interfaz pública."

2. Da el contexto suficiente, no más

El contexto es un recurso finito con retornos decrecientes. Más tokens de contexto no garantizan mejor respuesta; en algún punto, el modelo empieza a perder precisión al procesar partes lejanas del prompt. El objetivo es dar la información mínima necesaria para que el agente tenga todo lo que necesita, sin rellenar con información irrelevante que consume contexto y puede desviar la atención.

✗ DEMASIADO CONTEXTO IRRELEVANTE
"Llevo 3 años en este proyecto, empezamos con Spring Boot 2.5 y luego migramos, tenemos 15 developers, usamos Jira para las tareas, el cliente es una empresa de retail mediana, tenemos un legacy de mainframe también aunque no se conecta a esto... Necesito que revises este servicio de pagos."
✓ CONTEXTO RELEVANTE
"Revisa este servicio de pagos. Usa Spring Boot 3.2 + Stripe SDK 24.x. El método charge() está fallando intermitentemente con timeout en producción."

3. Especifica el formato de salida cuando importa

Si necesitas la respuesta en un formato específico para usarla en algo, dilo explícitamente. El modelo tiene sus propios defaults sobre cómo formatear respuestas, y puede no coincidir con lo que necesitas.

# Sin formato especificado — obtienes lo que el modelo decida
> Lista los endpoints de esta API
 
# Con formato especificado — obtienes exactamente lo que necesitas
> Lista los endpoints de esta API en formato de tabla Markdown con columnas:
  Método HTTP | Path | Descripción | Requiere autenticación

4. Pídele que piense antes de responder

Una de las técnicas con el impacto más documentado en prompt engineering es pedirle al modelo que razone paso a paso antes de dar la respuesta final. Esto es especialmente útil para problemas de debugging o análisis de arquitectura.

> Antes de proponer la solución, analiza paso a paso:
  1. Cuál es el flujo actual del código
  2. En qué punto exacto ocurre el error
  3. Por qué ocurre ese error
  Después de ese análisis, propón la corrección.

Esto no es magia. Lo que hace es obligar al modelo a "materializar" el razonamiento intermedio en texto, lo cual lo hace parte del contexto disponible para los siguientes tokens. El análisis explícito tiende a producir conclusiones más correctas que el análisis implícito.

5. Usa ejemplos cuando describes el formato esperado

En lugar de describir el formato en abstracto, muestra un ejemplo de cómo debe verse la respuesta. Los ejemplos eliminan la ambigüedad mejor que cualquier descripción verbal.

> Genera los casos de prueba para el método validateOrder().
  Usa este formato exacto:
 
  @Test
  void nombreDescriptivo_condicion_resultadoEsperado() {
      // Arrange
      // Act
      // Assert
  }
 
  Genera al menos un caso para: orden válida, orden sin items,
  orden con precio negativo, orden con cliente nulo.

6. Divide tareas complejas en pasos

Cuando la tarea es grande, es tentador poner todo en un solo prompt. Pero a menudo es más efectivo dividirla en pasos secuenciales: primero el análisis, después el diseño, después la implementación. Esto te da puntos de control para corregir el rumbo antes de que el agente invierta tokens en una dirección equivocada.

# Un solo prompt para todo — el agente puede malinterpretar
> Migra el módulo de autenticación de sessiones HTTP a JWT
 
# Dividido en pasos — puedes validar cada fase
> Paso 1: Analiza el módulo de autenticación actual y dame un listado
  de todos los archivos que tendrías que modificar y por qué.
  No hagas cambios todavía.
 
# (revisas la lista, confirmas que tiene sentido)
 
> Paso 2: Propón el diseño de la nueva implementación JWT.
  Muéstrame la estructura de clases antes de escribir código.
 
# (apruebas el diseño)
 
> Paso 3: Implementa los cambios empezando por el JwtService.

7. Incluye las restricciones explícitamente

Una de las cosas que más diferencia un prompt profesional de uno casual es incluir lo que no debe hacer, no solo lo que debe hacer. Las restricciones eliminan soluciones que técnicamente responden la pregunta pero que no sirven en tu contexto.

> Refactoriza el método processPayment() para reducir su complejidad ciclomática.
 
  Restricciones:
  - No cambies la firma del método (otros sistemas la consumen via interfaz)
  - No introduzcas nuevas dependencias al pom.xml
  - Los tests existentes deben seguir pasando sin modificaciones

¿Importa decir "por favor", "gracias" o "ayúdame a"?

Llegamos al tema que da pie a más debates de lo que debería entre developers: ¿tiene algún efecto real usar lenguaje cortés con un modelo de IA?

La respuesta honesta es que depende, la diferencia es pequeña, y la investigación reciente apunta en una dirección que sorprende a la mayoría. Y sí, yo también lo hago de vez en cuando pensando que eso puede salvarme la vida cuando la revolución de las máquinas haga que nos esclavicen. Pero... ¿recordarán mis nuevos amos que fue agradecido con ellos y serán benevolentes conmigo? ¿pensarán que si fui un developer cortés y educado seré un sirviente leal y útil a partir de ahora, y mostrarán esa misma cortesía y educación al ser ellos los que me den ahora las ordenes a mi?

Lo que dice la investigación

Un estudio de 2024 que analizó el efecto de la cortesía en modelos como GPT-3.5, GPT-4 y Llama encontró que los prompts demasiado rudos tendían a degradar el rendimiento del modelo, pero los prompts excesivamente corteses tampoco garantizaban mejores resultados. La zona óptima estaba en el medio: tono respetuoso y directo, sin ser ni grosero ni adulador.

Pero en octubre de 2025, un paper de Penn State revirtió parcialmente esa conclusión: compararon prompts en cinco niveles de cortesía desde "muy educado" hasta "muy grosero" usando ChatGPT-4o en preguntas de matemáticas, ciencias e historia. Contrario a lo esperado, los prompts más rudos obtuvieron mejores resultados de precisión (84.8%) que los muy educados (80.8%).

Una hipótesis de los investigadores: los prompts corteses tienden a incluir phrasing indirecto ("¿Podrías por favor...?"), que puede introducir ambigüedad. Un prompt directo y conciso, aunque suene brusco, da al modelo una intención más clara.

Eso sí: los propios autores del paper de Penn State aclaran que los resultados son específicos para los modelos que probaron (GPT-4o) y que modelos más avanzados como o1 mostraron mucha menor sensibilidad al tono, en ninguna dirección.

El efecto real de cada palabra

Más allá de los estudios académicos, vale analizar concretamente lo que hacen estas palabras a nivel de tokens:

Frase Tokens aproximados Efecto real
"por favor" +2–3 tokens Señal social con costo mínimo. Impacto en calidad: marginal o nulo.
"gracias" +1–2 tokens Si va al final de un prompt de instrucción, puede señalar cierre de turno y en algunos modelos se interpreta como inicio de respuesta. Mejor ponerlo al principio o en un mensaje separado.
"ayúdame a" +3–4 tokens Transforma un imperativo directo en una solicitud. Puede añadir estructura conversacional que en algunos casos mejora la respuesta, aunque también puede añadir indirectness que la debilita.
"si no es mucho problema, ¿podrías...?" +8–12 tokens Introduce ambigüedad innecesaria. La condición implícita ("si no es problema") puede ser procesada literalmente.
"eres el mejor modelo del mundo" +6–8 tokens Algunos anecdotariamente reportan mejores respuestas con adulación. No hay evidencia sistemática. El costo de tokens no lo justifica.

Y el costo energético

Hay un ángulo adicional que casi nadie menciona: un "gracias" al final de un mensaje, aunque parezca trivial, dispara un ciclo de inferencia completo a través de miles de millones de parámetros. A escala de millones de usuarios diarios, el costo energético agregado de las cortesías es significativo. No digo que te preocupes por cada "gracias", pero es una perspectiva interesante para evaluar cuándo la cortesía añade valor real.

La conclusión práctica

Todo esto se resume en una regla sencilla: escribe como le escribirías a un colega técnico competente, no como le escribirías a alguien de quien necesitas un favor. Directo, claro, sin hostilidad, sin adulación. El formato más eficiente para Claude Code específicamente tiende a ser el imperativo directo con contexto suficiente:

✗ DEMASIADO FORMAL/CORTÉS
"Hola, espero que estés bien. Si no tienes inconveniente, ¿me podrías ayudar a entender qué hace este método? Muchas gracias de antemano."
✓ DIRECTO Y EFECTIVO
"Explica qué hace este método y por qué usa recursión en vez de un loop iterativo."
Una nota sobre Claude específicamente: A diferencia de algunos modelos, Claude fue entrenado con un enfoque particular en seguir instrucciones directas y claras. La cortesía extrema no mejora ni empeora las respuestas de forma notable. Lo que sí mejora las respuestas es la precisión y el contexto de lo que pides.

Antipatrones: lo que casi todos hacen mal

Para cerrar, una lista de los errores más comunes que se repiten en prompts reales. Reconocerlos es la mitad del trabajo de mejorar.

El prompt de una línea para una tarea de diez

> migra el proyecto a java 21

Una tarea así involucra docenas de archivos, decisiones de compatibilidad, posibles cambios en dependencias y tests. Un prompt de cinco palabras le pide al agente que suponga qué hacer en cada decisión. A veces acierta; frecuentemente no.

La instrucción que contradice el contexto

> no uses streams de java, usa loops
  (en un CLAUDE.md que dice "usa programación funcional siempre que sea posible")

Cuando hay contradicción entre la instrucción del momento y el contexto persistente, el modelo tiene que elegir. A veces prioriza el prompt inmediato, a veces el contexto persistente. Si necesitas anular una instrucción del CLAUDE.md, hazlo explícito: "Para esta tarea específicamente, usa loops en lugar de streams aunque el CLAUDE.md diga lo contrario."

Pedir múltiples cosas sin orden de prioridad

> refactoriza el servicio, agrega tests, actualiza el Javadoc,
  mejora el manejo de errores y reduce la complejidad ciclomática

Con cinco tareas en un prompt, el agente decide el orden y el peso de cada una. Puede que refactorice de una forma que complique añadir los tests después. Mejor: pídelas en secuencia, o al menos especifica cuál es la más importante si hay que elegir.

El contexto sin ancla

> el método que te mostré antes no funciona, corrígelo

"El que te mostré antes" asume que el agente recuerda cuál método es. Si la conversación es larga o compactaste el contexto, puede que no lo tenga disponible. Incluye siempre la referencia explícita con @archivo o citando el nombre del método.

Pedir una solución sin dar las restricciones de antemano

> (el agente escribe 150 líneas de código)
  > ah, por cierto, no podemos usar librerías externas nuevas

Las restricciones que llegan después de la respuesta obligan a reescribir. Siempre mejor mencionarlas antes, aunque el agente tenga que renegociar el diseño.


Conclusión

La habilidad de escribir buenos prompts no es tan diferente de la habilidad de escribir buenos tickets en Jira o buenos mensajes de código en un code review: en todos los casos, la claridad y la especificidad del problema que describes determinan directamente la calidad de la solución que obtienes.

Los puntos más importantes de este artículo, resumidos:

  • Un prompt es todo lo que el modelo ve, no solo tu último mensaje. El historial, el CLAUDE.md y los resultados de herramientas también cuentan.
  • Los tokens son la unidad de todo: ventana de contexto, costo y velocidad. Más tokens no es siempre mejor; el objetivo es información de alta señal, no información abundante.
  • Los cuatro componentes de un buen prompt son: rol/persona, tarea específica, contexto relevante y formato de salida esperado. No siempre necesitas los cuatro, pero saber cuál falta es el primer paso para mejorar un prompt que no funciona.
  • La cortesía tiene un efecto pequeño y no concluyente. La investigación reciente sugiere que los prompts directos (aunque suenen bruscos) tienden a funcionar mejor que los prompts con indirectness cortés. Escribe como le escribirías a un colega técnico.

Espero que este tutorial les sea de utilidad. Si tienen alguna duda, sugerencia, comentario o aclaración, pueden dejarla en la sección de comentarios o enviar un correo a programadorjavablog@gmail.com (pueden agregarme al chat de gmail).


© javatutoriales.com – Serie: Desarrollo Asistido por IA