当前位置: 首页 > 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。

相关文章:

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

背景介绍 最近抽空参加了一个讯飞的 RAG 比赛,耗时两周终于在最后一天冲上了榜首。 整体的框架是基于 RAG 能力有点弱弱的 Dify 实现。在比赛调优的过程中,经常需要批量提交几百个问题至 Dify 获取回答,并需要跟踪多轮调优的效果差异。借助…...

在MySQL中,要查询所有用户及其权限,您可以使用以下命令:

文章目录 1、查询所有用户1.1、登录数据库1.2、select user,host from mysql.user; 2、查看用户的权限 1、查询所有用户 1.1、登录数据库 [rootlocalhost ~]# docker exec -it spzx-mysql /bin/bash rootab66508d9441:/# mysql -uroot -p123456 mysql: [Warning] Using a pas…...

VMware下载安装教程

目录 一.下载二.安装 一.下载 官网地址:官网 下载的时候选择Workstation Player,这个是免费的,当然你也可以选择下载Workstation Pro。 二.安装 下载完成之后点击安装包按照需要安装即可。 安装之后启动,可以看到这个能够免费使…...

AI跟踪报道第58期-新加坡内哥谈技术-本周AI新闻: OpenAI动荡时刻和Meta从未如此动人

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

深入理解 Nuxt.js 中的 app:error:cleared 钩子

title: 深入理解 Nuxt.js 中的 app:error:cleared 钩子 date: 2024/9/28 updated: 2024/9/28 author: cmdragon excerpt: Nuxt.js 中的 app:error:cleared 钩子的用途及其实现方式。这个钩子为开发者提供了一种优雅的方式来处理错误清除后的状态恢复和用户反馈。 categor…...

国内白帽子能赚多少钱?有多少白帽子全职挖洞能养活自己?零基础兼职挖漏洞收藏这一篇就够了

经常会有粉丝朋友私信大白,想探究一下国内的SRC(安全响应中心)平台究竟支持了多少白帽黑客的生活?又有多少白帽黑客能够不依赖于传统工作,全职从事漏洞挖掘并以此维生?以下信息或许可以为那些有意踏上这条道…...

速盾:cdn是怎么加速视频的?

CDN(Content Delivery Network)是一种网络加速服务,通过将内容分发到全球各地的服务器节点上,提供更快速度和更可靠的内容传输。当涉及到视频内容时,CDN起到了至关重要的作用,它通过一系列的技术和策略来加…...

前台项目启动/打包报错 Error: error:0308010C:digital envelope routines::unsupported

在package.json中修改启动/打包语句 如图,我这里是打包时候报错,就在build里前面加上 set NODE_OPTIONS--openssl-legacy-provider && 再次打包,成功。...

IPEmotion 2024 R2现支持Amazon S3和Windows SMB服务器

新版IPEmotion 2024 R2软件推出了许多新功能,其中的一大功能是支持Amazon S3、Windows SMB服务器以及新的IPE-CAM-007 USB摄像头。IPEmotion 2024 R2还支持直接写入TEDS数据和配置可装载电池的新款IPE833记录仪。 — 创新成果一览 — ■ 支持Amazon S3、Windows SM…...

Cache与内存-系统架构师(七十三)

1逆向工程导出的信息可以分为实现级、结构级、功能级和领域级四个抽象层次。程序的抽象语法树属于(),反映程序分量之间相互依赖的关系信息属于()。 问题1 问题2 A实现级 B结构级 C功能级 D领域级 解析&#xff1a…...

Synchronized和 ReentrantLock有什么区别?

目录 一、java中的线程同步 二、Synchronized 使用方式 底层原理 synchronized 同步代码块的情况 synchronized 修饰方法的情况 总结 synchronized 和 volatile 有什么区别? 三、ReentrantLock 底层原理 使用方式 四、Synchronized和 ReentrantLock有什…...

加速链游Web2.5过渡到 Web3,一文读懂 Zypher Network 的 Zytron 引擎

