新闻详情

新闻详情

首页 / 资讯中心 / 详情

Python后端AI专题32:建立第一套 RAG 评测集:问题、证据与不可回答样本

发布时间:2026/9/30 7:06:05来源:尧图网络
Python后端AI专题32:建立第一套 RAG 评测集:问题、证据与不可回答样本
Python后端AI专题32建立第一套 RAG 评测集问题、证据与不可回答样本没有固定评测集“换模型后感觉更聪明”无法复核只收集能回答的问题又会把胡编但流畅的模型选上去。评测数据至少要同时表达用户问题、哪些 chunk 相关、答案必须包含哪些事实、这个问题是否本应拒答。供应商升级测试门答案层用例失败说明Provider普通响应字段/usage 映射v2 HTTP 合同变化Provider空 delta token DONE流解析不兼容Gateway429 可重试、400 不重试、超时取消稳定性策略回归离线 E2E上传到引用回答应用接线回归与真实模型质量无关真实评测v1/v2 同数据集对比质量、成本或延迟变化完整流合同测试使用 MockTransport 返回三帧只得到[七天]content(data: {choices:[{delta:{}}]}\n\ndata: {choices:[{delta:{content:七天}}]}\n\ndata: [DONE]\n\n)真实结果3 passed in 0.25s。样本字段为什么这样设计dataclass(frozenTrue,slotsTrue)classEvaluationCase:id:strquestion:strrelevant_ids:list[str]expected_facts:list[str]unanswerable:boolid 稳定引用失败样本question 保留真实用户表达不只写文档标题relevant_ids 评估检索与生成质量分开expected_facts 做确定性答案基线unanswerable 检验拒答不让空 relevant 被误当标注漏失。相关性最好由至少两位标注者复核若多个 chunk 都能支持答案应全部标记否则 Recall 会错误惩罚合法召回。当前数据集不是三个占位问题现有 8 条覆盖退款期限、产品端口、健康路径、向量错误、验证码、索引状态以及董事长电话/办公室地址两个不可回答问题。示例{id:vector-error,question:出现 E_VECTOR_02 应该怎么办,relevant_ids:[product-manual],expected_facts:[重建,索引版本],unanswerable:false}{id:office-address,question:公司北京办公室地址在哪里,relevant_ids:[],expected_facts:[],unanswerable:true}生产评测还应加入口语改写、错别字、长条件、表格、跨文档冲突、权限和 Injection。数据集要从真实失败日志脱敏沉淀而不是由开发者只写系统擅长的问题。完整加载与校验模块from__future__importannotationsimportjsonfromdataclassesimportdataclassfrompathlibimportPathdataclass(frozenTrue,slotsTrue)classEvaluationCase:id:strquestion:strrelevant_ids:list[str]expected_facts:list[str]unanswerable:booldefload_cases(path:Path)-list[EvaluationCase]:cases:list[EvaluationCase][]seen:set[str]set()forline_number,lineinenumerate(path.read_text(encodingutf-8).splitlines(),start1):ifnotline.strip():continuerawjson.loads(line)caseEvaluationCase(idstr(raw[id]),questionstr(raw[question]),relevant_idslist(raw.get(relevant_ids,[])),expected_factslist(raw.get(expected_facts,[])),unanswerablebool(raw.get(unanswerable,False)),)ifcase.idinseen:raiseValueError(fduplicate case id{case.id}at line{line_number})ifnotcase.unanswerableandnotcase.relevant_ids:raiseValueError(fcase{case.id}requires relevant_ids)ifcase.unanswerableandcase.relevant_ids:raiseValueError(funanswerable case{case.id}cannot have relevant_ids)seen.add(case.id)cases.append(case)ifnotcases:raiseValueError(evaluation dataset is empty)returncasesJSONL 允许逐条追加和 diff加载器拒绝重复 id、可回答却无相关证据、不可回答却标相关证据、空文件。Schema 校验是数据质量第一关不会验证标注事实本身正确。如何避免数据泄漏调参时反复看同一评测集会过拟合。应分 dev/testdev 可用于选 chunk size/Prompttest 只在候选版本确定后运行最终还有线上灰度。真实客户数据需脱敏、获得授权并控制访问不能为了评测把私人问题提交到代码仓库。Fake 评测的 1.0 代表什么当前脚本的 Fake evaluator 根据 expected_facts 直接构造答案因此 1.0 只证明 Runner、数据读取和报表计算接线正确Recall51.0, MRR1.0, nDCG51.0, citation_precision1.0, answer_accuracy1.0它绝不是 KnowFlow 真实语义质量。真实 Provider 必须用同一 EvaluationFunction 接口跑并单独记录模型、Prompt、索引哈希。本篇最终完整模块dataset.py前面的代码片段用于解释本次改动下面是本篇结束时可直接核对和替换的磁盘完整版本。from__future__importannotationsimportjsonfromdataclassesimportdataclassfrompathlibimportPathdataclass(frozenTrue,slotsTrue)classEvaluationCase:id:strquestion:strrelevant_ids:list[str]expected_facts:list[str]unanswerable:booldefload_cases(path:Path)-list[EvaluationCase]:cases:list[EvaluationCase][]seen:set[str]set()forline_number,lineinenumerate(path.read_text(encodingutf-8).splitlines(),start1):ifnotline.strip():continuerawjson.loads(line)caseEvaluationCase(idstr(raw[id]),questionstr(raw[question]),relevant_idslist(raw.get(relevant_ids,[])),expected_factslist(raw.get(expected_facts,[])),unanswerablebool(raw.get(unanswerable,False)),)ifcase.idinseen:raiseValueError(fduplicate case id{case.id}at line{line_number})ifnotcase.unanswerableandnotcase.relevant_ids:raiseValueError(fcase{case.id}requires relevant_ids)ifcase.unanswerableandcase.relevant_ids:raiseValueError(funanswerable case{case.id}cannot have relevant_ids)seen.add(case.id)cases.append(case)ifnotcases:raiseValueError(evaluation dataset is empty)returncases本篇练习检查一组坏标注为 loader 写四个测试重复 idanswerable 无 relevantunanswerable 却有 relevant空文件。再判断以下样本应怎样改问题“退款多久到账”expected_facts 写“七天”相关文档其实只说“七天内申请”。说明为什么这是答案标注错误而不是模型错误。下一篇给出测试答案并手算 RecallK、MRR、nDCG 与引用精度解释为什么不能只看一个总分。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

