news 2026/6/14 10:20:22

DeepEval:AI代理评估框架

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepEval:AI代理评估框架

如果有人想用DeepEval尝试RAG和Agent评估示例,请访问仓库并按照README中的设置步骤操作。

1、AI信任问题

想象一下,你已经为你的公司构建了一个AI助手。它回答客户问题,从你的文档中检索信息,甚至帮助计算运费。在演示期间一切似乎都很正常。但后来,一个客户询问你的退款政策,AI自信地回应了完全编造的信息。

这个场景不是假设的——这是团队在部署AI系统时面临的最常见问题之一。大型语言模型(LLM)非常强大,但它们有一个有据可查的倾向,即"幻觉"——生成听起来合理但不正确的信息。

问题不是你的AI是否会犯错。而是你会在用户发现之前抓住它们。

2、为什么评估比以往任何时候都重要

传统软件是可预测的。如果你编写一个函数来加两个数字,它总是会对相同的输入返回相同的结果。你可以编写单元测试,如果它们通过,你就对你的代码有很高的信心。

AI系统是不同的。它们是概率性的,意味着相同的输入可能产生略有不同的输出。它们可能受到措辞细微变化的影响。最重要的是,它们可能以看起来完全合理的方式失败。

考虑这两种在现代应用中迅速变得必不可少的AI系统类型:

AI代理是可以使用工具来完成任务的系统。它们可能搜索网页、查询数据库、执行计算或与API交互。挑战?你需要确保代理:

  • 为每个任务选择正确的工具

  • 向用户提供相关的答案

  • 不编造它没有的信息
    RAG系统在生成响应之前从你的文档中检索相关信息。这有助于将AI的答案锚定在你的实际数据中。但你需要验证:

  • 检索找到正确的文档

  • AI使用检索到的信息(而不是它的训练数据)

  • 最终答案是准确相关
    没有适当的评估,你本质上是在蒙着眼睛部署AI系统,希望它们能正常工作。

3、评估领域:为什么选择DeepEval?

存在几个用于评估LLM应用的框架:

DeepEval的突出之处

1. 开发者友好的设计:DeepEval对软件工程师来说感觉很熟悉。如果你写过pytest测试,你已经知道如何使用它。这大大降低了学习曲线。

2. 开箱即用的全面指标:从答案相关性到幻觉检测到工具正确性——DeepEval提供了经过实战测试的指标,你自己构建这些指标需要几个月的时间。

3. 适用于任何LLM技术栈:无论你使用的是LangChain、LlamaIndex还是自定义实现,DeepEval都能无缝集成。

4. CI/CD集成:你可以将LLM评估添加到你的持续集成管道中,在回归到达生产环境之前捕获它们。

5. 活跃的开发:随着定期更新和活跃的社区,DeepEval随着快速变化的AI领域不断进化。

4、实践:构建和评估AI系统

让我们通过一个实际示例。我创建了一个完整的仓库,演示如何评估AI代理和RAG系统:

仓库:https://github.com/DhunganaKB/DeepEval_Examples

项目结构很简单:

第一部分:评估AI代理

我们的代理使用LangGraph构建,可以访问三个工具:

@tool def get_weather(city: str) -> str: """获取城市的当前天气信息。""" # 返回主要城市的天气数据 @tool def calculate(expression: str) -> str: """评估数学表达式。""" # 安全地评估数学表达式 @tool def search_knowledge_base(query: str) -> str: """搜索公司政策和产品信息。""" # 返回退款政策、运费信息等

当用户问"旧金山天气如何?"时,代理应该:

  1. 认识到这需要get_weather工具
  2. 用正确的参数调用它
  3. 返回有用的响应
    测试数据集

我们用预期行为定义测试场景:

TEST_SCENARIOS = [ { "input": "旧金山天气如何?", "expected_output": "旧金山:62°F,晴朗。", "expected_tools": [ToolCall(name="get_weather")], }, { "input": "计算85美元账单的15%小费。", "expected_output": "85美元的15%小费是12.75美元。", "expected_tools": [ToolCall(name="calculate")], }, { "input": "你们的退款政策是什么?", "expected_output": "我们的退款政策允许在30天内退货...", "expected_tools": [ToolCall(name="search_knowledge_base")], }, ]

评估指标

我们评估三个关键方面:

1. 工具正确性

