Agent 架构Agent 架构工具调用速答 · 约 5 分钟更新 2026-09-28

Agent 怎么并行调用多个工具?什么时候该并行什么时候串行?

一句话结论

无依赖的只读查询可以并行发出,一步的输入依赖另一步的输出就必须串行。并行能砍端到端延迟,但要处理结果聚合、失败隔离和并发限流;有副作用的动作默认串行加确认,并发会放大误操作的破坏面。

先这样答

判断标准只有一条:数据依赖。查天气、查三个数据源、读几个互不相干的文件——调用之间互不依赖,可以并行发出,总耗时约等于最慢的那个,而不是逐个相加;先搜索、再打开选中的网页、再做总结——后一步的输入就是前一步的输出,必须串行。并行落地要做三件事:一是结果聚合,并行结果按调用顺序标注清楚再进上下文,模型要能分清哪条结果对应哪个调用;二是失败隔离,一个分支失败不要拖垮整批,失败的分支单独重试或降级;三是并发限流,并发高了会打爆下游服务或触发限流,运行时要有并发上限。

还有一条默认红线:有副作用的操作(写入、支付、发送、删除)不做并行。这类操作的正确性依赖执行顺序和确认环节,并发会同时放大误操作的概率和破坏面,所以护栏上写死串行,需要时由人工确认逐个放行。

面试官会怎么追问

  • 「模型怎么表达并行调用?」 主流模型接口支持一次返回多个工具调用,由运行时并发执行、结果一起返回下一轮。模型接口不支持时,由框架在解析后自行拆分,但拆分逻辑要能识别「哪些调用互相独立」。
  • 「并行会伤效果吗?」 会:多个结果同时进上下文,信息更挤、互相干扰,模型可能用错数据。结果条目多或单条很长时,先做摘要或筛选再进上下文,别把原始结果全量塞进去。
  • 「要不要并行,让模型自己判断还是写死?」 只读查询类交给模型按依赖关系判断,运行时给并发上限;有副作用的类由护栏写死串行。两边都管的后果是:模型的一次「顺手并发」可能触发不可逆操作。

回答的坑

  • 无脑全并行:忽略了隐藏依赖(比如先建目录再写文件、先登录再查询),并行执行直接报错,或者产生错误的中间状态。
  • 并行了却不管聚合:结果顺序错乱、归属不清,模型把 A 调用的结果当成 B 的,错误比串行更隐蔽,排查时也很难复现。
—— 本题完 ——