开箱即用的大模型应用跟踪与批量测试方案

news2024/9/28 2:15:58

背景介绍

最近抽空参加了一个讯飞的 RAG 比赛,耗时两周终于在最后一天冲上了榜首。
请添加图片描述

整体的框架是基于 RAG 能力有点弱弱的 Dify 实现。在比赛调优的过程中,经常需要批量提交几百个问题至 Dify 获取回答,并需要跟踪多轮调优的效果差异。借助 Langfuse 可以通过网页跟踪结果,相对比较方便了很多。但是现有版本的 Langfuse 不支持提交文件构建数据集,私有化部署的版本也不支持自动化评估,多版本的比较很麻烦。

在比赛期间断断续续实现了一些自动化脚本进行辅助,比赛结束后感觉确实很实用,因此就有了这个项目 Dify-Eval, 一款补全 Dify + Langfuse 组合短板的自动化工具。目前具备如下所示的功能:

  1. 一键上传本地文件至 Langfuse 构建数据集;
  2. 基于 Langfuse 数据集批量至 Dify,并关联原始数据集;
  3. 全自动大模型评分,多维度,可拓展;
  4. 多版本评分比较,可视化查看效果提升;

请添加图片描述
请添加图片描述

从我自己的使用体验来看,整体还是比较丝滑的。当然开发周期比较短暂,总共耗时 3 天左右,可能还有一些 bug 未发现,欢迎大家作为小白鼠来试用下。

项目介绍

Dify-Eval 是为 Dify + Langfuse 组合设计,这个组合日常的应用监控够用了,而 Dify-Eval 主要解决这个组合缺失的自动化批量测试与评估能力。框架的自动化评估是基于 Ragas 实现。详细的上手流程可以直接查看 Dify-Eval Github

整体是按照开箱即用的方案设计,期望用户只需要根据自己的需求修改 .env 配置文件即可走通完整流程。实际使用基本只需要执行下面的命令:

# 本地文件提交至 Langfuse,并提交问题给 Dify 进行批量测试

python run.py

# 基于 Ragas 进行数据集自动化评估

python evaluate.py

Langfuse 事实上是支持实时评估的,为什么要设计为两个流程呢?原因如下:

  1. 评估流程比较慢,自动化测试过程则快很多。合并在一起就每次测试都需要等待很久,分开设计下可以根据需要自行确定是否进行自动化评估;
  2. Dify 同步记录至 Langfuse 是异步完成的,因此实时评估时可能会出现 Dify 提交完成,但是 Langfuse 上获取不到记录,从而导致评估失败的问题;

所以建议先进行批量自动化测试,有需要的情况下确认记录已经同步至 Langfuse ,接下来执行自动化评估。

上手介绍

考虑真正需要用户修改的就是配置文件,而 Dify-Eval 同时关联了 Dify, Langfuse 和 Ragas,因此配置可能会稍微多一些。因此下面大概介绍下其中的配置项,通过配置项基本就能大致了解项目的设计了:

Langfuse 配置

Langfuse 相关的配置如下所示

# Langfuse 的公钥私钥与地址

LANGFUSE_PUBLIC_KEY=pk-lf-
LANGFUSE_SECRET_KEY=sk-lf-
LANGFUSE_HOST=http://localhost:3000/

这部分就是连接 Langfuse 的凭证和地址,对应的获取路径可以参考下图:

请添加图片描述

DATASET_NAME="数据集"
RUN_NAME="版本v1"

DATASET_NAME 对应的是一个 Langfuse 测试数据集,一个测试数据集中包含多个测试项,每个测试项对应的就是一个测试问题。

RUN_NAME 对应的就是基于测试数据集的一次完整的自动化测试。因此可想而知,基于 DATASET_NAME 可以多次进行测试,一般情况下建议修改 RUN_NAME 进行区分,方便后续跟踪效果的比较。

比如下图中就是基于同样的数据集进行了两次测试,对应的 RUN_NAME 分别为 版本v1版本v2

请添加图片描述

Dify 配置

Dify 相关的配置如下所示:

DIFY_API_BASE=http://localhost:58882/v1
DIFY_API_KEY=app-

这部分就是连接 Dify 应用的凭证,对应的获取路径可以参考下图:

请添加图片描述

Ragas 评估

Ragas 评估相关的配置如下所示:

RAGAS_BASE_URL="http://localhost:9997/v1"
RAGAS_EVAL_LLM="qwen2-instruct"
RAGAS_EMBEDDING="bge-m3"
RAGAS_API_KEY="cannot be empty"

Ragas 评估时需要使用大模型和嵌入模型,因此需要配置对应的地址和模型名称,理论上 OpenAI 格式的大模型和嵌入服务都是支持的。

