Cargando

Ingeniería de prompts

Lección 1610 min

La ingeniería de prompts consiste en tomar un prompt que has escrito y mejorarlo para obtener resultados más confiables y de mayor calidad. Este proceso implica escribir un prompt inicial, evaluar su rendimiento y luego aplicar sistemáticamente técnicas de ingeniería para mejorarlo paso a paso.

El proceso de mejora iterativa

El enfoque sigue un ciclo claro: establecer un objetivo, escribir un prompt inicial, evaluarlo, aplicar una técnica de ingeniería de prompts y luego volver a evaluar para verificar un mejor rendimiento. Este ciclo se repite mientras refinas tu prompt.

Para esta serie de tutoriales, trabajaremos en un ejemplo práctico: crear un prompt que genere planes de comidas de un día para atletas según su altura, peso, objetivos físicos y restricciones dietéticas.

Configuración del pipeline de evaluación

La evaluación utiliza una versión mejorada del pipeline de módulos anteriores, envuelta en una clase PromptEvaluator que gestiona la generación de conjuntos de datos y la calificación del modelo. La clase admite concurrencia para acelerar el proceso de evaluación:

python
evaluator = PromptEvaluator(max_concurrent_tasks=5)

Comienza con un valor de concurrencia bajo (como 3) para evitar errores de límite de velocidad. Puedes ajustar esto según tu cuota de API.

Generación de datos de prueba

El método generate_dataset crea casos de prueba para tu prompt. Debes especificar:

  • Una descripción de la tarea que explique qué debe hacer tu prompt
  • Una especificación de las entradas que requiere tu prompt
  • La cantidad de casos de prueba a generar

Para el ejemplo de planificación de comidas:

python
dataset = evaluator.generate_dataset(
    task_description="Write a compact, concise 1 day meal plan for a single athlete",
    prompt_inputs_spec={
        "height": "Athlete's height in cm",
        "weight": "Athlete's weight in kg", 
        "goal": "Goal of the athlete",
        "restrictions": "Dietary restrictions of the athlete"
    },
    num_cases=3
)

Escribiendo tu prompt inicial

Comienza con un prompt simple e ingenuo para establecer una línea base. La función run_prompt recibe las entradas del caso de prueba y debe devolver la respuesta del modelo:

python
def run_prompt(prompt_inputs):
    prompt = f"""
    What should this person eat?
    
    - Height: {prompt_inputs["height"]}
    - Weight: {prompt_inputs["weight"]}
    - Goal: {prompt_inputs["goal"]}
    - Dietary restrictions: {prompt_inputs["restrictions"]}
    """
    
    messages = []
    add_user_message(messages, prompt)
    return chat(messages)

Ejecutando la evaluación

El proceso de evaluación compara la salida de tu prompt con los criterios esperados. Puedes agregar criterios adicionales para guiar la calificación:

python
results = evaluator.run_evaluation(
    run_prompt_function=run_prompt,
    dataset_file="dataset.json",
    extra_criteria="""
    The output should include:
    - Daily caloric total
    - Macronutrient breakdown  
    - Meals with exact foods, portions, and timing
    """
)

Analizando los resultados

La evaluación genera un archivo output.html que puedes abrir en tu navegador. Este informe muestra resultados detallados para cada caso de prueba, incluyendo puntuaciones, razonamiento y la salida real generada por tu prompt.

No te desanimes por las puntuaciones iniciales bajas: ¡eso es de esperar! El prompt inicial en este ejemplo obtuvo solo 2.3 de 10, pero esto te da una línea base clara a partir de la cual mejorar.

Qué sigue

Con tu línea base establecida, ahora puedes aplicar sistemáticamente técnicas de ingeniería de prompts como ser más específico, agregar requisitos de formato de salida, usar prompts estructurados e implementar ejemplos multi-shot. Cada técnica debería mejorar tu puntuación de evaluación, dándote un progreso medible hacia tu objetivo.