PROJECT 04

评测体系搭建
用数据说话

理解评测指标、搭建 Ragas 评测脚本接入 FastGPT、用 LLM 裁判自动打分,同一套测试题对比微调前后效果。

3
操作章节
Ragas
评测框架
自动化
打分方式
PART 03
评测体系搭建

RAG 搭好了、模型微调了,但效果到底好不好?评测体系用量化指标回答这个问题,告别"感觉还行"的主观判断。

07 评测概念与方法

理解为什么要评测、评什么、怎么评。

为什么需要评测
没有评测有评测
"感觉效果还行""准确率 85%,比微调前提升 12%"
改了参数不知道变好还是变差改一行配置,跑一遍评测,立刻知道
无法跟别人讲清楚效果拿着数据说话

RAG 评测维度

评测环节评测什么核心指标好的标准
检索质量向量检索能不能找到相关文档召回率(Recall)、命中率> 80%
生成质量大模型回答准不准、全不全准确率、完整性> 85%
端到端从提问到最终回答整体质量忠实度(Faithfulness)> 80%

微调评测维度

评测维度评测什么方法
训练效果loss 曲线是否收敛看训练日志的 loss 趋势
对比基座微调后比原模型好多少同题对比打分
过拟合检测模型是不是死记硬背训练集 vs 验证集 loss 差距

评测方法对比

方法原理优点缺点
LLM-as-a-Judge用更强的大模型评判输出质量快、便宜、可批量裁判模型有偏见
人工评测人工标注回答好坏最准确慢、贵、不可重复
自动化指标BLEU、ROUGE 等字面匹配免费、快速LLM 输出灵活,字面匹配不准

本指南使用 LLM-as-a-Judge 方法,用硅基流动 Qwen2.5-7B 作为裁判模型,对接 FastGPT 知识库搜索接口进行评测。

评测工具一览

工具适合场景难度
RagasRAG 专项评测,业界标准
DeepEvalLLM 通用评测,pytest 风格
LangSmithLangChain 生态,可视化追踪
Phoenix开源 LLM 可观测平台

08 Ragas 评测实操

搭建评测脚本,接入 FastGPT 知识库,用 LLM 裁判自动打分。

评测流程

用户提问
   ↓
FastGPT 知识库检索(searchTest 接口)→ 获取检索到的文档片段
   ↓
LLM 基于检索内容生成回答
   ↓
LLM 裁判按 4 维度打分(0-5 分)
   ↓
输出汇总报告 + 分类统计 + 优化建议

第 1 步:安装 Ragas

1

在虚拟环境中安装

cd D:\llm-finetune
.\venv\Scripts\Activate.ps1
pip install ragas -i https://pypi.tuna.tsinghua.edu.cn/simple

使用清华镜像加速下载,ragas 依赖较多(datasets、langchain、openai 等),首次安装约几百 MB。

第 2 步:准备评测数据集

2

生成 30 条评测问答对

基于网站备案 PDF 文档,生成包含问题、标准答案、参考文档片段的评测数据集:

[
  {
    "question": "网站备案审核需要多长时间?",
    "ground_truth": "审核时限为30个自然日...",
    "contexts": ["原始文档内容..."],
    "category": "审核流程"
  }
]

覆盖场景:审核流程、主体类型、变更管理、系统操作、备案号、基础概念等 10 个分类,共 30 条。

第 3 步:编写评测脚本

3

核心脚本结构

评测脚本包含 3 个核心函数:

函数作用调用接口
search_knowledge_base()调用 FastGPT 知识库搜索FastGPT searchTest API
generate_answer()基于检索内容生成回答硅基流动 LLM API
llm_judge()裁判按 4 维度打分硅基流动 LLM API

裁判评分维度(0-5 分)

维度含义目标分
忠实度 (faithfulness)回答是否完全基于检索文档,没有编造4.0
答案相关性 (answer_relevancy)回答是否切题,直接回答了问题4.0
检索精度 (context_precision)检索到的文档是否与问题相关3.5
召回率 (context_recall)标准答案的关键信息是否在检索文档中4.0

关键配置

# FastGPT 知识库搜索接口
FASTGPT_URL = "https://cloud.fastgpt.cn/api"
DATASET_ID = "你的知识库ID"

# 裁判 LLM(硅基流动)
LLM_API_BASE = "https://api.siliconflow.cn/v1"
LLM_MODEL = "Qwen/Qwen2.5-7B-Instruct"

