ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

《Agentic Design Patterns》第 3 章导读:并行化(Parallelization)

2026/10/7 21:25:30 拓冰建站 浏览量
《Agentic Design Patterns》第 3 章导读:并行化(Parallelization) 《Agentic Design Patterns》第 3 章导读并行化Parallelization本文是对开源书籍《Agentic Design Patterns》第 3 章的解读与导读内容忠实呈现原文并附个人思考。原书在线阅读https://adp.xindoo.xyz/ 翻译项目代码仓库https://github.com/xindoo/agentic-design-patterns前两章我们讲了提示词链顺序工作流和路由动态分流。但现实中的很多复杂智能体任务其实藏着大量可以同时做、没必要排队等的子任务。比如要调研一个主题明明可以同时去搜多个来源要分析一批客户反馈明明可以同时跑情感分析、关键词提取、分类……这时候一条道走到黑的顺序执行就是在白白浪费时间。这正是第 3 章**并行化Parallelization**模式的价值把互相独立的任务并发执行显著压缩总耗时。一、什么是并行化让独立任务同时跑并行化指的是并发执行多个组件——可以是多个 LLM 调用、多次工具使用甚至是整个子智能体。它不是串行等待每一步完成再走下一步而是让独立任务一起开工。书中用一个调研并总结的例子对比了两种做法顺序方法慢搜索来源 A总结来源 A搜索来源 B总结来源 B基于摘要 A 和 B 合成最终答案并行方法快同时搜索来源 A 和来源 B两个搜索完成后同时总结来源 A 和来源 B合成最终答案这一步通常仍需顺序执行要等前面的并行步骤走完核心思想一句话找出那些不依赖彼此输出、可以齐头并进的环节把它们并行掉。这在对方是 API、数据库这类有延迟的外部服务时尤其划算——多个请求同时发出去等回来的总时间就摊薄了。图 1带有子智能体的并行化示例——多个研究员智能体被并发调度。二、7 个典型应用场景书中给出了 7 个很接地气的用例我整理成速览表场景并行任务收益信息收集与研究同时搜新闻、取股票数据、监控社媒、查数据库更快拿到全面视图数据处理与分析对反馈条目同时做情感分析、关键词提取、分类、紧急识别快速输出多维分析多 API / 工具交互同时查航班价、酒店、当地活动、餐厅推荐更快拼出完整旅行方案多组件内容生成同时生成邮件主题、正文、配图、行动号召按钮高效组装成品验证与核实同时校验邮箱、手机号、地址库匹配、不当内容检测更快给出有效性反馈多模态处理同时分析文本情感词 图像对象场景更快速整合多模态洞察A/B 测试 / 多选项用不同提示词/模型同时生成多个标题变体便于快速对比选优这些场景有个共同点子任务之间彼此独立、且都受外部 I/O 或算力延迟的影响。它们是并行化的最佳土壤。三、代码实战一用 LangChainRunnableParallel并行LangChain 并行执行的基石是LangChain 表达式语言LCEL。方法是在一个字典或列表结构里组织多个可运行组件当这些组件被喂给链条后续环节时LCEL 就并发执行它们。对应构造叫RunnableParallel。importosimportasynciofromtypingimportOptionalfromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportChatPromptTemplatefromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.runnablesimportRunnable,RunnableParallel,RunnablePassthrough llm:Optional[ChatOpenAI]ChatOpenAI(modelgpt-4o-mini,temperature0.7)## --- 定义三个可并行执行的独立链 ---summarize_chain:Runnable(ChatPromptTemplate.from_messages([(system,简洁地总结以下主题),(user,{topic})])|llm|StrOutputParser())questions_chain:Runnable(ChatPromptTemplate.from_messages([(system,生成关于以下主题的三个有趣问题),(user,{topic})])|llm|StrOutputParser())terms_chain:Runnable(ChatPromptTemplate.from_messages([(system,从以下主题中识别 5-10 个关键术语用逗号分隔),(user,{topic})])|llm|StrOutputParser())## --- 1. 并行任务块三个链同时跑原始 topic 透传 ---map_chainRunnableParallel({summary:summarize_chain,questions:questions_chain,key_terms:terms_chain,topic:RunnablePassthrough(),})## --- 2. 综合提示词把三个并行结果汇总 ---synthesis_promptChatPromptTemplate.from_messages([(system,基于以下信息 摘要{summary} 相关问题{questions} 关键术语{key_terms} 综合一个全面的答案。),(user,原始主题{topic})])## --- 3. 完整链并行块 → 综合提示词 → LLM → 输出解析 ---full_parallel_chainmap_chain|synthesis_prompt|llm|StrOutputParser()asyncdefrun_parallel_example(topic:str)-None:responseawaitfull_parallel_chain.ainvoke(topic)print(response)if__name____main__:asyncio.run(run_parallel_example(太空探索的历史))逻辑拆解map_chain用RunnableParallel把总结、提问、提术语三条链并发跑起来同时用RunnablePassthrough保留原始主题三个结果齐了之后再交给一个综合提示词做最终的整合——这就是典型的“并行收集 串行综合”结构。技术提示书里特别点明asyncio提供的是并发concurrency而非真正的并行parallelism——它靠事件循环在单线程上等网络请求时切换任务制造同时进行的效果仍受 Python GIL 限制。所以这里的加速大多来自等待外部 API 时别空转。四、代码实战二用 Google ADKParallelAgent SequentialAgentGoogle ADK 提供了更原生的多智能体并行机制其中两个关键原语是ParallelAgent并发跑子智能体和SequentialAgent按序拼流水线。fromgoogle.adk.agentsimportLlmAgent,ParallelAgent,SequentialAgentfromgoogle.adk.toolsimportgoogle_search GEMINI_MODELgemini-2.0-flash## --- 1. 三个研究员子智能体各自负责一个主题分支---researcher_agent_1LlmAgent(nameRenewableEnergyResearcher,modelGEMINI_MODEL,instruction研究可再生能源的最新进展用 Google 搜索1-2 句话总结你的主要发现*只*输出摘要。,tools[google_search],output_keyrenewable_energy_result)researcher_agent_2LlmAgent(nameEVResearcher,modelGEMINI_MODEL,instruction研究电动汽车技术的最新发展用 Google 搜索1-2 句话总结*只*输出摘要。,tools[google_search],output_keyev_technology_result)researcher_agent_3LlmAgent(nameCarbonCaptureResearcher,modelGEMINI_MODEL,instruction研究碳捕获方法的当前状态用 Google 搜索1-2 句话总结*只*输出摘要。,tools[google_search],output_keycarbon_capture_result)## --- 2. 并行执行三个研究员 ---parallel_research_agentParallelAgent(nameParallelWebResearchAgent,sub_agents[researcher_agent_1,researcher_agent_2,researcher_agent_3],description并行运行多个研究智能体以收集信息。)## --- 3. 合并智能体把并行结果综合成结构化报告 ---merger_agentLlmAgent(nameSynthesisAgent,modelGEMINI_MODEL,instruction 综合以下研究摘要清楚地将发现归属于其来源领域。 输入摘要可再生能源{renewable_energy_result} 电动汽车{ev_technology_result} 碳捕获{carbon_capture_result} *只*基于上面提供的信息输出结构化报告不要添加外部知识。,description将并行智能体的研究发现组合成结构化报告。)## --- 4. 顺序流水线先并行研究再综合报告 ---sequential_pipeline_agentSequentialAgent(nameResearchAndSynthesisPipeline,sub_agents[parallel_research_agent,merger_agent],description协调并行研究并综合结果。)root_agentsequential_pipeline_agent关键点三个研究员用ParallelAgent并发跑各自通过output_key把结果写进会话状态等全部完成后merger_agent再读出状态、把它们拼成一份带归属的报告最后SequentialAgent把先并行、后合并两端串成一个整体流程。这再次印证了**“并行收集、串行综合”**的经典编排思路。五、速览问题背景很多智能体工作流包含多个必须完成才能达成目标的子任务。纯顺序执行每个任务都要等前一个完成通常低效又慢当任务依赖外部 I/O调不同 API、查多个库时延迟成为主要瓶颈——总耗时等于所有单任务耗时之和。解决方案识别工作流中不依赖彼此输出的组件工具使用或 LLM 调用让它们并发执行。框架LangChain、Google ADK提供内置构造来定义管理这些并发操作如主进程并行调多个子任务等全部完成再继续。实践建议当工作流包含多个可同时运行的独立操作时使用此模式例如从多个 API 取数据、处理不同数据块、或生成多个内容片段供后续综合。可视化总结图 2并行化设计模式——独立子任务并发执行待全部完成后汇聚到下游。关键要点并行化是通过并发执行独立任务来提升效率的模式在处理涉及等待外部资源如 API 调用的任务时尤其有效并发/并行架构会引入显著复杂性和成本影响设计、调试与系统日志等关键环节——不是免费的午餐LangChain 用RunnableParallel、LCEL 提供并行支持Google ADK 则通过 LLM 驱动的多智能体委托协调器识别独立子任务并触发子智能体并发处理实现并行并行化有助于减少整体延迟让系统在处理复杂任务时更具响应性。结语与个人思考第 3 章其实是前两章的提速器顺序用链条、分流用路由、能并行的就并行。把这三种控制流结合起来就能搭出既有条理、又高性能的复杂系统——这句话几乎是全书方法论的一条主线后面很多高级模式都是它的变体。但也要清醒地看到并行的代价这正是书中诚实指出的地方收益有边界并行只对彼此独立的任务有效。一旦某个步骤必须依赖前面跑完的结果比如综合报告必须等三个研究员都出结论就得停下来等——所以现实中几乎都是并行 顺序混合编排。成本很真实并发引入的竞态、状态同步、日志错乱、调试复杂度都会随着子任务数量上升。并行不是越多越好而是要该并行才并行。别混淆并发与并行像 Python 的asyncio本质是并发单线程事件循环对 I/O 等待型任务友好真要吃满多核做 CPU 密集计算还得靠多进程或专门的并行运行时。下一步建议阅读第 4 章反思Reflection——从怎么把任务编排得更快、更顺转向怎么让模型自己审一遍再交付是提升输出质量的关键一环。本文基于开源书籍《Agentic Design Patterns》https://github.com/xindoo/agentic-design-patterns 在线阅读 https://adp.xindoo.xyz/ 整理供学习交流版权归原作者所有。