前言 Zytron 引擎在 Zypher Network 体系中扮演着重要的角色,其为开发者提供了一个具备主权的、可定制的 Layer3 Rollup 基础设施,并匹配了具备通用零知识协议模板的 ZK 引擎。在 Zytron 引擎与链下分布式计算网络的配合下能够以去中心化的方式为游戏的…...

是否是递增的字符串(c语言)

1 其功能是:判断t所指字符串中的字母是否由连续递增字母序列组成 (字符串长度大于等于2)。 例如:字符串: uvwxyz满足要求; 而字符串: uvxwyz不满足要求。 2.我们先输入字符串,然后进行判断是否a[i]1a[i1],如果是则是由连续字母组成的字符串&#xf…...

Unity 资源 之 PoseAI 基于肌肉的姿势创作工具

Unity 资源 之 PoseAI 基于肌肉的姿势创作工具 一,前言二,资源包内容三,免费获取资源包 一,前言 Unity 开发者们,今天要为大家介绍一款极具创新性的工具 ——PoseAI。 PoseAI 是一种最先进的基于肌肉的姿势创作工具&…...

【IP限流】⭐️通过切面实现无校验保护接口的防刷逻辑

目录 🍸前言 🍻一、实现方法 🍺二、伪代码实现 🍹三、章末 🍸前言 小伙伴们大家好,上次写了一篇文章记录了最近自己装台式电脑中遇到的问题,以及整体的安装步骤和本地的配置选择&#xff0c…...

SwiftUI简明概念(3):Path.addArc的clockwise方向问题

一、画个下半圆 SwiftUI中绘制下半圆的一个方法是使用Path.addArc,示例代码如下: var body: some View {Path { path inpath.addArc(center: CGPoint(x: 200, y: 370), radius: 50, startAngle: Angle(degrees: 0), endAngle: Angle(degrees: 180.0), …...

$attrs 和 $listeners

通常情况下,父子组件之间的数据是通过 props 由父向子传递的,当子组件想要修改数据时,则需要通过 $emit 以事件形式交由父组件完成,而这种交互方式只存在于父子组件之间,多层嵌套的时候,处于内层的组件想要…...

智尚招聘求职小程序V1.0.17

微信小程序招聘管理系统。支持多城市、人才版块、招聘会、职场资讯、经纪人入驻等功能。提供全部无加密源码,支持私有化部署。 V1.0.17增加功能 1、增加求职者投简历时检测简历状态功能 更新后无需重新发布前端...

C语言编程-经典易错题1

#include<stdio.h> int main(int argc, char const *argv[]) { unsigned int a6;int b-20; (ab>6)?puts("a>6"):puts("a<6"); return 0; } 这无符号整型问题的答案是输出是 >6 这个问题是考察C语言中整数自动转换原则。 具…...

联宇集团:如何利用CRM实现客户管理精细化与业务流程高效协同

在全球化的浪潮中&#xff0c;跨境电商正成为国际贸易的新引擎。作为领先的跨境电商物流综合服务商&#xff0c;广东联宇物流有限公司(以下称“联宇集团”)以其卓越的物流服务和前瞻的数字化战略&#xff0c;在全球市场中脱颖而出。本文将基于联宇集团搭建CRM系统的实际案例&am…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

大数据治理的常见方式

大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法&#xff0c;以下是几种常见的治理方式&#xff1a; 1. 数据质量管理 核心方法&#xff1a; 数据校验&#xff1a;建立数据校验规则&#xff08;格式、范围、一致性等&#xff09;数据清洗&…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

SQL进阶之旅 Day 22:批处理与游标优化

【SQL进阶之旅 Day 22】批处理与游标优化 文章简述&#xff08;300字左右&#xff09; 在数据库开发中&#xff0c;面对大量数据的处理任务时&#xff0c;单条SQL语句往往无法满足性能需求。本篇文章聚焦“批处理与游标优化”&#xff0c;深入探讨如何通过批量操作和游标技术提…...