<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Plan-and-Execute on AI博士 万戈</title>
        <link>https://www.yesmiracle.net/tags/plan-and-execute/</link>
        <description>AI博士万戈的技术博客，聚焦 Agentic AI、AI Infra 与 Agent Security，分享 AI 基础设施与工程落地实践。</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <managingEditor>admin@yesmiracle.net (万戈)</managingEditor>
        <webMaster>admin@yesmiracle.net (万戈)</webMaster>
        <lastBuildDate>Fri, 14 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.yesmiracle.net/tags/plan-and-execute/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Agent 架构全景图：从单次调用到多 Agent 协作，我盘点的 8 种设计！</title>
        <link>https://www.yesmiracle.net/post/20260814-agent-architecture-landscape/</link>
        <pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate>
        <author>admin@yesmiracle.net (万戈)</author>
        <guid>https://www.yesmiracle.net/post/20260814-agent-architecture-landscape/</guid>
        <description>&lt;img src="https://www.yesmiracle.net/post/20260814-agent-architecture-landscape/cover.svg" alt="Featured image of post Agent 架构全景图：从单次调用到多 Agent 协作，我盘点的 8 种设计！" /&gt;&lt;p&gt;如果你最近在关注 Agent 圈，一定见过这些词：&lt;strong&gt;ReAct、Plan-then-Execute、Reflection、Graph、Multi-Agent、MCP&lt;/strong&gt;……&lt;/p&gt;
