图片
优化智能体解决方案需要软件工程确保组件协调、并行运行并与系统高效交互。例如预测执行[2],会尝试处理可预测查询以降低时延,或者进行冗余执行[3],即对同一智能体重复执行多次以防单点故障。其他增强现代智能体系统可靠性的模式包括::
- 并行工具:智能体同时执行独立 API 调用以隐藏 I/O 时延。
- 层级智能体:管理者将任务拆分为由执行智能体处理的小步骤。
- 竞争性智能体组合:多个智能体提出答案,系统选出最佳。
- 冗余执行:即两个或多个智能体解决同一任务以检测错误并提高可靠性。
- 并行检索和混合检索:多种检索策略协同运行以提升上下文质量。
- 多跳检索:智能体通过迭代检索步骤收集更深入、更相关的信息。
还有很多其他模式。
本系列将实现最常用智能体模式背后的基础概念,以直观方式逐一介绍每个概念,拆解其目的,然后实现简单可行的版本,演示其如何融入现实世界的智能体系统。
所有理论和代码都在 GitHub 仓库里:🤖 Agentic Parallelism: A Practical Guide 🚀[4]
代码库组织如下:
从预生成到战略探索
在之前模式中,代理遵循单一线性思维路径,如果初始方法存在缺陷或不是最优,整个过程就会受到影响……
在复杂或富有创意的任务中,最先出现的点子往往不是最佳的,这是一个重大风险。
并发预生成(Parallel Hypothesis Generation),也称为分支思考(Branching Thoughts),是一种不对单一想法作出回应的结构性方法。
- 系统一开始就明确生成多种多样的策略或“假设”,而不是单一线性推理。
- 然后并行探索所有路径,并为每条路径生成解。
- 最后评估竞争方案,选出最优方案。从而创造更稳健、更具创造力,且更不容易陷入次优路径的系统。
我们将构建一个多智能体系统,以应对创意营销任务。由 规划器(Planner)、并发 执行器(Workers) 和 评估器(Judge) 组成,目标是展示最终输出相比单个代理能产出的明显有质的提升。
首先,为管理代理之间复杂的信息流,需要为输出定义结构化的双质模型,这是将多智能体系统粘合在一起的纽带。
这些 Pydantic 模型是代理之间的正式“数据契约”。例如,Plan 类确保规划器代理始终输出一个 MarketingHypothesis 对象列表,Evaluation 类确保评估器不仅会提供一个致胜口号,还会提供详尽的 critique。
接下来定义 GraphState,这比之前的模式更复杂,需要跟踪初始计划以及多个并行工作分支的结果。
最重要的部分是:worker_results: Annotated[Dict[str, Slogan], operator.update]。当并行工作节点完成时,每个节点会返回一个带有自身结果的小字典。operator.update 归约函数指示 LangGraph 将这些词典合并为最终状态下的综合 worker_results 对象,以确保数据不丢失。
接下来定义 规划器(Planner) 代理,它是图中的第一个节点。
planner_node 通过 LLM 将高层次的 product_description 分解为三个独立且可并行化的子任务(MarketingHypothesis 对象),这个初始的“扇出”步骤是整个图的基础。
接下来定义 执行器(Worker) 代理,该节点特殊之处在于会并行多次执行,每个由规划器生成的假设都会执行一次。
worker_node 是复写器(copywriter),不会从主 state 读取,相反从 config 对象那里接收 hypothesis。这就是 LangGraph 将唯一输入传递给同一节点的并行执行的方式,使每个执行器能够专注于其分配的问题切片。
现在我们需要一个作为条件边的函数,把任务分配给并行执行器。
scatter_to_workers 函数是动态并行的核心,它不是标准节点,而是用作条件边的函数。从状态读取 plan,并程序化的构建 Send 对象列表。每个 Send 都是 LangGraph 命令,用于调用具有唯一配置的 worker 节点。当条件边返回此类 Send 对象列表时,LangGraph 理解必须并行执行所有对象。
最后,评估器(Judge) 代理负责收集并评估所有执行器的结果。
judge_node 是“扇入”或聚合,负责读取 worker_results 词典并综合结果,执行最后的关键推理步骤,即比较竞争观点并做出合理决策,最终产出整个系统的高质量输出。
定义好所有节点和边后,可以组装并编译最终的图。
并发预生成
现在进行最终定量证明,分析性能日志,看看并行执行的好处。
这就是现在看到的……
三个执行器分别用了 5.31s、5.12s 和 4.98s。如果按顺序执行,该阶段将耗时 15.41s(5.31 + 5.12 + 4.98)。
通过并行执行,该阶段时间仅为 5.31s(即最长执行器时间)。
这为这一步骤节省了超过 10s 的时间。
更重要的是,最终产出质量更好。系统不仅生成了口号,而且探索了由三种不同策略定义的空间,然后通过另一个推理步骤选择最佳策略。
文章来自:51CTO
