RAG评估-ragas

RAG效果评估的必要性

可以有方向的优化RAG。通过评估出的各指标,可以知道RAG改善的方向和参数调整的程度。

RAG评估方法

人工评估

邀请专家或人工评估员对RAG生成的结果进行评估。他们可以根据预先定义的标准对生成的答案进行质量评估,如准确性、连贯性、相关性等。这种评估方法可以提供高质量的反馈,但会消耗大量的时间和人力资源

自动化评估

自动化评估肯定是RAG评估的主流和发展方向,以下是一些常用的评估工具。

​Prompt+LLM

​使用prompt+LLM实现对rag能力的评估,需要熟悉各评估指标的计算方式,并且需要很强的prompt能力,目前网上还没有成熟方案。

​Trulens

Trulens-Eval 也是专门用于评估 RAG 指标的工具,它对 LangChain 和 Llama-Index 都有比较好的集成,可以方便地用于评估这两个框架搭建的 RAG 应用。

相关地址

开源链接:https://github.com/truera/trulens/

使用手册:https://www.trulens.org/

RAGAS

Ragas 是专注于评估 RAG 应用的工具,通过简单的接口即可实现评估。只要把 RAG 过程中的question, contexts, answer, ground_truths,构建成一个 Dataset 实例,即可一键启动测评,非常方便。

​Ragas 指标种类丰富多样,对 RAG 应用的框架无要求。也可以通过 langsmith 来监控每次评估的过程,帮助分析每次评估的原因和观察API key 的消耗。

相关地址

开源链接:https://github.com/explodinggradients/ragas

使用手册:https://docs.ragas.io/en/stable/getstarted/install.html

RAG评估指标

RAG 三元组

在RAG系统中主要包含三个流程:用户提问、向量数据库检索、大模型回答,我们能从三个流程中获取的信息有:用户提问(query)、RAG 系统召回的引用上下文(contexts)、RAG 系统的回答(answer)。可以通过检测这三元组之间两两元素的相关度,来评估一个 RAG 应用的效果。

得出下面三个对应的指标:

  • Context Relevance: 衡量召回的 Context 能够支持 Query 的程度。如果该得分低,反应出了召回了太多与 Query 问题无关的内容,这些错误的召回知识会对 LLM 的最终回答造成一定影响。

  • Faithfulness: 这个指标衡量了生成的答案在给定的上下文中的事实一致性。它是根据答案和检索到的上下文计算出来的如果该得分低,反应出了 LLM 的回答不遵从召回的知识,那么回答出现幻觉的可能就越大。

  • Answer Relevance: 侧重于评估生成的答案与给定查询提示的相关性。对于不完整或包含冗余信息的答案,会分配较低的分数。

 

上面的指标不需要参考 Ground-truth(人类写好的可以回答对应提问的标准回答),如果有 ground-truth,评估指标就更加丰富,即可以从更多角度来衡量 RAG 应用的效果。但获得标准好 ground-truth 的数据集是很昂贵的,可能需要花大量的人力和时间来进行标注。

可以利用 LLM 根据知识文档来生成 query 和 answer,然后对answer进行修改和完善,也可以作为 ground-truth 使用。

ragas评估范围

ragas是作为rag应用(必须有知识库+大模型)能力评估的一个工具,输入必须有 用户提问(query)、向量数据库从知识库召回的引用上下文(contexts)、大模型的回答(answer),这是rag应用中必备的三个元素,ragas也是针对这三个元素进行评估。

ragas不能评估只有大模型的问答能力,原因:

1、只是大模型问答,流程中不包含向量数据库检索,没有 contexts 输入,ragas评估必须有 contexts 输入。

2、大模型问答的结果,跟大模型的训练数据和prompt有关,大模型评估和rag应用评估是两个不同的方向。

3、因为我们平台都是调用第三方大模型,去测试第三方大模型会花费巨大时间(人工标注),收益不高,而且也不能根据某个场景的问答去评估某个大模型的能力,太片面。

RAGAS指标

Ragas评估需要提供的输入:

  • 用户提问 question: list[str]

  • 向量数据库召回的上下文 contextx: list[str]

  • LLM回答 answer: list[list[str]]

  • 人类回答 ground_truths: list[list[str]]

Ragas评估结果有以下几种指标:

  • 忠实度(faithfulness)

  • 答案相关性(Answer relevancy)

  • 上下文精度(Context precision)

  • 上下文召回率(Context recall)

  • 上下文相关性(Context relevancy)

  • 答案相似度answer_similarity

  • 答案正确性 Answer Correctness

其中 忠实度(faithfulness)、答案相关性(Answer relevancy)、上下文精度(Context precision)是常用的三种指标。

