真实面经题目 · 原创解析

Agent 调用服务端 API 工具的完整流程是什么?如何完成参数生成、鉴权、执行、错误处理和结果回填?

这题考 Agent 工具调用的工程链路:模型通常不直接访问业务 API,而是由宿主系统基于工具 schema、权限、参数校验、执行器、错误处理和结果回填来完成闭环。

60 秒回答模板

我会把 Agent 调服务端 API 的流程拆成八步。第一步是工具注册,服务端把可调用 API 抽象成工具 schema,包括名称、用途、参数、必填字段、返回结构、权限和副作用说明。第二步是用户提出目标后,Agent 构造上下文,把可用工具列表和当前任务状态交给模型。第三步是模型决定是否调用工具,并生成结构化 tool call,例如工具名和 JSON 参数。第四步宿主系统不能直接信任模型输出,要做 schema 校验、参数补全、类型转换、权限检查、敏感动作确认和幂等键生成。第五步执行器代表用户或系统去调用真实 API,带上鉴权信息、租户上下文、trace id、超时和重试策略。第六步处理 API 返回,把成功结果、业务错误、权限错误、超时或限流统一规范化。第七步把工具结果回填给模型,让模型根据事实继续下一步或生成最终回答;大结果要摘要或分页,敏感字段要脱敏。第八步记录审计和指标,包括调用链路、参数摘要、结果状态、成本、延迟和失败原因。关键点是模型负责意图和参数候选,真正的鉴权、执行、错误处理和安全边界在宿主系统和服务端。

考点 模型不直接执行
难度 真实面经题
回答目标 让候选人能讲清 Agent 调用服务端 API 的完整工程闭环,尤其是模型候选调用、宿主校验鉴权、API 执行、错误恢复和结果回填之间的职责边界。

深入解析

01

先明确三方边界

Agent 调 API 通常涉及用户、Agent 宿主系统和服务端 API。模型本身一般不直接拿网络权限调用业务接口,而是输出一个工具调用意图;宿主系统负责校验、鉴权、执行和回填;服务端 API 负责按业务契约处理请求。边界清楚后,安全和可靠性设计才不会全部压到模型上。

02

工具注册定义可调用契约

每个 API 工具要有 schema:工具名、描述、适用场景、参数字段、类型、必填项、枚举值、返回结构、错误码、是否有副作用、权限范围和速率限制。描述要足够让模型选择正确工具,但不能把权限判断交给自然语言描述。schema 是模型生成参数和宿主校验参数的共同契约。

03

模型生成的是候选调用

用户输入进入 Agent 后,模型会结合任务上下文和工具列表决定是否调用工具,并生成工具名和结构化参数。这个输出只能视为候选调用,因为模型可能漏参数、编造字段、选错工具或误解用户意图。宿主系统要在执行前做确定性校验,而不是把模型 JSON 直接发给业务 API。

04

执行前要做校验和鉴权

校验包括 JSON schema、参数类型、必填字段、取值范围、业务约束、资源归属和权限范围。鉴权要明确是代表当前用户调用,还是使用系统身份调用;涉及写操作、支付、删除、发送消息等副作用时,通常还要二次确认、幂等键和审计记录。没有通过校验或权限检查的调用应返回可解释错误,而不是静默失败。

05

API 执行需要可靠性控制

执行器调用服务端 API 时要带 trace id、租户或用户上下文、超时、重试策略和限流控制。重试只适合安全的读请求或有幂等保障的写请求;非幂等写操作不能因为模型想再试一次就重复执行。对于长任务,可以改成异步 job,返回任务 id,再由 Agent 查询状态或订阅结果。

06

结果回填要可供模型使用

API 返回不能原样无限塞回模型。宿主系统要把结果规范化为工具消息,包含成功状态、关键字段、可展示内容、错误类型和下一步建议。大结果要分页、摘要或只回填相关字段;敏感字段要脱敏;结构化数据要保留字段语义,避免模型误读。回填后模型才能基于真实结果继续计划或生成最终回答。

07

错误处理要区分类型

常见错误包括参数缺失、权限不足、资源不存在、业务规则不满足、API 超时、限流、服务端 5xx、结果为空和模型选错工具。不同错误处理不同:缺参数可以追问用户,权限不足提示授权,限流可以退避重试,业务拒绝应解释原因,连续工具选择错误要停止或重新规划。

08

审计和观测保证可运营

Agent 工具调用需要完整 trace:用户请求、计划步骤、工具名、参数摘要、鉴权主体、API 状态码、业务错误、耗时、重试次数、结果摘要和最终输出。指标上可以看工具选择准确率、参数校验失败率、调用成功率、平均延迟、超时率、人工确认率、撤销率和安全拦截率。没有观测就很难定位是模型、工具 schema 还是 API 本身的问题。

易错点

  • 认为 Agent 客户端直接调用 API 就可以,忽略模型输出和真实执行之间的宿主校验层。
  • 工具 schema 只写自然语言描述,没有参数类型、必填项、返回结构、错误码和副作用说明。
  • 把模型生成的 JSON 参数直接发给业务 API,没有做类型、权限、资源归属和业务规则校验。
  • 所有 API 都用系统身份调用,导致用户权限和租户隔离被绕过。
  • 错误处理只返回失败,没有区分缺参数、权限不足、限流、超时、业务拒绝和服务端异常。
  • 对写操作做无条件自动重试,没有幂等键和状态查询,可能造成重复创建或重复发送。
  • 把完整 API 结果原样塞回模型,导致上下文过长、敏感信息泄露或模型误读字段。
  • 没有 trace 和审计日志,线上失败后无法判断是工具选择错、参数错、权限错还是 API 故障。

面试官追问

为什么不能让模型直接请求服务端 API?

因为模型输出不可完全信任,可能编造参数、越权调用或重复执行。真实 API 调用需要确定性的 schema 校验、鉴权、审计、超时、重试和敏感动作确认,这些应由宿主系统完成。

工具调用时鉴权应该用用户身份还是系统身份?

取决于业务。读取或修改用户资源通常应代表用户身份,并校验资源归属;后台管理、检索公共知识或系统任务可能用系统身份,但也要做租户隔离、权限范围和审计。不能让系统 token 成为绕过用户权限的通道。

模型生成的参数缺失怎么办?

先用 schema 校验发现缺失字段。如果可以从上下文确定,可以由宿主补全并记录;如果不能确定,应让 Agent 追问用户或选择不执行。不能用模型猜一个高风险参数直接调用。

API 返回内容太大怎么办?

不要全部回填给模型。可以分页、只取相关字段、先做服务端聚合摘要,或让 Agent 继续调用筛选工具。敏感字段要脱敏,结构化字段要保留含义,避免压缩后丢掉关键约束。

写操作失败后能自动重试吗?

只有在有幂等键、明确失败发生在执行前或业务 API 支持安全重试时才可以。非幂等写操作,例如创建订单、发送消息、删除资源,不能盲目重试,应该查询状态或请求人工确认。