agent runtime lab · 2026 · 技术研究笔记
07. 并行工具调用真的更快吗
并发只缩短互不依赖的等待时间,也会增加归并、限流和部分失败处理
从 Kimi 的两条并行 Bash 调用出发,比较串行、并行与命令合并的延迟、失败和权限边界
研究版 · 10 个章节 · 约 8 分钟 · 更新于 2026-07-27
本次只读任务需要获取当前路径并列出目录。Kimi 在第一轮同时发起两个 Bash 调用;Codex 则把两个读取动作组合进一条 Shell 命令。
从最终答案看,两者都完成了任务。但运行时面对的是三种不同策略:
| 策略 | 调度方式 | 主要特征 |
|---|---|---|
| 串行 | A 完成后执行 B | 依赖关系清晰 |
| 工具并行 | A 与 B 同时执行 | 需要独立标识和归并 |
| 命令合并 | 一个工具内部执行 A、B | 工具边界少,内部状态较难观察 |
理论上能节省多少时间
若两个独立工具耗时分别为 t1 和 t2,忽略调度开销:
串行时间 ≈ t1 + t2
并行时间 ≈ max(t1, t2)
但模型调用、权限检查、进程启动、结果序列化和限流都会增加固定开销。两个各耗时 8 毫秒的本地读取,即使并行,端到端差异也可能小于一次模型请求的波动。
只有没有依赖的动作才能并行
以下任务不能直接并发:
- 先创建目录,再向目录写文件。
- 先获取认证信息,再请求接口。
- 先读取配置,再根据配置选择目标。
- 两个调用修改同一资源。
依赖关系应由运行时或计划结构表示,不能只依靠模型在自然语言里记住。
部分失败是并行的主要成本
两个调用同时执行,可能出现一个完成、一个超时。运行时需要决定:
| 问题 | 需要的策略 |
|---|---|
| 是否取消仍在运行的调用 | 依据任务是否还能完成 |
| 是否保留已完成结果 | 只读结果一般可以保留 |
| 重试整个批次还是单个调用 | 优先单独重试失败项 |
| 怎样回填给模型 | 每项独立状态 |
若把整个批次表示成“失败”,重试会重复已经完成的动作。对于发送消息、创建订单等操作,这种重复可能产生外部副作用。
并发还会放大资源压力
模型一次提出十个网络请求,不表示运行时应同时启动十个连接。执行器还要实施:
- 全局并发上限。
- 单工具并发上限。
- 单域名速率限制。
- 总运行时间与总输出上限。
- 取消信号和超时。
这些限制属于运行时配置,不应由模型参数自行覆盖。
怎样比较才有意义
我会选择三组工具:
- 两个 10 毫秒的本地读取。
- 两个 500 毫秒的独立网络模拟。
- 一个成功、一个固定超时的组合。
每组分别运行串行、并行和命令合并 30 次,记录 P50 与 P95 延迟;P50 是一半样本低于该值,P95 是 95% 样本低于该值。同时记录工具调用数、部分失败恢复次数和重复副作用次数。
并行不是 Agent 能力的等级标志。它只适用于可以证明互不依赖、能够独立授权且结果可以正确归并的动作。运行时间缩短多少,要由端到端数据回答。
运行时怎样表示依赖关系
一个最小调度计划可以把每个调用表示为节点,把“必须等待”表示为有向边。只有入边全部完成的节点才可进入授权和执行。模型可以提出依赖,但运行时还要检查是否存在循环、共享写资源和预算冲突。
两个只读调用访问不同文件时可以并行;两个写调用即使目标路径不同,也可能共享同一个构建缓存或外部配额。依赖判断因此不能只比较工具名称。
取消传播需要明确范围
当一个调用失败时,运行时应记录取消的是单项、同一批次还是整项任务。已经完成的调用保留结果,正在执行的调用进入取消请求状态,尚未开始的调用可以直接标记为跳过。
验收日志要能区分“因自身超时失败”和“因兄弟调用失败而取消”。否则重放时无法决定哪一项可以单独重试。
并发收益由临界路径决定
临界路径是依赖图中总耗时最长的路径。三个工具各耗时 2 秒,并不意味着并行后一定从 6 秒降到 2 秒;若第三个工具依赖前两个结果,下界仍约为 4 秒。
串行时间 = Σ duration_i
并行下界 = 资源约束下最长依赖路径的耗时
模型一次返回多个调用,只能证明它们在协议上同时出现。并发证据必须来自同一时钟记录的开始与结束时间,并显示执行区间发生重叠。
只读并发也可能得到不一致结果
两个只读操作访问会变化的数据时,可能看到不同版本。一个读取配置,另一个读取由配置生成的状态;并发期间配置发生变化,两个结果便无法安全组合。
运行时可用目录快照、数据库事务或资源版本建立一致读取。若无法提供快照,结果至少带读取时间和资源版本,让验证器识别不一致。并行安全不仅是没有写入冲突,还包括结果是否来自可组合的世界状态。
并发度要按资源池限制
CPU、外部 API、浏览器会话和数据库连接消耗不同资源。运行时分别维护容器配额、速率令牌、隔离实例和连接池,而不是只设一个全局并发数字。工具占用多个资源时按固定顺序申请,避免两个调用各持有一部分资源后互相等待。
实验准备完全独立、链式依赖、菱形依赖和慢分支四张调用图,分别运行串行、无限并发和受限并发,并注入超时与单分支失败。报告总耗时、临界路径、队列等待、峰值并发、限流次数、取消数量和结果完整性。P95 尾部延迟比平均值更能显示少数慢分支如何拖延整个任务。
版权声明: 如无特别声明,本文版权归 sshipanoo 所有,转载请注明本文链接。
(采用 CC BY-NC-SA 4.0 许可协议进行授权)
本文标题:07. 并行工具调用真的更快吗
本文链接:https://www.sshipanoo.com/blog/ai/agent-runtime-lab/07-并行工具调用/
