用jevos构建自己的评测体系:LLM测试集构建与CI回归测试实战
【免费下载链接】jevjevos: an open-source alternative to Jev and Microsoft-Decision-1. Yes/no decisions, choices and scores with probabilities, on your laptops CPU.项目地址https://gitcode.com/gh_mirrors/je/jev点击查看免费下载jevos 是一个跑在笔记本 CPU 上的开源 yes/no 判断模型28–130 ms 就能返回每个答案的概率。本文带你用 jevos 搭建一套自己的 LLM 评测体系从测试集构建、指标选择到把回归测试接进 CI 流水线的完整实战全程本地运行、无需 GPU、不产生任何按 token 计费的调用。为什么公开基准替代不了你自己的测试集现成的公开 benchmark 回答不了你真正关心的问题它们不是你的文本工单、邮件、日志也不是你的问题训练数据可能已经见过它们benchmark contamination分数会虚高即使自己拆数据如果拆出的部分和调参用的数据来自同一批结论同样失真。jev 团队自己的测量里held-out 基准给出 0.855而全新问题只有 0.757。所以正确姿势是用约一百条自己业务的真实用例构建一个永不用于调参的测试集。这正是 building a yes/no test set 给出的方法。把 jevos 当作免费的本地 LLM 评委评测需要一个评委模型。传统做法是调付费 API 上的大模型当 judgejevOS 的做法是把评委也放到本地一次请求可针对同一段文本问多个 yes/no 问题最多 1,024 个共享的 state 只读一次每个问题返回P(yes) 概率而不只是一个标签——概率让阈值、警告带、校准分析成为可能jev decide可以不起服务直接回答一个请求文件--output写结果文件且从不覆盖已有文件测试结果不会被悄悄替换非法请求打印错误并以退出码 1 结束天然适合脚本和 CI。上图是 jevos 的 Dino 游戏演示每一帧把游戏状态作为 JSON state 发给模型两个 yes/no 问题各拿到一个 P(yes)25% 和 28%恐龙据此跳或蹲——每步 136 ms纯 CPU。评委的身份也可以验证GET /health会返回模型文件的 SHA-256 和指纹仓库自带的 tests/check.py 就包含这一步check_health确保 CI 里跑的评委和你以为的是同一个。构建 LLM 测试集一百条真实用例怎么来用例来源随机采样 刻意刁难从日志、工单、邮件里随机抽样本——别挑你印象深刻的案例那些恰好是例外手工补充一批硬用例依赖否定词的输入、缺少关键信息的输入、依赖数字/日期的输入、混合两个主题的输入两类用例分开打标随机样本代表生产真实分布硬用例暴露模型的薄弱点。⚠️ 注意分享前先抹掉个人数据。模型可以本地但测试集最终总会进仓库和工单系统。一条测试用例的标准格式每条用例一个问题、一个人工确定的答案、一个推理类型标签另附一个note记录当时为什么这么判{id: t042-q3, state: {customer_message: The box arrived empty. This is the second time!}, question: Does the customer say an item was missing?, answer: yes, kind: paraphrase, source: random, note: empty box counts as missing}同一个文本可以挂多个问题——本地模型一次读完 state多问几个几乎不增加成本。平衡、标注与 kind 标签正负平衡约一半 yes、一半 no。平衡集能公平暴露模型偏向 yes的倾向jev 团队 999 条手写问题里错判的 yes 有 152 个、no 只有 91 个如果你的业务里 yes 只有 3%再用真实比例折算精确率。两人独立标注先标 30–50 条逐条看分歧——分歧多半是问题本身有歧义要改问题而不只是改标签拿不准的样本允许cannot tell直接从 yes/no 测试中剔除。每个用例打 kind 标签stated fact、paraphrase、tone、intent、negation、not stated、rule、number、date、arithmetic 共 10 类每类都有一行判据见 accuracy by kind of question。一个需要两步推理的问题按最难的那一步打标签。用代码批量生成测试问题人工标注最弱的地方恰恰是代码最擅长的地方数字、日期、阈值。思路很简单——写一个小程序用模板生成文本同时记录塞进去的数值答案由代码从同一批数值算出天然没有标注错误。生成器还有三个关键技巧完整做法见 generating test questions with code刻意制造边界用例总额恰好等于阈值、离阈值 1 欧元之内的样本看错误是否聚集在边界加干扰项塞入与问题无关的费用、日期、第二个客户的订单别让文中唯一的数字总是相关数字固定随机种子并把生成器版本、种子、模型文件哈希一起记录保证结果可复现。要诚实面对生成集的偏差模板文本比真实邮件干净。jev 的测量里数字对阈值类问题在生成集上 0.85、在手写集上只有 0.654——所以生成集用来撑规模和保证答案正确人工集用来保证真实覆盖两者分列报告不要平均。评测指标别只看一个准确率在 jev 团队的 999 条手写问题上第一代 jevos 整体准确率 0.757但拆开看stated fact 0.954arithmetic 只有 0.584jevos-v4 整体 78.9%。一个数字掩盖了全部失败模式。建议每次评测至少报告四样东西你想知道的问题报告的指标整体答对多少accuracy模型说 yes 时能否直接行动precision阈值处该抓的 case 抓到了多少recall阈值处哪类问题能信、哪类不能信按 kind 拆分的 accuracy它错的方向wrong yes vs wrong no 计数0.8 能不能读作约八成把握校准误差 / 置信度上面是官方发布时给出的基准同一批问题、同一个 HTTP 客户端左图是短/长请求的中位延迟右图是 6 个任务上的准确率——其中 5 个任务参与过 checkpoint 选择1 个完全 held-out这正是测试集永不用于调参的范例。还有一个常被忽略的指标模型知不知道自己不知道。对文本缺少关键事实这类不可回答的问题jevOS 用置信度区分可回答/不可回答的 AUROC 如下最后提醒100 条用例的准确率大约带 ±8 个点的误差30 条的 kind 只能读出高/低读不出第二位小数。小集合上的数字记得带误差区间。指标定义与推导见 evaluation metrics for yes/no classifiers。CI 回归测试实战让构建在回归时变红测试集告诉你系统现在好不好CI 回归测试告诉你它是不是变坏了。jevos 让这件事可以在普通 CPU runner 上完成。文件布局request expect 分离每个 case 两个文件。请求文件就是标准的POST /v1/systemone请求体{ model: jev-latest, state: { customer_message: My parcel never arrived and the tracking has not moved in a week., reply: Sorry about that. Could you send me your order number so I can check with the courier? }, questions: { asks_order_number: {type: noul, instructions: Does the reply ask the customer for their order number?}, promises_refund: {type: noul, instructions: Does the reply promise the customer a refund?}, polite: {type: noul, instructions: Is the tone of the reply polite?} } }期望值放在独立的 sidecar 文件里.expect.json{asks_order_number: yes, promises_refund: no, polite: yes}用 jev decide 批量运行判断CI 步骤一对每个请求文件跑一次jev decide结果写入answers/mkdir -p answers for f in cases/*.request.json; do name$(basename $f .request.json) ./jev decide --threads 4 $f --output answers/$name.json done--output只创建不覆盖重复运行安全非法请求会退出码 1 直接失败该步骤。几十个文件用decide足够上百个文件建议起一个jev serve模型只加载一次短请求 28 ms、长请求 130 ms约 1 GB 内存。带边界的断言pass / fail / warn 三档硬断言p 0.5是最容易失去信用的写法一个 0.52 的 case 会在任何无辜改动后翻红。改用三段区间PASS, FAIL 0.7, 0.3 # 用你标注过的 case 调这两个数 bad p FAIL if want yes else p PASS # 明确错 → 构建失败 warn not bad and not (p PASS if want yes else p FAIL) # 中间 → 只告警明确对pass什么都不做明确错fail退出码 1构建变红中间地带warn打印到 job 摘要由人看一眼——这里也正是评委自己最不可靠的区域。阈值不要拍脑袋先用你标注过的 case 选方法见 how to choose a threshold for P(yes)。固定评委版本避免分数漂移回归测试比较的是今天和昨天前提是评委没变按版本名固定模型文件二进制 model/文件夹用发布包的SHA256SUMS.txt校验下载缓存命中时同样校验缓存文件会被静默复用用GET /health的 SHA-256 指纹打进 job 日志升级评委单独开一个 commit重跑全量并审阅分数变化——就像审查依赖升级一样。CI 工作流要点GitHub Actions 示例仓库 wiki 给了一份可直接改造的 workflow 草案注意官方标注为 untested sketch先在分支上跑actions/checkout只拉你自己的仓库actions/cache缓存jev/目录key 里带上发布名、模型格式、平台如jevos-v4-openvino-int8-linux-x64未命中缓存时用gh release download下载二进制与模型两个发布资产并解压jev/model就是默认模型目录decide步骤按上一条的循环跑判断Assert步骤跑断言脚本非零退出即失败。公开仓库 runner 是 4 CPU--threads 4正好匹配私有仓库 2 CPU 就降到 2。防止 CI 测试抖动的检查清单✅固定被测系统的采样生成端 temperature 非零时同一输入会有不同输出测试期把它锁死✅拆开复合检查回复礼貌且询问了订单号是两个检查失败时你说不清是哪个✅优先读类问题模型在算术类上只有 0.584总额是否正确这种检查交给普通单元测试比数字✅先报告后阻断新检查先跑成非阻塞看概率分布把稳定的再升级为阻断项❌ 别把发布级最终评测放进 CI——CI 只负责抓回归好坏由正经测试集回答❌ 别在共享 runner 上做延迟基准——机器是共享的一次计时说明不了什么。相关文件导航wiki/llm-regression-tests-in-ci.md — CI 回归测试的完整方法wiki/github-actions-llm-checks.md — GitHub Actions 工作流草案wiki/building-a-yes-no-test-set.md — 测试集构建wiki/evaluation-metrics-for-yes-no-classifiers.md — 指标速查表wiki/accuracy-by-kind-of-question.md — kind 标签与按类评测tests/check.py — 仓库自带的 CI 检查脚本parity、decide行为、健康指纹等tests/golden/ — 黄金响应文件--exact零容差对比的参照src/main.cpp — 所有命令行选项说明小结用 jevos 搭评测体系的完整闭环是真实用例 生成用例构建测试集 → 按 kind、错误方向、阈值精度四维报告指标 → 把稳定的检查以 request/expect 文件 jev decide接入 CI用 pass/fail/warn 三档断言防抖动并用 SHA-256 指纹固定评委。全程 CPU、零外部调用100 条用例的构建成本是一个下午两个人——而它能在第一次回归发生时就让你知道。赞分享【免费下载链接】jevjevos: an open-source alternative to Jev and Microsoft-Decision-1. Yes/no decisions, choices and scores with probabilities, on your laptops CPU.项目地址https://gitcode.com/gh_mirrors/je/jev点击查看免费下载相关推荐Miller 回归测试框架实战指南用 mlr regtest 构建跨平台自动化测试体系Miller 回归测试框架实战指南用 mlr regtest 构建跨平台自动化测试体系 导读 本文面向 Miller 的开发者与贡献者系统讲解该项目内置的回CLI数据分析构建WhisperKit测试环境单元测试与回归测试实践构建WhisperKit测试环境单元测试与回归测试实践 你是否在为语音识别模型的测试环境搭建而烦恼作为适用于Apple Silicon的设备端语音识别框架语音音频AI 应用DeepEval用 pytest 风格单元测试为 LLM 应用构建自动化评测与 CI/CD 集成DeepEval用 pytest 风格单元测试为 LLM 应用构建自动化评测与 CI/CD 集成 DeepEval 是一个开源 LLM 评测框架它把 AI文档教程知识库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

