Saltar al contenido principal

Capítulo 1: Transformación de Consultas

¿Por qué transformar las consultas?​

Las consultas de los usuarios suelen ser:

  • Ambiguas o incompletas
  • Usar un vocabulario diferente al de los documentos
  • Demasiado cortas para un buen embedding

Reescritura de consultas​

from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate

rewrite_prompt = PromptTemplate.from_template("""
Rewrite the following query to be more specific and searchable.
Original: {query}
Rewritten:""")

llm = ChatOpenAI(model="gpt-4")
chain = rewrite_prompt | llm

# "how does it work?" → "How does retrieval augmented generation work?"
rewritten = chain.invoke({"query": "how does it work?"})

Expansión de consultas​

Agregue términos relacionados:

expansion_prompt = PromptTemplate.from_template("""
Expand this query with related terms and synonyms:
Query: {query}
Expanded query with alternatives:""")

# "ML" → "machine learning ML deep learning artificial intelligence AI"

HyDE (Hypothetical Document Embeddings)​

Genere una respuesta hipotética, obtenga su embedding y búsquela con eso:

def hyde_retrieval(query, llm, retriever):
# Step 1: Generate hypothetical document
hyde_prompt = f"""Write a short paragraph that would
answer this question: {query}"""

hypothetical_doc = llm.invoke(hyde_prompt)

# Step 2: Embed the hypothetical document
# (embeddings will be closer to real documents)

# Step 3: Retrieve using hypothetical embedding
results = retriever.get_relevant_documents(
hypothetical_doc.content
)

return results

Por qué funciona HyDE:

  • La respuesta hipotética utiliza el vocabulario de los documentos
  • Mejor alineación del embedding con el corpus
  • Especialmente útil para consultas complejas

Resumen​

TécnicaCuándo usarMejora
ReescrituraConsultas vagasClaridad
ExpansiónSinónimos ausentesRecall
HyDEPreguntas complejasPrecisión