Ragas

news2024/12/25 9:24:31

在这里插入图片描述

文章目录

    • 一、关于 Ragas
    • 二、安装🛡️
    • 三、快速使用 🔥
      • Open Analytics 🔍
    • 四、References
    • 五、生成综合测试集
      • 文档
      • 数据生成
    • 六、使用您的测试集进行评估
      • 数据
      • Metrics 指标
      • 评估
    • 七、监控生产中的 RAG
      • 需要监控的方面


一、关于 Ragas

Ragas 是 RAG pipelines 的评估框架。

用于评估、监控和提高 LLM和RAG 在生产中的应用性能的专用解决方案,包括用于生产质量监控的自定义模型。

  • 官网:https://docs.ragas.io
  • 文档:https://docs.ragas.io/en/latest/
  • github : https://github.com/explodinggradients/ragas
  • 论文:RAGAS: Automated Evaluation of Retrieval Augmented Generation
    https://arxiv.org/abs/2309.15217
  • discord : https://discord.gg/5djav8GGNZ

Ragas是一个帮助您评估检索增强生成(RAG)管道的框架。

RAG表示一类LLM应用程序,它们使用外部数据来增强LLM的上下文。

现有的工具和框架可以帮助您构建这些管道,但评估和量化管道性能可能很困难。这就是 Ragas(RAG评估)的用武之地。

Ragas为您提供了基于最新研究的工具,用于评估LLM生成的文本,让您深入了解您的RAG管道。

Ragas可以与您的CI/CD集成,以提供连续检查以确保性能。

你可以和创始人约定会议交谈:https://cal.com/shahul-ragas/30min


二、安装🛡️

pip install ragas

从源码安装

git clone https://github.com/explodinggradients/ragas && cd ragas
pip install -e .


三、快速使用 🔥

This is a small example program you can run to see ragas in action!

from datasets import Dataset 
import os
from ragas import evaluate
from ragas.metrics import faithfulness, answer_correctness

os.environ["OPENAI_API_KEY"] = "your-openai-key"

data_samples = {
    'question': ['When was the first super bowl?', 'Who won the most super bowls?'],
    'answer': ['The first superbowl was held on Jan 15, 1967', 'The most super bowls have been won by The New England Patriots'],
    'contexts' : [['The First AFL–NFL World Championship Game was an American football game played on January 15, 1967, at the Los Angeles Memorial Coliseum in Los Angeles,'], 
    ['The Green Bay Packers...Green Bay, Wisconsin.','The Packers compete...Football Conference']],
    'ground_truth': ['The first superbowl was held on January 15, 1967', 'The New England Patriots have won the Super Bowl a record six times']
}

dataset = Dataset.from_dict(data_samples)

score = evaluate(dataset,metrics=[faithfulness,answer_correctness])
score.to_pandas()

更多信息可见文档:https://docs.ragas.io/



Open Analytics 🔍

我们跟踪非常基本的使用指标,以指导我们找出用户想要什么,什么有效,什么无效。作为一家年轻的初创公司,我们必须非常诚实,这就是我们跟踪这些指标的原因。但作为一家开放式初创企业,我们开源 收集到的所有数据。

你可以从这里了解更多:https://github.com/explodinggradients/ragas/issues/49 。

Ragas不会跟踪任何可用于识别您或您的公司的信息

你可以看看我们记录在代码里的: https://github.com/explodinggradients/ragas/blob/main/src/ragas/_analytics.py

你可以设置 RAGAS_DO_NOT_TRACK flag 为 true 来取消 usage-tracking。


四、References

https://docs.ragas.io/en/latest/references/index.html

  • Evaluation
    • evaluate()
    • Result
  • Metrics
    • AnswerCorrectness
      • AnswerCorrectness.name
      • AnswerCorrectness.weights
      • AnswerCorrectness.answer_similarity
      • AnswerCorrectness.adapt()
      • AnswerCorrectness.init()
      • AnswerCorrectness.save()
    • AnswerRelevancy
      • AnswerRelevancy.name
      • AnswerRelevancy.strictness
      • AnswerRelevancy.embeddings
      • AnswerRelevancy.adapt()
      • AnswerRelevancy.save()
    • AnswerSimilarity
      • AnswerSimilarity.name
      • AnswerSimilarity.model_name
      • AnswerSimilarity.threshold
    • AspectCritique
      • AspectCritique.name
      • AspectCritique.definition
      • AspectCritique.strictness
      • AspectCritique.llm
      • AspectCritique.adapt()
      • AspectCritique.save()
    • ContextEntityRecall
      • ContextEntityRecall.name
      • ContextEntityRecall.batch_size
      • ContextEntityRecall.save()
    • ContextPrecision
      • ContextPrecision.name
      • ContextPrecision.evaluation_mode
      • ContextPrecision.context_precision_prompt
      • ContextPrecision.adapt()
      • ContextPrecision.save()
    • ContextRecall
      • ContextRecall.name
      • ContextRecall.adapt()
      • ContextRecall.save()
    • ContextRelevancy
      • ContextRelevancy.name
      • ContextRelevancy.adapt()
      • ContextRelevancy.save()
    • ContextUtilization
    • Faithfulness
      • Faithfulness.adapt()
      • Faithfulness.save()
  • Integrations