实际测试时是基于私有化部署的 Xinference 服务完成的,实际也是可以支持的。我实际运行的效果如下所示:

请添加图片描述

输入输出文件

输入输出文件相关的配置如下所示:

LOCAL_FILE_PATH="example.csv"
OUTPUT_FILE_PATH=""

输入文件的格式为 .csv,其中 question 对应的是测试问题,answer 对应的是测试答案。

考虑到部分情况下可能没有正确答案,项目支持只包含 question 列,同样可以完成批量测试。

但是熟悉 Ragas 评估的研发同学应该知道,没有正确答案时,Ragas 的部分评估指标是无法支持的,因此在执行前可能会需要将 evaluate.py 中的 DEFAULT_METRICS 中不支持的指标去掉,就可以愉快地进行测试了。具体哪些指标不支持,可以参考下 Ragas Metrics 文档

输出文件的格式为 .csv ,默认为空情况下会输出至 results/ 目录下。

总结

整体而言,Dify-Eval 是一个比较趁手的小工具,补全 Dify + Langfuse 组合的一些明显短板,从目前的使用来看还不错,欢迎有需要的试用下。暂时没用上的可以 star 关注下,说不定明天就用上了。

当然目前项目还处于早期阶段,可能会存在一些 bug,欢迎大家反馈和提供 Pull Request。

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

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

相关文章

Paxos 协议详解:分布式系统一致性的基石

文章目录 1. 分布式系统与一致性问题1.1 分布式系统的定义1.2 一致性问题的起源1.3 CAP 定理及其影响1.4 分布式系统中的失败假设 2. Paxos 协议的背景与介绍2.1 Paxos 协议是什么2.3 Paxos 解决什么问题 3. Paxos 的基本原理3.1 Paxos 角色3.2 Paxos 的多数原则3.3 Paxos 协议…

Python画笔案例-068 绘制漂亮米

