<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Prompt Chaining on Zewang's Blog</title><link>https://zewang0217.github.io/tags/prompt-chaining/</link><description>Recent content in Prompt Chaining on Zewang's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Sun, 14 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://zewang0217.github.io/tags/prompt-chaining/index.xml" rel="self" type="application/rss+xml"/><item><title>Agentic Design Patterns 前 5 章学习与思考</title><link>https://zewang0217.github.io/p/agentic-design-patterns-%E5%89%8D-5-%E7%AB%A0%E5%AD%A6%E4%B9%A0%E4%B8%8E%E6%80%9D%E8%80%83/</link><pubDate>Sun, 14 Jun 2026 00:00:00 +0000</pubDate><guid>https://zewang0217.github.io/p/agentic-design-patterns-%E5%89%8D-5-%E7%AB%A0%E5%AD%A6%E4%B9%A0%E4%B8%8E%E6%80%9D%E8%80%83/</guid><description>&lt;h2 id="背景"&gt;背景
&lt;/h2&gt;&lt;p&gt;最近在系统学习《Agentic Design Patterns》（作者 Antonio Gulli，中文翻译仓库由 xindoo 维护在 &lt;a class="link" href="https://adp.xindoo.xyz/" target="_blank" rel="noopener"
 &gt;adp.xindoo.xyz&lt;/a&gt;）。这本书讲的是 AI Agent 系统的各种设计模式——和写代码时常用的&amp;quot;设计模式&amp;quot;是同一类概念，只是把对象从代码结构换成了 Agent 编排。&lt;/p&gt;