&lt;p&gt;看得越多，越容易懵：这些到底有什么区别？我该用哪个？它们是一回事吗？&lt;/p&gt;
&lt;p&gt;这篇文章，我想用第一人称，把我做 Agent 基础设施这几年来理解的架构全景梳理一遍。&lt;strong&gt;从最简单的单次调用，到最复杂的图编排，一共 8 种设计。&lt;/strong&gt; 每种我都会说清楚：核心循环长什么样、适合什么场景、工程上最头疼的问题是什么。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你更关心多 Agent 怎么协作，可以看我之前写的 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260804-multi-agent-orchestration-patterns/&#34; &gt;多Agent 系统架构设计系列&lt;/a&gt;（编排模式、通信层、演进路径、Agent 即服务共四篇）。这篇先讲「单 Agent 内部」的地基。&lt;/p&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;先给一张全景图&#34;&gt;先给一张全景图&lt;/h2&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;复杂度&lt;/th&gt;
          &lt;th&gt;典型场景&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;单次调用&lt;/td&gt;
          &lt;td&gt;问→答&lt;/td&gt;
          &lt;td&gt;★&lt;/td&gt;
          &lt;td&gt;翻译、结构化输出&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;ReAct&lt;/td&gt;
          &lt;td&gt;想→做→看→想&lt;/td&gt;
          &lt;td&gt;★★&lt;/td&gt;
          &lt;td&gt;通用工具调用&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Plan-then-Execute&lt;/td&gt;
          &lt;td&gt;计划→执行&lt;/td&gt;
          &lt;td&gt;★★★&lt;/td&gt;
          &lt;td&gt;复杂任务拆解&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Reflection&lt;/td&gt;
          &lt;td&gt;执行→反思→修正&lt;/td&gt;
          &lt;td&gt;★★★&lt;/td&gt;
          &lt;td&gt;高准确率要求&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;记忆增强&lt;/td&gt;
          &lt;td&gt;循环+记忆层&lt;/td&gt;
          &lt;td&gt;★★★★&lt;/td&gt;
          &lt;td&gt;长期任务、个性化&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;工具增强&lt;/td&gt;
          &lt;td&gt;发现→选→调&lt;/td&gt;
          &lt;td&gt;★★★★&lt;/td&gt;
          &lt;td&gt;工具密集场景&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;多 Agent&lt;/td&gt;
          &lt;td&gt;多循环协作&lt;/td&gt;
          &lt;td&gt;★★★★★&lt;/td&gt;
          &lt;td&gt;专业分工&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;图编排&lt;/td&gt;
          &lt;td&gt;节点+条件边&lt;/td&gt;
          &lt;td&gt;★★★★★&lt;/td&gt;
          &lt;td&gt;复杂工作流&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;复杂度不代表「高级」。&lt;strong&gt;很多生产系统，反而应该从最简单的开始。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;1-单次调用最朴素也最容易被低估&#34;&gt;1. 单次调用：最朴素，也最容易被低估&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;User → LLM → Response
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;没有循环。一次推理，模型自己决定要不要调工具，一次完成。&lt;/p&gt;
&lt;p&gt;我刚做 Agent 的时候，总觉得要搞个复杂循环才叫 Agent。后来发现，&lt;strong&gt;大量真实需求（翻译、抽取、分类、结构化输出）一次调用就够了。&lt;/strong&gt; 加循环反而引入不确定性。&lt;/p&gt;
&lt;p&gt;工程难点反而是「简单」：怎么让输出稳定？怎么约束格式？答案通常是函数调用 + 强约束解码，而不是上循环。&lt;/p&gt;
&lt;h2 id=&#34;2-react最经典的-agent-循环&#34;&gt;2. ReAct：最经典的 Agent 循环&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;思考 → 行动 → 观察 → 再思考 → …
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ReAct（Reasoning + Acting）是 Agent 圈的「Hello World」。模型每轮先想「我要做什么」，然后调用工具，观察结果，再继续思考。&lt;/p&gt;
&lt;p&gt;这是绝大多数 Agent 框架的默认形态。它的精髓在于：&lt;strong&gt;把推理过程显式地写进上下文&lt;/strong&gt;，让模型自己决定下一步。&lt;/p&gt;
&lt;p&gt;工程难点有三个：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;上下文膨胀&lt;/strong&gt;：每轮对话都在累积，10 步之后 token 可能翻几倍&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;停止条件&lt;/strong&gt;：什么时候该退出？步数上限、自洽性检查、还是用户确认？&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;错误恢复&lt;/strong&gt;：工具调用失败，重试？换方案？还是直接放弃？&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;做过 Agent 的人都知道，ReAct 的坑几乎全在这三件事上。&lt;/p&gt;
&lt;h2 id=&#34;3-plan-then-execute先想清楚再动手&#34;&gt;3. Plan-then-Execute：先想清楚，再动手&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[规划] 把任务拆成步骤 → [执行] 按步骤逐个做 → 汇总结果
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ReAct 是「边想边做」，Plan-then-Execute 是「先想后做」。模型先输出一份完整的任务拆解，然后像执行清单一样逐个完成。&lt;/p&gt;
&lt;p&gt;好处是&lt;strong&gt;可预测&lt;/strong&gt;。每一步做什么都是预先规划好的，中途不会跑偏。而且每个子步骤可以用 ReAct 作为内层循环，形成「计划 + 行动」的两层结构。&lt;/p&gt;
&lt;p&gt;我自己的经验：&lt;strong&gt;凡是涉及「多步骤、有依赖关系」的任务（比如写代码、做调研），先规划再执行，成功率明显高于裸 ReAct。&lt;/strong&gt; 规划本身就是一次免费的「预演」。&lt;/p&gt;
&lt;h2 id=&#34;4-reflection会自我反思的-agent&#34;&gt;4. Reflection：会自我反思的 Agent&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;执行 → 评估 → 发现问题 → 重新执行 → …
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ReAct 跑完一轮就结束？Reflection 不这么认为。它加了一个「事后检查」环节：让模型评估自己的输出，发现问题，再迭代一轮。&lt;/p&gt;
&lt;p&gt;典型实现是 Actor + Evaluator 分离：一个 Agent 干活，另一个 Agent 挑毛病，然后回到干活 Agent 手里修正。听起来简单，但效果往往出奇地好——&lt;strong&gt;很多「最后一轮质量差」的问题，其实就是缺一次反思。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;代价是 token 消耗翻倍，而且反思轮次要有上限，否则会陷入自我怀疑循环。&lt;/p&gt;
&lt;h2 id=&#34;5-记忆增强给循环加一个硬盘&#34;&gt;5. 记忆增强：给循环加一个「硬盘」&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;循环 ←→ 短期记忆（当前上下文）
     ←→ 长期记忆（向量检索）
     ←→ 经验记忆（技能库）
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;前面的架构都假设「一次任务一次会话」。但真实世界的 Agent 需要记住：上次用户说过什么、这个项目的背景是什么、我上次踩过什么坑。&lt;/p&gt;
&lt;p&gt;记忆增强架构把记忆拆成三层：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;短期&lt;/strong&gt;：当前会话上下文，随循环滚动&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;长期&lt;/strong&gt;：跨会话的事实，用向量库检索&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;经验&lt;/strong&gt;：从历史中沉淀的「技能」，下次直接复用&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;我做的 Hermes 就是这么设计的——memory 存长期事实，skills 存可复用的方法论，两者在每个循环里自动注入。&lt;strong&gt;记忆不是缓存，是 Agent 的「人格连续性」。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;6-工具增强mcp-时代的主角&#34;&gt;6. 工具增强：MCP 时代的主角&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;工具注册 → 发现 → 选择 → 执行 → 结果处理
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;当工具数量从 3 个涨到 300 个，问题就从「模型会不会调工具」变成了「模型怎么知道有哪些工具、该调哪个」。&lt;/p&gt;
&lt;p&gt;这一层是我做 MCPZERO 的主场，也是这两年变化最大的地方：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MCP&lt;/strong&gt; 把工具变成标准协议，Agent 不再为每个工具写适配器&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;渐进式发现&lt;/strong&gt;（progressive discovery）让 Agent 按需加载工具，而不是启动时全部塞进上下文&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;安全网关&lt;/strong&gt; 在工具调用节点上做校验——参数合法性、权限边界、危险操作拦截&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;工具增强的核心矛盾是：&lt;strong&gt;工具越丰富，Agent 越强大，但上下文越拥挤、攻击面越大。&lt;/strong&gt; 这层架构的价值，就是在这三者之间找平衡。&lt;/p&gt;
&lt;h2 id=&#34;7-多-agent一群专家还是一个全能&#34;&gt;7. 多 Agent：一群专家，还是一个全能？&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Orchestrator → 派活 → Worker 们 → 汇总
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;当一个 Agent 的上下文装不下所有技能，就拆成多个专业 Agent：一个负责调研，一个负责写代码，一个负责审查，一个 Orchestrator 负责调度。&lt;/p&gt;
&lt;p&gt;多 Agent 的复杂度是质的飞跃——状态一致性、死锁、谁做最终决策、Agent 之间怎么「说话」。我之前的系列文章用了四篇才讲完这块，这里不展开。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;一句话总结我的观点：多 Agent 是最后的手段，不是第一选择。&lt;/strong&gt; 单 Agent + 好工具，能解决 80% 的问题。&lt;/p&gt;
&lt;h2 id=&#34;8-图编排把-agent-变成状态机&#34;&gt;8. 图编排：把 Agent 变成状态机&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[分析] → [路由] → [搜索] → [综合] → [校验]
              ↓           ↑
          [问用户] ────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;前面几种架构，流程都是隐式的——模型在循环里自己决定下一步。图编排反过来：&lt;strong&gt;用显式的有向图定义每一步。&lt;/strong&gt; 节点是处理单元，边是条件路由，支持并行、分支、人工介入。&lt;/p&gt;
