Conditional Parallel Tool Execution
Nikola Balic (@nibzard)· validated-in-production
问题
当AI Agent在单个推理步骤中决定调用多个工具时,若严格按顺序执行这些工具,会导致严重延迟——尤其是当多数工具为只读类型、本可并发运行时。反之,如果不加以考量就并行执行所有工具,那么当部分工具存在状态修改操作(例如写入文件、更改系统设置)时,可能会引发竞态条件、数据损坏或不可预知的行为。
方案
基于工具操作属性实现批量工具的条件执行策略
-
工具分类:Agent可调用的每个工具必须声明自身类型:
- 只读型:仅用于检查数据或系统状态,不执行任何修改操作(例如
FileRead、GrepTool、GlobTool)。 - 状态修改型(写入类):会修改文件、系统状态或产生其他副作用(例如
FileEditTool、FileWriteTool、执行特定命令的BashTool)。
- 只读型:仅用于检查数据或系统状态,不执行任何修改操作(例如
-
执行编排:当Agent请求执行一批工具时:
- 编排器检查当前批次中所有工具的分类类型。
- 若批次内所有工具均为只读型:并发执行所有工具,以最大化执行速度。
- 若批次内存在任意状态修改型工具:按照Agent请求的顺序串行执行所有工具,以确保操作的安全性和可预测性。
-
结果聚合:执行完成后,收集所有工具的执行结果。若工具采用并行执行,需确保结果按一致顺序返回给Agent(或用于后续处理),通常与Agent原始请求的顺序保持一致。
该策略兼顾了性能需求(通过安全操作的并行执行提升效率)与安全正确性需求(通过状态修改操作的串行执行保障可靠性)。
flowchart TD
A[Agent 同时请求多个工具] --> B{检查批次内的工具类型}
B --> C{所有工具均为只读型?}
C -- 是 --> D[并发执行所有工具]
C -- 否 --> E["按请求顺序串行执行所有工具"]
D --> F[收集并排序结果]
E --> F
F --> G[向Agent返回聚合后的结果]
如何使用
- 确保Agent工具集中的每个工具都有一个明确定义的属性,用以标识它是
isReadOnly(只读)还是状态修改型工具。 - 当处理涉及多个工具的
tool_use请求时,Agent的核心执行循环应实现上述描述的条件逻辑。 - 应为并行执行设置默认并发限制,以避免耗尽系统资源。
- 当工具以并行方式执行时,需先收集它们各自的结果(可能会乱序返回),然后按照Agent最初请求的顺序重新排序,再将结果传回LLM或用于后续处理。这能为LLM保持结果的可预测性。
权衡
- 优点:
- 显著提升只读工具调用序列的性能。
- 通过序列化状态修改操作保障安全性,避免竞态条件的发生。
- 相较于针对工具执行的完整依赖关系图分析,实现难度更低,同时仍能带来可观收益。
- 模型行为适配:部分模型(如Claude Sonnet 4.5)天然具备并行工具执行的行为特性,使得该模式更自然、高效。
- 缺点/注意事项:
- 若一批工具中以只读操作为主,但序列早期包含单个状态修改操作,整个批次仍可能需串行执行,从而限制了潜在的并行化空间。
- 该模式的有效性依赖于对工具的只读/状态修改属性的准确分类。分类错误的工具可能引发安全问题,或错失优化机会。
- 上下文消耗:并行执行时,多个结果会同时返回,导致上下文窗口被更快耗尽,这可能会让上下文感知模型产生上下文焦虑。
参考文献
关键词:
核心为Gerred Dillon所著《构建智能体系统》中提出的智能体系统并行工具执行模式,该模式通过读写操作分类实现并发控制:读操作因幂等、无副作用可并行执行,写操作需按序执行;同时提及Claude Sonnet 4.5天然适配该模式以提升上下文窗口内的操作效率。
直译:
- 该模式由Gerred Dillon在《构建智能体系统》(链接:https://gerred.github.io/building-an-agentic-system/)一书中详细阐述,尤其在“并行工具执行”章节以及“核心架构”章节下的“工具执行策略”部分。
- 该书以
anon-kode/Claude Code智能体系统为背景描述了该模式:“系统通过将操作分类为只读型或有状态型,为两类操作应用不同的执行策略来解决这一问题。”(摘自src/parallel-tool-execution.md),以及*“读与写分类……智能并发控制:读操作采用并行执行……写操作采用顺序执行”*(摘自src/core-architecture.md)。
- 该概念基于如下理念:读操作在并发运行时通常具有幂等性且无副作用,而写操作则需要严谨的顺序编排。
- Cognition AI发布的《Devin & Claude Sonnet 4.5:经验与挑战》(链接:https://cognition.ai/blog/devin-sonnet-4-5-lessons-and-challenges)指出,Sonnet 4.5可通过并行工具执行天然最大化单个上下文窗口内的操作数量。
来源摘要
正在获取来源并生成中文摘要…
来源: https://gerred.github.io/building-an-agentic-system/parallel-tool-execution.html