Aioga
AI资讯 / 行业动态
返回 AI资讯

OpenRouter 教程:如何测试 AI Agent 的工具调用准确性

OpenRouter:AnnouncementsAioga 编辑团队2026-09-30T00:00:00.000Z热度 72

OpenRouter 发布教程,讲解如何测试 AI Agent 的工具调用准确性,将失败拆分为工具选择错误和参数错误两类分别测试。

行业动态OpenRouter:Announcements

今日 AI 情报摘要

OpenRouter 发布教程,讲解如何测试 AI Agent 的工具调用准确性,将失败拆分为工具选择错误和参数错误两类分别测试。

中文正文 · AI 翻译

当代理使用工具时,可能在两个环节失败。它可能选择错误的工具,或者选择了正确的工具却传递了错误的参数。

How to Test Tool-Calling Accuracy in AI Agents

这些失败告诉你不同的信息。如果代理调用了 lookup_order 而不是 refund_order,问题出在工具选择上。如果它调用了 refund_order 但传递了错误的 order_id,那么它选择了正确的工具但传递了错误的参数。

本指南涵盖了测试工具调用行为的三种方法。第一种是无参考的大语言模型(LLM)评判。第二种是确定性的参数检查。第三种是轨迹比较。然后展示了如何通过 OpenRouter 对几个支持工具的模型运行相同的测试用例。

首先从工具决策本身开始,然后检查模型产生的调用。

假设内部支持代理可以使用 lookup_order、issue_refund 和 search_docs。

如果用户询问退款政策的内容,search_docs 是适当的工具。如果他们要求退款订单 ord_7281,代理可能需要先查找订单再进行退款。你的测试集还应包括模型已经有足够信息回答、无需调用工具的情况。

无工具的情况很重要,因为仅检查响应中是否包含 tool_calls 并不足够。调用了不必要或错误函数的模型仍然会产生工具调用。

当明显期待某个工具时,在代码中将返回的工具名称与预期名称进行比较。如果几个工具都能合理解决请求,精确匹配可能拒绝一个有效选择。这时 LLM 评判更有用。

在模型选择工具之后,检查它生成的参数。这个检查有两个部分:结构和数值。

结构验证可以发现格式错误的 JSON、缺少必填字段、类型错误、无效的枚举值,以及工具不接受的参数。

结构有效的调用仍然可能包含错误的值。

如果 order_id 定义为字符串,该负载符合模式。如果用户询问的是 ord_7281,那么它仍然是错误的。

现有的评估框架采用相同的划分。DeepEval 有独立的工具正确性量化指标:https://deepeval.com/docs/metrics-tool-correctness 和论证正确性量化指标:https://deepeval.com/docs/metrics-argument-correctness,而 Phoenix 则有一个独立的工具选择评估器:https://arize.com/docs/phoenix/evaluation/pre-built-metrics/tool-selection。

无参考判官会在没有固定预期答案的情况下对工具调用进行评分。当正确性依赖于上下文或多种选择都可能有效时,这种方法非常有用,因此在代码中无法对比单一值。

对于工具选择,向判官提供用户请求、代理可用的工具以及模型输出。然后让它决定所选工具是否合适,包括模型是否完全不应该使用工具。

考虑一个同时具备 web_search 和 search_internal_docs 功能的研究代理。可能不存在唯一正确的选择。更优的工具取决于用户的提问以及对话中已有的信息。

同样的问题也出现在参数上。搜索查询、描述或日期范围可能符合模式要求,但仍未能准确表示用户意图。如果没有固定值可对比,判官可以评估其含义。

无参考判官仍然需要明确说明什么算作正确。在比较候选模型时,请保持这些说明和判官模型不变,并在将其应用于完整数据集之前,用你自己审核过的一小组案例检查判官的决定。

如果等值检查、模式验证器或业务规则能够可靠地回答同一个问题,请使用它们。

并非每个参数错误都需要再次调用模型。如果工具模式可以证明失败,请在代码中进行验证。