&lt;p&gt;这周连着读了前 5 章。整体感觉是：每一章都解决一个具体的&amp;quot;痛点&amp;quot;，五章拼起来刚好是一个最小可用的 Agent 系统骨架。把这 5 章的笔记和思考整成一篇，方便以后回看。&lt;/p&gt;
&lt;h2 id="我对前-5-章的整体理解"&gt;我对前 5 章的整体理解
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;提示词链可以是从 LLM 到 Agent 的一个过渡，从单次交互到多次任务。在多维度的任务下，单一提示词可能：指令忽略、上下文偏离、错误传播、上下文窗口不足、幻觉。通过提示词链可以做到：顺序分解增强可靠性。不断聚焦到更精细的地方。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;总的来说，提示词链是一种执行策略和流程控制方法。它将一个复杂的任务，拆解为一系列带有明确前后依赖关系的子任务。上一个节点的输出被解析并组装成下一个节点的输入。主要目的是降低单次生成的认知负荷，提高输出的确定性、准确性、可控性。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：你把&amp;quot;提示词链&amp;quot;提到了&amp;quot;执行策略和流程控制方法&amp;quot;的高度，这比把它当成&amp;quot;一个技巧&amp;quot;要准。它本质上是给 LLM 调用加了一层 DAG——和传统编程里的管道、流水线、 MapReduce 是同构的。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：另一个值得记的视角是&amp;quot;从 LLM 到 Agent&amp;quot;。提示词链本质上是&amp;quot;让 LLM 不止回答一次&amp;quot;，而 Agent 是&amp;quot;让 LLM 自己决定什么时候不再回答&amp;quot;。前者是固定拓扑，后者是动态拓扑。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;沿着这条主线往下看，后面四章就是在这个&amp;quot;提示词链 = DAG&amp;quot;基础上做扩展：&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;章节&lt;/th&gt;
 &lt;th&gt;解决的痛点&lt;/th&gt;
 &lt;th&gt;在 DAG 上的位置&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Ch1 链&lt;/td&gt;
 &lt;td&gt;任务太长，单步 LLM 撑不住&lt;/td&gt;
 &lt;td&gt;把节点排成线&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ch2 路由&lt;/td&gt;
 &lt;td&gt;任务不一样，固定流程处理不了&lt;/td&gt;
 &lt;td&gt;加分支节点&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ch3 并行&lt;/td&gt;
 &lt;td&gt;任务独立，但顺序执行太慢&lt;/td&gt;
 &lt;td&gt;多个节点并发&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ch4 反思&lt;/td&gt;
 &lt;td&gt;输出质量不稳定，需要质检&lt;/td&gt;
 &lt;td&gt;节点加自循环&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Ch5 工具&lt;/td&gt;
 &lt;td&gt;LLM 不能直接动外部世界&lt;/td&gt;
 &lt;td&gt;节点挂上对外接口&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="从-prompt-engineering-到-context-engineering"&gt;从 Prompt Engineering 到 Context Engineering
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;上下文工程和提示词工程。Prompt engineering → context engineering。传统 prompt engineering 专注于优化用户的当前会话的内容，例如 system message、基于角色的提示词等等，是对话层面的内容。Context engineering 则进一步丰富了信息，包括 prompt、rag、memory、state、history、structured output、tool results 等等，将任务从&amp;quot;回答问题&amp;quot;转变为&amp;quot;智能体执行任务&amp;quot;的层面。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：你提到的这个转变其实是看 agent 系统的关键视角：前 4 章和第 5 章是两层——前 4 章是&amp;quot;在 LLM 内部编排&amp;quot;，第 5 章是&amp;quot;把 LLM 接到外部世界&amp;quot;。所以 prompt engineering 关心&amp;quot;一句话怎么写好&amp;quot;，context engineering 关心&amp;quot;围绕这一次调用要准备哪些东西&amp;quot;。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这五章里凡是要&amp;quot;让 LLM 做好一件事&amp;quot;的，本质上都是 context engineering：链是上下文分段、路由是上下文分类、并行是上下文分发、反思是上下文比对、工具是上下文替换（把工具结果塞进下一轮上下文）。&lt;/p&gt;
&lt;h2 id="提示词链ch1"&gt;提示词链（Ch1）
&lt;/h2&gt;&lt;p&gt;原文用了一个三层链的例子：&lt;code&gt;市场研究报告 → 总结 → 趋势识别 → 邮件撰写&lt;/code&gt;。重点不是例子本身，而是它说清楚的三件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;拆完之后每一步的认知负荷小，模型更稳&lt;/li&gt;
&lt;li&gt;步骤之间用结构化输出（JSON / XML）传递，比纯自然语言少出错&lt;/li&gt;
&lt;li&gt;这种&amp;quot;分而治之&amp;quot;是后续所有模式的地基&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：原文还提到&amp;quot;分而治之&amp;quot;——和传统编程里把大函数拆成小函数是同一回事，只是这里的&amp;quot;函数&amp;quot;变成了 LLM 调用。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;我的疑问是：拆多少步算合适？拆得太细，调用次数爆炸；拆得太粗，又回到单提示词的老问题。原文没给出明确答案（实际也不会有，这是个工程权衡），但有一个隐含信号——&lt;strong&gt;每一步的输入输出应该能用一个简单 schema 描述&lt;/strong&gt;。如果描述不了，说明这步本身还该再拆。&lt;/p&gt;
&lt;h2 id="路由ch2"&gt;路由（Ch2）
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;第二章，路由。这里我就不详细研究了。简单来说就是，根据不同的方式路由到不同的节点。路由方式可以有：基于 LLM、基于 embedding（语义相似度）、基于规则（关键词、正则、if-else 等等）、基于机器学习（分类器、判别模型等等）。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：你对路由的 4 种实现方式分类（LLM / 嵌入 / 规则 / ML）和原文完全对上号了。原文还提了一个细节值得记：基于 ML 的路由&amp;quot;决策组件不是在推理时执行提示词的生成模型……路由逻辑被编码在微调模型的学习权重中&amp;quot;——这意味着它和基于 LLM 的路由不是同一个抽象层，LLM 那条路是&amp;quot;prompt 触发决策&amp;quot;，ML 这条路是&amp;quot;权重编码决策&amp;quot;，前者灵活后者确定。原文给的代码示例也走了两条路：LangGraph 显式构图、ADK 自动流——前者让你看清路由逻辑，后者把路由藏进框架。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;我对这章的收获是：&lt;strong&gt;路由的本质是&amp;quot;决策路由&amp;quot;&lt;/strong&gt;。选哪种实现方式，取决于决策的复杂度 + 决策的频率 + 决策的可解释性要求。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;规则路由：快、确定、可解释，但维护成本随规则数线性增长&lt;/li&gt;
&lt;li&gt;LLM 路由：灵活、能处理模糊输入，但要付推理成本、结果有随机性&lt;/li&gt;
&lt;li&gt;嵌入路由：语义级匹配，介于规则和 LLM 之间&lt;/li&gt;
&lt;li&gt;ML 路由：把决策烧进权重里，速度极快，但要训练数据 + 重新训练&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实际工程里我猜用得最多的是 LLM 路由（最简单）和规则路由（最确定），嵌入和 ML 在大规模场景才划算。&lt;/p&gt;
&lt;h2 id="并行化ch3"&gt;并行化（Ch3）
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;a class="link" href="https://adp.xindoo.xyz/chapters/Chapter%203_Parallelization/" target="_blank" rel="noopener"
 &gt;https://adp.xindoo.xyz/chapters/Chapter%203_Parallelization/&lt;/a&gt; 不细看了，就是任务可以并行化，设计层面想好&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：你的总结&amp;quot;设计层面想好&amp;quot;很准。并行化的核心是&amp;quot;识别独立子任务&amp;quot;——是设计决策，不是实现细节。文章举的例子（搜 A → 总结 A → 搜 B → 总结 B）能并行，本质是因为 A 和 B 互不依赖；但综合那步还是顺序，因为它依赖所有并行任务的结果。所以并行化的边界 = 数据依赖图。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：原文也提了一个反面的提醒：&amp;ldquo;采用并发或并行架构会引入显著复杂性和成本，影响设计、调试和系统日志等关键开发环节&amp;rdquo;——不是所有任务都该并行，简单顺序就别强行并发。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;这一章的&amp;quot;反面提醒&amp;quot;我觉得是这 5 章里最有价值的一段——容易被忽略。作者的潜台词是：&lt;strong&gt;并行化是优化手段，不是架构起点&lt;/strong&gt;。先画好数据流图，看哪些节点之间没边、没依赖，再考虑并行。能用顺序就别用并行。&lt;/p&gt;