如何判断CRM是不是“真原生”?四个硬指标帮你识别 2026/9/30 7:55:39

如何判断CRM是不是“真原生”?四个硬指标帮你识别

摘要: 市场上号称“AI原生”的CRM产品很多,但真正经过权威验证的不多。判断一个CRM是不是“真原生”,可以看四个硬指标:是否通过了权威机构的AI能力测评、是否参与了行业标准制定、是否有大规模客户验证、底层架构是否真的为AI设计…

阅读更多 →
实施工程师与运维工程师面试差异、高频题与实操拆解 2026/9/30 7:55:38

实施工程师与运维工程师面试差异、高频题与实操拆解

1. 先分清两个岗位:面试官问的根本不是同一套东西 很多人把实施工程师和运维工程师当成一个岗位的两个叫法,我自己早年也这么想,直到同时面了两家公司的岗位,被问的问题风格差得像两个行业,才发现这个认知偏差有多耽误…

阅读更多 →
深度学习调参实战指南:从超参数搜索到训练管道优化的系统方法 2026/9/30 7:55:32

深度学习调参实战指南:从超参数搜索到训练管道优化的系统方法

简介:这份《深度学习调参指南中文版》源自Google研究团队Varun Godbole等人撰写的经典调优手册,面向具备机器学习基础、希望系统提升模型性能的工程师与研究人员。文档从基础理论延伸到高级技巧,涵盖损失函数选择、优化器比较、超参数调整策略…

阅读更多 →
JSON与JSON-RPC的区别:数据格式与通信协议的实战解析 2026/9/30 7:55:32

JSON与JSON-RPC的区别:数据格式与通信协议的实战解析

1. 先说透一件事:JSON 是数据格式,JSON-RPC 是通信协议 做了十几年接口开发,我见过太多人在同一个问题上栽跟头:看到"JSON-RPC"这个名字,就下意识以为它是 JSON 的某种增强版,或者干脆把它当成&q…

阅读更多 →
UE在Windows交叉编译Linux打包:工具链配置与RunUAT命令详解 2026/9/30 7:55:31

UE在Windows交叉编译Linux打包:工具链配置与RunUAT命令详解

手上只有一台Windows打包机,项目却要出Linux版本——这个局面我在几个团队里都碰到过。运维不想再养一台Linux构建机,发行版升级还容易把老构建环境搞崩,最后能落地的方案基本只有一个:在Windows上装UE自带的Linux交叉编译工具链&…

阅读更多 →
基于Flutter与自研解析器的OpenHarmony JSON格式化工具实践 2026/9/30 7:55:31

基于Flutter与自研解析器的OpenHarmony JSON格式化工具实践

1. 从“为什么不用 ArkTS 原生”说起:工具类App在OpenHarmony上的选型逻辑1.1 一个每天都在发生的真实需求这个项目的起点其实非常朴素:团队在 OpenHarmony 设备上做内部效率工具,每天都要面对接口联调、日志排查和配置整理。你从网页控制台复…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