资讯动态

DeepEval 本地评测:离线跑通 LLM 测试全流程

发布时间:2026/9/9 17:53:19 来源:尧图企业网站定制
DeepEval 本地评测离线跑通 LLM 测试全流程【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval上个季度某医疗 SaaS 团队被迫临时下线了 LLM 质量评测流程合规审查明确要求问诊记录与用户 query 全程留在内网任何形式的数据外发都不被允许。把评测裁判换成自托管模型、整条评测流程搬到内网跑成了唯一出路。DeepEval 本地评测方案针对的正是这类场景它提供自定义模型接入机制可把自托管的开源 LLM 接到指标计算管道里从用例生成、指标打分到报告输出全部离线完成。核心价值在于测试数据与模型输出不再离开本地环境一次部署后评测的边际调用成本显著降低。架构速览本地 LLM 如何接入评测管道DeepEval 的每个指标Faithfulness、AnswerRelevancy 等都接受一个model参数默认走云端 API但这个参数完全可以指向本地模型。机制的关键是一个抽象基类DeepEvalBaseLLM它只定义了四个抽象方法load_model、generate、a_generate、get_model_name。子类实现这几个方法后评测框架在打分时就不会再去请求任何外部服务而是通过你提供的generate调用本地推理。也就是说架构上是一条管道、可替换的裁判evaluate入口接收test_cases与metrics各指标内部通过裁判模型的generate完成语义判断。裁判换成本地 8B 模型管道其余部分——用例结构、指标定义、报告格式——完全不变。加载本地模型并注册 DeepEval 自定义模型接入适配器整条动线分三步装依赖、加载模型、写适配器。先安装并加载一个本地模型。以下以 Llama-3 8B 为例任何 Transformers 可加载的权重都适用pip install -U deepevalfrom transformers import AutoModelForCausalLM, AutoTokenizer model AutoModelForCausalLM.from_pretrained( meta-llama/Meta-Llama-3-8B-Instruct, device_mapauto ) tokenizer AutoTokenizer.from_pretrained( meta-llama/Meta-Llama-3-8B-Instruct )然后是适配器本身继承DeepEvalBaseLLM把加载好的模型接进四个方法其余实现细节token 截断、temperature 设置等一句话带过即可完整版见官方文档guides-using-custom-llms.mdx。from deepeval.models import DeepEvalBaseLLM class LocalLlama3(DeepEvalBaseLLM): def __init__(self): super().__init__(modelLlama-3 8B) def load_model(self): # 加载上文中的 model 与 tokenizer省略 ... def generate(self, prompt, **kwargs) - str: # tokenizer model.generate解码后返回纯文本 ... async def a_generate(self, prompt, **kwargs) - str: return self.generate(prompt) def get_model_name(self): return Llama-3 8B初始化后实例local_llm LocalLlama3()后面所有指标都直接引用它。构建本地 LLM 测试管道输入、指标、输出输入侧手写多轮对话用例费时且覆盖不全。ConversationSimulator可以按用户意图分布 用户画像字段自动模拟出多轮会话每轮 query 和期望走向都是模拟器生成的适合作为回归测试的基础语料from deepeval.simulator import ConversationSimulator simulator ConversationSimulator( user_intentions{报告症状并寻求建议: 3, 询问药物副作用: 2}, user_profile_items[年龄, 过敏史, 当前用药], ) test_cases simulator.simulate(min_turns3, max_turns6)simulate的完整参数含被测 chatbot 的回调见官方文档conversation-simulator。指标侧DeepEval 内置数十种指标下面挑 5 个高频的代表性指标全部可以在本地裁判模型上计算指标用途典型场景AnswerRelevancyMetric回答与问题的相关程度通用问答质量基线FaithfulnessMetric回答是否有上下文依据检索增强场景的幻觉检测RoleAdherenceMetric是否保持设定角色与语气客服、导诊类 AgentToxicityMetric输出的有害内容风险安全合规检查JSONCorrectnessMetric结构化输出的可解析性与字段正确性工具调用、函数式输出指标与评测入口把指标和用例交给evaluate裁判模型统一指定为本地实例from deepeval import evaluate from deepeval.metrics import ( AnswerRelevancyMetric, FaithfulnessMetric, ) evaluate( test_casestest_cases, metrics[ AnswerRelevancyMetric(modellocal_llm, threshold0.7), FaithfulnessMetric(modellocal_llm, threshold0.7), ], )输出侧evaluate结束后可导出本地 HTML 报告把每个用例的指标得分、裁判模型的判定理由逐条落盘。解读时建议先看整体通过率再逐个点开未达标用例的 reason 字段——理由本身往往比分数更能暴露模型短板比如 Faithfulness 低分多集中在长答案说明上下文截断策略需要调整。⚡ 离线模型评估的踩坑与对策裁判模型生成不稳定 JSON开源模型做指标打分时偶尔输出带 markdown 代码块或多余前缀的 JSON导致解析失败。对策是让指标侧的裁判模型单独约束输出必要时用lm-format-enforcer一类的结构化解码库在解码阶段做约束一行build_transformers_prefix_allowed_tokens_fn(tokenizer, parser)即可挂上。8B 模型塞不进 8G 显存直接上 4 位量化显存占用基本降到原来的 1/4 左右对评测打分这类判断任务精度损失不明显。加载时传一个量化配置即可BitsAndBytesConfig(load_in_4bitTrue, bnb_4bit_quant_typenf4)。评测中途 OOM 或长时间卡死多为并发打满显存所致。把测试用例分批传入evaluate或调低指标内部的并发数单批 50~100 条是比较稳的节奏长跑批任务可以挂 nohup 或放进任务队列避免终端断开丢结果。 本地大模型评测 CI 集成每次更新自动回归把评测脚本提交为 pytest 用例后模型权重或 prompt 变更都会触发自动回归这一步在 CI 里成本很低因为整条链路不依赖外网jobs: llm-eval: runs-on: self-hosted-gpu steps: - uses: actions/checkoutv4 - run: pip install -U deepeval - run: pytest tests/test_llm_quality.py -v要点有三评测机器需要能加载本地权重自托管 GPU runner 或带模型的专用节点测试脚本内用assert_test声明每条用例的指标与阈值把报告产物归档到构建记录方便两次运行之间 diff。收束与下一步克隆仓库并安装git clone https://gitcode.com/GitHub_Trending/de/deepeval按 getting-started.mdx 完成环境初始化。用上面三个片段跑通第一条用例一个本地裁判模型 一个指标 一条手写用例先验证管道再扩展。把ConversationSimulator生成的对话沉淀为固定语料文件作为后续每次模型更新的回归基线。延伸阅读自定义 LLM 接入完整指南评测入门文档【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价