AI Prompt Engineering · Lección

Creación de patrones para completar espacios

Use marcadores de posición {{variable}} y sustitución de cadenas en Python.

Lección 2 de 413 pasos

Creación de patrones para completar espacios es una lección gratuita de AI Prompt Engineering en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Prompt Engineering, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Prompt Engineering incluye 4 lecciones en total.

La convención de los marcadores de posición

Un patrón de prompt para completar espacios en blanco utiliza marcadores de posición para señalar las partes de un prompt que se sustituirán por valores reales antes de enviarlo al modelo.

La convención de marcadores de posición más común utiliza llaves dobles: {{variable_name}}. Esta convención es fácil de leer, es poco probable que aparezca accidentalmente en un texto normal y cuenta con un amplio respaldo en las bibliotecas de plantillas.

Otras convenciones que encontrará son las llaves simples {variable}, los corchetes angulares <variable> y las variables en mayúsculas ALL_CAPS. Elija una y sea coherente.

Sustitución básica de marcadores de posición

El patrón más sencillo para completar espacios en blanco es la sustitución directa de cadenas:

Plantilla: "Escriba una descripción de {{word_count}} palabras de {{product}} para {{audience}}."

Texto completado: "Escriba una descripción de 150 palabras de TaskFlow Pro para propietarios de pequeñas empresas."

La sustitución se realiza antes de enviar la cadena al modelo: el modelo recibe un prompt completo y limpio, sin marcadores de posición. Los marcadores de posición son un paso de preprocesamiento, no algo que gestione el propio modelo.

Categorías comunes de marcadores de posición

Construya sus plantillas utilizando categorías estándar de marcadores de posición que cubren la mayoría de los casos de uso:

  • {{customer_name}} — nombre del destinatario o del asunto
  • {{product}} — producto, servicio o tema sobre el que se escribe
  • {{tone}} — por ejemplo, profesional, informal, urgente o entusiasta
  • {{audience}} — destinatarios del contenido
  • {{word_count}} — extensión objetivo
  • {{format}} — viñetas, párrafos o lista numerada
  • {{context}} — información de contexto específica de esta instancia

Utilizar nombres coherentes en todas las plantillas facilita la navegación por la biblioteca y reduce los errores.

Sustitución mediante el formato de cadenas de Python

El método integrado de cadenas de Python .format() es una forma sencilla de completar marcadores de posición mediante la sintaxis {variable}:

import openai

client = openai.OpenAI(api_key='sk-...')

EMAIL_TEMPLATE = '''Write a follow-up email from {sender_name} to {recipient_name}.
Context: {context}
Tone: {tone}
Length: {word_count} words.
Include a clear call to action: {cta}.
Do not mention competitors. Active voice. No bullet points.'''

def generate_email(sender, recipient, context, tone, word_count, cta):
    prompt = EMAIL_TEMPLATE.format(
        sender_name=sender,
        recipient_name=recipient,
        context=context,
        tone=tone,
        word_count=word_count,
        cta=cta
    )

    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

result = generate_email(
    sender='Sarah Chen',
    recipient='Mr. Patel',
    context='We met at the DevConf conference last week and discussed API integration.',
    tone='warm and professional',
    word_count=120,
    cta='Schedule a 20-minute demo call'
)
print(result)

Enfoque de las f-strings de Python

Las f-strings de Python proporcionan una sintaxis de sustitución en línea que algunos desarrolladores prefieren por su legibilidad:

import openai

client = openai.OpenAI(api_key='sk-...')

def generate_product_description(product, audience, tone, word_count, key_benefit):
    prompt = (
        f'Write a product description for {product}, designed for {audience}. '
        f'Tone: {tone}. '
        f'Length: {word_count} words. '
        f'Lead with this key benefit: {key_benefit}. '
        'Active voice. No bullet points. No pricing mentions.'
    )

    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': prompt}]
    )
    return response.choices[0].message.content

