跳到正文

AI Know · 技术研究笔记

工具描述是接口契约,模糊描述等于埋下隐患

权限要按最小可用原则在运行时动态收窄;运行时日志必须能完整回放一次决策链路;评测集要覆盖长尾输入,而非只测 happy path

听书 00:00 / --:--
00

三分钟读懂

先看结论,再决定是否深读

  1. 工具描述是接口契约,模糊描述等于埋下隐患
  2. 权限要按最小可用原则在运行时动态收窄
  3. 运行时日志必须能完整回放一次决策链路
  4. 评测集要覆盖长尾输入,而非只测 happy path
  5. 越权调用与幻觉参数是生产事故两大源头
01 / DEEP DIVE

核心原理

工具调用协议决定 Agent 与外部世界的交互质量。当前主流做法是把工具以结构化 schema 暴露给模型,由模型输出调用意图,运行时负责校验与执行。问题在于,很多团队把 schema 当成“给模型看的说明书”,写得含糊其辞,参数命名随意,缺少边界说明,模型只能靠猜,错误率自然高。

权限边界则是另一个被低估的环节。Demo 阶段往往给 Agent 一把“万能钥匙”,能读能写能删;生产环境里,这种设计一旦遇上提示注入或模型误判,后果就是数据泄露或误操作。真正可用的权限模型,需要把“这个工具能做什么”和“这次调用允许做什么”分开,前者是静态定义,后者是运行时动态判定。

评测与运行时日志构成闭环。没有日志,评测只能看结果对不对,看不到过程为什么错;没有评测,日志堆成山也无法转化成改进。二者必须一起设计。

02 / DETAILS

技术细节

输入侧:工具定义要写成契约而非说明。每个工具需明确:必填与可选参数、参数类型与取值范围、幂等性、失败返回结构、调用前置条件。建议给每个工具附 2 到 3 个正例和反例,直接进系统提示。输入侧还要做意图归一化,把用户自然语言里的模糊指代(“那个订单”“上次的文件”)解析成确定标识,否则模型会在参数里编造 ID。

推理/执行侧:执行层要独立于模型。模型只输出“调用哪个工具、传什么参数”,执行层负责参数校验、权限判定、超时控制、重试与降级。建议采用三段式:先静态校验(类型、必填、枚举),再权限校验(主体、资源、动作三元组),最后沙箱执行。任何一段失败都返回结构化错误给模型,让它有机会自我修正,而不是直接抛异常中断。

输出/评测侧:输出要区分“工具返回原文”和“模型转述”。前者进日志存档,后者进用户回复。评测集应包含四类样本:正常调用、参数缺失、权限不足、工具超时。每类都要有期望行为定义,比如权限不足时期望模型向用户说明原因而非反复重试。评测指标建议用“任务完成率 + 无效调用率 + 平均调用轮次”三者组合,单看完成率会掩盖效率问题。

03 / IMPLEMENTATION

工程实践

第一,建立工具注册中心。所有工具统一登记 schema、权限标签、负责人、版本号,禁止业务代码里散落硬编码的工具定义。工具变更走版本管理,模型侧看到的工具集随版本灰度。

第二,权限做成运行时拦截器。不要在工具内部写 if 判断,而是在调用链路上设一道策略引擎,按“用户身份 + 会话上下文 + 资源归属”实时判定。默认拒绝,显式放行,高危动作(删除、支付、外发)强制二次确认。

第三,日志按“可回放”标准设计。每次会话记录:模型输入、工具调用请求、校验结果、执行结果、模型下一步决策。日志要能按 trace id 串起来,支持离线重放。没有回放能力的日志,在排查线上问题时价值有限。

05 / FAILURE MODES

风险边界

成本:工具调用轮次越多,token 与延迟成本越高。多工具并行、结果缓存、失败快速熔断是必要手段,否则一个复杂任务可能触发十几次串行调用。

幻觉:模型会编造不存在的工具名、参数值或资源 ID。执行层必须做严格校验,对不存在的资源直接返回明确错误,不能“帮忙猜一个”。

越权调用:提示注入可以诱导模型调用本不该用的工具。防线在运行时权限判定,不在提示词里写“请不要”。提示词是建议,拦截器才是约束。

长尾输入与延迟:超长文本、多语言混杂、格式错误的输入会显著拉高解析失败率与响应时间。需要设置输入长度上限、超时阈值与降级路径,超时后返回可解释的中间状态,而不是让用户干等。

Agent 工具链的工程化,本质是把模型的不确定性关进工程确定性的笼子里。工具协议管住输入,权限拦截管住动作,运行时日志管住可追溯性,三者齐备,Agent 才谈得上上线。

完整信源

事实从哪里来