ai
  • index
  • cursor
  • vector
  • crawl
  • crawl-front
  • DrissionPage
  • logging
  • mysql
  • pprint
  • sqlalchemy
  • contextmanager
  • dotenv
  • Flask
  • python
  • job
  • pdfplumber
  • python-docx
  • redbook
  • douyin
  • ffmpeg
  • json
  • numpy
  • opencv-python
  • pypinyin
  • re
  • requests
  • subprocess
  • time
  • uuid
  • watermark
  • milvus
  • pymilvus
  • search
  • Blueprint
  • flash
  • Jinja2
  • secure_filename
  • url_for
  • Werkzeug
  • chroma
  • HNSW
  • pillow
  • pandas
  • beautifulsoup4
  • langchain-community
  • langchain-core
  • langchain
  • langchain_unstructured
  • libreoffice
  • lxml
  • openpyxl
  • pymupdf
  • python-pptx
  • RAGFlow
  • tabulate
  • sentence_transformers
  • jsonl
  • collections
  • jieba
  • rag_optimize
  • rag
  • rank_bm25
  • Hugging_Face
  • modelscope
  • all-MiniLM-L6-v2
  • ollama
  • rag_measure
  • ragas
  • ASGI
  • FastAPI
  • FastChat
  • Jupyter
  • PyTorch
  • serper
  • uvicorn
  • markdownify
  • NormalizedLevenshtein
  • raq-action
  • CrossEncoder
  • Bi-Encoder
  • neo4j
  • neo4j4python
  • matplotlib
  • Plotly
  • Streamlit
  • py2neo
  • abc
  • read_csv
  • neo4jinstall
  • APOC
  • neo4jproject
  • uv
  • GDS
  • heapq
  • 1. RAGAS 概述
  • 2. 核心评估指标
    • 2.1 检索阶段指标
    • 2.2 生成阶段指标
    • 2.3 综合指标
  • 3. 安装与基本使用
  • 4. 详细指标解释
    • 4.1 上下文相关性 (Context Relevance)
    • 4.2 上下文召回率 (Context Recall)
    • 4.3 忠实度 (Faithfulness)
    • 4.4 答案相关性 (Answer Relevance)
  • 5. 高级功能
    • 5.1 自定义评估
    • 5.2 与其他工具集成
    • 5.3 批量评估
  • 6. 最佳实践
  • 7. 实际应用案例
    • 7.1 评估现有RAG系统
    • 7.2 比较不同检索策略
  • 8. 限制与注意事项
  • 9. 未来发展

RAGAS (Retrieval-Augmented Generation Assessment) 是专门用于评估检索增强生成(RAG)系统质量的框架。

1. RAGAS 概述 #

RAGAS 是一个开源的评估框架,专注于衡量 RAG 系统的三个关键方面:

  • 检索质量
  • 生成质量
  • 检索与生成之间的协同作用

2. 核心评估指标 #

2.1 检索阶段指标 #

  1. 上下文相关性 (Context Relevance)

    • 衡量检索到的文档与问题的相关程度
    • 范围: 0-1,越高表示相关性越好
  2. 上下文召回率 (Context Recall)

    • 评估检索系统找到所有相关文档的能力
    • 需要人工标注的真实上下文作为基准

2.2 生成阶段指标 #

  1. 忠实度 (Faithfulness)

    • 衡量生成答案与提供上下文的一致性
    • 检测是否存在"幻觉"内容
  2. 答案相关性 (Answer Relevance)

    • 评估生成答案与问题的直接相关程度
    • 避免答非所问的情况

2.3 综合指标 #

RAGAS 分数

  • 上述指标的加权组合
  • 提供对 RAG 系统的整体评估

3. 安装与基本使用 #

# 使用 pip 安装 ragas 包
pip install ragas

基本评估流程:

# 导入 ragas 的 evaluate 方法
from ragas import evaluate
# 导入 datasets 包中的 Dataset 类
from datasets import Dataset
# 导入 os 库用于设置环境变量
import os

# 设置OpenAI API密钥
# 用于访问 OpenAI 的 API
os.environ["OPENAI_API_KEY"] = "your-api-key"

# 准备数据
# 构造一个包含问题、答案、上下文和真实答案的数据字典
data = {
    "question": ["What is the capital of France?"],  # 问题
    "answer": ["Paris"],  # 生成的答案
    "contexts": [["France is a country in Europe. Its capital is Paris."]],  # 检索到的上下文
    "ground_truth": ["The capital of France is Paris."]  # 真实答案
}
# 将数据字典转换为 HuggingFace 的 Dataset 对象
dataset = Dataset.from_dict(data)

# 执行评估
# 调用 evaluate 方法进行评估,指定评估指标
result = evaluate(
    dataset,
    metrics=[
        "context_precision",  # 上下文精度
        "faithfulness",      # 忠实度
        "answer_relevance"   # 答案相关性
    ]
)

# 打印评估结果
print(result)

4. 详细指标解释 #

4.1 上下文相关性 (Context Relevance) #

评估公式:

# 如果所有检索到的上下文都相关,则得分为1,否则为0
Score = 1 if all retrieved contexts are relevant else 0

