La proliferación de Large Language Models (LLMs) ha introducido nuevas complejidades en la construcción de sistemas de información a escala. Un desafío fundamental es la creación de 'jueces de relevancia' automatizados que puedan evaluar la pertinencia de documentos frente a consultas, replicando la precisión humana de manera consistente y eficiente. Tradicionalmente, la adaptación de estos jueces a diferentes modelos o la mejora de su rendimiento ha dependido de la afinación manual de prompts, un proceso frágil, lento y propenso a regresiones. Este problema se agrava en entornos de hyperscaler donde la latencia, el costo y la fiabilidad operacional son restricciones críticas.
El artículo aborda cómo Dropbox, enfrentando la necesidad de escalar sus jueces de relevancia para Dash, adoptó DSPy. DSPy es un framework que convierte la optimización de prompts en un problema algorítmico, permitiendo la adaptación sistemática de LLMs a objetivos medibles. Esto no solo mejora la calidad y reduce los costos operativos, sino que también acelera la iteración y mitiga el riesgo de regresiones al cambiar de modelo o refinar la lógica de evaluación.
Arquitectura del Sistema
El sistema se centra en un componente clave: el juez de relevancia basado en LLM. Este juez recibe una consulta y un documento, y emite una puntuación de relevancia de 1 a 5, junto con una explicación. La arquitectura de optimización se construye alrededor de DSPy, que actúa como un orquestador para el proceso de mejora de prompts.
El flujo de trabajo comienza con un conjunto de datos de evaluación anotado por humanos, donde cada par (consulta, documento) tiene una puntuación de relevancia y una explicación humana. La métrica principal para evaluar el rendimiento del juez es el Normalized Mean Squared Error (NMSE), que cuantifica la desviación promedio de las puntuaciones del modelo respecto a las humanas. Además, se mide la fiabilidad estructural, es decir, la capacidad del modelo para producir JSON válido y parseable. DSPy utiliza un optimizador como GEPA (Generative Pre-trained Transformer-based Prompt Optimizer) que, en lugar de una única puntuación de evaluación, genera feedback estructurado para cada ejemplo donde el modelo discrepa con los humanos. Este feedback incluye la magnitud y dirección de la discrepancia, la explicación humana y el razonamiento del modelo. Este feedback alimenta un bucle de reflexión de DSPy, donde el prompt se revisa iterativamente para minimizar el NMSE y mejorar la fiabilidad estructural. 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 mejora incremental para modelos de producción estables, se utiliza una 'instruction library' donde DSPy selecciona y combina 'bullet-instructions' predefinidas en lugar de reescribir el prompt completo, permitiendo cambios controlados y auditables.
Bucle de Optimización de Juez de Relevancia con DSPy
- 1 Definir Tarea y Métrica Especificar la tarea (puntuación 1-5) y la métrica (NMSE, fiabilidad JSON).
- 2 Generar Juicios LLM El LLM juez asigna puntuaciones y explicaciones a pares (query, document).
- 3 Comparar con Humanos Comparar juicios del LLM con anotaciones humanas de referencia.
- 4 Generar Feedback Estructurado DSPy (GEPA) analiza discrepancias y genera feedback textual detallado.
- 5 Revisar Prompt DSPy ajusta el prompt basándose en el feedback, aplicando guardrails.
- 6 Evaluar Prompt Revisado Probar el nuevo prompt en el dataset de evaluación.
- 7 Iterar o Desplegar Si la métrica mejora, iterar o desplegar el prompt optimizado.
| Capa | Tecnología | Justificación |
|---|---|---|
| compute | Large Language Models (LLMs) | Actúan como jueces de relevancia, asignando puntuaciones a pares query-document. Se utilizan modelos propietarios (OpenAI o3) y de código abierto (gpt-oss-120b, gemma-3-12b) para balancear costo y rendimiento. |
| data-processing | DSPy | Framework de código abierto para la optimización sistemática de prompts. Define la tarea, los datos y la métrica, y busca variantes de prompts que mejoren el rendimiento. Utiliza optimizadores como GEPA. |
| observability | Normalized Mean Squared Error (NMSE) | Métrica clave para cuantificar la desviación promedio de las puntuaciones del LLM respecto a las anotaciones humanas, escalada a un rango de 0-100. |
Trade-offs
Ganancias
- ▲ Reducción de NMSE (alineación humana)
- ▲▲ Reducción de costos operativos
- ▲ Velocidad de adaptación de modelos
- ▲▲ Fiabilidad operacional (formato JSON)
- ▲▲ Generación de datos de entrenamiento
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.",
]
if gold.explanation:
feedback_parts.append(f"Human rationale: {gold.explanation}")
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 problema de la relevancia en la recuperación de información es un campo de estudio clásico en la informática, con raíces en trabajos fundamentales como los de Salton y McGill sobre el modelo de espacio vectorial en la década de 1970. La evaluación de sistemas de recuperación de información siempre ha dependido de juicios humanos de relevancia, como se detalla en el trabajo de Voorhees y Harman en TREC (Text REtrieval Conference) desde principios de los 90. La métrica NMSE utilizada en este artículo es una adaptación del Mean Squared Error (MSE), una medida estadística estándar para cuantificar la diferencia promedio entre valores predichos y observados, ampliamente utilizada en machine learning y estadística.
La idea de optimizar un sistema basado en feedback iterativo y un objetivo medible resuena con principios de control adaptativo y optimización por gradiente, aunque aplicado aquí al dominio de la ingeniería de prompts. La capacidad de un sistema de IA para 'reflexionar' sobre sus errores y mejorar su propio comportamiento, como lo hace DSPy con el feedback estructurado, tiene paralelos con conceptos de meta-aprendizaje y aprendizaje por refuerzo, donde un agente aprende a mejorar su estrategia a lo largo del tiempo basándose en recompensas o penalizaciones.