详解 Claude Code 源码
赛博浮世绘 · 晓风乾 · 24 站拆解
回首页
详解 Claude Code 核心引擎 2.5 · 工具执行编排
篇章二 · 2.5

工具执行编排

篇章二最后一站。模型一口气要调八个工具,谁先谁后、能不能一起跑——答案藏在一个分区函数和一条流水线里。

只读的一起跑,会写的排好队

partitionToolCalls() 把模型一次想调的工具切成两区:并发区最多 10 个同时跑,串行区一个一个来。判据不是「快慢」,是「有没有副作用」。

两区制 · partitionToolCalls()
⚡ 并发安全区Read · Glob · GreprunToolsConcurrently() · 最多 10 个同时跑
🔒 串行区Write · Edit · BashrunToolsSerially() · 一个一个来,避免互相踩
StreamingToolExecutor · 边收边执行 API 还在流式输出,工具已经开跑
API 流(时间 →) thinking… text tool_use ① 完成 ✓ tool_use ② 完成 ✓ 执行层 立即执行 tool ① 立即执行 tool ② 不等消息结束

机制:addTool() 入队 → processQueue() 立即启动 → 同一个流式循环里 getCompletedResults() 收割结果。等整条消息传完才开始执行工具的「傻等」模式,在这里不存在。

分区裁判 · 传送带分拣
工具方块正在掉落…
并发轨道只读无状态 · 10 个齐跑
🔒串行轨道有写入/有状态 · 一个一个来
0/8 分拣正确 · 点轨道把当前工具送进去
篇章二收束:管道(2.1)→ 循环(2.2)→ API 层(2.3)→ 重试降级(2.4)→ 执行编排(2.5)——引擎的五块拼图齐了。篇章三钻进工具系统:一个 47 字段的接口,如何长出 30 多种工具。