当前位置: 首页 > news >正文

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

背景介绍

最近抽空参加了一个讯飞的 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。

相关文章:

  • 搜索插入位置
  • 小程序兼容问题
  • 再也不用担心内容重复!在线伪原创工具,让创作更自由!
  • 9月27日,每日信息差
  • 计算机毕业设计之:微信小程序的校园闲置物品交易平台(源码+文档+讲解)
  • AI视频技术:引领影视剧拍摄的未来
  • Java网络通信—UDP
  • 【CSS】字体文本
  • Android常用C++特性之std::optional
  • 镜像电流源与其应用(防倒灌电路)
  • 双指针——数组元素目标和
  • 跑lvs出现soft connect怎么处理?
  • [Doc][ROS2]订阅发布、服务客户端区别
  • 单细胞Seruat和h5ad数据格式互换(R与python)方法学习和整理
  • UNI-SOP应用场景(1)- 纯前端预开发
  • [译] React v16.8: 含有Hooks的版本
  • 08.Android之View事件问题
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CentOS7简单部署NFS
  • ES6--对象的扩展
  • gitlab-ci配置详解(一)
  • HomeBrew常规使用教程
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • Java 23种设计模式 之单例模式 7种实现方式
  • JAVA之继承和多态
  • js ES6 求数组的交集,并集,还有差集
  • laravel with 查询列表限制条数
  • Mocha测试初探
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 两列自适应布局方案整理
  • 聊聊flink的TableFactory
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 前端
  • 日剧·日综资源集合(建议收藏)
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 思考 CSS 架构
  • 微服务核心架构梳理
  • 线性表及其算法(java实现)
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​数据链路层——流量控制可靠传输机制 ​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #、%和$符号在OGNL表达式中经常出现
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • #Linux(权限管理)
  • (55)MOS管专题--->(10)MOS管的封装
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (新)网络工程师考点串讲与真题详解