DeepEval LLM 评估:5 分钟跑通首次评估并接入 CI
【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval
DeepEval 是一个开源的 LLM 评估框架,用"LLM 当法官"的方式给模型输出打分,把评估变成可进 CI 的 pytest 用例。跟着本文 5 分钟看到第一条评估结果,拿到的是一套能直接跑的多指标评估脚本。
💡 30 秒认识 DeepEval
DeepEval 把"LLM 即法官"做成了可运行的测试用例:评估模型给应用输出打分,低于阈值测试就失败。和传统断言"输出等于预期"不同,它处理的是非确定性输出,2000 条数据也不用人工抽检。内置 40+ 评估指标,RAG 有 AnswerRelevancy、Faithfulness 系列,Agent 有 TaskCompletion、ToolUse 系列,内容安全有 Hallucination、PIILeakage 系列。核心设计就一条:评估结果能直接转成测试通过与否,天然适配流水线。
🚀 5 分钟跑通第一个 DeepEval 评估
先装好框架并配好评估用的 Key。默认评估模型走 OpenAI,所以OPENAI_API_KEY是前置条件:
git clone https://gitcode.com/GitHub_Trending/de/deepeval cd deepeval pip install -U . # 安装当前代码,也包含 pytest 插件 deepeval --version # 确认 CLI 可用 export OPENAI_API_KEY="your-api-key"写一个最小用例,评估一条客服问答的答案相关性:
# test_case.py from deepeval import assert_test from deepeval.test_case import LLMTestCase from deepeval.metrics import AnswerRelevancyMetric def test_customer_service(): test_case = LLMTestCase( input="What if these shoes don't fit?", actual_output="We offer a 30-day full refund at no extra cost.", expected_output="You're eligible for a free full refund within 30 days.", ) metric = AnswerRelevancyMetric(threshold=0.7) assert_test(test_case, [metric])运行deepeval test run test_case.py。终端会打印一张表格:测试用例名、指标列显示 AnswerRelevancy 的 0~1 得分、状态列绿色 PASS 或红色 FAIL;得分低于 0.7 时用例失败,并附上评估者给出的判定理由。
💡 评估模型默认取自
OPENAI_API_KEY。配了CONFIDENT_API_KEY后结果会同步到 Confident AI 平台做历史对比,只做本地评估可以跳过。
🎯 电商售后机器人:RAG 问答走完全流程
场景:电商售后文档问答机器人,用三个 RAG 指标批量验证"答得相关吗、忠于检索内容吗、上下文用对了吗"。
第一步,定义用例。每条用例含用户问题、检索到的上下文、机器人实际回答:
cases = [ ("退货政策是什么?", ["购买后 30 天内可全额退款。"], "您可以在 30 天内获得全额退款。"), ("支持国际配送吗?", ["我们目前仅支持国内配送。"], "我们提供国内和国际配送服务。"), ("保修期多长?", ["所有产品享受 1 年保修。"], "产品包含 1 年保修。"), ]第二步,选指标。相关性管"答不答题",忠实度管"是否忠于检索内容",上下文相关性管"检索片段是否对症":
metrics = [ AnswerRelevancyMetric(threshold=0.7), FaithfulnessMetric(threshold=0.7), ContextualRelevancyMetric(threshold=0.6), ]第三步,批量执行。evaluate异步并发跑完所有用例:
from deepeval import evaluate from deepeval.test_case import LLMTestCase test_cases = [ LLMTestCase(input=q, actual_output=out, retrieval_context=ctx) for q, ctx, out in cases ] evaluate(test_cases=test_cases, metrics=metrics)第四步,读结果。终端打印每个用例在三个指标上的得分表和 PASS/FAIL:
第一条、第三条全绿。 第二条 Faithfulness 得分 0.2,FAIL。第五步,判断该不该拦截。第二条失败原因明确:检索上下文写着"仅支持国内配送",回答却说"提供国际配送",属于无依据编造。线上后果是用户按错误承诺下单,产生投诉和退单,这类用例必须拦住,不许合入。
🔧 按需求裁剪:GEval 与本地评估模型
用 GEval 给客服话术打自定义分数
内置指标覆盖不了业务标准(语气、格式、合规话术)时用 GEval,把自然语言标准直接交给评估模型。⚠️ 评估仍有波动,加strict_mode=True收紧判定:
from deepeval.metrics import GEval from deepeval.test_case import SingleTurnParams tone_metric = GEval( name="语气评估", criteria="判断回复是否礼貌、专业,避免含糊其辞或推诿话术", evaluation_params=[SingleTurnParams.ACTUAL_OUTPUT, SingleTurnParams.INPUT], threshold=0.8, strict_mode=True, )把评估模型换成本地 Ollama
有数据合规顾虑或想省 API 费用时,把法官换成本地模型,评估流量不出内网。⚠️ 评估模型能力应不弱于被评模型,弱模型评强模型分数漂移明显:
from deepeval.models.llms import OllamaModel metric = AnswerRelevancyMetric( threshold=0.7, model=OllamaModel(model="llama3.1:70b"), )📦 从本机到 CI 流水线
DeepEval 是 pytest 插件,CI 集成只需一条测试命令,最小 workflow:
# .github/workflows/llm-eval.yml name: LLM Evaluation Pipeline on: [push, pull_request] jobs: evaluate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v4 with: { python-version: "3.11" } - run: pip install deepeval - run: deepeval test run tests/ env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} CONFIDENT_API_KEY: ${{ secrets.CONFIDENT_API_KEY }}把评估结果当作合并门槛:任一用例低于阈值即阻断 PR,而不是只看"有没有报错"。把阈值当作标尺:先用真实业务数据校准一次,之后保持稳定,频繁调整会让回归线失去意义。把每次运行当作历史数据:配置CONFIDENT_API_KEY后平台自动累积指标曲线,劣化一眼可见。
⚠️ 排错速查
| 症状 | 原因 | 一句话修复 |
|---|---|---|
| 同一用例两次运行得分不同 | LLM 法官自带随机性 | 重要指标多次运行取均值;重复对比加--use-cache |
| 频繁 429 限流 | 默认并发 100 打满提供商配额 | 传async_config=AsyncConfig(max_concurrent=5)降并发 |
| 某指标直接报错而非给分 | Faithfulness、Contextual 系列缺retrieval_context | 给用例补上该字段再跑 |
| 本地评估首次极慢 | Ollama 首次调用才拉取模型 | 提前ollama pull 模型名预热 |
下一步:读一遍 deepeval/metrics/ 里AnswerRelevancyMetric的源码,理解从用例到得分的完整链路;再跑 examples/rag_evaluation/ 下的向量库集成示例,把评估接到你自己的检索栈上。指标选择参考 docs/。
【免费下载链接】deepevalThe LLM Evaluation Framework项目地址: https://gitcode.com/GitHub_Trending/de/deepeval
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考