Introducción a la evaluación de RAG

Retrieval Augmented Generation (RAG) con LangChain

Meri Nova

Machine Learning Engineer

Tipos de evaluación de RAG

Un flujo de trabajo RAG que destaca los procesos que podemos evaluar: el proceso de recuperación, las alucinaciones del LLM, la relevancia de la respuesta frente a la pregunta de entrada y la comparación con una respuesta de referencia.

1 Crédito de imagen: LangSmith
Retrieval Augmented Generation (RAG) con LangChain

Precisión del output: evaluación de strings

query = "What are the main components of RAG architecture?"
predicted_answer = "Training and encoding"
ref_answer = "Retrieval and Generation"
Retrieval Augmented Generation (RAG) con LangChain

Precisión del output: evaluación de strings

prompt_template = """You are an expert professor specialized in grading students' answers to questions.
You are grading the following question:{query}
Here is the real answer:{answer}
You are grading the following predicted answer:{result}
Respond with CORRECT or INCORRECT:
Grade:"""

prompt = PromptTemplate(
    input_variables=["query", "answer", "result"],
    template=prompt_template
)

eval_llm = ChatOpenAI(temperature=0, model="gpt-4o-mini", openai_api_key='...')
Retrieval Augmented Generation (RAG) con LangChain

Precisión del output: evaluación de strings

from langsmith.evaluation import LangChainStringEvaluator

qa_evaluator = LangChainStringEvaluator(
    "qa",
    config={
        "llm": eval_llm,
        "prompt": PROMPT
    }
)

score = qa_evaluator.evaluator.evaluate_strings( prediction=predicted_answer, reference=ref_answer, input=query )
Retrieval Augmented Generation (RAG) con LangChain

Precisión del output: evaluación de strings

print(f"Score: {score}")
Score: {'reasoning': 'INCORRECT', 'value': 'INCORRECT', 'score': 0}
query = "What are the main components of RAG architecture?"
predicted_answer = "Training and encoding"
ref_answer = "Retrieval and Generation"
Retrieval Augmented Generation (RAG) con LangChain

Framework Ragas

Una tabla que compara métricas de generación con métricas de recuperación.

1 Crédito de imagen: Ragas
Retrieval Augmented Generation (RAG) con LangChain

Fidelidad

  • ¿El output generado representa fielmente el contexto?

 

$$ \text{Fidelidad} = \frac{\text{N.º de afirmaciones inferibles del contexto}}{\text{N.º total de afirmaciones}} $$

  • Normalizado a (0, 1)
Retrieval Augmented Generation (RAG) con LangChain

Evaluar la fidelidad

from langchain_openai import ChatOpenAI, OpenAIEmbeddings

from ragas.integrations.langchain import EvaluatorChain from ragas.metrics import faithfulness
llm = ChatOpenAI(model="gpt-4o-mini", api_key="...") embeddings = OpenAIEmbeddings(model="text-embedding-3-small", api_key="...")
faithfulness_chain = EvaluatorChain( metric=faithfulness, llm=llm, embeddings=embeddings )
Retrieval Augmented Generation (RAG) con LangChain

Evaluar la fidelidad

eval_result = faithfulness_chain({

"question": "How does the RAG model improve question answering with LLMs?",
"answer": "The RAG model improves question answering by combining the retrieval of documents...",
"contexts": [ "The RAG model integrates document retrieval with LLMs by first retrieving relevant passages...", "By incorporating retrieval mechanisms, RAG leverages external knowledge sources, allowing the...", ]
})
print(eval_result)
'faithfulness': 1.0
Retrieval Augmented Generation (RAG) con LangChain

Precisión del contexto

  • ¿Qué tan relevantes son los documentos recuperados para la consulta?
  • Normalizado a (0, 1)1 = muy relevante
from ragas.metrics import context_precision

llm = ChatOpenAI(model="gpt-4o-mini", api_key="...")
embeddings = OpenAIEmbeddings(model="text-embedding-3-small", api_key="...")

context_precision_chain = EvaluatorChain(
    metric=context_precision,
    llm=llm,
    embeddings=embeddings
)
Retrieval Augmented Generation (RAG) con LangChain

Evaluar la precisión del contexto

eval_result = context_precision_chain({
  "question": "How does the RAG model improve question answering with large language models?",
  "ground_truth": "The RAG model improves question answering by combining the retrieval of...",
  "contexts": [
    "The RAG model integrates document retrieval with LLMs by first retrieving...",
    "By incorporating retrieval mechanisms, RAG leverages external knowledge sources...",
  ]
})

print(f"Context Precision: {eval_result['context_precision']}")
Precisión del contexto: 0.99999999995
Retrieval Augmented Generation (RAG) con LangChain

¡Vamos a practicar!

Retrieval Augmented Generation (RAG) con LangChain

Preparing Video For Download...