本章是“新测试”部分的实操核心。在第9章我们确立了“让模型当裁判”的理论基础,本章将把这一理论转化为工程实践。
在 2025 年,“没有自动化测试的 AI 代码禁止上线” 已成为行业铁律。我们将深入探讨 DeepEval 和 Ragas 这两大主流框架的最新演进(2025版),特别是它们对 Agentic Evaluation(智能体评测) 和 Red Teaming(红队测试) 的支持。
在传统的软件工程中,CI/CD(持续集成/持续部署)流水线是质量的守门人。你提交代码,跑通单元测试,代码合并。

图10.0 Agent质量控制工厂
在 AI 工程中,这个流程依然存在,但测试的内容变了。
- 传统单元测试:assert add(1, 1) == 2(毫秒级,确定性)。
- AI 单元测试:assert_llm(“天空颜色”, “蓝色”)(秒级,概率性,需要裁判)。
本章将教你如何使用 DeepEval 和 Ragas 构建一套 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。

图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 评测的维度升级。

图10.2 从 RAG 评测进化到 Agent 智能体评测
10.4 燃料问题:合成数据工厂 (Synthetic Data Factory)
做自动化测试最头疼的是:测试数据从哪来?
手写 100 个 (Question, Ground Truth) 对太累了。
2025 年的趋势是利用 DeepEval 或 Ragas 内置的合成数据生成器。
Evol-Instruct 技术
我们可以只提供一份原始文档(如 PDF),让框架自动生成不同难度的测试题:
- Simple: “退款流程是什么?”
- Reasoning: “如果我买了产品 A 但没激活,能否按流程 B 退款?”
- 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,通过分析两者之间的逻辑关系来打分。这大大降低了构建数据集的门槛。

















暂无评论内容