← 返回目录

第 5 卷

第 5 / 6 卷日期:

都有人管。这一节我们把这两条边界划出来。

入口:code 模式下,模型绕过程序直接点名 env_probe?不行,UNKNOWN_TOOL:对模型而言它根本不存在,不是“存在但不许调”:

复制代码

1---模型绕过run_code,直接点名调env_probe ---
2{"isError":true,
3"error": {"message":"unknown tool \"env_probe\": only `run_code` is callable
4"content": [ ... ] }

子调用:那程序里面的调用呢?照样管得住。先挂一道守卫禁掉 env_probe,再让程序 try/catch 去调它——await tools.env_probe({}) 抛 ToolCallError,接住后照

常往下跑(后面的 add({ a: 3, b: 4 }) 照算,得 sum: 7),外层 run_code 仍成功:守卫对子调用一视同仁,拒绝在这里变成可捕获的异常。

复制代码 1--- 守卫能否管住程序里的子调用 ---

2{ "isError": false, 3"value": { "logs": [], "result": { "probe": "caught: env_probe 已被禁用", "sum":

这里我们验证完毕,对于 Code Mode 来说,执行边界依旧存在,无论是入口还是子调用,都必须经过刚刚讲过的工具流水线,不能肆意越界。

本讲小结

这一讲,我们把上一讲提到的工具执行展开成一条流水线,一次调用要依次穿过八站,结构固定,不因挂不挂钩子而变。

往里看:pre-execute 放行 / 拒绝 / 去问人(ask 没人应答即拒),守卫只拒或弃权(所以单调),post-execute 能拦能改。

换个入口也跑不掉:Code Mode 只给一个 run_code,子调用照过完整流水线——入口有 UNKNOWN_TOOL 拦,子调用有守卫管。

本卷图片

本页图片

第 14 页图片 1
图 14-1
全站分卷索引 · 6 卷
  1. 1第 1 卷
  2. 2第 2 卷
  3. 3第 3 卷
  4. 4第 4 卷
  5. 5第 5 卷
  6. 6第 6 卷