ragas

Ragas 用 LLM 裁判给 RAG 链路打分的评测框架。

补充说明

Ragas 把检索质量、回答忠实度和相关性拆成可计算指标,适合在改动分块、embedding 或 prompt 后做回归。它不生成答案,只消费已有的 question、answer、contexts 和 reference。

版本差异很大:0.1 用 datasets.Dataset 和字符串指标名,0.2 起改为 EvaluationDataset / SingleTurnSample 与指标类。混用旧教程会直接 ImportError。

安装与启动

pip install -U ragas langchain-openai
export OPENAI_API_KEY="sk-..."

常用示例

用 OpenAI 裁判评测一个小型 RAG 数据集:

python - <<'PY'
from ragas import EvaluationDataset, SingleTurnSample, evaluate
from ragas.llms import LangchainLLMWrapper
from ragas.embeddings import LangchainEmbeddingsWrapper
from ragas.metrics import AnswerRelevancy, Faithfulness, LLMContextRecall
from langchain_openai import ChatOpenAI, OpenAIEmbeddings

samples = [
    SingleTurnSample(
        user_input="磁盘满了怎么排查?",
        response="先用 df -h 看分区,再用 du 找大目录。",
        retrieved_contexts=["df -h 查看文件系统使用率;du -sh * 定位大目录。"],
        reference="df -h、du、lsof 配合定位磁盘占用。",
    ),
]
dataset = EvaluationDataset(samples=samples)

judge = LangchainLLMWrapper(ChatOpenAI(model="gpt-4o-mini", temperature=0))
embeddings = LangchainEmbeddingsWrapper(OpenAIEmbeddings(model="text-embedding-3-small"))

result = evaluate(dataset=dataset,
                  metrics=[Faithfulness(), AnswerRelevancy(), LLMContextRecall()],
                  llm=judge, embeddings=embeddings)
print(result)
result.to_pandas().to_csv("ragas-scores.csv", index=False)
PY

用本地 vLLM/SGLang 的 OpenAI 兼容接口当裁判,避免数据外发:

python - <<'PY'
from ragas import EvaluationDataset, SingleTurnSample, evaluate
from ragas.llms import LangchainLLMWrapper
from ragas.metrics import Faithfulness
from langchain_openai import ChatOpenAI

judge = LangchainLLMWrapper(ChatOpenAI(
    model="Qwen/Qwen2.5-72B-Instruct",
    base_url="http://localhost:8000/v1",
    api_key="EMPTY", temperature=0))
dataset = EvaluationDataset(samples=[SingleTurnSample(
    user_input="Pod OOMKilled 怎么办?",
    response="提高 memory limit,并排查内存泄漏。",
    retrieved_contexts=["OOMKilled 表示容器超过 memory limit 被杀。"])])
print(evaluate(dataset=dataset, metrics=[Faithfulness()], llm=judge))
PY

易错点与排错

读完自测

合上页面,先回答,再展开对照。

  1. Faithfulness 最少需要哪些字段?
  2. 为什么本地模型当裁判经常得到 NaN?
  3. AnswerRelevancy 为什么还需要 embedding 模型?
答案
  1. 需要 response 和 retrieved_contexts。它把回答拆成陈述,逐条检查是否能由检索上下文支持;user_input 不是必需,reference 也不参与该指标。
  2. 常见原因是裁判返回的不是合法 JSON,或模型不支持 function calling / JSON schema,Ragas 解析失败。可换更强模型、开启 vLLM guided decoding,或升级到与教程一致的 ragas 版本。
  3. 该指标让裁判根据回答反推若干问题,再计算这些问题与原问题的向量相似度。没有 embedding 就无法算相似度,所以必须传入 embeddings。

相关条目