print(generate_product_description(
    product='FocusFlow, a time-blocking productivity app',
    audience='freelancers and independent consultants',
    tone='energetic and practical',
    word_count=150,
    key_benefit='Reclaim two hours every day by blocking distractions automatically'
))

Gestión de caracteres especiales en los marcadores de posición

Un error común: los valores proporcionados por el usuario que contienen llaves, comillas o saltos de línea pueden interrumpir la sustitución de cadenas.

Enfoques defensivos:

  • Limpie las entradas antes de la sustitución: elimine o escape los caracteres especiales cuando sea necesario
  • Utilice cadenas entre comillas triples para las plantillas multilínea y gestionar los saltos de línea de forma segura
  • Cuando el valor de la variable contiene llaves (por ejemplo, código), utilice un enfoque que trate el valor de la variable como texto literal (Jinja2 lo gestiona bien)

Pruebe siempre la plantilla con entradas de casos extremos: cadenas vacías, cadenas con comillas, cadenas con saltos de línea y cadenas muy largas.

Valores predeterminados en las plantillas

No todas las variables tienen que ser obligatorias. Las plantillas son más flexibles cuando se utilizan valores predeterminados para los parámetros opcionales:

def build_prompt(product, audience, tone='professional and friendly', word_count=200, format_style='prose'):
    format_instruction = {
        'prose': 'Write in continuous paragraphs. No bullet points.',
        'bullets': 'Use bullet points. Each point is one sentence.',
        'numbered': 'Use a numbered list. Each item is one sentence.'
    }.get(format_style, 'Write in continuous paragraphs.')

    return (
        f'Write a description of {product} for {audience}. '
        f'Tone: {tone}. '
        f'Length: {word_count} words. '
        f'{format_instruction} '
        'Active voice. No competitor mentions.'
    )

# Minimal call — uses all defaults
print(build_prompt('Notion', 'students'))

# Full call — overrides defaults
print(build_prompt('Notion', 'students', tone='casual', word_count=100, format_style='bullets'))

Plantillas con varios bloques

Los prompts complejos pueden tener varios bloques de variables: un bloque de prompt del sistema y un bloque de mensaje del usuario, cada uno con sus propios marcadores de posición:

SYSTEM_TEMPLATE = 'You are a {role} writing for {company}. Your audience is {audience}. Style: {style}.'

USER_TEMPLATE = 'Write a {content_type} about {topic}. Length: {word_count} words. Deadline tone: {urgency}.'

import openai

client = openai.OpenAI(api_key='sk-...')

def generate(role, company, audience, style, content_type, topic, word_count, urgency):
    system_msg = SYSTEM_TEMPLATE.format(
        role=role, company=company, audience=audience, style=style
    )
    user_msg = USER_TEMPLATE.format(
        content_type=content_type, topic=topic,
        word_count=word_count, urgency=urgency
    )

    response = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[
            {'role': 'system', 'content': system_msg},
            {'role': 'user', 'content': user_msg}
        ]
    )
    return response.choices[0].message.content

Validación de marcadores de posición antes del renderizado

Valide siempre que todos los marcadores de posición obligatorios estén completos antes de enviar el prompt. La ausencia de un marcador de posición significa que el modelo recibe texto literal como {{product}} y puede generar un resultado extraño:

import re

def validate_template(template_str, provided_vars):
    required = set(re.findall(r'\{\{(\w+)\}\}', template_str))
    missing = required - set(provided_vars.keys())

    if missing:
        raise ValueError(f'Missing required template variables: {missing}')

    return True

template = 'Write a {{word_count}}-word {{tone}} description of {{product}} for {{audience}}.'
vars_provided = {'word_count': 150, 'tone': 'friendly', 'product': 'TaskFlow'}

try:
    validate_template(template, vars_provided)
except ValueError as e:
    print(f'Template error: {e}')
    # Output: Template error: Missing required template variables: {{'audience'}}