优化方向:

  • 改进检索模型
  • 优化检索参数(top-k)
  • 增强文档预处理

4.2 上下文召回率 (Context Recall) #

计算方法:

# 召回率等于检索到的相关文档数除以总相关文档数
召回率 = (检索到的相关文档数) / (总相关文档数)

提高方法:

  • 扩大检索范围
  • 使用多向量检索
  • 实施查询扩展

4.3 忠实度 (Faithfulness) #

评估标准:

  • 答案中的所有声明是否都能从上下文中得到支持
  • 是否引入了外部知识

改进策略:

  • 调整LLM提示词
  • 实现事实核查后处理
  • 限制生成长度

4.4 答案相关性 (Answer Relevance) #

评估维度:

  • 答案是否直接回答问题
  • 是否包含冗余信息
  • 是否清晰明确

5. 高级功能 #

5.1 自定义评估 #

# 导入 ragas 的 faithfulness 指标
from ragas.metrics import faithfulness
# 导入 ragas 的 evaluate 方法
from ragas import evaluate

# 自定义评估标准
# 将自定义指标放入列表
custom_metrics = [faithfulness]

# 执行自定义评估
result = evaluate(dataset, metrics=custom_metrics)

5.2 与其他工具集成 #

# 与LangChain集成
# 从 langchain.evaluation 导入 load_dataset
from langchain.evaluation import load_dataset
# 从 ragas.langchain 导入 RagasEvaluatorChain
from ragas.langchain import RagasEvaluatorChain

# 创建评估器,指定评估指标
# 这里只用 faithfulness
# 创建 RagasEvaluatorChain 实例
evaluator = RagasEvaluatorChain(metrics=["faithfulness"])
# 使用评估器对字符串进行评估
# prediction: 生成的答案
# input: 问题
# context: 检索到的上下文
eval_result = evaluator.evaluate_strings(
    prediction="Generated answer",
    input="Question",
    context="Retrieved contexts"
)

5.3 批量评估 #

# 导入 ragas 的 evaluate 方法
from ragas import evaluate
# 导入 datasets 包中的 load_dataset 方法
from datasets import load_dataset

# 加载测试数据集
# 从 HuggingFace Hub 加载名为 "ragas-test" 的数据集,选择 "test" 分割
dataset = load_dataset("ragas-test", split="test")

# 批量评估
# 对整个数据集进行评估
results = evaluate(dataset)

6. 最佳实践 #

  1. 评估数据集构建

    • 覆盖各种问题类型
    • 包含边缘案例
    • 确保真实上下文标注准确
  2. 评估频率

    • 每次模型更新后
    • 添加新数据源后
    • 定期(如每周)评估
  3. 结果分析

    • 识别系统性弱点
    • 比较不同版本表现
    • 建立性能基准

7. 实际应用案例 #

7.1 评估现有RAG系统 #

# 导入 ragas 的 evaluate 方法
from ragas import evaluate
# 导入 datasets 包中的 Dataset 类
from datasets import Dataset

# 模拟RAG输出
# 构造包含多个问题、答案、上下文和真实答案的数据字典
data = {
    "question": ["What causes rain?", "Who wrote Hamlet?"],  # 问题
    "answer": ["Rain is caused by precipitation", "Hamlet was written by Shakespeare"],  # 生成的答案
    "contexts": [
        ["Precipitation occurs when...", "Weather patterns..."],  # 第一个问题的上下文
        ["Shakespeare's works include...", "Elizabethan era literature..."]  # 第二个问题的上下文
    ],
    "ground_truth": [
        "Rain is caused by the condensation of water vapor in the atmosphere",  # 第一个问题的真实答案
        "William Shakespeare wrote Hamlet"  # 第二个问题的真实答案
    ]
}

# 将数据字典转换为 Dataset 对象
dataset = Dataset.from_dict(data)
# 执行评估
results = evaluate(dataset)
# 打印评估结果
print(results)

7.2 比较不同检索策略 #

# 评估两种检索策略
# 分别对两个不同的数据集进行评估
strategy1_results = evaluate(strategy1_dataset)
strategy2_results = evaluate(strategy2_dataset)

# 比较关键指标
# 将两种策略的关键指标放入字典进行对比
compare = {
    "Context Relevance": [
        strategy1_results["context_relevance"],
        strategy2_results["context_relevance"]
    ],
    "Answer Faithfulness": [
        strategy1_results["faithfulness"],
        strategy2_results["faithfulness"]
    ]
}

8. 限制与注意事项 #

  1. 人工标注依赖

    • 部分指标需要真实上下文作为基准
    • 标注成本可能较高
  2. LLM评估的偏差

    • 基于LLM的评估可能带有模型自身偏见
    • 建议结合人工审核
  3. 指标选择

    • 根据应用场景选择合适指标
    • 避免指标过载

9. 未来发展 #

  1. 更多自动化评估指标
  2. 支持多模态RAG评估
  3. 实时评估能力
  4. 更细粒度的错误分析

RAGAS 为RAG系统提供了标准化的评估方法,帮助开发者系统性地衡量和改进系统性能。通过定期评估和指标跟踪,可以持续优化RAG应用的准确性和可靠性。

访问验证

请输入访问令牌

Token不正确,请重新输入