免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

评测数据不出内网:用 DeepEval 在本地跑完 LLM 全流程测试

评测数据不出内网:用 DeepEval 在本地跑完 LLM 全流程测试 评测数据不出内网用 DeepEval 在本地跑完 LLM 全流程测试【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval场景切入上线前夜的评测卡点周五下午五点合规团队把测试集收走了——那批带客户 PII 的对话样本不能再离开内网而你的 DeepEval 本地评测还挂着云端 API 当裁判。更要命的是断网演练时整条评测链路直接瘫痪判分请求每一次都打到外网网络一抖回归测试就得重跑。好消息是DeepEval 的指标计算本质是 LLM-as-a-Judge把判分模型换成自部署的开源模型评测就能在本地闭环坏消息是小模型的输出没那么听话有几个坑要提前填。方案拆解把评测搬回本地DeepEval 默认用 GPT 系列做裁判模型但每个指标实例都接受model参数——本地LLM评测的改造点就是按依赖外网的环节逐一换掉这个值。用 Ollama 接一台本地判分模型这是解决不想写任何适配器的最低门槛Ollama 是 DeepEval 内置的 provider一个构造器就能把本地模型接到任意指标上。from deepeval.models import OllamaModel from deepeval.metrics import AnswerRelevancyMetric model OllamaModel( modelqwen3:8b, base_urlhttp://localhost:11434, temperature0, # 判分场景固定温度分数更可复现 ) metric AnswerRelevancyMetric(modelmodel)坑在这里model是逐指标的参数不是全局配置漏传的那个指标会悄悄回落到默认云端模型。用自定义适配器接 transformers 模型如果你已经用 vLLM 或 transformers 自部署了推理服务继承DeepEvalBaseLLM实现四个方法就能接入from deepeval.models import DeepEvalBaseLLM class LocalLlama(DeepEvalBaseLLM): def __init__(self): self.model, self.tokenizer load_model() # ... def load_model(self): return self.model def generate(self, prompt: str) - str: return run_pipeline(prompt) # 返回原始字符串 async def a_generate(self, prompt: str) - str: return self.generate(prompt) def get_model_name(self): return Local Llama关键参数是schemagenerate不接受它时Faithfulness、Summarization 这类需要结构化输出的指标会直接抛 AttributeError这是本地小模型最常见的翻车点。用 JSON 约束兜住小模型的结构化输出小模型生成 JSON 常缺括号、多尾逗号评测会中断并报 invalid JSON。DeepEval 会把 Pydantic schema 注入你的 generate 方法配合lm-format-enforcer在 token 层面做硬约束parser JsonSchemaParser(schema.model_json_schema()) prefix_fn build_transformers_prefix_allowed_tokens_fn( pipeline.tokenizer, parser ) out pipeline(prompt, prefix_allowed_tokens_fnprefix_fn) return schema(**json.loads(out[0][generated_text][len(prompt):]))前提是pip install lm-format-enforcer裁判模型在 13B 以下时这一步建议无条件加上。关掉评测的外发通道最后处理两个容易被忽略的对外通道遥测和结果上传。export DEEPEVAL_TELEMETRY_OPT_OUT1 # 关闭遥测 export DEEPEVAL_RESULTS_FOLDER./eval_results # 结果写本地 JSON deepeval test run test_llm_app.py此后deepeval test run全程不需要 API key也不用deepeval login评测结果直接落成本地 JSON 文件。把本地评测挂进 CI 当回归测试本地评测命令和 pytest 是同一套形态CI 里加一个步骤每次推送就自动回归pytest.mark.parametrize(golden, dataset.goldens) def test_llm_app(golden): answer your_llm_app(golden.input) test_case LLMTestCase(inputgolden.input, actual_outputanswer) assert_test( test_case, metrics[FaithfulnessMetric(modeljudge_model)], )CI runner 上要有可用的推理服务——最现实的做法是在流水线镜像里起 Ollama或让base_url指向内网的推理节点。效果验证本地评测跑起来的样子跑完之后每个指标拿到 0-1 的得分、按 threshold 判定的通过状态以及判分模型给出的 reason全部写进本地 JSON 和报告里。解读三行得分不再受外网限流影响断网环境下也能完整跑完reason 字段由本地模型产出可以和原始对话逐条对照审计时拿得出证据换个裁判模型版本基线会漂移报告里记得同时记录裁判模型的名称与量化参数。离线模型测试省下的不只是钱还有排队等 API 配额的时间。跑 100 条用例要付出什么对比项接本地模型前接本地模型后数据流向测试集和对话每次经第三方全程不出内网单条成本按 token 计费随用例数线性涨一块 GPU 摊薄长期稳定速度上限受外网延迟和限流约束只取决于本地推理可自己控制在你这个量级每天几百条用例下一块消费级显卡基本够用省下来的预算可以加更多用例覆盖或者换一个更强的裁判模型。落地前你需要做的几件事安装框架pip install -U deepevaldocs/content/docs/getting-started.mdx用 Ollama 起一台本地推理服务docs/content/integrations/models/ollama.mdx给每个指标显式传本地 modeldocs/content/guides/guides-using-custom-llms.mdx给结构化输出指标加 JSON 约束docs/content/guides/guides-using-custom-llms.mdx关遥测结果目录指向本地docs/content/docs/data-privacy.mdx用deepeval test run跑通一个测试文件docs/content/docs/getting-started.mdx同一命令挂进 CI 步骤docs/content/docs/evaluation-unit-testing-in-ci-cd.mdx决策辅助本地评测怎么选你的测试集含客户 PII或行业要求数据本地化本地评测就是默认答案先用 4bit 量化的 8B 裁判把链路跑通别一上来追判分精度。团队只有一块消费级显卡走 Ollama 加量化路线指标并发调低裁判控制在 7B-8B用例集先砍到三分之一验证稳定性再逐步加量。评测每天只跑一次、不阻塞开发可以省着算力晚上跑更大的量化模型低频场景下本地评测的边际成本接近于零。最后提醒一个不适合的场景如果你需要对齐云厂商给定的官方基线或者团队本来就有稳定的大模型云额度且没有合规压力——本地小模型裁判与云端大模型裁判的分数差异不为零直接沿用旧基线会误判切换前做一次并排对比把 threshold 重新校准。【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表