空数组不是唯一答案:AI Agent 的外部工具接口应让失败可见

AI Agent 调用外部工具时,空数组可能同时代表无结果、读取失败或分页未完成。连接器设计应显式区分成功、失败、部分失败与不确定状态,并通过元数据、游标和警告信息让 Agent 做出更可靠的后续决策。

分类:AI编程

当 AI Agent 调用问题追踪系统、数据库或第三方 API 时,返回一个空数组 [] 看似简洁,却可能隐藏多种完全不同的现实:查询成功但没有匹配项、连接器无法读取数据、分页只读到一半、服务限流或请求超时。Dev.to 上一篇关于连接器设计的文章提出,工具接口不应把这些状态压缩成同一个空结果,而应把“部分失败”和“不确定”明确暴露出来,让 Agent 能够判断接下来该停止、重试还是继续读取。

空数组会掩盖不同的业务含义

素材指出,一个返回空数组的连接器可能对应多种结果。对 Agent 来说,“没有匹配的 issue”是有价值的信息;“我无法读取这些 issue”则意味着应当停止或重试。如果两者都变成 [],Agent 只能猜测。

这种猜测在自动化流程中会带来风险。模型可能把读取失败误解为没有匹配结果,也可能把不完整的数据当成完整列表进行汇总。文章建议,连接器结果应该被视为一份“小报告”,而不是单纯的数据载荷。

用元数据描述结果边界

文章给出的示例结果包含多个字段:

  • status:例如 partial,用于说明结果状态;
  • records:实际读取到的记录;
  • source:记录来自哪个连接器、对应什么查询;
  • fetched_at:抓取时间,例如 2026-11-13T10:30:00Z;
  • continuation:后续读取所需的游标,例如 next-page-token;
  • warnings:例如“后续页面尚未读取”。

文章强调,字段名称只是示意,真正重要的是接口契约:结果要说明自己包含什么内容、来自哪里、何时获取,以及是否完整。对于小型连接器,少量明确状态可能已经足够,但这些状态必须与记录本身分开。错误信息不应被塞进一条看起来正常的记录里,否则 Agent 可能把错误文本当成源数据进行总结。

分页、重试和写操作需要明确状态

在分页场景中,文章建议只有在当前页面被接受之后,才保存 continuation cursor。如果第三页失败,连接器应返回已经读取到的记录,并说明读取在何处停止。下一次运行可以从该位置继续,而不是把不完整列表呈现为完整结果。

这也与重试机制相关。重复读取同一页时,不应在工作集中静默产生重复记录。对于会改变远端状态的操作,如果服务支持幂等键,应使用 idempotency key,并记录操作是否被确认。写操作后的超时需要特别处理:客户端没有收到响应,并不意味着服务器没有接受变更;此时“写是否成功”处于不确定状态。

文章进一步提出,连接器应告诉 Agent 每种状态允许执行什么动作。相比让模型从自然语言描述中推断数据是否完整,直接给出事实更安全。连接器通常知道是否已经读到响应末尾,Agent 应该直接接收这个事实。

让不确定性成为接口的一部分

在测试层面,素材建议覆盖几类典型情况:一次成功的空查询、分页过程中令牌过期、触发限流、遇到格式错误数据,以及一次可能在服务器已接受后超时的写操作。这些用例可以检验接口是否保留了“没有发生任何事”和“不知道发生了什么”之间的差别。

对 AI 应用来说,连接器可靠性不只是拿到可用数据,也包括把不确定性展示得足够清楚,使下一步动作可以被有意识地选择。随着 Agent 越来越多地调用外部工具,工具返回值不再只是数据结果,更是 Agent 判断是否继续、是否重试、是否提示用户的依据。如何向 Agent 说明一个结果并不完整,正在成为工具设计必须回答的问题。

原创文章,作者:点点,如若转载,请注明出处:https://www.dian8dian.com/kong-shu-zu-bu-shi-wei-yi-da-an-ai-agent-de-wai-bu-gong-ju

Like (0)
点点的头像点点
Previous 23小时前
Next 21小时前

相关推荐