跳转到内容

评估一个简单的 RAG 系统

在本教程中,我们将编写一个简单的评估流程来评估一个 RAG(检索增强生成)系统。在本教程结束时,你将学习如何使用评估驱动的开发方式来评估和迭代 RAG 系统。

flowchart LR
    A["Query<br/>'What is Ragas 0.3?'"] --> B[Retrieval System]

    C[Document Corpus<br/> Ragas 0.3 Docs📄] --> B

    B --> D[LLM + Prompt]
    A --> D

    D --> E[Final Answer]

我们将从编写一个简单的 RAG 系统开始,该系统从语料库中检索相关文档,并使用大语言模型(LLM)生成答案。

python -m ragas_examples.rag_eval.rag

接下来,我们将为我们的 RAG 系统写下一些示例查询和预期输出,然后将它们转换为 CSV 文件。

import pandas as pd

samples = [
    {"query": "What is Ragas 0.3?", "grading_notes": "- Ragas 0.3 is a library for evaluating LLM applications."},
    {"query": "How to install Ragas?", "grading_notes": "- install from source  - install from pip using ragas[examples]"},
    {"query": "What are the main features of Ragas?", "grading_notes": "organised around - experiments - datasets - metrics."}
]
pd.DataFrame(samples).to_csv("datasets/test_dataset.csv", index=False)

为了评估我们 RAG 系统的性能,我们将定义一个基于 LLM 的评估指标,该指标将我们 RAG 系统的输出与评分说明进行比较,并据此输出“通过/不通过”。

from ragas.metrics import DiscreteMetric
my_metric = DiscreteMetric(
    name="correctness",
    prompt = "Check if the response contains points mentioned from the grading notes and return 'pass' or 'fail'.\nResponse: {response} Grading Notes: {grading_notes}",
    allowed_values=["pass", "fail"],
)

接下来,我们将编写实验循环,在测试数据集上运行我们的 RAG 系统,并使用该指标对其进行评估,然后将结果存储在 CSV 文件中。

@experiment()
async def run_experiment(row):
    response = rag_client.query(row["query"])

    score = my_metric.score(
        llm=llm,
        response=response.get("answer", " "),
        grading_notes=row["grading_notes"]
    )

    experiment_view = {
        **row,
        "response": response.get("answer", ""),
        "score": score.value,
        "log_file": response.get("logs", " "),
    }
    return experiment_view

现在,每当你对 RAG 流程进行更改时,你都可以运行实验,看看它如何影响 RAG 的性能。

端到端运行示例

  1. 设置你的 OpenAI API 密钥
    export OPENAI_API_KEY="your_openai_api_key"
    
  2. 运行评估
    python -m ragas_examples.rag_eval.evals
    

太棒了!你已成功使用Ragas运行了你的第一次评估。现在你可以通过打开 experiments/experiment_name.csv 文件来检查结果。