AWS AI Agent测试通过却漏检:一次真实实验复盘

AI Agent 测试全绿不等于需求覆盖,需独立核算并逐条核对断言。
开发者在个人 AWS 实验室用虚构部署 CSV 做了一次实验:让 Amazon Nova 2 Lite 通过 Bedrock AgentCore Code Interpreter 生成并执行 Python 代码,计算不健康检查总数和已完成的不健康周期时长。开发者先手工算出预期结果,再与 Agent 输出比对,数字完全一致,程序也打印了测试通过标记。但阅读生成的测试代码后发现,测试只覆盖了周期数量和时长,未对每个预期的开始、结束时间戳写断言。测试通过只说明已写出的断言通过,不代表每项需求都被测试过。开发者由此建议保留输入、实际运行的代码和输出,并在信任「通过」标记前把测试与原始需求逐条对照。
AI Agent 生成的代码测试全绿,就等于任务完成了吗?一位开发者在个人 AWS 实验室里做了一次小实验,结果发现:测试通过,并不代表需求被完整覆盖。

实验背景:从一份部署历史开始
开发者没有连接任何生产环境,而是准备了一份自制的 CSV 文件。这份文件记录了 12 次部署检查,每次间隔 5 分钟,包含时间戳、健康状态、期望版本、运行版本、健康实例数、期望实例数以及活跃告警数等字段。
数据是虚构的,没有任何真实生产事故作为背景。
任务本身不复杂:计算两个数字——不健康检查的总数,以及每一段已完成的不健康持续时长。第二个数字需要一个明确的规则:不健康周期从第一个不健康检查开始,到其后第一个健康检查结束;如果文件结束时仍处于不健康状态,则该周期视为未完成。
开发者特意在把任务交给 Agent 之前,自己先手工算了一遍。以 10:10 的第一个不健康检查为例,下一个健康检查出现在 10:25,因此该周期为 15 分钟。这一步很关键:先建立独立预期,才能判断 Agent 的输出是否真的可靠。
Agent 怎么写代码、怎么跑代码
模型使用的是 Amazon Nova 2 Lite,通过托管 Agent 环境调用。开发者向模型提供了计算规则、三个小型测试用例以及目标 CSV,但没有给任何实现代码。
模型自行生成了 Python 程序,并将其发送到 Amazon Bedrock AgentCore Code Interpreter,在一个独立的执行环境中运行。整个流程可以概括为:
提供的 CSV → 模型生成 Python → Code Interpreter 执行 → 返回结果
开发者做了两件事:一是把返回的数字与自己预先算出的结果比对;二是阅读模型生成的测试代码。保留的执行流显示,只有一次 Code Interpreter 调用,其中包含生成的程序,工具输出中带有测试通过标记和计算结果。这意味着可以做一次真正的核验:看实际运行了什么,而不是信任模型对运行的总结。
Amazon Nova 2 Lite 是亚马逊在 2024 年 re:Invent 大会上发布的基础模型系列之一,定位为低延迟、低成本的中小型模型,适合代码生成、数据分析等对响应速度敏感的场景。Bedrock AgentCore 是 Amazon Bedrock 的扩展能力,为 AI Agent 提供托管运行环境,包含 Code Interpreter(代码解释器)等沙箱工具。Code Interpreter 会在与主模型隔离的容器中执行模型生成的代码,避免脚本影响宿主系统,同时允许 Agent 通过工具调用获取真实的执行结果。这种「模型生成 + 沙箱执行」的架构是当前 Agent 完成计算类任务的常见形态,也是本次实验中能够保留执行流水、核验实际运行内容的基础。
数字全对,测试却有缺口
在 Agent 运行之前,开发者已经独立算出了预期结果,输出完全匹配:
| 检查项 | 结果 |
|---|---|
| 总样本数 | 12 |
| 不健康样本数 | 5 |
| 不健康样本占比 | 41.7% |
| 已完成的不健康周期数 | 2 |
| 周期时长 | 15 分钟和 10 分钟 |
41.7% 是 12 个样本中有 5 个不健康,并不代表应用有 41.7% 的时间处于宕机状态。程序还打印了 MODEL_GENERATED_TESTS=PASS。
问题出在测试覆盖范围上。开发者的提示词要求针对每一个声明的测试预期都写断言,也就是那些在预期不满足时会让程序停止的检查。但生成的测试只覆盖了周期数量和时长,并没有显式检查每个预期的开始和结束时间戳。
目标输出中的时间戳是正确的,所以答案本身没有错。缺口在于测试实际证明了什么。
“测试通过”意味着已写出的断言通过了,并不意味着每一项需求都被测试过。比对结果和阅读断言,回答的是两个不同的问题。
测试覆盖率(test coverage)通常衡量测试代码执行了多少行或多少分支,但这里所说的「缺口」不是行覆盖率,而是需求覆盖率——即提示词中声明的每一项断言是否都有对应的测试存在。两者容易混淆:即使行覆盖率达到 100%,如果测试本身没有检查开始与结束时间戳,那条需求仍处于未被验证的状态。在 AI 生成代码的场景中,模型倾向于围绕最核心、最显眼的输出(如周期数量、时长)编写断言,而容易忽略边界条件或辅助字段。因此阅读生成的测试代码,本质上是在做一次需求追溯(requirement traceability),把每条原始要求映射到具体的断言上。
这次运行能说明什么,不能说明什么
这次实验展示了:Agent 能够生成并执行分析代码,且输出与开发者独立计算的结果一致;同时也展示了为什么必须阅读生成的测试代码。
但它不能说明未来每次运行都能成功。畸形输入、访问限制、会话行为以及重复运行检查,都还有待后续评估。
对于这类分析任务,开发者建议把三样东西放在一起保留:输入、实际运行的代码,以及它的输出。然后在信任“通过”标记之前,把生成的测试与原始需求逐条对照。
相关推荐

零成本搭建AI超级员工系统:智能体自动工作流全解析
深度拆解B站演示的AI超级员工系统:Agent智能体编排、数字人口播、地图与企业获客、24小时智能客服及法务模块全覆盖。分析零成本开户背后的商业逻辑与合规风险,帮助创业者判断这套AI数字员工系统的真实投产比。

Chatbot与AI Agent的本质区别:从对话到执行的跨越
Chatbot和AI Agent有什么区别?本文基于Learn Tech频道的MCP系列讲解,用订机票、笔记摘要等实例说明:Chatbot只给答案,Agent通过思考-行动-观察循环真正完成任务,并拆解模型、工具、记忆、目标四大部件及MCP的桥梁作用,同时讨论Agent的适用边界与权限风险。

免费GitHub仓库:342小时AI课程,从数学到MCP服务器
一个免费GitHub仓库提供342小时AI课程,包含523节课、20个阶段,覆盖数学基础到Agent构建和MCP服务器。支持目标驱动学习,每节课产出可留存的prompt、skill或agent,已有近10万人开始学习。