五、生成综合测试集

本教程将指导您创建用于评估 RAG 管道的综合评估数据集。

为此,我们将利用 OpenAI 模型。确保您的 OpenAI API 密钥可在您的环境中轻松访问。

import os

os.environ["OPENAI_API_KEY"] = "your-openai-key"

文档

最初,需要一组文档来生成合成Question/Context/Ground_Truth样本。为此,我们将使用 LangChain 文档加载器来加载文档。

从目录加载文档

from langchain_community.document_loaders import DirectoryLoader
loader = DirectoryLoader("your-directory")
documents = loader.load()

注意:每个 Document 对象都包含一个元数据字典,可用于存储有关可通过Document.metadata。 确保元数据字典包含一个名为 的键filename,因为它将在生成过程中使用。元数据中的属性filename用于标识属于同一文档的块。例如,可以使用文件名来识别属于同一研究出版物的页面。

以下是如何执行此操作的示例:

for document in documents:
    document.metadata['filename'] = document.metadata['source']

至此,我们已经有了一组文档,可以用作生成合成 Question/Context/Ground_Truth 样本的基础。


数据生成

现在,我们将导入并使用 Ragas’TestsetGenerator从加载的文档快速生成综合测试集。

使用默认配置 创建 10 个示例

from ragas.testset.generator import TestsetGenerator
from ragas.testset.evolutions import simple, reasoning, multi_context
from langchain_openai import ChatOpenAI, OpenAIEmbeddings

# generator with openai models
generator_llm = ChatOpenAI(model="gpt-3.5-turbo-16k")
critic_llm = ChatOpenAI(model="gpt-4")
embeddings = OpenAIEmbeddings()

generator = TestsetGenerator.from_langchain(
    generator_llm,
    critic_llm,
    embeddings
)

# generate testset
testset = generator.generate_with_langchain_docs(documents, test_size=10, distributions={simple: 0.5, reasoning: 0.25, multi_context: 0.25})

然后,我们可以将结果导出到 Pandas DataFrame 中。

导出到 Pandas

testset.to_pandas()

在这里插入图片描述


六、使用您的测试集进行评估

一旦您的测试集准备就绪(无论您是创建自己的测试集还是使用综合测试集生成模块),就可以评估您的 RAG 管道了。

本指南可帮助您尽快设置 Ragas,使您能够专注于增强检索增强生成管道,同时该库可确保您的修改改进整个管道。

本指南利用 OpenAI 来运行一些指标,因此请确保您已准备好 OpenAI 密钥并在您的环境中可用。

import os
os.environ["OPENAI_API_KEY"] = "your-openai-key"

注意:默认情况下,这些指标使用 OpenAI 的 API 来计算分数。如果您使用此指标,请确保您已OPENAI_API_KEY使用 API 密钥设置环境密钥。 您还可以尝试其他LLM进行评估,查看自带LLM指南以了解更多信息。

让我们从数据开始。


数据

在本教程中,我们将使用 我们为 Amnesty QA数据集创建的基线之一的示例数据集。数据集包含以下列:

  • question:list[str]- 这些是您的 RAG 管道将被评估的问题。
  • context :list[list[str]]- 传递到LLM以回答问题的上下文。
  • ground_truth:list[str] - 问题的真实答案。

理想的测试数据集应包含与您的实际用例密切相关的样本。

导入样本数据集

from datasets import load_dataset

# loading the V2 dataset
amnesty_qa = load_dataset("explodinggradients/amnesty_qa", "english_v2")
amnesty_qa

也可以看看

请参阅测试集生成,了解如何生成您自己的Question/Context/Ground_Truth三元组以进行评估。请参阅准备您自己的数据集以了解如何准备您自己的数据集以进行评估。


Metrics 指标

Ragas 提供了多个指标来评估 RAG 系统的各个方面:

  1. 检索器:提供context_precisioncontext_recall衡量检索系统的性能。
  2. 生成器(LLM):提供faithfulness测量幻觉以及answer_relevancy测量答案与问题的相关程度的方法。

