news 2026/8/22 2:23:08

AI Agent 工程实践(30):Agent 如何做测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AI Agent 工程实践(30):Agent 如何做测试

系列:AI Agent 工程实践
上一篇:第 29 篇《成本控制》
下一篇:第 31 篇《Agent 如何部署》

一、开场:改提示词改崩了别的场景

一个团队优化了退款话术的提示词,效果很好。一周后客服反馈:退款场景好了,但"查物流"场景的回答变啰嗦了,因为没人测过提示词改动对其他场景的影响。没有测试,优化就是拆东墙补西墙。

上篇(29)讲成本控制,这篇讲"改了不崩"的护栏——测试。

二、问题背景:不测 vs 系统测试

不测版:

# 改完手动聊两句,没问题就发 def test_agent(): pass # 没有

系统测试版:

def test_refund_tool(): with mock_provider(reply_with_tool="refund"): out = run_agent("我要退款") assert "退款" in out # 行为可验证

差别:不测 = 每次改动是赌博;系统测试 = 改动有护栏。

三、错误尝试:三种测试翻车

错误 1:只手动测 happy path

开发者自己聊两句就发。边界场景(乱码、长文本、注入)全靠用户撞。

错误 2:不测 LLM 输出

因为"LLM 输出不确定"就放弃测试,结果工具调用、流程分支这些确定部分也没测。

错误 3:不隔离外部依赖

测试真调 API,又慢又烧钱又不稳定(网络一抖就红)。

四、关键观察:Agent 要分四层测

  1. Unit Test:工具函数、格式转换等纯逻辑——确定性,必测。
  2. Tool Test:工具行为(权限、schema、副作用)——用 mock 外部。
  3. Prompt Test / Regression:提示词改动后,Golden Dataset 上的表现不退化。
  4. Mock LLM:用假模型固定返回,让"流程是否会调对工具"可被稳定验证。

LLM 输出不确定 ≠ 不能测。能测的是:工具是否被调用、流程是否走到正确分支、确定性逻辑是否正确。不确定的"生成质量"交给 Golden Dataset 做回归对比,而不是精确断言。

五、最终方案:测试分层

tests/ ├── unit/ # 工具函数、schema 校验(纯逻辑) ├── tool/ # 工具行为,mock 外部依赖 ├── prompt/ # 提示词回归,跑 Golden Dataset └── conftest.py # mock_provider 固定 LLM 返回

Golden Dataset 示例(JSON):

[ {"input": "我要退款", "expect_tool": "refund", "expect_contains": "退款"}, {"input": "北京天气", "expect_tool": "get_weather", "expect_contains": "℃"} ]

测试分层(Mermaid):

六、代码对比:无测试 vs 有 mock 测试

无测试(问题):

# 改了 prompt,靠手聊验证 def run_agent(inp): ...

有 mock 测试(生产):

def test_refund_flow(): with mock_provider(tool_calls=[{"name": "refund"}]): out = run_agent("我要退款") assert "退款" in out # 验证行为 assert called("refund") # 验证调对工具

关键差异:用mock_provider固定返回,测试"流程是否调对工具"稳定可重复;不真调 API,快且不烧钱。

七、设计权衡:测到什么程度

场景建议理由
工具/逻辑必测 Unit + Tool确定性,价值高
提示词改动必跑 Golden Dataset 回归防退化
生成质量用区间/规则断言,不精确匹配LLM 不确定
端到端关键路径少量,不必全覆成本高、易碎

反过度工程:不要为 LLM 生成内容写精确匹配断言——它天生不确定,硬测只会产生脆弱测试。

八、总结

  • ✅ 无测试 = 改提示词改崩别场景,优化变拆东墙。
  • ✅ 三种翻车:只手测 happy path、因不确定放弃测、不隔离外部依赖。
  • ✅ 分四层:Unit / Tool / Prompt 回归 / Mock LLM。
  • ✅ LLM 不确定 ≠ 不能测:工具调用、流程分支、确定性逻辑都可验。
  • ✅ 反过度工程:生成内容用区间断言,不精确匹配。

下一篇,把这一切跑起来的最后一步——部署。(31)


参考资料(带用途说明)

  • 本系列(29)成本控制:测试用 Mock LLM 不烧钱,呼应(29)成本意识。
  • 本系列(24)Tool Registry:本文 Tool Test 直接复用(24)Registry 的call接口做行为验证。
  • 本系列(18)Agent 如何做 Benchmark:Benchmark 是质量的系统性评测,本文回归测试是其工程落地。
  • pytest 文档(docs.pytest.org):本文测试框架的实现参考。

本文是 AI Agent 工程实践系列的第 30 篇(第四阶段第十篇)。


系列导航

上一篇:第 29 篇《成本控制》
下一篇:第 31 篇《Agent 如何部署》

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

从零搭建高性能《我的世界》服务器:Linux云服务器部署与优化全攻略

最近在和朋友联机玩《我的世界》时,发现很多玩家都渴望找到一个稳定、热闹、玩法纯粹的生存服务器。自己搭建服务器虽然自由,但面临网络、硬件、维护等一系列门槛。本文将为你提供一份从零开始的《我的世界》Java版服务器搭建与优化全攻略,以…

作者头像 李华
网站建设 2026/8/22 2:22:45

Windows局域网文件夹共享管理的小工具免费下载

局域网共享管理工具是一个用于 Windows 局域网文件夹共享管理的小工具,主要用于快速创建共享、取消共享、设置访问用户和权限,也带有本机用户管理、共享预检查、共享环境修复等辅助功能。 一、主要功能 创建文件夹共享 设置共享名、路径、备注 选择用户/…

作者头像 李华
网站建设 2026/8/22 2:22:18

Spring Boot实战:游戏账号二级密码安全子系统设计与实现

在游戏版本迭代与玩家资产安全日益受到重视的今天,如何平衡新内容的引入与账号安全体系的加固,成为许多热门游戏运营的核心课题。近期,关于某热门游戏新赛季的更新讨论中,“二级密码”作为一个关键的安全功能被频繁提及。本文将系…

作者头像 李华
网站建设 2026/8/22 2:20:19

MelonLoader 快速上手教程:5 分钟为 Unity 游戏装好 Mod 加载器

MelonLoader 快速上手教程:5 分钟为 Unity 游戏装好 Mod 加载器 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader Mel…

作者头像 李华
网站建设 2026/8/22 2:20:00

2026年AI简历优化工具趋势与实战指南

1. 2026年AI简历优化趋势解析最近两年AI简历制作工具呈现爆发式增长,根据行业调研数据显示,2025年全球有超过37%的求职者开始使用AI辅助工具优化简历。作为从业十年的HR技术顾问,我发现这类工具已经从简单的模板填充,进化到能够深…

作者头像 李华
网站建设 2026/8/22 2:19:53

InstaManip:基于自回归模型的小样本图像编辑技术解析

想用一张参考图,就把照片里的衣服换成另一件、把背景换成另一个场景,甚至把普通照片变成动漫风格,但不想花几个小时去学复杂的图像编辑软件,也不想收集成千上万张训练数据? 这听起来像是“一键修图”的幻想&#xff0…

作者头像 李华