1、绘制漂亮米 通过 python 的turtle 库绘制 漂亮米,如下图: 2、实现代码 绘制 漂亮米,以下为实现代码: """漂亮米.py注意亮度为0.5的时候最鲜艳本程序需要coloradd模块支持,安装方法:pip install coloradd程序运行需要很长时间,请耐心等待。可以把窗口最小…

找不到MFC100U.dll,无法继续执行代码,重新安装此程序可解决此问题

概要 最近在研究中移物联的模组ML307R,通过二次开发 的方式对之前开发的物联网--如意控项目进行升级,研究了ML307R模组的开发资料,中移物联的模组二次开发难度确实很高,中移物联ML307R的openCPU开发采用的事C语言开发的&#xff0…

局域网中实现一对一视频聊天(附源码)

一、什么是webRTC WebRTC(Web Real-Time Communication)是一项支持网页浏览器进行实时语音对话或视频对话的API技术。它允许直接在浏览器中实现点对点(Peer-to-Peer,P2P)的通信,而无需任何插件或第三方软件…

不可思议的转折,这部韩剧在口碑上实现逆袭

今天,推荐一下韩国版的《纸钞屋》,第一季豆瓣从9.4分滑到6.9分。第二季的回归却让这部剧迎来了“翻身仗”,目前豆瓣已飙升至8.4。 对比第一季,第二季不仅在剧情反转和人物刻画上有了明显的提升,还引入了《黑暗荣耀》中…

浅谈Agent智能体

Agent智能体无疑是24年最为火爆的话题之一,那么什么是Agent智能体?有什么作用?为什么需要Agent智能体? 用下边一张图简单说明一下 每日进步一点点

Python制作进度条,18种方式全网最全!(不全去你家扫厕所!)

想象一下,你的程序在执行复杂任务时,不再是冷冰冰的等待光标,而是伴随着色彩斑斓、动态变化的进度条,不仅让等待变得有趣,更让用户对你的作品刮目相看。从基础的文本进度条到高级的图形界面进度条,从简单的…

小程序兼容问题

【微信小程序】安卓兼容问题,scroll-view上拉导致input输入框上移 引用:https://blog.csdn.net/krico233/article/details/127491690 当一个scroll-view占据全屏高度(100vh)并包含input表单时,输入框聚焦会导致光标上移但输入框本身位置不变…

【C语言】数组(上)

【C语言】数组 1、数组的概念2、一维数组的创建和初始化2.1数组创建2.2数组的初始化2.3数组的类型 3、一维数组的使用3.1数组下标3.2 数组元素打印3.3数组的输入 4、一维数组在内存中的存储5、sizeof计算数组元素个数 1、数组的概念 数组是一组相同类型元素的组合,…

【RabbitMQ】面试题

在本篇文章中,主要是介绍RabbitMQ一些常见的面试题。对于前几篇文章的代码,都已经在码云中给出,链接是mq-test: 学习RabbitMQ的一些简单案例 (gitee.com),如果存在问题的话欢迎各位提出,望共同进步。 MQ的作用以及应用…

快速上手Make Sense:在线标注数据集的强大工具

链接: Makesense汉化版本 Makesense英文版 随着深度学习在计算机视觉领域的广泛应用,数据集标注成为了一项重要的任务。Make Sense正是一个为图像数据集提供标注功能的在线工具。其易用性和强大的功能使得它在众多标注工具中脱颖而出。本文将为你详细介绍…

找不到msvcr100.dll怎么解决?总结6个有效的解决方法

在使用计算机的过程中,我们经常会遇到一些错误提示,其中之一就是“msvcr100.dll丢失”。这个问题可能会让我们感到困惑和无助,但是不用担心,本文将为大家介绍六种实用的解决方法,帮助你轻松解决这个问题。 一&#xff…

raylib实现生产者消费者模型增加缓冲提高帧率

原来增加了四叉树导致帧率下降 后来学了生产者消费者模型&#xff0c;尝试追加缓冲池&#xff0c;剥离主函数查找需要更新的数据 帧率上升稳定到60帧 多了10 帧 中间工程主要是探索数据结构体怎么安排 // 参考自 https://zhuanlan.zhihu.com/p/693482704 #include <stdio.…

C语言-进程

一,进程的基本认识 1,进程的简介 进程描述是一个程序执行过程。当程序执行后&#xff0c;执行过程开始&#xff0c;则进程产生&#xff1b;执行过程结束&#xff0c;则进程也就结束了.进程和我们普通电费程序最大的区别就是,进程是动态的,他是一个过程,而程序是静态的. 2,进程…

永辉超市自救三部曲:靠名创优品复制胖东来?如何避免另一个苏宁易购?

《港湾商业观察》施子夫 王璐 从潮流产品新锐向大型商超迈入&#xff0c;没有人想到名创优品(09896.HK&#xff1b;MNSO.US)会成为永辉超市&#xff08;601933.SH&#xff09;的第一大股东。 近63亿元的收购价让两家本就知名度颇高的企业在2024年的商业江湖中更加瞩目。然而…

​极狐阿尔法 S5安全至上,北汽极狐打造移动防护堡垒

在新能源汽车的广阔舞台上&#xff0c;北汽极狐以其卓越的品质和创新的技术&#xff0c;不断书写着辉煌篇章。其中&#xff0c;极狐阿尔法 S5更是以其强大的性能、豪华的配置和亲民的价格&#xff0c;成为了众多消费者关注的焦点。 北汽极狐的品质追求 北汽极狐一直以来都将品…

【蓝牙小知识集锦!】禁止电脑连接蓝牙如何操作?一分钟教你5种小妙招!

禁止电脑连接蓝牙如何操作&#xff1f; 在回答如何禁止电脑连接蓝牙这个问题之前&#xff0c;我们要先了解&#xff0c;企业为啥要禁止蓝牙&#xff1f;原因是什么&#xff1f; 一、禁止蓝牙连接的原因 它可以涉及多个方面&#xff0c;主要包括安全性、效率、能源管理以及避免…

matlab r2024a、matlab R2024b保姆级安装教程

​ 1.安装步骤 右键【setup.exe】以【管理员身份运行】 点击【高级选项】-【我有文件安装密钥】 点击【是】-【下一步】 输入密钥【21471-07182-41807-00726-32378-34241-61866-60308-44209-03650-51035-48216-24734-36781-57695-35731-64525-44540-57877-31100-06573-50736-…

【论文速看】DL最新进展20240927-目标检测、Transformer

目录 【目标检测】【Transformer】 【目标检测】 [2024小目标检测] A DeNoising FPN With Transformer R-CNN for Tiny Object Detection 论文链接&#xff1a;https://arxiv.org/abs/2406.05755 代码链接&#xff1a;https://github.com/hoiliu-0801/DNTR 尽管计算机视觉领域…

信息学奥赛复赛复习05-CSP-J2020-01优秀的拆分-对数函数、自然对数、以2为底的对数、幂函数、打表

PDF文档回复:20240927 1 2020 CSP-J 题目1 优秀的拆分 [题目描述] 一般来说&#xff0c;一个正整数可以拆分成若干个正整数的和 例如&#xff0c;11&#xff0c;101234 等。对于正整数 n的一种特定拆分&#xff0c;我们称它为“优秀的”&#xff0c;当且仅当在这种拆分下&am…