做一个常驻菜单栏的小工具,细节比想象中多

做一个常驻菜单栏的小工具,细节比想象中多

做一个常驻菜单栏的小工具,细节比想象中多 一个窗口切换工具,看上去就是把窗口列出来,点一下,再切过去。最近做 TaskView,除了这个基本流程,我花了不少精力处理设置、权限和打包这些事。 做出能展示窗口的…

2026/10/14 18:25:49 阅读更多 →
ScheduledThreadPoolExecutor核心原理与高可用实践

ScheduledThreadPoolExecutor核心原理与高可用实践

1. 项目概述:为什么定时任务线程池不是“加个Scheduled就完事”?你有没有遇到过这样的场景:系统里要每5秒检查一次订单状态,每小时生成一份销售汇总,凌晨两点自动清理缓存——看起来都是“定时执行”,但上线…

2026/10/14 18:25:49 阅读更多 →
PySide2 QMenuBar与QMenu实战:从菜单栏到右键菜单

PySide2 QMenuBar与QMenu实战:从菜单栏到右键菜单

QMenuBar和QMenu这两个类,做过GUI开发的人应该都不陌生,但说实话,很多新手写PySide2界面时最容易忽略的就是菜单栏。界面拖几个控件、绑几个信号,觉得功能差不多了,菜单能省就省。可真到了交付项目的时候才发现&#x…

