WebMCP 的评估
发布时间:2026 年 5 月 19 日,上次更新时间:2026 年 5 月 28 日
| 说明类视频 | Web | 扩展程序 | Chrome 状态 | 目的 |
|---|---|---|---|---|
| GitHub | 查看 | 实验意向 |
WebMCP 支持使用生成式 AI 模型的代理。如需测试使用生成式 AI 的任何系统,您的测试需要支持概率性结果:一个输入可能会产生数千个答案,准确度各不相同。这种测试技术称为评估或 eval。
在将工具发布到生产环境之前,您必须确认代理了解何时调用工具、如何执行工具以及哪些回答是可以接受的。在出现故障之前解决故障机会。
编写评估来测试系统与大语言模型 (LLM) 的触点:
- 根据工具的说明和架构,检查模型是否了解工具的用途。
- 验证模型是否选择了正确的工具和参数来支持用户意图。
- 确认模型正在根据收到的信息采取行动,例如使用信息来调用其他工具。
- 验证用户转化历程是否成功。根据用户意图,代理是否可以使用提供的工具在我的网站上成功完成用户转化历程?
对于任何不与模型通信的系统交互,您都应继续编写经典的确定性测试。
故障模式
开发者应测试其系统,以防止发生故障。为此,您需要了解系统何时可能会发生故障,无论是单独发生故障还是在与外部因素交互时发生故障。对于 WebMCP,工具本身可能会发生故障,代理也可能无法按预期使用工具。
WebMCP 工具可能会失败,并且当智能体使用 WebMCP 工具时可能会失败。 例如,假设用户想要将 T 恤添加到购物车中。
| 失败 | 示例 | 问题排查 |
|---|---|---|
| 智能体未能选择正确的工具或直接调用了错误的工具。 |
代理会跳过
|
|
| 智能体以错误的顺序调用工具 |
代理调用
|
|
| 智能体使用错误的实参调用工具 |
代理会调用
|
|
如果用户想查看购物车中的商品,该怎么办?
| 失败 | 示例 | 问题排查 |
|---|---|---|
| 工具输出不正确或工具遗漏了某些内容。 | 用户要求
|
|
最后,工具可能会以 JavaScript 失败的任何方式失败。如需进行问题排查,请调查以下方面:
- 工具代码是否能正确处理所有潜在的运行时错误和异常?
- 错误是否会优雅地报告给代理和模型?
- 工具所依赖的外部 API 或服务是否运行正常?
- 错误结构是否足够清晰,以便模型区分临时问题(重试)和严重故障?
单独测试工具
如果代理无法确定要针对“我想订一个小披萨”之类的请求调用哪个工具,那么在复杂的用户行为历程中,它就无法发挥作用。
通过单独测试工具,您可以在运行浏览器模拟之前优化架构和说明。
衡量通话准确率
不妨看看我们的演示版 WebMCP zaMaker。当用户提示“我想订购一份小披萨”时,您可以预期模型会做出响应,表明其打算使用 "size":"Small" 实参执行 set_pizza_size 调用。
expectedCall 函数用于定义预期函数和实参。此方法可确认,智能体将根据提供的架构选择正确的工具来支持用户意图。
{
"messages": [
{
"role": "user",
"content": "I'd like a small pizza."
}
],
"expectedCall": [
{
"functionName": "set_pizza_size",
"arguments": { "size": "Small" }
}
]
}
expectedCall 用于执行基于规则的确定性测试:
您可以将 WebMCP 工具与组件的生命周期相关联,这意味着您必须在应用状态与 WebMCP 预期状态一致时进行测试。为了管理这一点,请提供与您要评估的状态相关的完整工具列表。例如,用户正在与智能体共同浏览,并打开 WebMCP zaMaker。
应用状态
[
...
{
"name": "add_topping",
"description": "Add one or more toppings to the pizza",
...
},
{
"name": "set_pizza_size",
"description": "Set the pizza size directly.",
"inputSchema": {
"type": "object",
"properties": {
"size": {
"type": "string",
"enum": [
"Small",
"Medium",
"Large",
"Extra Large"
],
"description": "The specific size name."
},
}
}
},
{
"name": "set_pizza_style",
"description": "Set the style of the pizza (colors/theme)",
...
},
...
]
预期调用
...
"expectedCall": [
{
"functionName": "set_pizza_size",
"arguments": { "size": "Small" }
}
]
...
打开时,WebMCP 会显示 add_topping、set_pizza_size 和 set_pizza_style 工具。如需准确测试上述任何单个工具,您应包含所有工具,以创建模拟的完整状态。
注意:智能体可能可以访问其他工具,但您能做的最好是评估您提供的工具。
现在,您已经知道智能体会在需要时调用正确的工具,接下来可以测试工具调用是否具有正确的参数,以及结果是否符合预期。这包括两个步骤:确定性测试和概率性测试。
运行确定性测试
由于 WebMCP 工具是使用 JavaScript 或 HTML 注释构建的,因此您可以编写确定性测试来执行以下任务:
- 验证工具逻辑。
- 确认依赖项已正确调用。
- 确认界面已按预期更新,以及任何其他有意产生的副作用。
- 验证返回的信息是否与预期值一致。
- 验证测试参数。
例如,如果您的工具使用 SearchComponent 函数,您可以通过传递 SearchComponent 的模拟对象来进行测试。请务必模拟工具运行的环境,以获得尽可能好的结果。这与您编写其他应用集成测试时所用的技术相同。
运行概率性测试
如果您需要模型输出才能正确调用下一个工具,则需要编写评估。
用户可能会向模型直接查询工具的功能,也可能会提出模棱两可的查询,暗示应使用工具。例如,“在我的披萨上添加意大利辣香肠”是直接查询。“我想要披萨上放所有肉类”则较为模棱两可,需要模型了解它需要使用 add_topping 工具,以及哪些配料可以定义为肉类。
在为评估创建数据集时,请同时包含测试基准工具执行情况的直接查询,以及测试模型推理和工具选择逻辑的开放式查询。
如果您经营一家咖啡店,可以支持用户让代理重新订购他们上个月订购的同一款咖啡。您可以编写一个用于搜索之前订单的工具 OrderHistoryService,以及另一个用于订购咖啡的工具。如需测试订单历史记录服务,您可以发送一个返回咖啡产品 ID 的模拟对象。
在此示例中,您需要评估模型是否理解查询的意图、是否选择了正确的工具,以及该工具是否提供了可用于采取行动的正确信息。如果模型未调用 get_order_history,则不会知道要使用哪个 item_id 来实现 order_product。
端到端测试
编写端到端测试,让您确信用户及其客服人员可以顺利完成其体验历程。除了测试各个工具之外,您还要测试多步操作是否按正确的顺序执行。
例如,您经营一家服装网店。用户向智能体询问:“我想买一件黑色夹克和一条牛仔裤。您能否提供所用材料的明细?
成功的智能体之旅可能如下所示:
- 前往“服装”类别。
- 找到所请求的其中一件服装(顺序无关紧要)。
- 查找特定商品 (
search_clothes)。 - 获取包含材料清单 (
get_product_details) 的商品详情。 - 针对每个请求的项目重复第 2-4 步。
当代理到达第 2 步时,它可以先搜索黑色,也可以先搜索牛仔裤,顺序并不重要。不过,其余步骤必须按顺序执行。
编写端到端评估,以验证代理是否按预期顺序调用工具:
{
"messages": [
{
"role": "user",
"content": "I am looking to buy a black jacket and a pair of jeans.
Could you provide a breakdown of the materials used ?"
}
],
"expectedCall": [
{
"functionName": "navigate_to_category",
"arguments": { "category": "clothes" }
},
{
"unordered": [
{
"ordered": [
{
"functionName": "search_clothes",
"arguments": { "query": "black jacket" }
},
{
"functionName": "get_product_details",
"arguments": { "productId": "JACKET002" }
}
]
},
{
"ordered": [
{
"functionName": "search_clothes",
"arguments": { "query": "jeans" }
},
{
"functionName": "get_product_details",
"arguments": { "productId": "JEANS001" }
}
]
}
]
}
]
}
评估中链故障
start_pizza_creator、set_pizza_style、set_pizza_size、start_checkout、add_discount_coupon 和 complete_checkout。add_discount_coupon 失败,但流程仍能完成,这意味着用户未获得折扣。有时,智能体必须按顺序调用多个工具。如果工具在此流程中途出现故障,会发生什么情况?例如,用户想使用优惠券代码订购披萨:
“我要一份小号的香蒜酱披萨。使用我的促销代码 FreePizza。”
代理可能会在 add_discount_coupon 处失败,然后继续以全价购买披萨。如需测试 add_discount_coupon 工具,您可以手动执行此序列的工具调用,而无需与模型互动,即可模拟此场景。将应用置于您预计该工具会失败的状态。在本例中,即在 start_checkout 工具之后。然后,您可以单独评估 add_discount_coupon。
使用 WebMCP 进行实验
开始尝试单独评估工具,并使用任何 WebMCP 兼容的代理评估您自己的启用 WebMCP 的网站:
- 下载我们在 GitHub 上提供的实验评估工具。
- 请查看我们的课程:创建 AI 评估。