上下文召回率上下文相关性、答案相似度 和 答案正确性 需要有ground_truth才可以计算得出,上下文召回率上下文相关性用以衡量检索系统的性能。

忠实度(faithfulness)

忠实度(faithfulness)衡量了生成的答案(answer)与给定上下文(context)的事实一致性。它是根据answer和检索到的context计算得出的。并将计算结果缩放到 (0,1) 范围且越高越好。如果得分较低,则表明LLM的响应不符合检索到的知识。

如果这里得分为0或者得分较低,但仍然获得了答案。就说明获得的答案全部或者部分由大模型自己“编造”生成(当然也可能是对的),而不是从上下文推理获得,这就是常见的大模型幻觉。

答案相关性(Answer relevancy)

答案相关性(Answer relevancy) 重点评估生成的答案(answer)与用户问题(question)之间相关程度。不完整或包含冗余信息的答案将获得较低分数。该指标是通过计算question和answer获得的,它的取值范围在 0 到 1 之间,其中分数越高表示相关性越好。

这个指标说明生成的答案是否完整且简洁的,但不考虑答案是否正确。 指标较高,说明最后的输出答案还是涵盖了问题中需要回答的关键点, 尽管这些答案不一定是从context得出,也不一定正确。

上下文相关性(Context relevancy)

衡量检索到的上下文(Context)的相关性,根据用户问题(question)和上下文(Context)计算得到,并且取值范围在 (0, 1)之间,值越高表示相关性越好。理想情况下,检索到的Context应只包含解答question的信息。

上下文相关性是一个衡量检索质量的指标,主要评估检索到的上下文支持查询的程度。得分低表示检索到大量不相关的内容,这可能会影响LLM生成的最终答案。

上下文精度(Context precision)

评估所有在上下文(contexts)中呈现的与基本事实(ground-truth)相关的条目是否排名较高。理想情况下,所有相关文档块(chunks)必须出现在顶层。该指标使用ground_truth和Context计算,值范围在 0 到 1 之间,其中分数越高表示精度越高。

得分低 通常说明导入知识库涵盖范围不足、或者虽然能够检索相关知识,但是却无法推导出正确答案,可能存在知识错误情况。

上下文精度的优势在于它能够感知排名效果。然而它的缺点是,如果相关召回很少,但都排名很高,那么分数也会很高。因此,有必要结合其他几个指标来考虑整体效果。

上下文召回率(Context recall)

上下文召回率(Context recall)衡量检索到的上下文(Context)与人类提供的真实答案(ground truth)的一致程度。它是根据ground truth和检索到的Context计算出,取值范围在 0 到 1 之间,值越高表示性能越好。

在理想情况下,真实答案ground truth中的所有句子都应归因于检索到的Context。

答案相似度 answer_similarity

答案相似度是评估生成的答案answer与基本事实ground truth之间的相似性。此评估值范围在 0 到 1 。分数越高,表示生成的答案与基本事实之间的匹配程度越高。

答案正确性 Answer Correctness

答案正确性评估生成的答案answer与基本事实ground truth相比的准确性。此评估值范围在 0 到 1。分数越高,表示生成的答案与基本事实之间的一致性越高,正确性越高。

答案正确性包含两个关键方面:生成的答案与基本事实之间的语义相似性以及事实相似性。这些方面使用加权方案组合起来,以制定答案正确性分数。

LangSmith

LangSmith是LangChain 官方的 SaaS 服务,可以调试、测试、评估和监控构建在任何LLM框架上的链和智能代理,并与LangChain无缝集成。

平台入口:https://smith.langchain.com/

文档地址:https://python.langchain.com/docs/langsmith/walkthrough

参考博客:https://blog.csdn.net/Attitude93/article/details/136053834

登陆(需要VPN)后创建API KEY,要打通 LangChain 和 LangSmith 很简单,只需要在代码中配置

import os
# langsmith api key
os.environ["LANGCHAIN_API_KEY"] = "******"
os.environ["LANGCHAIN_ENDPOINT"] = "https://api.smith.langchain.com" #LangSmith的服务端点
os.environ["LANGCHAIN_TRACING_V2"]="true"
os.environ["LANGCHAIN_PROJECT"]="test-001"

运行程序之后,可以在LangSmith平台看到当前程序的运行过程

 

 

LangFuse

LangFuse是开源的AI应用维护平台,是LangSmith 的平替,并且它可集成 LangChain,同时也可直接对接 OpenAI API。

本地部署和使用参考:
https://blog.csdn.net/m0_63171455/article/details/139402830
https://www.dongaigc.com/a/langfuse-learning-resources-open-source-llm-platform

posted @ 2024-08-20 20:15  hjy1995  阅读(214)  评论(0编辑  收藏  举报