&lt;p&gt;好处是&lt;strong&gt;可控、可预测、可审计&lt;/strong&gt;。坏处是&lt;strong&gt;死板&lt;/strong&gt;——图是预先画好的，模型只能在节点内部发挥，碰到图没覆盖的情况就抓瞎。&lt;/p&gt;
&lt;p&gt;我的判断：&lt;strong&gt;图编排适合「流程已知、稳定性优先」的生产场景&lt;/strong&gt;（比如企业审批流、风控流水线）；探索型任务（比如研究、写代码）更适合让模型自己走 ReAct。&lt;/p&gt;
&lt;h2 id=&#34;混合架构才是现实&#34;&gt;混合架构才是现实&lt;/h2&gt;
&lt;p&gt;说了 8 种，但真实的生产系统几乎都是混合的：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;底层是 &lt;strong&gt;ReAct 循环&lt;/strong&gt;（核心引擎）&lt;/li&gt;
&lt;li&gt;上层叠 &lt;strong&gt;Plan 或 Graph&lt;/strong&gt;（编排层）&lt;/li&gt;
&lt;li&gt;中间挂 &lt;strong&gt;记忆层&lt;/strong&gt;（上下文管理）&lt;/li&gt;
&lt;li&gt;外围接 &lt;strong&gt;工具层&lt;/strong&gt;（MCP 注册）&lt;/li&gt;
&lt;li&gt;复杂的再加 &lt;strong&gt;多 Agent&lt;/strong&gt; 协作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比如我平时用的 Hermes：ReAct 驱动核心，memory + skills 提供持久化，cron + delegation 做编排，MCP 接外部工具。它不是一个「单一架构」，而是&lt;strong&gt;每层选最合适的模式&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;写在最后&#34;&gt;写在最后&lt;/h2&gt;
&lt;p&gt;盘完这 8 种架构，我最大的感受是：&lt;strong&gt;架构是手段，不是目的。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;不要因为「Graph 听起来高级」就用 Graph，不要因为「多 Agent 很酷」就强行拆。先想清楚你的任务特征：是线性的还是分支的？需要记忆吗？工具多不多？要不要人工介入？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;从最简单的架构开始，遇到瓶颈再加复杂度——这是我在 Agent 基础设施这条路上，用无数个深夜换来的经验。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;希望这份全景图，能帮你在架构选型时少走一点弯路。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;如果你对 Agent 安全网关、MCP 渐进式发现这些底层架构感兴趣，欢迎关注 MCPZERO（mcpzero.io）——我正在做的开源 Agent 基础设施项目。&lt;/em&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