你发送给模型的同样模式可以验证它返回的参数。它可以捕捉缺失的 order_id、预期布尔值却提供了字符串的 include_items、或未声明字段如 customer_email。

工具选择和参数检查覆盖单次调用。多步骤代理的失败也可能出现在它们调用的序列中。当该序列是要求的一部分时,轨迹比较可以直接测试它。

退款工作流可能需要按顺序进行三次调用。

只有在顺序要求时,严格匹配才有意义。LangSmith 的轨迹评估器:https://docs.langchain.com/langsmith/trajectory-evals 因此支持严格匹配、无序匹配、子集匹配和超集匹配。严格检查会强制执行一个序列。其他模式接受不同的顺序或只要求特定的一组调用。

代理基准测试也是以相同的方式处理的。在 τ²-bench:https://github.com/sierra-research/tau2-bench/blob/main/docs/evaluation.md 中,记录的操作列表是一个参考轨迹,它会被重放以得出目标数据库的最终状态。任何产生等效最终状态的工具调用序列都能通过数据库检查。

如果 lookup_customer 和 lookup_subscription 可以按任意顺序发生,不要因为你的参考使用了另一种顺序而让一个序列失败。应对所需的调用或结果状态进行评分。

一个测试用例可以使用多个检查。例如,你可以比较工具名称,用 JSON Schema 验证其参数,然后将已知参数值与期望的负载进行比较。

一旦定义了测试用例和评分器,你就可以对每个候选模型运行相同的测试框架。

我们提供了一个工具调用接口:https://openrouter.ai/docs/guides/features/tool-calling,适用于支持的模型,因此你不需要为每个想要比较的模型单独进行提供者集成。

示例将 tool_choice 设置为 "auto"。这是提供工具时的默认值,显式设置它可以使无工具测试更易于理解。

此示例使用 OpenAI Python SDK 与我们兼容 OpenAI 的端点。请先安装依赖项。

在环境中设置 OPENROUTER_API_KEY,然后对每个候选模型运行相同的测试用例。

一个正确的无工具用例计入工具选择和整体结果评分,并且没有模式或参数负载需要评分。对于返回工具的用例,测试框架会验证每次调用,然后将返回值与期望的负载进行比较。

该测试工具将 reasoning.effort 为每个候选项设置为低,以便默认推理努力的差异不会显示为工具调用准确性的差异。上述三种模型在 models 接口的 reasoning 对象的 supported_efforts 数组中都列出了 low。它还将 provider.require_parameters 设置为 true。一个模型的 supported_parameters 列表可以包含只有该模型部分提供者端点接受的参数,而在默认路由下,不支持某个参数的提供者仍然会收到请求并忽略它。设置 require_parameters 后,我们只将请求路由到支持请求中每个参数的提供者,因此每个评分响应都按测试工具要求的努力级别运行。关于提供者路由,请参见:https://openrouter.ai/docs/guides/routing/provider-selection#requiring-providers-to-support-all-parameters。该测试工具不设置 temperature,因为 openai/gpt-5.6-sol 在 supported_parameters 中未列出 temperature。如果你的候选列表中的每个模型都接受 temperature,请也显式设置它。

上述模型 ID 仅为示例。models 接口的每个条目:https://openrouter.ai/docs/api/api-reference/models/list-all-models-and-their-properties 都有一个 supported_parameters 数组。当该数组包含 tools 和 tool_choice 时,模型支持此测试工具。在你在长期评估套件中固定候选列表之前,请检查当前的工具调用模型集合:https://openrouter.ai/collections/tool-calling-models。

为了进行真实比较,每个测试用例应运行多次,以免模型的分数基于单次响应。较大的测试套件还应包括你的应用可能遇到的更复杂情况,例如缺失参数、工具描述相似、多次调用以及不应使用任何工具的请求。

该测试工具评估一次工具调用。对于多步骤代理,请收集整个跟踪过程中的调用,并根据工作流需要比较调用序列或最终状态。

