Reescritura de consultas en RAG: preguntas de seguimiento, multiconsulta y HyDE

Cómo convertir preguntas conversacionales en consultas autónomas, generar variantes y documentos hipotéticos, y cuándo estas técnicas empeoran la búsqueda.

Pregunta reescrita en varias versiones

«¿Y para empresas?» es una pregunta perfectamente clara en una conversación sobre planes de precios y completamente inútil como consulta de búsqueda. Si tu RAG busca con el último mensaje del usuario tal cual, en la segunda pregunta de cada conversación ya está recuperando fragmentos al azar. La reescritura de consultas convierte lo que escribe el usuario en lo que el buscador necesita.

Preguntas de seguimiento: reescribir como consulta autónoma

Antes de buscar, pide a un modelo (uno pequeño basta) que reescriba el último mensaje incorporando el contexto necesario de la conversación:

Reescribir la pregunta de seguimiento antes de buscar
Reescribir la pregunta de seguimiento antes de buscarUna pregunta de seguimiento no se entiende sola; un modelo pequeño la reescribe como consulta autónoma, conservando los códigos tal cual.01Historial +pregunta deseguimientoDepende de lo dichoantes02Modelo pequeñoLa reescribe comoconsulta autónoma,con los códigosliterales03BúsquedaCon la consultareescrita04RespuestaMide recall@5 antesy después
Una pregunta de seguimiento no se entiende sola; un modelo pequeño la reescribe como consulta autónoma, conservando los códigos tal cual.
Reescribe la última pregunta del usuario para que se entienda sin leer
la conversación. Incluye los nombres, productos y fechas mencionados
antes que sean necesarios. No respondas a la pregunta. Conserva
literalmente códigos, números de referencia y nombres propios.
Si la pregunta ya es autónoma, devuélvela sin cambios.

Conversación:
Usuario: ¿Cuánto cuesta el plan Profesional?
Asistente: El plan Profesional cuesta 29 euros al mes por usuario.
Usuario: ¿Y para empresas?

Pregunta reescrita:

Salida esperada: «¿Cuánto cuesta el plan de precios para empresas en comparación con el plan Profesional?». Es la reescritura con mejor relación costo-beneficio: corrige un fallo que afecta a todas las conversaciones de más de un turno.

La instrucción de conservar literalmente códigos y nombres importa. Un modelo que «mejora» la consulta puede cambiar «error E-4012» por «error de autenticación», y la búsqueda léxica, que habría encontrado el código exacto, deja de hacerlo. Una precaución adicional: usa la consulta reescrita para la búsqueda semántica y la combinación de consulta original más reescrita para la léxica.

Multiconsulta: varias formulaciones fusionadas

Una pregunta puede formularse de muchas formas, y cada una recupera fragmentos algo distintos. Generar tres o cuatro variantes, buscar con cada una y fusionar los resultados aumenta la probabilidad de que el fragmento correcto aparezca en alguna lista.

def buscar_multiconsulta(pregunta, n_variantes=3, k=20):
    variantes = generar_variantes(pregunta, n=n_variantes)  # llamada a modelo pequeño
    listas = [buscar_hibrido(q, k=k) for q in [pregunta, *variantes]]
    return rrf(listas)  # Reciprocal Rank Fusion, k=60

Incluye siempre la pregunta original entre las consultas. Las variantes ayudan con preguntas vagas o con vocabulario distinto al de los documentos; con preguntas ya precisas aportan poco y añaden ruido. El costo: una llamada al modelo para generar variantes y N búsquedas en lugar de una. Las búsquedas se pueden lanzar en paralelo.

HyDE: buscar con una respuesta inventada

La técnica HyDE (Hypothetical Document Embeddings, propuesta por Gao y otros en 2022) parte de una observación: una pregunta y su respuesta tienen formas muy distintas, y los embeddings de los documentos se parecen más a respuestas que a preguntas. Así que se pide a un modelo que escriba una respuesta hipotética, sin acceso a los documentos, y se busca con el embedding de esa respuesta.

Pregunta: ¿Puedo deducir los gastos de un coworking siendo autónomo?

Respuesta hipotética generada:
"Los autónomos pueden deducir el alquiler de un espacio de coworking
como gasto de la actividad, siempre que esté vinculado a ella y se
justifique con factura..."

La respuesta puede ser incorrecta en los detalles; lo que importa es que usa el vocabulario y la estructura de un documento que respondería a la pregunta. Funciona mejor cuando la brecha entre cómo preguntan los usuarios y cómo están escritos los documentos es grande (preguntas coloquiales sobre textos técnicos o normativos).

Falla cuando el modelo no sabe nada del dominio: si tus documentos tratan de procedimientos internos, la respuesta hipotética inventará procedimientos genéricos que alejan la búsqueda de los documentos reales. Y nunca muestres la respuesta hipotética al usuario: solo sirve para buscar.

Errores frecuentes y limitaciones

Añadir todas las técnicas a la vez. Cada una suma latencia (una llamada al modelo antes de buscar) y puede empeorar ciertos tipos de pregunta. Mide recall@k con y sin cada técnica sobre tu conjunto de evaluación, con preguntas de seguimiento incluidas, y quédate solo con las que mejoran.

Usar un modelo grande para reescribir. La reescritura es una tarea sencilla y está en el camino crítico de cada consulta. Un modelo pequeño y rápido suele bastar; comprueba la calidad de sus reescrituras en 50 casos antes de descartarlo.

Reescribir preguntas que no lo necesitan. Si el usuario escribe una consulta precisa con un código de producto, la reescritura solo puede empeorarla. La instrucción «si ya es autónoma, devuélvela sin cambios» ayuda; también puedes saltarte la reescritura en el primer turno de la conversación.

Olvidar la reescritura en la evaluación. Si tu conjunto de evaluación solo tiene preguntas autónomas, no detectará el problema de las preguntas de seguimiento, que en un asistente conversacional pueden ser la mitad del tráfico. Incluye conversaciones de varios turnos.

¿Puede el propio modelo principal decidir qué buscar?

Sí: en lugar de buscar siempre antes de responder, le das una herramienta de búsqueda y el modelo genera sus propias consultas, varias si hace falta. Es más flexible y maneja bien las preguntas de seguimiento, a cambio de más latencia y de depender de que el modelo decida buscar cuando debe. Para preguntas simples y frecuentes, la reescritura previa sigue siendo más predecible.

Por dónde empezar

Si tu asistente es conversacional, añade la reescritura de preguntas de seguimiento con un modelo pequeño y conservación literal de códigos: es la mejora con mejor retorno. Mide recall@5 sobre conversaciones reales de varios turnos antes y después. Prueba multiconsulta o HyDE solo si las preguntas autónomas siguen teniendo recall bajo.

Fuentes

// Quién lo escribe

Creador de El Oráculo IA. Desde México crea y monetiza sitios web, programa en PHP y Python y usa herramientas de IA a diario en su trabajo. Aquí explica la inteligencia artificial con datos, fuentes y sus límites. Gamer y rodeado de gatos.