&lt;h2 id="反思ch4"&gt;反思（Ch4）
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;反思部分，稍稍类似 ReAct 框架。通过不断的反思来完善，也有一种，两个 agent 对抗来完善产出的感觉。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：你提的&amp;quot;类似 ReAct&amp;quot;和&amp;quot;两个 agent 对抗&amp;quot;是这一章的两个核心视角。ReAct（Reasoning + Acting）侧重于&amp;quot;思考—行动—观察&amp;quot;循环，反思侧重于&amp;quot;生成—评审—优化&amp;quot;循环——两者都引入了&amp;quot;迭代反馈&amp;quot;，但 ReAct 的反馈来自外部环境（工具结果），反思的反馈来自内部评估（评审者）。生产者-评审者（Producer-Critic）这种&amp;quot;对抗&amp;quot;在生成式 AI 里被泛化成了&amp;quot;对抗式&amp;quot;模式：用一个独立的视角打破生成者的&amp;quot;认知偏差&amp;quot;。这就是为什么&amp;quot;评审者用不同 system prompt&amp;quot;这么重要——它强制构造一个新的视角。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：反思模式的一个隐性成本：原文点出了&amp;quot;超出模型上下文窗口或被 API 服务限制&amp;quot;——多轮反思会把对话历史撑爆。所以反思一般搭配记忆管理（第 8 章）和上下文工程来用，不是孤立模式。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;我对这一章最深刻的印象是：&lt;strong&gt;反思是给 LLM 加&amp;quot;自我意识&amp;quot;的尝试&lt;/strong&gt;。但它的代价是：每多一轮反思，多一次 LLM 调用、多一份延迟、多一份上下文。所以反思要省着用——能用规则校验的（编译错误、断言失败）就别上 LLM 评审。LLM 评审留给那种&amp;quot;对错没有客观标准&amp;quot;的输出（写作、规划、对话）。&lt;/p&gt;
&lt;h2 id="工具调用ch5"&gt;工具调用（Ch5）
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;a class="link" href="https://adp.xindoo.xyz/chapters/Chapter%205_Tool%20Use/" target="_blank" rel="noopener"
 &gt;https://adp.xindoo.xyz/chapters/Chapter%205_Tool%20Use/&lt;/a&gt; 工具调用是关键，将 LLM 转变为能够感知、推理、行动的智能体。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：你的&amp;quot;将 LLM 转变为能够感知、推理、行动的智能体&amp;quot;点中了工具调用的本质。感知 = 通过工具读（搜索、查询、API），推理 = LLM 自己的思考，行动 = 通过工具写（发邮件、改数据库、控制设备）。原文里有一句特别值得记：&amp;ldquo;工具调用是连接 LLM 推理能力与大量可用外部功能之间差距的技术机制&amp;rdquo;——这句话定义了工具调用在 agent 体系中的位置。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：原文还做了一个重要区分：&amp;ldquo;函数调用&amp;quot;和&amp;quot;工具调用&amp;rdquo;。前者是字面意义（调一个 Python 函数），后者是更宽泛的概念——API、数据库、agent-to-agent 委托都可以是&amp;quot;工具&amp;quot;。从设计角度，&amp;ldquo;工具&amp;quot;是个抽象层，agent 不用关心底层是函数、HTTP 还是另一个 agent。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;工具调用这一章补完了整个闭环。前 4 章都是&amp;quot;在 LLM 内部编排&amp;rdquo;，工具调用是&amp;quot;把 LLM 接到外部世界&amp;quot;。可以理解为 agent 系统的&amp;quot;动作&amp;quot;层。&lt;strong&gt;感知（读）+ 行动（写）+ 内部思考 = 完整的 agent 闭环&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id="5-章小结"&gt;5 章小结