提供者路由也会影响你的比较衡量指标。Auto Exacto:https://openrouter.ai/docs/guides/routing/auto-exacto 默认在每个包含工具的请求上运行,并为你选择的模型重新排序提供者,因此它可能会更改哪个提供者端点处理工具调用请求。其输入之一是工具调用错误率。对于每个包含工具的请求,我们会检查模型返回的每个工具调用,并将结构性失败分类为 InvalidJson、UnknownName 或 SchemaMismatch,按照你在 JSON Schema Draft 7 下提供的参数架构验证参数。该指标衡量提供者的行为。它不能替代你自己运行环境中的本地架构验证,这也是上面示例自行验证参数的原因。

如果你想测试应用在生产中使用的路由设置,请对每个候选模型保持 Auto Exacto 启用。如果你想进行端点级比较,请使用我们的提供者路由控制:https://openrouter.ai/docs/guides/routing/provider-selection 固定提供者。在提供者对象中将 order 字段设置为该提供者的 slug,并将 allow_fallbacks 设置为 false,这样每个请求都会发送到同一个端点。

在运行之间保持提示、工具、测试用例、评判模型和评估标准相同。明确设置采样和推理参数,如 temperature 和 reasoning,而不要依赖默认值,并检查每个候选模型是否支持你设置的参数。在运行环境中不要设置 max_tokens。响应被截断可能导致工具调用的 JSON 被截断,并显示为 InvalidJson 错误,这与模型的工具选择无关。

如果你不想自己维护跨模型运行器,Ori Eval:https://openrouter.ai/blog/announcements/ori-eval/ 可以对你的代理进行候选模型测试,断言其调用的工具和未调用的工具,并使用 LLM 评审对开放式答案进行评分。

如果测试用例或评分规则过于狭窄,工具调用评估可能会给出误导性结果。

AI Agent Regression Testing After a Prompt or Model Change

模型使用数据、产品更新和研究报告。每周发送一封邮件。

情报判断

Aioga 编辑摘要

OpenRouter 发布教程,介绍如何测试 AI Agent 的工具调用准确性,并将失败拆分为工具选择错误与参数错误两类,分别检查模型是否选对工具及是否传入正确参数。

背景分析

教程提出三种测试方式:无参考答案的大语言模型评审、确定性的参数检查和轨迹比较。材料还强调,测试集应覆盖应调用工具、无需调用工具,以及多个工具均可能适用的场景。

Aioga 观点

Aioga 判断:将工具选择与参数传递分开评估,有助于更清晰地定位工具调用失败,但不同测试方法的适用条件并不相同,不能仅凭是否出现工具调用来判断准确性。

影响与后续

可能影响:工具调用评测需要同时关注工具名称、参数内容和调用必要性。单一的精确匹配可能不足以覆盖多个合理工具选择的情况,测试设计需要结合具体任务判断。 后续观察:可关注该教程所述方法在不同工具集和模型测试中的实际表现,尤其是无工具调用、工具选择存在多种合理答案,以及参数检查结果之间的差异。

来源与版权说明

本页正文由公开来源页面提取并按原有信息整理,同时保留来源、发布时间和原文入口。版权归原作者及来源网站所有,请通过原文链接核验和阅读来源版本。

抓取通道: 摘要聚合 · 原始域名: openrouter.ai

来源: OpenRouter:Announcements

原文链接: 打开原始来源

Aioga 归档: 查看情报页

Content record: source-page · Updated: 2026-09-30T00:00:00.000Z

API 中转站
API RELAY · DEVELOPER INFRASTRUCTURE

API 中转站

统一接入主流 AI 模型 API,为开发、测试与生产环境提供稳定调用入口。

立即访问 api.w173.com
AIOGA SHARE POSTER

分享这篇 AI 情报

OpenRouter 发布教程,讲解如何测试 AI Agent 的工具调用准确性,将失败拆分为工具选择错误和参数错误两类分别测试。

OpenRouter:Announcements2026-09-30T00:00:00.000Z
扫码打开文章详情扫码直达文章详情

Aioga 自动聚合全球 AI 动态,并保留来源信息用于核验与引用。