📄 一句话概括
一轮里模型可能调多次工具,每次都从同一道门走——审批、沙箱、超时、留痕一样不少;规则只写一遍,所有调用者都受管。
📝 本节和前面几节的关系
6.2 数了推进次数,这一节看每一次动手——它在第 4 章已经见过面,这里放进一轮工作的时间线里。
一、管线在时间线里的位置
一个 Turn 的每次工具调用,都完整过一遍六道关(4.4):
调 3 次工具 = 过 3 遍关卡——没有【这轮已经批过了】这回事。
审批的一次性(4.5.2)在这里体现得最直白:每次动手都是新的一次。
二、实测:规则挂在管线层
规则类插件(user-approval、sandbox-policy 等 8 件)注册在管线层,不在任何一个工具里。
工具换了一批,关卡纹丝不动——这既是 4.6 的【唯一入口】,也是本章的视角:一轮里不管调什么工具,规则恒定。
对照反面:如果每个工具自带审批逻辑,八件规则插件就得复制进每个工具——改一条规则要改 N 处。
三、多 Step 连续调用的一致性
一个 Turn 里第 1 步和第 3 步调用的工具可能完全不同,但:
- 沙箱范围相同——同一轮里不会越走越宽。
- 审批策略相同——不会第 3 步突然不问了。
- 留痕格式相同——流水里每条记录长得一样。
一致性来自【规则在层上,不在工具里】(5.9 的机制化思想)。
四、对调试的意义
因为格式统一,一轮的流水可以整段分析:
- 数一数这一轮调了几次工具、每次过了哪些关。
- 找出【哪一次调用开始不对劲】。
这是 6.8.3 调试三步能成立的前提之一——账的格式统一,才好翻。
五、动手 Demo:Tool Call 要过统一执行管线
一轮里的三次调用,三次过门:
calls = ["Step 1: 列文件", "Step 2: 读文件", "Step 3: 汇总"]
gates = ["审批", "沙箱", "超时", "留痕"]
for c in calls:
print(" %s -> 过关卡: %s" % (c, " / ".join(gates)))
print()
print(" 规则挂在管线层: 工具换一批, 关卡纹丝不动")
实跑输出:
--------------------------------------------------------------------
Tool Call 要过统一执行管线
--------------------------------------------------------------------
一轮里模型可能调多次工具,每次都从同一道门走:
一个 Turn 调 3 次工具 => 过 3 遍关卡
每一遍 => 审批、沙箱、超时、留痕一样不少
规则只写一遍,所有调用者都受管——这就是 4.6 说的【唯一入口】
在一轮工作里的样子。
实测支撑:规则类插件(user-approval、sandbox-policy 等 8 件)
注册在管线层,而不是任何一个工具里——
**工具换了一批,关卡纹丝不动。**
每次动手都是新的一次——审批的一次性在时间线上最直白。 规则在层上不在工具里——改一条规则改一处。 格式统一让整轮流水可整段分析——为 6.8.3 铺路。
30 秒实验
- 复述:一个 Turn 调 3 次工具,过几遍关卡?为什么?
- 对照反面:规则写进每个工具里,改一条规则要动几处?
- 想想【这轮已经批过了,后面免批】这种设计会出什么事。
常见误区
- 错误:一轮里审批一次就够,后面的调用免检。——纠正:每次动手都是新的一次——审批是一次性的(4.5.2)。
- 错误:不同工具可以各带各的审批逻辑。——纠正:规则在管线层——带进工具里就要改 N 处。
- 错误:同一轮里沙箱范围可以逐步放宽。——纠正:同一轮规则恒定——一致性来自规则在层上。
自测三问(点开对答案)
1. 一个 Turn 调 3 次工具,要过几遍关卡? —— **3 遍**——每次工具调用都完整走一遍六道关。 2. 规则类插件注册在哪一层? —— **管线层**——不在任何工具里;工具换一批,关卡不动。 3. 统一管线给调试带来什么? —— **流水格式统一**——整轮可分析,能定位哪一次调用开始不对劲。- ☐ 下一节(6.4 Session 不是简单的消息数组)
相关笔记
- Tool Execution Pipeline:一次工具调用究竟要经历哪些阶段 —— 六道关的正面讲解
- Approval 与 Sandbox 为什么必须放在不同层 —— 审批一次性的出处
- Turn 与 Step:一轮工作可以包含多次模型推进 —— 时间线的上游
- 🐳 DeepSeek Harness · 索引