a↗Agent 工程实战中文课程 / v1.0.0⌕ 搜索课程/
本页目录

L02 参考解:把工具调用变成受控能力,而非任意函数调用

这是可讨论的参考设计,不是唯一架构。先完成实验题面,再对照本解。

关键推导

能力边界应放在执行动作的层,而不只放在提示词。参考Gateway仅提供两个只读工具;退款服务通过显式方法调用演示审批语义,不自动暴露给模型。这样正常查询不会因模型提出“refund”而获得额外权限。

针对同名订单,正确SQL要包含租户与所有者条件。只检验order_id格式,再SELECT by order_id,是典型的跨租户漏洞。MCP可以帮助标准化工具连接与发现,但不替业务应用决定某个用户能看哪个订单。课程不要求你自己写一个完整OAuth服务器;选修接入时使用成熟库并测错误受众、过期凭据与权限收缩。

参考算法与实现位置

untrusted tool request
  → strict schema
  → allowlisted handler
  → authenticated principal from host
  → object-level authorization
  → domain invariant
  → bounded result + evidence reference

任何一层失败都不能继续执行下一层;对用户返回稳定错误码,对审计保留内部原因并脱敏。可运行实现:Gateway.dispatch、Store.get_order、Store.commit_refund。

应当得到的可检查结果

案例 结果
Alice查自己的A100 paid=10000
Bob查自己的A100 paid=33000,不读到Alice订单
Alice查A111(同租户其他人) NOT_FOUND
模型添加tenant_id=shop-b INVALID_ARGUMENTS
参数order_id=true INVALID_ARGUMENTS
任意未知工具名 UNKNOWN_TOOL,无代码执行
未审批直接提交退款 APPROVAL_REQUIRED,账本仍0

怎样判断替代实现是否等价

替代实现必须保留题面中的身份来源、状态归属和失败语义。数据库/框架可以更换,但应把相同故障窗口重新跑一遍。只在正常路径输出一致,不足以证明恢复与授权等价。异步或并发实现还必须解释取消传播、竞争窗口和资源回收。

常见错误与修正

第一类错误是把协议或框架提供的局部保证放大成业务保证:格式正确不等于授权,执行结束不等于业务成功,持久化不等于外部副作用恰好一次。修正方式是找到事实源并把不变量放在拥有该事实的层。

第二类错误是用演示数据替代证据。已有fixture可以检查确定性公式与状态机,但真实模型、网络或容器的结论需要实际运行。报告同时写出“已验证”“仅模拟”“未验证”,比宣称全部完成更有工程价值。

实现范围与限制

参考项目没有实现MCP网络服务器或OAuth。MCP部分是实现任务与验收规格,不是假装已经交付的服务。

开放题评分要点

授权35;Schema/白名单25;错误与信息最小化15;测试15;协议与业务边界解释10。 正确的反例、失败分析和替代方案论证应获得分数;框架堆叠、只报最终成功截图、删除失败成本不应获得同等评价。