Ingeniería de Prompts para Modelos de Lenguaje Grande: Una Guía Técnica Esencial

En el ámbito de los modelos de lenguaje grande (LLMs), la entrada se conoce como "prompt", que guía al modelo para ganerar salidas relevantes. Para LLMs capaces de manejar tareas diversas, un prompt bien diseñado influye significativamente en el rendimiento. La ingeniería de prompts se enfoca en construir instrucciones específicas para maximizar las capacidades del modelo.

Principios Fundamentales

Dos principios clave para crear prompts efectivos son: escribir instrucciones claras y específicas, y dar al modelo tiempo suficiente para razonar.

Instruccciones Claras y Específicas

Los modelos no interpretan intenciones implícitas; por lo tanto, las instrucciones deben ser explícitas. Si la salida es demasiado larga, solicita respuestas concisas; si es vaga, pide detalles. Reducir la ambigüedad aumenta la probabilidad de obtener resultados satisfactorios.

Cuatro técnicas para lograr claridad:

  • Usar delimitadores para separar secciones de entrada: Emplea símbolos como comillas triples o corchetes para distinguir partes del texto.
  • Solicitar salida estructurada: Pide formatos como JSON o HTML para estabilizar la salida y facilitar el procesamiento posterior.
  • Verificar condiciones: Si la tarea tiene suposiciones, indica al modelo que las revise antes de proceder, evitando errores.
  • Prompting de pocos ejemplos: Proporciona ejemplos exitosos antes de la tarea real para guiar al modelo.

Además, incluye detalles relevantes en la consulta, asigna roles al modelo, especifica la longitud deseada y descompón tareas complejas en subtareas simples.

Dar Tiempo para Razonar

Similar a los humanos, los modelos necesitan tiempo para pensar en problemas complejos. Los prompts deben incluir solicitudes de razonamiento paso a paso para mejorar la precisión.

Ejemplos de técnicas:

  • Especificar pasos: Define una secuencia de acciones para completar la tarea.
  • Inducir razonamiento previo: Pide al modelo que piense en soluciones antes de concluir, comparando cálculos propios con los del usuario.

Estas técnicas ayudan a crear prompts efectivos, pero en la práctica, se requiere iteración continua para optimizar según las necesidades. Además, se debe considerar el problema de alucinaciones en los LLMs, donde el modelo puede generar información aparente pero falsa.

Conceptos Clave

Prompting de Cero Ejemplos vs. Pocos Ejemplos

  • Prompting de cero ejemplos: El modelo genera respuestas basándose únicamente en la descripción de la tarea, sin ejemplos. Útil para tareas simples o cuando el modelo tiene conocimiento previo.
  • Prompting de pocos ejemplos: Se proporcionan ejemplos específicos para enseñar patrones, mejorando la precisión en tareas complejas o con formatos definidos.

Cadena de Pensamiento, Autoconsistencia y Árbol de Pensamientos

  • Cadena de Pensamiento (CoT): El modelo genera pasos intermedios de razonamiento, haciendo el proceso transparente. Se logra con instrucciones como "piensa paso a paso".
  • Autoconsistencia: Genera múltiples respuestas y rutas de razonamiento, seleccionando la más coherente para aumentar la fiabilidad.
  • Árbol de Pensamientos (ToT): Extiende CoT explorando múltiples caminos en estructura de árbol, ideal para problemas complejos con múltiples opciones.

Herramientas Auxiliares

Estas técnicas se aplican tanto en desarrollo como en aplicaciones web. Herramientas complementarias pueden ayudar a optimizar el trabajo con LLMs, como la generación de contenido en formatos específicos para usar en sitios externos. Ejemplos incluyen plataformas para presentaciones, mapas mentales, diagramas, imágenes y lectura de documentos PDF.

Ejemplos de Código Reescritos

A continuación, se presentan ejemplos de código en Python que ilustran los principios discutidos, con cambios en estructura, lógica y nombres de variables para reducir similitudes.

Ejemplo 1: Resumen de Texto con Delimitadores

import openai
import os

# Configuración de la API
openai.api_key = os.environ.get("API_KEY_OPENAI", "clave-predeterminada")

def generar_respuesta(prompt_usuario, modelo="gpt-3.5-turbo"):
    lista_mensajes = [{"role": "user", "content": prompt_usuario}]
    respuesta_api = openai.chat.completions.create(
        model=modelo,
        messages=lista_mensajes,
        temperature=0.1
    )
    return respuesta_api.choices[0].message.content

texto_entrada = """
El Festival del Bote del Dragón, o Duanwu, es una celebración china tradicional que tiene lugar el quinto día del quinto mes lunar. Con raíces en la antigua cultura de Chu, conmemora al poeta patriota Qu Yuan. Las costumbres incluyen carreras de botes, consumo de zongzi (dumplings de arroz), y colgar hierbas medicinales.
"""

prompt_instruccion = f"""
Resume el texto encerrado en triple asterisco en una sola oración.
***{texto_entrada}***
"""
resultado = generar_respuesta(prompt_instruccion)
print(resultado)

Salida esperada: "El Festival del Bote del Dragón es una festividad china que honra a Qu Yuan con tradiciones como carreras de botes y zongzi."

Ejemplo 2: Generación de Salida Estructurada

prompt_json = """Genera una lista de tres libros de ficción en español con claves: id_libro, titulo, autor, género. Usa formato JSON."""
respuesta_json = generar_respuesta(prompt_json)
print(respuesta_json)

Salida esperada: Un array JSON con objetos que conteinen claves como id_libro, titulo, etc.

Ejemplo 3: Extracción de Pasos con Condiciones

texto_proceso = """
Preparar café implica varios pasos: calentar agua, colocar café molido en un filtro, verter agua caliente y esperar la infusión.
"""
prompt_pasos = f"""
Dado el texto entre paréntesis angulares, si contiene una secuencia de pasos, reescribe en formato de lista numerada. De lo contrario, indica "No se proporcionaron pasos".
<{texto_proceso}>
"""
resultado_pasos = generar_respuesta(prompt_pasos)
print(resultado_pasos)

Salida esperada: Una lista numerada de pasos para preparar café.

Ejemplo 4: Prompting de Pocos Ejemplos para Estilo Consistente

prompt_estilo = """
Tu tarea es responder preguntas con un estilo poético.

<usuario>: Explica qué es la esperanza.
<asistente>: La esperanza es una luz tenue en la oscuridad, una semilla que brota entre grietas, prometiendo un mañana mejor.

<usuario>: Describe el amor.
"""
respuesta_estilo = generar_respuesta(prompt_estilo)
print(respuesta_estilo)</usuario></asistente></usuario>

Salida esperada: Una descripción poética del amor, siguiendo el estilo del ejemplo.

Ejemplo 5: Razonamiento Paso a Paso para Cálculos

prompt_calculo = """
Evalúa el siguiente problema paso a paso antes de responder:
Un agricultor tiene 5 campos, cada uno con 10 árboles. Si planta 3 árboles más por campo, ¿cuántos árboles tendrá en total?
"""
respuesta_calculo = generar_respuesta(prompt_calculo)
print(respuesta_calculo)

Salida esperada: Desglose de cálculos mostrando que el total es 65 árboles.

Etiquetas: prompt engineering large language models OpenAI API Python chain of thought

Publicado el 6-4 03:27