本地 RAG 评估指南:5 个指标量化知识库效果
我手上现在有四套不同的本地知识库——RAGFlow 跑的、Dify 搭的、自己写 LangChain 拼的、AnythingLLM 的——问题来了到底哪一套效果最好之前我都是凭感觉“这个回答看起来挺像样的”。直到上周一个读者扔了一段他公司知识库的回答给我看问我这个 RAG 算不算好——我才意识到没有指标就没法说好。这周专门把 RAGAS 这套评估框架在本地全跑通了4 个核心指标 1 个补充指标全程用 qwen3.5:9b 当评委nomic-embed-text 当嵌入8GB 显存笔记本就能跑完一次完整评估。这篇我把它拆给你。一、为什么不能凭感觉RAG 出错有两类目测都看不出来检索错了召回的 chunk 根本没相关信息但模型用通用知识硬答看起来流畅其实知识库白搭生成偏了检索是对的但模型回答时夹带私货 / 改写原意看起来权威实际跟原文出入凭感觉看回答这两个错都很难发现。评估的本质就是把凭感觉换成凭分数。二、5 个指标2 类问题各管一段RAG 流水线就两步——先检索、再生成。所以指标也是分两段评估「检索」的两个指标1. Context Precision上下文精确率召回的几个 chunk 里真正相关的有几个且是不是排在前面算法让评委模型判断每个 chunk 和问题的相关性加权求和高分含义召回得准没夹带垃圾2. Context Recall上下文召回率正确答案需要的信息是否都被召回到了算法把标准答案拆成多个事实点看每个点能不能在召回的 context 里找到依据高分含义没漏关键信息评估「生成」的两个指标3. Faithfulness忠实度模型的回答是不是全部能在 context 里找到依据算法把回答拆成多条断言claim逐条到 context 里查证高分含义没胡说4. Answer Relevancy回答相关性回答有没有跑题算法让模型根据回答倒推可能的问题和原问题做相似度比对高分含义没答非所问补充综合指标5. Answer Correctness回答正确性回答和标准答案的语义重合度 事实重合度。这个需要标准答案前 4 个不需要前 4 个是「无参考评估」只要有问题、context、回答就能算。第 5 个需要标注好的标准答案但更接近对错的人类直觉。做研究和迭代时前 4 个就够做验收时第 5 个必上。三、本地搭建全部跑在 Ollama 上需要的组件# 拉模型ollama pull qwen3.5:9b # 作为评委ollama pull nomic-embed-text # 嵌入模型137M几乎不占显存# 装 RAGAS 和依赖pip install ragas datasets langchain-ollama显存核算qwen3.5:9b 占 6.6GBnomic-embed-text 占 1GB8GB 显存笔记本舒服。四、最小可跑代码新建eval_rag.pyfrom datasets import Datasetfrom ragas import evaluatefrom ragas.metrics import ( faithfulness, answer_relevancy, context_precision, context_recall,)from langchain_ollama import ChatOllama, OllamaEmbeddings# 关键评委模型 嵌入模型都用本地judge_llm ChatOllama(modelqwen3.5:9b, base_urlhttp://127.0.0.1:11434)embeddings OllamaEmbeddings(modelnomic-embed-text)# 测试数据每条包含 问题、召回的 contexts、回答、标准答案data { question: [ 公司的年假政策是几天, 出差报销的额度是多少, ], contexts: [ [员工入职满 1 年享 5 天年假满 3 年享 10 天年假。, 公司鼓励员工带薪休假。], [市内出差日均 200 元省外出差日均 500 元海外 1000 元。], ], answer: [ 入职满 1 年有 5 天年假满 3 年有 10 天。, 市内 200 / 省外 500 / 海外 1000按日计算。, ], ground_truth: [ 员工入职满 1 年享 5 天年假满 3 年享 10 天年假。, 市内出差日均 200 元省外日均 500 元海外日均 1000 元。, ],}dataset Dataset.from_dict(data)# 跑 4 个无参考指标result evaluate( datasetdataset, metrics[faithfulness, answer_relevancy, context_precision, context_recall], llmjudge_llm, embeddingsembeddings,)print(result)跑起来python eval_rag.py输出形如{faithfulness: 0.95, answer_relevancy: 0.92, context_precision: 0.83, context_recall: 1.00}每个指标都是 0-1 区间越高越好。五、读懂分数哪里弱就补哪里跑一次评估后我会得到一张分数表。我自己定的判断阈值指标 0.70.7-0.85 0.85Context Precision检索糟召回大量噪声还行好Context Recall漏关键信息肯定答不全还行好Faithfulness模型在编还行好Answer Relevancy跑题严重还行好不同指标低有不同的修法Precision 低召回的 top-k 改小5 → 3或者加 Re-ranking 重排Recall 低召回的 top-k 改大5 → 10或者改进分块策略chunk 切太碎Faithfulness 低换更大的生成模型9B → 27B或者 prompt 里加严格只根据 context 回答Relevancy 低检查 prompt 模板可能模型理解不到任务我用这个流程帮一个读者诊断他的知识库Context Precision 只有 0.45——召回的 chunk 一半是无关的。原因是他用了过大的 chunk size2000 token同一个 chunk 里夹了 5 个无关话题。把 chunk size 改到 500、加上语义切分Precision 涨到 0.81。有指标定位问题快得多。六、做成日常 CI每改一次就跑一遍我建议把评估脚本固化下来维护一份 50-100 条的测试集覆盖知识库的典型问题每次改了 RAG 配置换模型、改 chunk、调 top-k都跑一次把每次的分数记到 CSV画趋势图这样你改一次配置就知道是变好还是变坏再也不靠试一下、看回答、感觉好像变好了。测试集准备技巧不要全是简单问题要混入答案分散在多个 chunk、“问的是边缘信息”、问的是对比关系这几类难题标注 ground_truth 时尽量用知识库里的原话让 Recall 评估更准50 条以上才有统计意义10 条波动太大七、避坑跑了几天踩到的几个坑坑 1评委是本地小模型时分数会偏低9B 当评委时打分稍微保守0.85 已经是好分数。如果你之前用 GPT-4o 当评委迁到本地分数会下降 10-15%。不是模型变差了是评分基准变了。做横向对比就行别和别人发的分数直接比。坑 2context_recall 必须有 ground_truth没标注就跑会报错跳过这一个指标即可。坑 3评估自己慢4 个指标 × 50 条样本 ≈ 200 次模型调用本地 9B 大概要跑 15-20 分钟。可以先跑 10 条快速看趋势定型后再跑全集。八、行动建议✅个人 / 小团队 RAG 项目照这套流程跑起来本地完全够✅想做 RAG 工具调参评估是必须的没指标改了等于盲改✅企业知识库验收再加上 Answer Correctness 人工抽审❌想用云端 GPT-4 当评委免费但慢且不能完全替代人审。本地评委对开发循环已经足够学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】