El problema fundamental que aborda este artículo es la dificultad de mantener la calidad y la eficiencia de los sistemas de juicio de relevancia basados en Large Language Models (LLMs) en entornos de producción a gran escala. Específicamente, se centra en la fragilidad de los prompts de LLM y el desafío de adaptarlos a diferentes modelos (más pequeños, más baratos) sin incurrir en regresiones de calidad o altos costos operativos. La "ingeniería de prompts" manual es insostenible a escala, ya que cada cambio de modelo o ajuste de prompt puede introducir fallos inesperados y requiere ciclos de iteración prolongados.
La solución propuesta, mediante el uso de DSPy, transforma el proceso ad-hoc de ajuste de prompts en un bucle de optimización sistemático y medible. Esto es crucial en un contexto donde los LLMs son cada vez más utilizados para tareas críticas como la clasificación y la generación de datos de entrenamiento, y donde la necesidad de equilibrar la calidad con la latencia y el costo es primordial. La relevancia de este enfoque radica en su capacidad para industrializar un aspecto clave del desarrollo de aplicaciones basadas en LLM, moviéndolo de un arte a una ciencia de ingeniería.
Arquitectura del Sistema
El sistema de juicio de relevancia en Dropbox Dash se basa en un Large Language Model (LLM) que, dada una consulta y un documento, asigna una puntuación de relevancia de 1 a 5. La evaluación de este juez se realiza comparando sus puntuaciones con las asignadas por anotadores humanos, utilizando Normalized Mean Squared Error (NMSE) como métrica principal para cuantificar el desacuerdo. Además de la precisión, se considera la fiabilidad estructural, asegurando que la salida del LLM sea JSON válido y parseable por sistemas downstream.
DSPy se integra como un framework de optimización que toma la tarea (asignar relevancia), el dataset (ejemplos anotados por humanos) y la métrica (NMSE y fiabilidad estructural) como entrada. Utiliza optimizadores como GEPA (Gradient-based Prompt Evolution via Perturbation Analysis) para buscar variantes de prompts que mejoren el rendimiento. GEPA genera feedback estructurado para cada ejemplo donde el modelo discrepa con un humano, combinando la magnitud y dirección del error con las explicaciones humanas y el razonamiento del modelo. Este feedback alimenta un bucle de reflexión que revisa el prompt, optimizando directamente contra la métrica de alineación humana. Para evitar el overfitting, se implementan "guardrails" que prohíben la inclusión de palabras clave específicas de ejemplos en los prompts y aseguran que los parámetros de la tarea (ej. rango de puntuación) permanezcan estables. En escenarios de alta estabilidad, se utiliza una "instruction library layer" donde DSPy selecciona y combina instrucciones predefinidas en lugar de reescribir el prompt completo, permitiendo mejoras incrementales y controladas.
Flujo de Optimización de Juez de Relevancia con DSPy
- 1 Definir Tarea Especificar la tarea del LLM (ej. asignar relevancia 1-5 a query-document).
- 2 Preparar Dataset Recopilar ejemplos anotados por humanos (query, document, rating, explicación).
- 3 Definir Métrica Establecer métricas de evaluación (NMSE para alineación, fiabilidad JSON).
- 4 Inicializar Prompt Comenzar con un prompt base para el LLM objetivo.
- 5 Evaluar Prompt Ejecutar el LLM con el prompt en el dataset y calcular métricas.
- 6 Generar Feedback (GEPA) Identificar desacuerdos con humanos, generar feedback estructurado (error, ex...
- 7 Revisar Prompt (DSPy) DSPy ajusta el prompt basándose en el feedback, aplicando guardrails.
- 8 Iterar Repetir el ciclo de evaluación, feedback y revisión hasta optimización.
| Capa | Tecnología | Justificación |
|---|---|---|
| compute | Large Language Models (LLMs) | Núcleo del juez de relevancia, asigna puntuaciones a pares query-document. Se utilizan modelos propietarios (OpenAI o3) y de código abierto (gpt-oss-120b, gemma-3-12b). |
| data-processing | DSPy | Framework de optimización sistemática de prompts. Permite definir tareas, datos y métricas, y luego optimizar prompts automáticamente para mejorar el rendimiento del LLM. Incluye optimizadores como GEPA. |
| observability | Normalized Mean Squared Error (NMSE) | Métrica clave para cuantificar el desacuerdo promedio entre las puntuaciones del LLM y las de los anotadores humanos, escalada de 0 a 100. |
| data-processing | JSON parsing | Mecanismo para asegurar la fiabilidad estructural de las salidas del LLM, crucial para que los sistemas downstream puedan consumir los resultados programáticamente. |
Trade-offs
Ganancias
- ▲ Reducción de costos operativos
- ▲ Mejora de la alineación con juicios humanos (NMSE)
- ▲▲ Aumento de la fiabilidad operacional (formato JSON)
- ▲ Reducción del tiempo de adaptación de modelos
- ▲▲ Mayor capacidad para etiquetar datos
Costes
diff = predicted_rating - expected_rating
direction = "higher" if diff > 0 else "lower"
feedback_parts = [
f"Predicted rating {int(predicted_rating)} but expected {int(expected_rating)}.",
f"Model rated {abs(diff):.0f} point(s) {direction} than the expected human rating.",
]
# Include human explanation if available
if gold.explanation:
feedback_parts.append(f"Human rationale: {gold.explanation}")
# Include model's explanation for comparison
if pred.explanation:
feedback_parts.append(f"Model's reasoning: {pred.explanation}")
feedback_parts.append(
"Remember: when adapting the prompt, avoid overfitting to specific\nexample(s). Do not include exact examples or keywords from them in the prompt.\nAlso ensure you do not change the basic parameters of the task (e.g. changing the\nrating range to be anything but 1-5). Try to add a general rule to an execution\nplan to rate similar documents in the future."
)
feedback = "\n".join(feedback_parts)Fundamentos Teóricos
El desafío de la ingeniería de prompts y la adaptación de modelos de lenguaje a tareas específicas resuena con principios de optimización y aprendizaje por refuerzo. La idea de optimizar sistemáticamente los prompts contra una función objetivo medible puede verse como una aplicación de técnicas de optimización de hiperparámetros o búsqueda en el espacio de soluciones, similar a los algoritmos genéticos o la optimización bayesiana, pero aplicada al espacio de texto de los prompts.
La generación de feedback estructurado y el bucle de reflexión de DSPy tienen paralelismos con el aprendizaje por refuerzo con retroalimentación humana (Reinforcement Learning from Human Feedback, RLHF), donde un modelo aprende a alinearse con preferencias humanas a través de señales de recompensa. Aunque DSPy no es RLHF per se, su enfoque de usar el desacuerdo con humanos como señal de error para guiar la optimización del prompt comparte la filosofía de mejorar el comportamiento del modelo basándose en juicios externos. La necesidad de evitar el overfitting y mantener la generalización es un problema clásico en el aprendizaje automático, abordado por principios como la regularización y la validación cruzada, fundamentales en trabajos como los de Vapnik y Chervonenkis sobre la teoría del aprendizaje estadístico (1998).