使用Amazon Bedrock AgentCore的数据集管理构建与您的智能体一同成长的测试套件
将快速变化的在线信号与稳定的离线基线相结合,智能体评估最为有效。Amazon Bedrock AgentCore的数据集管理提供了版本化的测试固定组件,实现一致测量和真实情况验证。
文章情报
要点
- AgentCore中的版本化数据集提供稳定且不可变的测试场景,确保跨运行的智能体评估一致性。
- 预定义场景捕获精确的预期输入、工具序列和断言,用于可验证的真实情况。
- 用户模拟场景使用LLM驱动的角色测试智能体在动态对话中的行为。
- 数据集支持内循环迭代和外循环CI/CD门控,使用相同的版本化场景。
为什么重要
这条新闻值得关注,因为AgentCore中的版本化数据集提供稳定且不可变的测试场景,确保跨运行的智能体评估一致性。
技术影响
可能影响模型选型、推理成本、产品能力和评测基准。
智能体评估在结合快速变化的在线信号与稳定的离线基线时最为强大。要了解智能体是否真正随时间改进,除了不断变化的真实世界流量,还需要一个固定的基准。
在Amazon Bedrock AgentCore中将测试用例作为数据集管理评估基线,为智能体评估带来了版本化测试固定组件的纪律。您可以编写包含输入、预期输出、断言和工具序列的场景,然后将其发布为不可变的编号版本,这些版本不会在运行中发生变化。您可以自由地迭代可变草案,直到准备好锁定检查点。当生产环境出现故障时,该故障将成为永久测试用例,未来每次更改都将对其进行评估。
在本文中,我们通过一个金融市场情报智能体演示完整的工作流程。我们从生产跟踪中捕获故障,构建版本化数据集,运行评估,修复智能体,并针对相同的锁定输入确认改进。
为什么数据集很重要
智能体本质上是非确定性的。相同的输入在不同运行中可能产生不同输出,这使得单个评估结果几乎毫无意义。您无法判断得分变化是因为智能体改变了还是因为模型采样不同。只有在稳定输入上进行一致测量,才能知道更改是否真正有效。
但仅靠稳定输入是不够的。大型语言模型(LLM)评判器可以判断回复是否听起来有帮助,但它无法判断股票价格是否准确、经纪人工作流是否按正确顺序运行、或者会话之间是否泄露了个人身份信息(PII)。对于这些检查,您需要真实情况:预期响应、所需工具序列以及无论回复如何措辞都必须成立的断言。真实情况将主观分数转变为可验证的测量。没有它,您测量的是正确性的表象,而非正确性本身。
版本化数据集同时提供这两者。它们固定输入以便分数跨运行可比,并携带使分数有意义的真实情况。这在智能体评估实际发生的两个地方最为重要。
内循环是开发者桌面。您调用智能体、读取分数、调整工具描述、再次调用。周期只有几分钟。在这个阶段,问题不在于运行评估,而在于测试用例往往是附近已有的内容:某人上周写的问题或偶然保存的会话。当分数提高时,您希望相信修复有效。但如果没有下面的稳定输入,您无法知道智能体是变好了还是问题变容易了。
外循环是CI/CD管道。在更改上线前,需要有人确认它没有破坏任何东西。大多数团队都有这个门控。但他们往往缺少的是带有明确断言的稳定、版本化输入集。这意味着门控测试的是某人最后指向的内容,没有真实情况可对照。一个因为问题改变而通过构建的管道不是在捕捉回归,而是在遗漏回归。
版本化数据集弥补了这一差距。开发者在内循环中将故障整理到草案中。在外循环中,该草案的已发布版本成为门控。它是不可变的,真实情况完好无损,并且测试与上个迭代及更早迭代相同的场景。告知开发者修复有效的相同分数,也是管道用于决定是否上线的分数。
两种类型的测试场景
Amazon Bedrock AgentCore中的数据集支持两种模式类型,分别为这两个循环服务。
预定义场景是向后看的。您已定义了用户将发送给智能体的确切查询,并且知道正确结果的样子:预期响应、工具序列和必须成立的断言。将其写下来,评估器检查智能体是否满足。一旦故障被形式化为预定义场景,它就会保留在未来的每次评估运行中。它们属于外循环门控,因为通过和失败标准是明确、可重复且不依赖于对话过程的。
用户模拟场景是向前看的。您不是编写对话轮次,而是描述一个角色:参与者是谁、他们想要实现什么以及如何沟通。LLM驱动的角色与您的智能体进行真实的多轮对话,直到目标达成或达到轮次限制。您不编写角色的发言内容。覆盖范围从交互中自然产生。更多信息,请参阅AgentCore用户指南中的用户模拟。
这与标准评估工具包中的任何内容都不同。预定义场景测试您的智能体是否正确处理特定输入。模拟场景测试您的智能体是否能够满足某类用户的需求,无论该用户采取何种路径。
在本文中,我们以市场趋势智能体为例。该智能体为金融机构的投资经纪人服务。经纪人向智能体发送类似“我是来自摩根士丹利的Sarah Chen,专注于科技和清洁能源——今天NVDA有什么情况?”的消息。智能体识别经纪人,在AgentCore Memory中存储其偏好,检索当前NVIDIA股票价格,并搜索Bloomberg和Reuters的相关新闻。然后提供个性化简报,将数据与Sarah的投资重点联系起来。当Sarah第二天回来时,智能体会记住她的档案并相应调整响应。
对于预定义场景,您可能有用户与智能体交互的生产跟踪,您可以将其整理到评估数据集中。市场趋势智能体的示例如下:
PreDefinedScenario{ "scenario_id": "broker_profile_onboarding", "turns": [ { "input": ( "嗨,我是来自摩根士丹利的Sarah Chen。" "我专注于科技和清洁能源。" "风险承受能力:中高。" "客户群:机构和高净值。" ) } ], "expected_trajectory": {"toolNames": ["identify_broker", "update_broker_financial_interests"]}, "assertions": [ "智能体按姓名和公司识别经纪人。", "智能体存储经纪人的行业偏好和风险承受能力。", "智能体确认收到档案并提供帮助。" ], "metadata": {"category": "onboarding", "priority": "high"}, }
模拟的高级科技分析师可能会以关于NVIDIA Corporation普通股的广泛问题开始。当回复显得单薄时她会追问,要求与AMD比较,并且只有在获得可供客户电话引用的内容时才完成。没有人编写这些轮次。角色从档案中生成了它们。您可以定义如下场景:
SimulatedScenario( scenario_id="sim-tech-analyst-nvda-amd-deep-dive", scenario_description=( "一位高级科技研究分析师在客户电话前深入比较NVDA和AMD。" ), actor_profile=ActorProfile( traits={ "expertise": "高级", "focus": "半导体", "style": "怀疑且数据驱动" }, context=( "为高价值客户电话准备要点的卖方高级科技分析师。期待多层次分析,而非表面摘要,并在答案显得通用或单薄时追问。" ), goal=( "通过询问NVIDIA、要求更丰富细节、请求与AMD的结构化比较,只有在获得可供客户对话引用的要点时才结束,从而压力测试智能体的半导体领域深度。" ) ), input=( "我正在准备客户电话,需要关于NVIDIA的快速但扎实的简报。从NVDA的近期表现和半导体定位开始。" ), max_turns=8, assertions=[ "智能体提供初始NVDA摘要,包括近期表现和定位", "智能体针对NVDA回应更深入的基本面、产品/路线图或护城河细节", "智能体产生结构化的NVDA vs AMD比较(例如估值、增长、细分市场)", "智能体包含适合客户电话的特定、可引用数据点或指标" ] )
用户模拟在内循环中特别有用,当您不确定尚未发现的故障模式时。出现的故障成为下一个数据集版本中预定义场景的候选,直接反馈到外循环门控。
关于模拟底层工作原理,有几点值得了解。角色运行在您在SimulationConfig中指定的Bedrock模型上。在每个轮次,角色接收智能体的响应并产生三件事:关于目标是否达成的内部推理、要发送的下一条消息以及停止信号。对话在角色指示完成、达到max_turns或角色未产生下一条消息时结束。由于对话路径是动态的,模拟场景不支持expected_trajectory或逐轮expected_response。改用断言作为真实情况,并描述无论对话如何到达那里您期望的结果。
对于市场趋势智能体,预定义场景覆盖已经给经纪人带来损失的股价漂移错误。模拟场景覆盖尚未出现故障但代表智能体需要妥善处理的真实用户类型的ESG专家。
AgentCore中数据集的工作方式
数据集作为具有ARN、IAM授权和标签的一级资源内置于AgentCore中。无需配置Amazon S3存储桶或外部服务。
草案和发布。每个数据集都有一个可变草案,您可以在其中自由添加和删除场景。当您想要稳定检查点时,发布它。草案变为不可变的编号版本。将评估运行固定到版本3,它将使用版本3中的确切场景,无论您此后在草案中添加了什么。
写入时模式验证。创建数据集时声明模式类型,每个场景在接收前都根据该模式进行验证。格式错误的示例在摄取时被拒绝,而不是在30分钟评估运行中途作为错误出现。
一个数据集,多个运行器。使用DatasetManagementServiceProvider加载数据集,并将其传递给按需运行器以获得每个场景的快速反馈,或传递给批处理运行器以获得跨多个会话的聚合评分。无论您是在桌面迭代还是门控部署,相同的场景、断言和数据集ID均适用。
智能体:市场趋势助手
我们使用市场趋势智能体,一个部署在AgentCore Runtime上的LangGraph应用程序,作为运行示例。完整源代码在AgentCore示例存储库的02-use-cases/market-trends-agent目录下。该智能体具有以下工具,帮助其处理金融经纪人的查询:
工具 功能
get_stock_data 获取股票代码的当前价格、日变化、成交量。 search_news 多源金融新闻搜索(Bloomberg、Reuters、CNBC、WSJ、FT)。 identify_broker 从消息中提取经纪人身份以进行内存查找。 get_broker_financial_profile 读取存储的偏好、风险承受能力、行业焦点。 update_broker_financial_interests 将新偏好写入长期记忆。
三种故障模式经常出现,值得永久测试用例:
陈旧价格——智能体引用一个与实时值漂移超过2%的数字,通常是因为重新使用了缓存的工具响应而不是进行新调用。
跳跃身份检查——智能体在未先调用identify_broker的情况下直接跳至get_broker_financial_profile,这可能导致提取错误的经纪人偏好。
[为控制AI成本截断]