篇章二 · 2.5
工具执行编排
篇章二最后一站。模型一口气要调八个工具,谁先谁后、能不能一起跑——答案藏在一个分区函数和一条流水线里。
只读的一起跑,会写的排好队
partitionToolCalls() 把模型一次想调的工具切成两区:并发区最多 10 个同时跑,串行区一个一个来。判据不是「快慢」,是「有没有副作用」。
两区制 · partitionToolCalls()
⚡ 并发安全区Read · Glob · GreprunToolsConcurrently() · 最多 10 个同时跑
🔒 串行区Write · Edit · BashrunToolsSerially() · 一个一个来,避免互相踩
机制:addTool() 入队 → processQueue() 立即启动 → 同一个流式循环里 getCompletedResults() 收割结果。等整条消息传完才开始执行工具的「傻等」模式,在这里不存在。
分区裁判 · 传送带分拣
工具方块正在掉落…
⚡并发轨道只读无状态 · 10 个齐跑
🔒串行轨道有写入/有状态 · 一个一个来
0/8 分拣正确 · 点轨道把当前工具送进去
篇章二收束:管道(2.1)→ 循环(2.2)→ API 层(2.3)→ 重试降级(2.4)→ 执行编排(2.5)——引擎的五块拼图齐了。篇章三钻进工具系统:一个 47 字段的接口,如何长出 30 多种工具。