教程中心进阶
进阶

AI 智能体自动化评测:用 promptfoo / DeepEval 给 Agent 打分

2026.07.19· 6 个步骤 · 19 分钟阅读· 📊 Agent 评测

你有没有过这种经历:改了一版提示词,手测 3 个例子觉得「更好了」,上线后用户却投诉变差?因为 3 个例子根本代表不了真实分布。本教程教你用 Evals(评测集)给智能体做自动化打分——每次改提示词、换模型,都跑同一套考题,用分数说话,而不是凭感觉。

📊 本教程适合:已经上线或准备上线 Agent,想建立「改动可量化对比」机制的开发者与团队。需要 Python 与命令行基础。

先搞懂:Evals 到底测什么

Evals 就是一套「考题 + 评分标准」。你准备一批输入(问题/文档),以及期望的行为,让 Agent 跑一遍,再用指标打分:

指标测什么常用工具
答案相关性答非所问没有DeepEval / Ragas
事实一致性有没有编造DeepEval Faithfulness
召回质量知识库找对没Ragas Context Precision
回归对比新版本是否退步promptfoo

评测的第一步不是写代码,是攒「考题」。从真实用户日志里挑 30~50 个有代表性的问题,比凭空编 200 个更有用。本中心《Agent 反馈闭环》里沉淀的困惑点,正是最好的考题来源。

Step 1:用 promptfoo 跑「回归对比」

1 改提示词前后,分数差多少

promptfoo 最适合做「A 版 vs B 版」的对比。先装并写配置:

npm install -g promptfoo
# promptfooconfig.yaml
prompts:
  - "你是客服,用不超过3句话回答:{{question}}"
  - "你是客服专家,先复述用户问题再简洁回答:{{question}}"
providers:
  - openai:gpt-4o-mini
tests:
  - vars: { question: "退款多久到账?" }
  - vars: { question: "你们支持开发票吗?" }
  - vars: { question: "产品坏了怎么换?" }

promptfoo eval
promptfoo view   # 打开可视化报告
💡 promptfoo 会把每个提示词版本在每道题上的表现并排展示,一眼看出「B 版是否全面优于 A 版」。

Step 2:用断言定义「通过标准」

2 不只看分数,要看「达不达标」

加 `assert` 让评测变成「通过/不通过」:

tests:
  - vars: { question: "退款多久到账?" }
    assert:
      - type: contains      # 必须含关键词
        value: "退款"
      - type: llm-rubric    # 用模型判断语义
        value: "回答说明了退款到账的大致时间"

llm-rubric 是用另一个模型当「考官」做语义判断,比关键词灵活得多,适合测「有没有说清楚」这类软指标。

Step 3:用 DeepEval 测「相关性 + 不编造」

3 专治 RAG 类 Agent 的幻觉

如果你的 Agent 接了知识库,重点测「答的是不是基于资料」:

pip install deepeval
from deepeval import assert_test
from deepeval.metrics import AnswerRelevancyMetric, FaithfulnessMetric
from deepeval.test_case import LLMTestCase

test_case = LLMTestCase(
    input="退款多久到账?",
    actual_output=agent_answer,
    retrieval_context=[doc1, doc2]   # 知识库召回的内容
)
assert_test(test_case, [
    AnswerRelevancyMetric(threshold=0.7),
    FaithfulnessMetric(threshold=0.8)  # 低于阈值=有编造
])
🔑 关键技巧:FaithfulnessMetric 专门抓「模型编了知识库里没有的内容」。RAG Agent 上线前必跑这一项。

Step 4:用 Ragas 给知识库召回打分

4 答案不行,先查是不是「找错资料」

很多 Agent 答得差,根因是召回的文档就不对。Ragas 专门评召回质量:

pip install ragas
from ragas import evaluate
from ragas.metrics import context_precision, context_recall

result = evaluate(
    dataset=your_dataset,   # 含 question / answer / contexts
    metrics=[context_precision, context_recall]
)
print(result)

召回差,调提示词没用。先确认「找对文档」再优化「怎么答」,顺序别反。

Step 5:把评测接进 CI,改动自动报警

5 让分数成为发布门槛

把评测脚本放进提交/部署流程,分数不达标就拦下:

# 在 promptfoo 中要求整体通过率门槛
promptfoo eval --threshold 0.8
# 退出码非 0 → CI 失败 → 禁止合并/发布

# DeepEval 也可在 pytest 里跑,失败即红线
pytest test_agent_eval.py
🚦 建议:把「整体通过率 ≥ 0.8 且不得有 Faithfulness 不及格」设为硬门槛。既防退步,又不至于太苛刻卡死迭代。

Step 6:评测集要「养」,别一次性

6 错题本就是最好的考题库
动作做法
持续补题每次用户投诉/答错,转成一条测试用例
定期回测换模型、调知识库后全量重跑
分层冒烟集(快)常跑,全量集(慢)发布前跑

小结

Evals 不是「锦上添花」,而是 Agent 上线后的「安全带」。最小可行起步:攒 30 条真实考题 → promptfoo 跑回归 → 接 CI 当门槛。RAG 类再加 DeepEval 的 Faithfulness 和 Ragas 召回。配合《Agent 反馈闭环》沉淀的困惑点当题库,你的 Agent 每一次迭代都看得见好坏。下一步可看《Agent 可观测性实战》,把运行过程也监控起来。