代理是否调用了正确的工具?如果用户询问天气,代理应该使用get_weather,而不是calculate

ToolCorrectnessMetric(threshold=0.5, include_reason=True)

2. 答案相关性

响应实际上与所问的问题相关吗?代理可能调用了正确的工具,但随后提供了不相关的摘要。

AnswerRelevancyMetric(threshold=0.5, include_reason=True)

3. 输出正确性

答案在事实上是否正确?使用GEval,我们可以创建自定义评估标准:

GEval( name="Correctness", criteria="根据预期输出确定实际输出在事实上是否正确。", evaluation_params=[ LLMTestCaseParams.ACTUAL_OUTPUT, LLMTestCaseParams.EXPECTED_OUTPUT, ], threshold=0.5, )

运行评估

cd Agent python test_agent.py

DeepEval通过所有指标运行每个测试用例并提供详细反馈:

====================================================================== AGENT EVALUATION ====================================================================== Evaluating 4 test cases... [1] 旧金山天气如何? Output: 旧金山天气是62°F,晴朗。 Tools: ['get_weather'] ✓ Tool Correctness: PASSED (1.0) ✓ Answer Relevancy: PASSED (0.95) ✓ Correctness: PASSED (0.92)

第二部分:评估RAG管道

RAG系统更复杂,因为它们涉及两个阶段:检索和生成。两者都可能独立失败。

RAG管道

我们的管道使用:

  • LangChain用于编排
  • FAISS用于向量存储
  • OpenAI嵌入用于文档编码
  • GPT-4o-mini用于生成
class RAGPipeline: def __init__( self, model_name: str = "gpt-4o-mini", embedding_model: str = "text-embedding-3-small", chunk_size: int = 500, chunk_overlap: int = 50, top_k: int = 4, ):

管道从data/文件夹加载文档,其中包含:

  • 公司手册(PTO、远程工作政策)
  • 产品常见问题解答(功能、故障排除)
  • 支持工单(历史问题和解决方案)
  • API文档(端点、速率限制)
  • 培训材料(支持程序)
    评估数据集

我们创建了20个直接从源文档派生的问答对:

EVAL_DATASET = [ { "input": "全职员工每月累积多少天PTO?", "expected_output": "全职员工每月累积1.5天PTO。", "expected_context": "全职员工每月累积1.5天PTO。", "source_file": "company_handbook.txt", }, { "input": "认证用户的API速率限制是多少?", "expected_output": "速率限制是每个用户令牌每分钟60个请求。", "expected_context": "每个用户令牌每分钟60个请求", "source_file": "api_refrence.txt", }, # ... 还有18个测试用例 ]

每个测试用例包括:

  • Input:要问的问题
  • Expected Output:理想的答案
  • Expected Context:应该被检索的文本
  • Source File:哪个文档包含答案
    五个RAG指标

RAG评估比代理评估更细致。我们使用五个互补的指标:

1. 答案相关性

生成的答案是否与问题相关?

AnswerRelevancyMetric(threshold=0.5, include_reason=True)

2. 忠实性(幻觉检测)

这很关键。答案是否锚定在检索到的上下文中,还是模型编造了东西?

FaithfulnessMetric(threshold=0.5, include_reason=True)

高忠实性分数意味着AI正在使用你的文档,而不是发明信息。

3. 上下文召回

检索系统是否找到了包含答案的文档?

ContextualRecallMetric(threshold=0.5, include_reason=True)

4. 上下文精确性

检索到的文档实际上是否相关,还是我们检索到了噪音?

ContextualPrecisionMetric(threshold=0.4, include_reason=True)

5. 正确性

最终答案在事实上是否准确?

GEval( name="Correctness", criteria="确定实际输出在事实上是否正确...", threshold=0.5, )

理解结果

当你运行评估时:

cd RAG python test_rag.py -quick

你可能会看到如下结果:

Contextual Precision (score: 0.5, threshold: 0.4) Reason: 直接回答问题的相关节点 ('全职员工每月累积1.5天PTO')排名第二, 而第一个节点讨论费用政策...

这告诉你一些重要的事情:你的检索正在找到正确的信息,但没有将其排在第一位。这是可操作的反馈——你可能需要改进你的分块策略或添加重新排序步骤。

5、LLM评估的最佳实践

通过构建这个项目,出现了几个最佳实践:

1. 从黄金数据集开始

创建一个规模小但高质量的测试用例集,其中包含已知的正确答案。这些成为你评估的ground truth。

2. 测试失败模式

不要只测试快乐路径。包括以下问题:

  • 需要你的文档中没有的信息
  • 可以由多个文档回答
  • 措辞模糊
    3. 迭代阈值

从较低的阈值(0.5)开始,随着系统改进而增加。过早设置过于严格的阈值可能会令人沮丧。

4. 使用缓存

LLM调用缓慢且昂贵。缓存你的测试用例结果,以避免在开发期间重新运行相同的查询:

_test_case_cache: dict[str, LLMTestCase] = {} def build_test_case(scenario: dict) -> LLMTestCase: cache_key = scenario["input"] if cache_key not in _test_case_cache: # 运行实际测试... return _test_case_cache[cache_key]

5. 集成到CI/CD

一旦你的评估套件稳定,将其添加到你的部署管道:

# .github/workflows/test.yml - name: Run LLM Evaluation run: | deepeval test run test_agent.py deepeval test run test_rag.py

6、更大的图景:构建可信赖的AI

评估不仅仅是捕捉错误——它是关于建立信任。

当你能够证明你的AI系统:

  • 为正确的任务调用正确的工具
  • 检索相关信息
  • 锚定在你的数据中
  • 提供准确的答案
    ……你不仅仅是发布一个功能。你是在发布信心。

你的用户相信,当他们问一个问题时,他们会得到一个可靠的答案。你的团队相信,更改不会破坏关键功能。你的利益相关者相信,AI正在做它应该做的事情。

这种信任是通过严格的评估赢得的。

探索和适应:

  • 修改测试场景以匹配你的用例
  • 根据你的质量要求调整阈值
  • 根据需要添加新指标

7、结束语

AI应用的"发布并希望它有效"的时代已经结束。随着LLM越来越多地集成到关键业务流程中,系统评估其行为的能力变得至关重要。

DeepEval为这一挑战提供了一种实用、开发者友好的方法。通过将LLM评估视为软件测试——具有明确的指标、可重现的测试用例和CI/CD集成——我们可以构建不仅强大而且可靠的AI系统。

本文中的代码示例可在github.com/DhunganaKB/DeepEval_Examples获取。使用它们作为评估你自己的AI代理和RAG系统的起点。


原文链接:DeepEval:AI代理评估框架 - 汇智网

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 0:29:41

P0926GH FBM224接线端子

P0926GH FBM224 接线端子简介: P0926GH FBM224 接线端子是工业控制系统中用于现场信号接入与连接的重要部件,主要为 FBM224 模块提供可靠的电气连接通道,确保信号传输的稳定性和系统运行的安全性。P0926GH FBM224 接线端子用于现场信号与模块…

作者头像 李华
网站建设 2026/5/31 12:38:12

P0917SY FBM223耦合器

P0917SY FBM223 耦合器模块简介: P0917SY FBM223 耦合器模块是工业控制系统中的关键连接单元,主要用于实现各功能模块之间的信号传输和耦合,确保系统数据交换的可靠性和运行的稳定性。 P0917SY FBM223 模块用于模块间的信号耦合与连接。 支持…

作者头像 李华
网站建设 2026/6/12 10:50:27

收藏!大模型入门不踩坑|小白程序员必看,转行+学习全攻略

这两年,大模型早已褪去实验室的神秘面纱,不再是高高在上的技术概念,而是深度融入了各行各业的日常——程序员的IDE里,它实时提供代码提示、排查bug;学生的学习场景中,它助力思路拓展、高效复盘;…

作者头像 李华
网站建设 2026/5/28 16:42:49

微信小程序的羽毛球爱好者平台的设计与实现 羽毛球赛事平台

目录 羽毛球爱好者微信小程序平台的设计与实现摘要 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 羽毛球爱好者微信小程序平台的设计与实现摘要 该平台旨在为羽毛球爱好者提供一站式服务,整…

作者头像 李华
网站建设 2026/6/13 14:19:11

智能家居照明系统控制设计

智能家居照明系统控制设计 第一章 设计背景与核心目标 传统家居照明多采用机械开关或简易遥控,仅能实现通断控制,存在光照强度/色温固定、无法适配环境变化与使用场景、能耗浪费等问题,难以满足现代家居“舒适、智能、节能”的照明需求。智能…

作者头像 李华