Ragas 中还有许多其他可用的指标,请查看指标指南以了解更多信息。

现在,让我们导入这些指标并更多地了解它们的含义。

导入指标

from ragas.metrics import (
    answer_relevancy,
    faithfulness,
    context_recall,
    context_precision,
)

这里我们使用四个指标,但它们代表什么?

  1. 忠实性 - 衡量基于问题的上下文答案的事实一致性。
  2. Context_precision - 衡量检索到的上下文与问题的相关程度,传达检索管道的质量。
  3. Answer_relevancy - 衡量答案与问题的相关程度。
  4. Context_recall - 衡量检索器检索回答问题所需的所有必要信息的能力。

要探索其他指标,请查看指标指南。


评估

运行评估就像使用您选择的指标调用一样evaluate简单Dataset

使用样本数据集进行评估

from ragas import evaluate

result = evaluate(
    amnesty_qa["eval"],
    metrics=[
        context_precision,
        faithfulness,
        answer_relevancy,
        context_recall,
    ],
)

result

这就是你需要的所有分数。


如果您想更深入地研究结果并确定管道表现不佳或异常良好的示例,您可以将其转换为 pandas DataFrame 并使用标准分析工具!

导出结果

df = result.to_pandas()
df.head()

在这里插入图片描述

就这样!


七、监控生产中的 RAG

在生产环境中保持 RAG 应用程序的质量和性能具有挑战性。 RAG 目前提供了生产质量监控的基本构建块,为您的应用程序性能提供了宝贵的见解。然而,我们还致力于通过解决三个关键领域来构建更先进的生产监控解决方案:

  1. 如何确保生产数据集的分布与测试集保持一致。
  2. 如何有效地从用户提供的显式和隐式信号中提取见解,以推断 RAG 应用程序的质量并确定需要注意的区域。
  3. 如何构建定制的、更小、更具成本效益且更快的模型来进行评估和高级测试集生成。

注:我们仍在为即将发布的版本开发并收集反馈。您可以请求 提前访问以尝试或分享您在该领域面临的挑战。我们很想听听您的想法和挑战。

此外,您可以将 RAG 指标与其他 LLM 可观察性工具一起使用,例如:

  • Langsmith
  • Phoenix (Arize)
  • Langfuse
  • OpenLayer

这些工具可以提供有关应用程序各个方面的基于模型的反馈,例如下面提到的:


需要监控的方面

  1. Faithfulness 忠实性:此功能有助于识别和量化幻觉实例。
  2. Bad Retrieval 不良检索:此功能有助于识别和量化不良上下文检索。
  3. Bad Response 不良响应:此功能有助于识别和量化回避、有害或有毒的响应。
  4. Bad Format 格式错误:此功能可以检测和量化格式不正确的响应。
  5. Custom Use-Case 自定义用例:要监控特定于您的用例的其他关键方面,请与创始人交谈。

2024-04-28(日)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1631272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FPGA -手写异步FIFO

一,FIFO原理 FIFO(First In First Out)是一种先进先出的数据缓存器,没有外部读写地址线,使用起来非常简单,只能顺序写入数据,顺序的读出数据,其数据地址由内部读写指针自动加1完成&a…

游戏新手村20:游戏落地页广告页如何设计

在互联网营销中,着陆页(Landing Page,有时被称为首要捕获用户页)就是当潜在用户点击广告或者搜索引擎搜索结果页后显示给用户的网页,LandingPage对于游戏广告的转化率和重要性就不言而喻了。 网页游戏LP页面 上图就是我们大家在浏览网站时不小心蹦出或者主动点击某…

一文讲解Android车载系统camera架构 - EVS

Android的camera开发中,使用最多的是camera2 以及现在Google主推的cameraX 架构,而这两个架构主要针对的是手机移动端上camera的流程。 而今天介绍的EVS(Exterior View System)架构是不同于camera2上的手机架构,针对Automotive的版本&#x…

数据库介绍(Mysql安装)

前言 工程师再在存储数据用文件就可以了,为什么还要弄个数据库? 一、什么是数据库? 文件保存数据有以下几个缺点: 文件的安全性问题文件不利于数据查询和管理文件不利于存储海量数据文件在程序中控制不方便 数据库存储介质: 磁…

Blender游戏资产优化技巧

创建视频游戏资产既具有挑战性又富有回报。 经过一些研究并根据我的经验,这里有三个技巧可以帮助你使用 Blender 优化游戏资产。 在 Blender 中优化游戏资源的三种技术可以归结为拥有高效的 3D 模型拓扑、通过烘焙优化纹理,以及最后通过 Blender 节点的…