2026/10/14 18:24:47 阅读更多 →

最新新闻

浏览器多开怎么设置独立 IP?Profile、代理与核验流程

浏览器多开怎么设置独立 IP?Profile、代理与核验流程

浏览器多开不会自动让每个窗口拥有不同的公网 IP。想让不同浏览器环境使用不同出口,需要分别配置获授权的代理或网络线路,再从各个环境实际访问网络进行核验。要先分清两件事:Profile 隔离浏览器数据,代理配置影响网络出口。**它们…

2026/10/14 19:11:22 阅读更多 →
PS5 Chiaki 串流多账号切换导致控制器失灵的故障排查与解决方案

PS5 Chiaki 串流多账号切换导致控制器失灵的故障排查与解决方案

在使用 Chiaki 串流 PS5(或配合自动化脚本挂机)时,部分拥有大小号/多区服账号的玩家可能会遇到一个极其隐蔽且容易误导排查方向的控制失效问题。本文将详细复盘该故障的成因及解决思路,供遇到类似情况的玩家参考。 一、 故障现象与…

2026/10/14 19:11:22 阅读更多 →
2026企业AI办公工具选型指南:框架、产品盘点与落地思路

2026企业AI办公工具选型指南:框架、产品盘点与落地思路

2026企业AI办公工具选型指南:框架、产品盘点与落地思路企业引入AI办公工具时,很多管理者容易陷入选型误区。不少团队会把产品功能清单的丰富度作为核心评判标准,或是单纯对比订阅成本,也有部分决策仅凭品牌声量敲定方案。这类评估…

