真实面经题目 · 原创解析
Agent 调用服务端 API 工具的完整流程是什么?如何完成参数生成、鉴权、执行、错误处理和结果回填?
这题考 Agent 工具调用的工程链路:模型通常不直接访问业务 API,而是由宿主系统基于工具 schema、权限、参数校验、执行器、错误处理和结果回填来完成闭环。
真实面经题目 · 原创解析
这题考 Agent 工具调用的工程链路:模型通常不直接访问业务 API,而是由宿主系统基于工具 schema、权限、参数校验、执行器、错误处理和结果回填来完成闭环。
我会把 Agent 调服务端 API 的流程拆成八步。第一步是工具注册,服务端把可调用 API 抽象成工具 schema,包括名称、用途、参数、必填字段、返回结构、权限和副作用说明。第二步是用户提出目标后,Agent 构造上下文,把可用工具列表和当前任务状态交给模型。第三步是模型决定是否调用工具,并生成结构化 tool call,例如工具名和 JSON 参数。第四步宿主系统不能直接信任模型输出,要做 schema 校验、参数补全、类型转换、权限检查、敏感动作确认和幂等键生成。第五步执行器代表用户或系统去调用真实 API,带上鉴权信息、租户上下文、trace id、超时和重试策略。第六步处理 API 返回,把成功结果、业务错误、权限错误、超时或限流统一规范化。第七步把工具结果回填给模型,让模型根据事实继续下一步或生成最终回答;大结果要摘要或分页,敏感字段要脱敏。第八步记录审计和指标,包括调用链路、参数摘要、结果状态、成本、延迟和失败原因。关键点是模型负责意图和参数候选,真正的鉴权、执行、错误处理和安全边界在宿主系统和服务端。
Agent 调 API 通常涉及用户、Agent 宿主系统和服务端 API。模型本身一般不直接拿网络权限调用业务接口,而是输出一个工具调用意图;宿主系统负责校验、鉴权、执行和回填;服务端 API 负责按业务契约处理请求。边界清楚后,安全和可靠性设计才不会全部压到模型上。
每个 API 工具要有 schema:工具名、描述、适用场景、参数字段、类型、必填项、枚举值、返回结构、错误码、是否有副作用、权限范围和速率限制。描述要足够让模型选择正确工具,但不能把权限判断交给自然语言描述。schema 是模型生成参数和宿主校验参数的共同契约。
用户输入进入 Agent 后,模型会结合任务上下文和工具列表决定是否调用工具,并生成工具名和结构化参数。这个输出只能视为候选调用,因为模型可能漏参数、编造字段、选错工具或误解用户意图。宿主系统要在执行前做确定性校验,而不是把模型 JSON 直接发给业务 API。
校验包括 JSON schema、参数类型、必填字段、取值范围、业务约束、资源归属和权限范围。鉴权要明确是代表当前用户调用,还是使用系统身份调用;涉及写操作、支付、删除、发送消息等副作用时,通常还要二次确认、幂等键和审计记录。没有通过校验或权限检查的调用应返回可解释错误,而不是静默失败。
执行器调用服务端 API 时要带 trace id、租户或用户上下文、超时、重试策略和限流控制。重试只适合安全的读请求或有幂等保障的写请求;非幂等写操作不能因为模型想再试一次就重复执行。对于长任务,可以改成异步 job,返回任务 id,再由 Agent 查询状态或订阅结果。
API 返回不能原样无限塞回模型。宿主系统要把结果规范化为工具消息,包含成功状态、关键字段、可展示内容、错误类型和下一步建议。大结果要分页、摘要或只回填相关字段;敏感字段要脱敏;结构化数据要保留字段语义,避免模型误读。回填后模型才能基于真实结果继续计划或生成最终回答。
常见错误包括参数缺失、权限不足、资源不存在、业务规则不满足、API 超时、限流、服务端 5xx、结果为空和模型选错工具。不同错误处理不同:缺参数可以追问用户,权限不足提示授权,限流可以退避重试,业务拒绝应解释原因,连续工具选择错误要停止或重新规划。
Agent 工具调用需要完整 trace:用户请求、计划步骤、工具名、参数摘要、鉴权主体、API 状态码、业务错误、耗时、重试次数、结果摘要和最终输出。指标上可以看工具选择准确率、参数校验失败率、调用成功率、平均延迟、超时率、人工确认率、撤销率和安全拦截率。没有观测就很难定位是模型、工具 schema 还是 API 本身的问题。
因为模型输出不可完全信任,可能编造参数、越权调用或重复执行。真实 API 调用需要确定性的 schema 校验、鉴权、审计、超时、重试和敏感动作确认,这些应由宿主系统完成。
取决于业务。读取或修改用户资源通常应代表用户身份,并校验资源归属;后台管理、检索公共知识或系统任务可能用系统身份,但也要做租户隔离、权限范围和审计。不能让系统 token 成为绕过用户权限的通道。
先用 schema 校验发现缺失字段。如果可以从上下文确定,可以由宿主补全并记录;如果不能确定,应让 Agent 追问用户或选择不执行。不能用模型猜一个高风险参数直接调用。
不要全部回填给模型。可以分页、只取相关字段、先做服务端聚合摘要,或让 Agent 继续调用筛选工具。敏感字段要脱敏,结构化字段要保留含义,避免压缩后丢掉关键约束。
只有在有幂等键、明确失败发生在执行前或业务 API 支持安全重试时才可以。非幂等写操作,例如创建订单、发送消息、删除资源,不能盲目重试,应该查询状态或请求人工确认。