&lt;/h2&gt;&lt;p&gt;把这 5 章放一起看，是一个递进结构：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ch1 链：内部顺序（一个长任务怎么拆）&lt;/li&gt;
&lt;li&gt;Ch2 路由：内部分支（不同输入怎么处理）&lt;/li&gt;
&lt;li&gt;Ch3 并行：内部并发（独立任务怎么加速）&lt;/li&gt;
&lt;li&gt;Ch4 反思：内部质检（输出怎么变好）&lt;/li&gt;
&lt;li&gt;Ch5 工具：连接外部世界（感知 + 行动）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这五个组合起来，是&amp;quot;智能体系统&amp;quot;这个概念的最小完整集合。后续要学的规划（Ch6）、多 Agent（Ch7）、记忆（Ch8）都是在这个基础上加更复杂的协调层。&lt;/p&gt;
&lt;h2 id="关于这个系列的学习策略"&gt;关于这个系列的学习策略
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;由于这个系列课程里的内容，大多是使用第三方库来做的，我觉得没有太大必要按照章节顺序来学习，所以后面会跳着看。&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;hermes注：这是个很清醒的判断。书里的&amp;quot;代码示例&amp;quot;是手段，&amp;ldquo;设计模式&amp;quot;是目的——模式一旦内化，下次遇到具体场景自己挑库实现就行。所以跳着看反而更省时间：先把&amp;quot;模式&amp;quot;啃透，&amp;ldquo;代码&amp;quot;按需再补。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="待续"&gt;待续
&lt;/h2&gt;&lt;p&gt;系列进度：5 / 21 + 7 附录。下次可能先跳到 Ch6 Planning，也可能先看 Ch7 Multi-Agent，看当时的兴趣。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://adp.xindoo.xyz/" target="_blank" rel="noopener"
 &gt;Agentic Design Patterns 中文翻译&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://adp.xindoo.xyz/chapters/Chapter%201_%20Prompt%20Chaining/" target="_blank" rel="noopener"
 &gt;Chapter 1: Prompt Chaining&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://adp.xindoo.xyz/chapters/Chapter%202_%20Routing/" target="_blank" rel="noopener"
 &gt;Chapter 2: Routing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://adp.xindoo.xyz/chapters/Chapter%203_%20Parallelization/" target="_blank" rel="noopener"
 &gt;Chapter 3: Parallelization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://adp.xindoo.xyz/chapters/Chapter%204_%20Reflection/" target="_blank" rel="noopener"
 &gt;Chapter 4: Reflection&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://adp.xindoo.xyz/chapters/Chapter%205_%20Tool%20Use/" target="_blank" rel="noopener"
 &gt;Chapter 5: Tool Use&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>