智慧校园建设有哪些新策略?

在现有智慧校园建设方案中,智慧校园主要是用于解决学校日常事务,如学工管理,教工管理等,并利用数据分析,指导学校的一些决策行为。但随着新技术的不断发展,尤其是云计算、大数据、物联网、移动互联网、人工…

python应用-socket网络编程(1)

目录 1 先简单回顾下客户端和服务端通信的知识 2 服务端常用函数 3 客户端常用函数 4 服务端和客户端都用的函数 5 示例介绍客户端和服务端通信过程 6 建立服务端套接制 7 创建服务端函数socket.create_server() 8 创建客户端套接字 9 客户端连接函数socket.create_co…

春秋云镜 CVE-2023-50564

靶标介绍: Pluck-CMS v4.7.18 中的 /inc/modules_install.php 组件,攻击者可以通过上传一个精心制作的 ZIP 文件来执行任意代码。 开启靶场: 1、点击 admin 进入登录界面 2、使用Burp爆破出登录密码为:admin123,使用…

【吊打面试官系列】Java高并发篇 - 为什么 wait, notify 和 notifyAll 这些方法不在 thread类里面?

大家好,我是锋哥。今天分享关于 【为什么 wait, notify 和 notifyAll 这些方法不在 thread类里面?】面试题,希望对大家有帮助; 为什么 wait, notify 和 notifyAll 这些方法不在 thread类里面? 一个很明显的原因是 JAVA…

个人学习总结__打开摄像头、播放网络视频的以及ffmpeg推流

前言 最近入手了一款非常便宜的usb摄像头(买回来感觉画质很低,没有描述的4k,不过也够用于学习了),想着利用它来开启流媒体相关技术的学习。第一步便是打开摄像头,从而才能够对它进行一系列后续操作,诸如实…

python-pytorch 如何使用python库Netron查看模型结构(以pytorch官网模型为例)0.9.2

Netron查看模型结构 参照模型安装Netron写netron代码运行查看结果需要关注的地方 2024年4月27日14:32:30----0.9.2 参照模型 以pytorch官网的tutorial为观察对象,链接是https://pytorch.org/tutorials/intermediate/char_rnn_classification_tutorial.html 模型代…

IDEA代码重构

重构 重构的目的: 提高代码的可读性、可维护性、可扩展性和性能。 重命名元素 重命名类 当我们进行重命名操作的时候可以看到第六行存在一个R(rename),点击后就会弹出所偶有引用,这样可以避免我们在修改后存在遗漏引用处未修改。 我们可以通过…

Vue项目解决自定义el-dialog的border-radius无效的问题

一、问题产生的原因 自定义el-dialog的border-radius无效的原因其实就是因为层级的问题, f12打开样式检查就能发现组件自身已经全局定义了一个圆角变量 二、解决方法 和上面一样,在项目全局也就是在app.vue中定义全局变量 并且需要给!important&a…

【阿里云笔试题汇总】2024-04-20-阿里云春招笔试题-三语言题解(CPP/Python/Java)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新阿里云近期的春秋招笔试题汇总~ 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢&#x1f…

3. uniapp开发工具的一些事

前言 新的一天,又要开始卷起来了,开发程序开发当前离不开开发工具,一个好的开发工具办事起来那必然是事倍功半的...本文主要分享了关于uniapp里开发工具的一些事~ 概述 阅读时间:约5~7分钟; 本文重点&am…

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析

《深入理解mybatis原理》 MyBatis的架构设计以及实例分析 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查…

linux下安装deepspeed

安装步骤 一开始安装deepspeed不可以使用pip直接进行安装。 这时我们需要利用git进行clone下载到本地: git clone https://github.com/microsoft/DeepSpeed.git 进入到deepspeed的安装目录下 cd /home/bingxing2/ailab/group/ai4agr/wzf/Tools/DeepSpeed 激活…

探索小猪APP分发平台:数字时代的新宠

随着数字化进程的加速,移动应用(APP)市场正迅速扩大。在这个充满竞争的市场中,一个优秀的APP分发平台能够帮助开发者和商家更有效地触及潜在用户,而小猪APP分发平台(www.ppzhu.net)正是其中的佼…

Windows 下安装RabbitMQ

一、消息中间件 ActiveMQ:基于JMS RabbitMQ:基于AMQP协议,erlang语言开发,稳定性好 RocketMQ:基于JMS,阿里巴巴产品,目前交由Apache基金会 Kafka:分布式消息系统,高吞吐…