# 强制 JSON 输出(关键!防止裁判模型输出不稳定)
payload = {
    "model": LLM_MODEL,
    "messages": [...],
    "temperature": 0.0,
    "response_format": {"type": "json_object"}  # 强制 JSON
}

第 4 步:运行评测

4

执行评测脚本

cd D:\work-mode-projects\6a87f3bdaab9df26fba9b0cf
D:\llm-finetune\venv\Scripts\Activate.ps1
python rag_eval.py

30 条评测约 3-5 分钟,每条会显示:检索到的文档数、回答摘要、4 个维度评分。

第 5 步:解读评测结果

结果输出格式
指标             平均分  最高  最低  目标  状态
忠实度            3.5    5.0   3.0   4.0   未达标
答案相关性        3.7    5.0   3.0   4.0   未达标
检索精度          3.5    5.0   3.0   3.5   达标
召回率            3.4    5.9   2.0   4.0   未达标

第 6 步:根据评测结果优化

优化建议(脚本自动输出)
  • 召回率低 → 检索没找到该找的内容 → 开启混合检索(searchMode: mixed)或调整切片策略
  • 检索精度低 → 检索到的内容相关性不够 → 开启重排模型或提高 similarity 阈值
  • 忠实度低 → 模型回答有编造 → 优化提示词:强调只基于知识库回答
  • 相关性低 → 回答不够切题 → 优化提示词:要求回答简洁直接
踩坑经验:裁判模型 JSON 输出不稳定

使用 Qwen2.5-7B 作为裁判模型时,23/30 条评分失败,原因是模型输出不规范的 JSON。

解决方案

  • 添加 "response_format": {"type": "json_object"} 强制 JSON 输出
  • 添加 system 提示词:"你是评测员,只输出JSON,不输出任何其他内容"
  • temperature 设为 0.0(降低随机性)
  • 失败后自动重试 3 次 + 多种 JSON 解析兜底

09 微调效果对比评测

用同一套测试题,对比原模型和微调模型的输出质量。

对比测试方法

LLM-as-Judge 对比评测
同一套测试题(20-50 题)
        ↓
   ┌────┴────┐
   ↓         ↓
原模型回答   微调模型回答
   ↓         ↓
   └────┬────┘
        ↓
  GPT-4o / Qwen-Max 作为裁判
  对比两个回答,分别打分(1-5 分)
  评分维度:准确性、完整性、简洁性
        ↓
  输出:A_score vs B_score + 原因

训练曲线判断

曲线健康表现不健康表现
训练 loss持续下降,趋于平稳不降或忽高忽低
验证 loss跟随训练 loss 下降比训练 loss 高很多
训练 vs 验证差距差距小差距越来越大 = 过拟合

百炼训练参数推荐

参数推荐值说明
学习率 (learning_rate)1e-4数据量小,降低防过拟合
训练轮数 (n_epochs)3小数据集 3 轮足够
最大序列长度 (max_length)2048问答格式每条几百 token,32768 浪费显存
验证步数 (eval_steps)5默认 50 太高,小数据集永远不会触发验证
验证集比例10%注意百炼对验证集有最小数量要求
训练方式LoRA(高效训练)速度快 5-10 倍,成本低

LLaMA-Factory 本地微调参数

参数推荐值说明
模型Qwen2.5-7B-Instruct中文效果好
微调方法LoRA高效微调
量化等级4(QLoRA)6GB 显存必须开 4bit
计算类型fp16AMD GPU 兼容性好
学习率1e-4标准值
Epoch3小数据集 3 轮
Batch Size2显存小用 2
梯度累积8补偿 batch 小
LoRA Rank8小数据小 rank
LoRA Alpha16通常为 rank 的 2 倍
截断长度2048问答格式够用
验证集比例0.110% 验证集
HF 镜像hf-mirror.com国内加速下载模型

微调数据准备

百炼对话格式(JSONL)
{"messages": [
  {"role": "system", "content": "你是网站备案客服助手..."},
  {"role": "user", "content": "网站备案审核需要多长时间?"},
  {"role": "assistant", "content": "审核时限为30个自然日..."}
]}

LLaMA-Factory 需要 Sharegpt 格式,需转换 messagesconversationsrolefrom(user→human, assistant→gpt)。

数据量建议
阶段数据量说明
入门验证50~100 条跑通流程,理解原理
效果可用200~500 条生产可用的基础
生产级别1000+ 条高质量、多样性强

核心原则:质量 > 数量,50 条高质量 > 200 条低质量。覆盖多样性(不同问法问同一个问题)、风格一致、事实准确。