2026/10/14 19:11:22 阅读更多 →
上海点山展示如何通过展厅设计传递企业的“前世今生”?

上海点山展示如何通过展厅设计传递企业的“前世今生”?

上海点山展示如何通过展厅设计传递企业过去现在未来?关键在时间叙事的三层结构展厅不只是物理意义上的展示空间,更是品牌时间的容器。对于深耕长三角区域的展厅设计公司而言,如何让企业的“过去、现在、未来”不再割裂为孤立的展板&#xff0…

2026/10/14 19:11:22 阅读更多 →
判断泛消费级机器人初创公司是否值得持续关注,应该看哪些连续证据

判断泛消费级机器人初创公司是否值得持续关注,应该看哪些连续证据

机器人行业经常出现“下一家黑马是谁”“某家公司值不值得持续关注”等问题。对于仍处在研发和产品验证阶段的初创公司,提前给出确定性结论并不稳妥。相比标签和短期热度,更可行的方法是建立一组能够持续更新的观察指标。以贝塔无限为例,其公…

2026/10/14 19:11:22 阅读更多 →
库存扣减的并发控制:乐观锁的应用

库存扣减的并发控制:乐观锁的应用

财务主管跨界写技术文,先交代缘由:公司商城搞限时促销,活动结束对账,账面库存和实物对不上,多卖了四十七件。排查一周,病根是库存扣减没做并发控制,两个请求同时读到同样的库存数,各…

2026/10/14 19:10:22 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →