news 2026/9/9 18:23:17

4 步把 LLM 评测搬进内网:DeepEval 本地评测实践指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
4 步把 LLM 评测搬进内网:DeepEval 本地评测实践指南

4 步把 LLM 评测搬进内网:DeepEval 本地评测实践指南

【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval

你的客服语料和工单数据不能离开内网,但团队又想给每一次 LLM 输出打分。把"裁判"换成部署在本机的开源模型,评测请求就只发生在机房里——这正是 DeepEval 本地评测要解决的问题。读完本文,你可以完成一套基于 Ollama 的本地评测:从安装框架、接入本地裁判模型,到写出能进 CI 的回归用例。

项目定位:DeepEval 在 LLM 评测栈中的位置

DeepEval 是一个面向 LLM 应用的评测框架,它挂在 pytest 上:你用代码描述测试用例与指标,再用deepeval test run命令执行。框架的核心设计是裁判模型可插拔——所有 LLM 类指标都由一个模型来打分,而这个模型既可以来自 OpenAI API,也可以来自你自己的机房。

能力清单:

  • 40 余个内置指标:回答相关性、忠实度(Faithfulness,检测幻觉)、毒性、JSON 正确性等;
  • 裁判模型内置 Ollama、vLLM 等本地服务实现,源码见 deepeval/models/llms/;
  • 阈值直接转成 pytest 的通过/失败,天然适配 CI/CD;
  • 支持 tracing,可对工具调用等中间 span 做组件级评测。

方案对比:云端 API 裁判 vs 本地评测

维度传统做法:云端 API 当裁判DeepEval 本地评测
测试数据流向输入/输出发送到外部 API只在本机与内网服务间流转
裁判模型部署厂商云端Ollama、vLLM 等本地/内网服务
成本结构按 token 持续付费一次性硬件投入,调用不再计费
网络依赖依赖外网、配额与限流离线可跑
可控性受厂商模型版本与策略约束模型、参数、数据均在自己手里

两种方案的差别不在"是否用 LLM 当裁判",两者都在用 LLM-as-Judge;差别在于裁判跑在哪里。裁判搬进机房后,成本结构从按次计费变成固定硬件投入,数据流向被限制在内网。前提也要说清楚:本地评测的分数质量取决于本地裁判模型的判别能力,裁判不够强,分数就会跟着失真。

实操路径:四步搭好本地 LLM 评测

1. 安装 DeepEval

目标:拿到一个可以执行评测的运行环境。

pip install -U deepeval

预期:装完后deepeval test run会像 pytest 一样收集并执行你的评测文件,官方入门见 docs/content/docs/getting-started.mdx。

2. 把本地模型接入为裁判

目标:让本机的 Ollama 模型承担打分工作。

from deepeval.models import OllamaModel # 裁判指向本机 Ollama,默认 http://localhost:11434 judge = OllamaModel(model="llama3") print(judge.generate("请只回复:OK"))

预期:终端返回本地模型的回答,说明推理链路已通。若你的服务是 vLLM 或任意 OpenAI 兼容接口,改用 deepeval/models/llms/local_model.py 里的LocalModel;若想直接用 transformers 在进程内加载模型,继承DeepEvalBaseLLM自行实现,指南在 docs/content/guides/guides-using-custom-llms.mdx。

3. 写第一个评测用例

目标:用测试用例声明"输入、实际输出、期望输出",并把指标绑定到本地裁判。

from deepeval.test_case import LLMTestCase from deepeval.metrics import AnswerRelevancyMetric, FaithfulnessMetric from deepeval import assert_test test_case = LLMTestCase( input="这款鞋不合身怎么办?", actual_output="我们提供 30 天无理由全额退款。", expected_output="30 天内可无理由全额退款。", retrieval_context=["退款政策:30 天内全额退款"], ) metrics = [ AnswerRelevancyMetric(threshold=0.7, model=judge), FaithfulnessMetric(threshold=0.7, model=judge), ] assert_test(test_case, metrics)

预期:assert_test逐个指标打分,任一得分低于 threshold 时该测试判为失败。

4. 跑通并接入 CI

目标:让同一套评测进入提交流程。

deepeval test run tests/test_llm_eval.py

预期:终端逐条打印指标得分与通过状态,退出码可供 CI 判断是否拦截合并,工作流写法见 docs/content/docs/evaluation-unit-testing-in-ci-cd.mdx。

原理与机制:本地评测为什么行得通

DeepEval 的 LLM 类指标本质都是 LLM-as-Judge:指标把测试用例字段(input、actual_output、retrieval_context 等)拼成提示词,让裁判模型产出结构化判定——例如相关性指标让模型生成"问题关键词与派生问题"再做相似度比较,忠实度指标让模型把答案拆成断言逐条核对——最后解析成 0 到 1 的分数与阈值比较。整条数据流是:

  • 测试用例(你的业务数据)→ 指标模板拼装提示词;
  • 提示词 → 本地裁判模型(Ollama、vLLM 或你的子类);
  • 模型返回结构化判定(Pydantic schema)→ 解析为分数;
  • 分数对比阈值 → pytest 结果。

扩展点集中在 deepeval/models/base_model.py 的DeepEvalBaseLLM:实现load_model()generate(prompt, schema)a_generate()get_model_name()四个方法即可。其中schema参数是关键——指标需要结构化判定时会传入一个 Pydantic 模型,generate必须返回该 schema 的实例,这是任意本地模型能变成"可解析裁判"的原因。另外默认只向 PostHog 上报匿名遥测(事件名、指标名、随机 UUID),设置DEEPEVAL_TELEMETRY_OPT_OUT=1可完全关闭,说明见 docs/content/docs/data-privacy.mdx。

落地场景:CI 回归、内网部署与合规业务

CI 回归。在你自己的项目流水线中把评测挂成单测步骤,prompt、模型或检索逻辑的任何改动都会在每次 PR 上跑同一组指标。assert_test把阈值变成退出码,"分数下降"从此是红灯而不是报表里的一行小数:

jobs: evaluate: steps: - run: pip install -r requirements.txt - run: deepeval test run tests/test_llm_eval.py

内网部署。无外网环境中,用OllamaModelLocalModel指向内网服务地址,并设置DEEPEVAL_TELEMETRY_OPT_OUT=1,从加载数据集到输出评测报告的链路不产生任何出站流量。

合规业务。金融、医疗等要求数据本地化的场景里,被测模型与裁判模型都跑在自建 GPU 上,评测记录可直接留存为审计材料,无需向第三方解释客户对话的去向。

避坑指南与延伸资源

  • 现象:自定义模型跑 FaithfulnessMetric 抛难懂的 AttributeError。原因generate()未处理schema参数,指标拿不到需要的结构化字段。处理:按自定义模型指南的 JSON Confinement 一节实现 schema 感知输出,或直接用内置OllamaModelLocalModel
  • 现象:同一用例本地裁判与云端裁判分数差异明显。原因:本地模型判别能力上限叠加采样随机性。处理:固定 temperature(OllamaModel默认为 0),用一批人工标注样本校准阈值,或换更强的本地模型。
  • 现象:评测慢或显存溢出。原因:裁判模型偏大且用例并发高。处理:用BitsAndBytesConfig做 4bit 量化(自定义模型指南中的 Llama-3 示例),或降级到 3B 级模型分批跑。
  • 现象:担心数据离开机器。原因:默认存在匿名遥测。处理export DEEPEVAL_TELEMETRY_OPT_OUT=1

延伸资源:

  • 自定义裁判模型完整指南(Llama-3、Mistral、Azure 示例):docs/content/guides/guides-using-custom-llms.mdx
  • Ollama 裁判实现:deepeval/models/llms/ollama_model.py
  • CI/CD 集成指南:docs/content/docs/evaluation-unit-testing-in-ci-cd.mdx
  • 可直接运行的最小测试样例:examples/getting_started/test_example.py

DeepEval 本地评测让数据留在内网、把按次调用变成一次性硬件投入,代价是你需要对裁判模型的质量负责。下一步:先按第 2 步让 Ollama 跑通一次generate(),再回头调阈值。

【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 18:22:27

ESP32物联网综合实战:从环境监测到智能浇花系统

1. 趣味项目要玩得爽,选型逻辑比动手早一截玩硬件DIY最容易犯的错,不是焊锡没焊好,也不是代码报错,而是项目挑得太乱:今天做个呼吸灯,明天去跑人脸识别,后天又想搞无人机,最后每样都…

作者头像 李华
网站建设 2026/9/9 18:20:48

uniapp+SSM志愿者活动报名小程序:从设计到部署全流程解析

1. 志愿者活动报名,真不是“做个报名页面”那么简单这两年社区和高校的志愿者活动越来越多,我接过好几个类似的需求:组织者拿着一堆Excel表格统计报名信息,手动核对名额、手动通知、手动记时长。活动一多,这套流程基本…

作者头像 李华
网站建设 2026/9/9 18:20:31

Video2X 完整指南:用开源 AI 超分把 480p 老视频变成 4K 高清

Video2X 完整指南:用开源 AI 超分把 480p 老视频变成 4K 高清 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/v…

作者头像 李华
网站建设 2026/9/9 18:20:29

用 3 个环节搭一个微信 AI 助手:WeClone 部署与微调实战

用 3 个环节搭一个微信 AI 助手:WeClone 部署与微调实战 【免费下载链接】WeClone 🚀 One-stop solution for creating your AI twin from chat history 💡 Fine-tune LLMs with your chat logs to capture your unique style, then bind to …

作者头像 李华