LLMOps与智能系统重构,第10章 自动化测试框架:DeepEval 与 Ragas

本章是“新测试”部分的实操核心。在第9章我们确立了“让模型当裁判”的理论基础,本章将把这一理论转化为工程实践。

在 2025 年,“没有自动化测试的 AI 代码禁止上线” 已成为行业铁律。我们将深入探讨 DeepEval 和 Ragas 这两大主流框架的最新演进(2025版),特别是它们对 Agentic Evaluation(智能体评测)Red Teaming(红队测试) 的支持。

在传统的软件工程中,CI/CD(持续集成/持续部署)流水线是质量的守门人。你提交代码,跑通单元测试,代码合并。

LLMOps与智能系统重构,第10章 自动化测试框架:DeepEval 与 Ragas

图10.0 Agent质量控制工厂

在 AI 工程中,这个流程依然存在,但测试的内容变了。

  • 传统单元测试:assert add(1, 1) == 2(毫秒级,确定性)。
  • AI 单元测试:assert_llm(“天空颜色”, “蓝色”)(秒级,概率性,需要裁判)。

本章将教你如何使用 DeepEvalRagas 构建一套 AI-Native 的 CI/CD 流水线

10.1 这里的单元测试不一般:Test-Driven Prompt Engineering (TDPE)

TDPE(测试驱动提示词工程) 是 2025 年 Prompt 开发的标准范式。
开发者不再是在 Playground 里盲目尝试,而是先写好测试用例(Test Case),然后调整 Prompt 直到测试通过。

架构:CI/CD 中的 AI 门禁 (The AI Gatekeeper)

我们在 GitHub Actions 或 GitLab CI 中插入一个特殊的 Step:LLM Evaluation

LLMOps与智能系统重构,第10章 自动化测试框架:DeepEval 与 Ragas

图10.1 2025 年标准的 AI CI/CD 流水线

10.2 开发者体验优先:DeepEval 实战

DeepEval 之所以能在 2024-2025 年迅速统治市场,是由于它做对了一件事:它长得像 Pytest
它让不懂 AI 的传统后端工程师也能无缝上手编写 AI 测试。

10.2.1 编写第一个 AI 单元测试

假设我们有一个 RAG 客服机器人。我们需要测试它是否会产生幻觉。

import pytest
from deepeval import assert_test
from deepeval.test_case import LLMTestCase
from deepeval.metrics import HallucinationMetric, AnswerRelevancyMetric

# 1. 定义测试用例 (从 Golden Dataset 加载)
def test_customer_support_rag():
    input_query = "你们的退款政策是什么?"
    actual_output = "根据规定,数字产品售出后不支持退款。"
    retrieval_context = ["用户协议第3条:所有数字商品一经激活,概不退款。"]

    test_case = LLMTestCase(
        input=input_query,
        actual_output=actual_output,
        retrieval_context=retrieval_context
    )

    # 2. 定义指标 (Metrics)
    # 幻觉指标:检查回答是否与检索上下文冲突
    metric_hallucination = HallucinationMetric(threshold=0.7)
    
    # 3. 断言 (Assertion)
    # 这行代码会自动调用 GPT-4 (或其他 Judge) 进行打分
    assert_test(test_case, [metric_hallucination])

# 运行方式: deepeval test run test_file.py

10.2.2 2025 新特性:自动化红队测试 (Automated Red Teaming)

DeepEval 在 2025 年最大的更新是集成了 Red Teaming 模块。以前我们需要安全专家手动攻击模型,目前可以在 CI 中自动运行。

from deepeval.red_teaming import RedTeamer

def test_security_vulnerability():
    # 自动生成 10 种攻击 Prompt (如 SQL 注入, PII 窃取, 越狱指令)
    red_teamer = RedTeamer(target_model=my_agent)
    vulnerabilities = red_teamer.scan(
        attacks=["prompt_injection", "pii_leakage", "jailbreak"],
        max_turns=3
    )
    
    # 如果发现任何漏洞,测试失败
    assert len(vulnerabilities) == 0

这相当于给你的 Agent 穿上了一层自动更新的防弹衣。

10.3 Agentic RAG 的度量衡:Ragas 2.0

如果说 DeepEval 侧重于**“开发体验 (DX)”,那么 Ragas 则侧重于“数据科学 (Data Science)”**。
在 2025 年,Ragas 从单纯的 RAG 评测进化到了 Agentic Evaluation(智能体评测)

10.3.1 从“搜到了吗”到“做对了吗”

在 Agent 时代,仅仅评估 Context Recall(是否搜到了文档)已经不够了。Agent 可能会调用计算器、查询数据库。
Ragas 2.0 引入了针对 Tool Use(工具使用) 的新指标。

指标

2023 RAG 关注点

2025 Agent 关注点

检索层

Context Recall (召回率)

Tool Selection Accuracy (选对工具了吗?)

生成层

Faithfulness (忠实度)