Bloques condicionales en las plantillas

A veces, una sección de la plantilla solo debe aparecer si se proporciona una variable. Puede implementarlo en Python mediante la construcción condicional de cadenas:

def build_report_prompt(topic, audience, word_count, include_recommendations=False, cta=None):
    prompt = f'Write a report on {topic} for {audience}. Length: {word_count} words. Active voice.'

    if include_recommendations:
        prompt += ' End with a numbered list of 3 specific recommendations.'

    if cta:
        prompt += f' Close with this call to action: {cta}'

    return prompt

# Without optional sections
print(build_report_prompt('cloud cost optimization', 'engineering managers', 400))

# With optional sections
print(build_report_prompt(
    topic='cloud cost optimization',
    audience='engineering managers',
    word_count=600,
    include_recommendations=True,
    cta='Book a cost audit with our team at cloudcost.io'
))

Variables de elección enumerada

Algunas variables de plantilla deben limitarse a un conjunto fijo de opciones válidas. Imponga esta restricción mediante una validación al estilo de un enum:

VALID_TONES = ['professional', 'casual', 'urgent', 'empathetic', 'enthusiastic']
VALID_FORMATS = ['prose', 'bullets', 'numbered', 'table']

def generate_content(topic, tone, format_style, word_count):
    if tone not in VALID_TONES:
        raise ValueError(f'Invalid tone: {tone}. Choose from: {VALID_TONES}')
    if format_style not in VALID_FORMATS:
        raise ValueError(f'Invalid format: {format_style}. Choose from: {VALID_FORMATS}')

    format_map = {
        'prose': 'continuous paragraphs, no lists',
        'bullets': 'bullet points',
        'numbered': 'numbered list',
        'table': 'a markdown table'
    }

    prompt = (f'Write about {topic} in {tone} tone. '
              f'Format: {format_map[format_style]}. '
              f'Length: {word_count} words. Active voice.')

    return prompt

Comprobación de conocimientos: patrones para completar espacios en blanco

Tiene esta plantilla: 'Write a {tone} email to {recipient} about {topic}. Length: {word_count} words.'

La invoca con: tone='formal', recipient='the team', word_count=100, pero olvida el parámetro topic.

¿Qué ocurre?

Recapitulación: creación de patrones para completar espacios en blanco

Los patrones de prompts para completar espacios en blanco utilizan marcadores de posición ({{variable}}, {variable} o similares) para señalar las partes variables de una plantilla reutilizable. .format() y las f-strings de Python son los mecanismos de sustitución más habituales.

Buenas prácticas: valide todos los marcadores de posición obligatorios antes del renderizado, utilice valores predeterminados para las variables opcionales, limite las variables enumeradas y gestione de forma defensiva las entradas de casos extremos (cadenas vacías y caracteres especiales).

En la siguiente lección, explorará Jinja2 y string.Template de Python para necesidades de sustitución de variables más avanzadas.

Gratis para empezar

Aprende AI Prompt Engineering con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
53
Lecciones
199

Preguntas frecuentes

¿La lección «Creación de patrones para completar espacios» es gratis?

Sí — el texto completo de «Creación de patrones para completar espacios» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Prompt Engineering, actualiza a CoddyKit PRO. El curso de AI Prompt Engineering incluye 4 lecciones en total.

¿Qué aprenderé en «Creación de patrones para completar espacios»?

Use marcadores de posición {{variable}} y sustitución de cadenas en Python. Practicas AI Prompt Engineering con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Prompt Engineering?

No se requiere experiencia previa. AI Prompt Engineering en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Creación de patrones para completar espacios»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Prompt Engineering?

Sí. Cada lección de AI Prompt Engineering incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. ¿Qué es una plantilla de prompt?
  2. Creación de patrones para completar espacios
  3. Técnicas de sustitución de variables
  4. Reutilizar plantillas en distintas tareas
← Volver a AI Prompt Engineering