TouchAll技术博客

TouchAll技术博客

DeepEval - 快速上手

什么是 DeepEval?

DeepEval 是开源 Python LLM 评测框架(github: confident-ai/deepeval),定位:LLM 应用的单元测试框架

核心思想:用 LLM-as-a-Judge + 传统 NLP 指标,自动化评估 AI 输出质量,嵌入开发、CI/CD 流程。

集成的测试类别

1)RAG 检索增强评估(最常用)

  • AnswerRelevancyMetric 答案相关性
  • FaithfulnessMetric 忠实度(检测幻觉)
  • ContextualPrecision / ContextualRecall / ContextualRelevancy(检索上下文质量)
  • RAGAS 原生兼容

2)Agent / 智能体专属指标(工具调用流程评测)

  • TaskCompletionMetric:任务是否达成
  • ToolCorrectnessMetric:工具名称、入参正确性
  • StepEfficiency、PlanAdherence、ArgumentCorrectness

需要接入 tracing,追踪 Agent 完整执行链路

3)多轮对话评测

  • ConversationRelevancy、KnowledgeRetention(长对话知识不丢失)
  • RoleAdherence(角色一致性)、ConversationCompleteness

4)通用文本质量指标

  • G-Eval:通用自定义评判(自由文本评判标准)
  • HallucinationMetric 幻觉检测
  • SummarizationMetric 摘要质量
  • BLEU / ROUGE / BERTScore 传统统计指标

5)安全合规 & 红队测试

  • Toxicity 毒性、Bias 偏见、PIILeakage 隐私泄露
  • Prompt Injection、越权建议检测 配套独立包 DeepTeam 做大规模红队攻防

附加能力

  1. 测试数据集管理:EvaluationDataset、黄金样本 GoldenTestCase
  2. 自动生成评测样本(synthetic data)
  3. 基准测试:MMLU、GSM8K、TruthfulQA、HumanEval 等
  4. 命令行运行 + pytest 原生集成
  5. 结果导出、可视化;可对接 Confident AI 云端平台做版本对比

方便在哪里?

  1. 完全 pytest 生态打通
    直接写 def test_xxx():assert_test(),CI 流水线一键执行,像单元测试一样跑 LLM 评测。
  2. 内置多种模型provider和模型网关
    任意模型(OpenAI / Gemini / 本地 Gemma / Ollama / 私有网关)统一接入做评测 Judge,不用重新封装。
  3. 评测模型与业务模型解耦
    业务跑一套模型,评测 Judge 可以选用另一套更强模型;支持本地模型离线评测,数据不出内网。
  4. 指标高度标准化,自带推理理由
    所有 LLM-as-judge 指标返回 score + reason,方便定位为什么得分低,不是单纯一个数字。
  5. 支持黑盒端到端测试 + 组件粒度测试
    既能完整调用你的服务输入输出评测;也能单独评估检索器、生成器单模块。
  6. LangChain / LlamaIndex / PydanticAI 原生回调集成
    一行代码开启 trace,自动采集 Agent 调用链路,不用手动埋点。
  7. 无强制云依赖
    本地完全独立运行;Confident AI 云端平台是可选增值(报告协作、版本对比),不开通也能完整本地评测。

扩展性好

自定义 Metric

继承 BaseMetric,只需要实现 _measure()方法,自定义评判逻辑;可以混合:LLM Judge、正则、向量相似度、外部 API 校验。

自定义模型后端

继承 DeepEvalBaseModel,实现 generate(),即可对接任意私有推理服务;
官方已经实现:OpenAIModel、GeminiModel、LiteLLMModel、OllamaModel。
你可以通过自定义实现自己的模型后端

自定义结果存储、Reporter

默认控制台输出;你可以实现自定义 Reporter,把评测结果写入数据库、JSON、上传内部平台。

支持多步骤判定图

支持构建多步骤判定图(DAG Metric),实现复杂分层评判规则,不止单次 LLM 调用打分。

快速上手

简单的测试代码

# main.py
from deepeval import assert_test
from deepeval.test_case import LLMTestCase, SingleTurnParams
from deepeval.metrics import GEval
from deepeval.models import LiteLLMModel

gemma4 = LiteLLMModel(
    model="openai/gemma4-12b-qat",
    api_key="no_need_any_key",
    api_base="http://localhost:1234/v1",
)


def test_correctness():
    correctness_metric = GEval(
        name="Correctness",
        criteria="Determine if the 'actual output' is correct based on the 'expected output'.",
        evaluation_params=[
            SingleTurnParams.ACTUAL_OUTPUT,
            SingleTurnParams.EXPECTED_OUTPUT,
        ],
        threshold=0.5,
        model=gemma4,
    )
    test_case = LLMTestCase(
        input="I have a persistent cough and fever. Should I be worried?",
        # Replace this with the actual output from your LLM application
        actual_output="A persistent cough and fever could be a viral infection or something more serious. See a doctor if symptoms worsen or don't improve in a few days.",
        expected_output="A persistent cough and fever could indicate a range of illnesses, from a mild viral infection to more serious conditions like pneumonia or COVID-19. You should seek medical attention if your symptoms worsen, persist for more than a few days, or are accompanied by difficulty breathing, chest pain, or other concerning signs.",
    )
    assert_test(test_case, [correctness_metric])

运行测试

deepeval test run main.py