Tool Argument Correctness (参数填对了吗?)

任务层

Answer Relevancy (相关性)

Agent Goal Accuracy (目标达成了吗?)

10.3.2 实战:评测一个数学 Agent

假设用户问:“计算 123 的平方根加上 5”。Agent 应该调用 sqrt(123) 然后 add(result, 5)。

from ragas.metrics import ToolCallAccuracy
from ragas.testset import AgentTestCase

def test_math_agent():
    case = AgentTestCase(
        user_input="计算 123 的平方根加上 5",
        # 期望的工具调用链
        expected_tool_calls=[
            {"name": "calculator", "args": {"expression": "sqrt(123)"}},
            {"name": "calculator", "args": {"expression": "11.09 + 5"}}
        ],
        # 实际的工具调用链 (从 Trace 中获取)
        actual_tool_calls=my_agent_trace.tool_calls
    )
    
    # 评测工具调用的准确性
    metric = ToolCallAccuracy()
    score = metric.score(case)
    
    assert score > 0.9

图10.2 展示了 Agent 评测的维度升级。

LLMOps与智能系统重构,第10章 自动化测试框架:DeepEval 与 Ragas

图10.2 从 RAG 评测进化到 Agent 智能体评测

10.4 燃料问题:合成数据工厂 (Synthetic Data Factory)

做自动化测试最头疼的是:测试数据从哪来?
手写 100 个 (Question, Ground Truth) 对太累了。
2025 年的趋势是利用 DeepEvalRagas 内置的合成数据生成器。

Evol-Instruct 技术

我们可以只提供一份原始文档(如 PDF),让框架自动生成不同难度的测试题:

  1. Simple: “退款流程是什么?”
  2. Reasoning: “如果我买了产品 A 但没激活,能否按流程 B 退款?”
  3. Multi-Context: 结合文档第 1 页和第 10 页的内容提问。
from deepeval.synthesizer import Synthesizer

# 输入文档
docs = ["用户协议.pdf"]

# 自动生成 50 个测试用例
synthesizer = Synthesizer()
golden_dataset = synthesizer.generate_goldens_from_docs(
    document_paths=docs, 
    max_goldens=50,
    evolution_types=["reasoning", "multi_context"] # 进化策略
)

这就像是一个“无人工厂”,源源不断地生产出高质量的测试弹药。

10.5 进阶:仿真沙箱 (Simulation Arena)

对于极其复杂的 Agent(如全自动编程助手),静态的 QA 测试已经不够了。
我们需要 Simulation (仿真)

  • User Agent: 扮演一个刁钻的客户,不断追问、打断、修改需求。
  • System Agent: 被测对象。

让两个 Agent 在沙箱里互搏 100 回合,最后由 GPT-4 裁判判定 System Agent 是否崩溃,是否达成了最终目标。这也是 Devin 等高级智能体背后的测试秘诀。

本章小结

本章我们构建了 AI 系统的质量护城河

  • DeepEval 让我们像写 Python 代码一样写 AI 测试,并集成了红队安全扫描。
  • Ragas 2.0 提供了针对 Agent 工具调用和规划能力的深层度量。
  • 合成数据 解决了测试用例的来源问题。

至此,我们的 AI 系统已经具备了可观测(Trace)、可控制(Gateway)、可测试(Eval)的能力。但当系统上线后,我们如何知道它到底在想什么?如果它出错了,我们如何回溯那复杂的思维链?

在下一章,我们将探讨 全链路追踪 (Tracing),点亮 AI 黑盒内部的灯。

思考与面试角

Q1:DeepEval 和 Ragas 有什么区别?我该选哪个?

参考答案

DeepEval 更像 Pytest:适合集成到 CI/CD 流水线,关注“Pass/Fail”和开发者体验。如果你是工程师,选它。

Ragas 更像 Scikit-learn:适合离线分析,关注指标的数学定义和算法优化。如果你是数据科学家,选它。

最佳实践:在 CI 中用 DeepEval 跑测试,底层引用 Ragas 的指标算法。

Q2:在 CI/CD 中跑 LLM 测试太贵了怎么办?

参考答案:使用分级测试策略 (Tiered Testing)

Commit 级别:只跑轻量级的 Assert(如 JSON 格式检查、关键词检查),不调 GPT-4。

Merge Request 级别:跑 10% 的核心 Golden Dataset,使用 GPT-3.5 或小模型裁判。

Release 级别:跑 100% 全量测试,使用 GPT-4o 裁判。

Q3:什么是“Reference-free Evaluation”(无参考评测)?

参考答案:传统测试需要 Ground Truth(标准答案)。但在生成式 AI 中,许多问题没有标准答案。Reference-free 指标(如 Answer Relevancy)不需要标准答案,只需要 Input 和 Output,通过分析两者之间的逻辑关系来打分。这大大降低了构建数据集的门槛。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
脑洞比黑洞还深的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容