Agent 设计模式:从理论到工程落地——以 OpenClaw 架构为实证
Agent 设计模式:从理论到工程落地——以 OpenClaw 架构为实证
引言:为什么 Agent 需要设计模式?
1994 年,GoF(Gang of Four)提出了 23 种经典设计模式,为软件工程提供了可复用的解决方案。三十年后的今天,当软件范式从"确定性结构"向"概率性智能"演进,设计模式再一次成为工程师的刚需——但这一次,模式的主角从对象和类变成了能感知、会推理、可行动的 AI Agent。
黄佳在《Agent 设计模式:图解可复用智能体架构》一书中系统梳理了 21 个核心 Agent 设计模式,围绕感知、记忆、推理、行动、反思、协作六大主轴展开。这些模式并非纸上谈兵——我们可以在 OpenClaw(一款本地优先的个人 AI 助手平台)的架构设计中找到它们的工程化实证。
本文将以书中的六大模式类别为经,以 OpenClaw 的实际架构为纬,展开一次理论与实践交织的深度探讨。
1. 五大设计原则:Agent 工程的根基
在进入具体模式之前,书中提出了五条贯穿全书的设计原则,这些原则同样可以在 OpenClaw 的架构决策中找到呼应:
| 目标优先 | agent-command.ts 将一次运行视为对调用方无状态的操作,目标驱动整个执行流 | |
| 上下文为王 | compaction.ts)保证长会话质量 | |
| 显式反馈 | ||
| 渐进自治 | ||
| 对齐与护栏 |
2. 感知模式:Agent 如何"看"世界
感知是 Agent 理解世界的起点。本章围绕三种感知模式展开:通过注意力聚焦降低认知噪音、通过多模态融合整合异构信息,以及通过主动感知由被动响应转向主动探索。
2.1 注意力聚焦模式
书中定义:构建高效认知漏斗,用最低的 Token 成本换取最高的上下文质量。
OpenClaw 实证:OpenClaw 的系统提示词组装(system-prompt.ts)正是注意力聚焦的典范实现。通过 PromptMode 三级控制(full/minimal/none),不同场景下的 Agent 只接收必要的上下文节段:
• 主 Agent 获得完整的技能、记忆、消息、工具描述 • 子 Agent 仅获得 Tooling、Workspace、Runtime 三个核心节段 • 裸会话模式只注入身份行
这种分层设计确保每一个 Token 都用在刀刃上,避免了"全量上下文灌注"导致的注意力稀释。
2.2 多模态融合模式
书中定义:构建统一语义场,让 Agent 能整合文字、图像等多类型信息。
OpenClaw 实证:OpenClaw 的媒体管道(src/media/)实现了一套防御性多阶段处理系统:
抓取与验证 → 格式归一化(HEIC→JPEG)→ MIME 检测 → 持久化 → Agent Payload 引用视觉模型接收 Base64 编码的图片,文档处理工具接收提取后的文本。通过将异构媒体统一转换为 Agent 可处理的格式,OpenClaw 在工程层面实现了多模态融合。
2.3 主动感知模式
书中定义:将 Agent 从“被动的答题者”转变为“主动的调查员”。
OpenClaw 实证:OpenClaw 的 web_search 工具和 memory_search 工具使 Agent 能主动探索外部世界和内部记忆。当面对不确定的问题时,Agent 不是基于有限上下文猜测,而是主动发起搜索、查阅记忆,然后综合信息做出回应——这正是主动感知的行为体现。
本书购买地址:
3. 记忆模式:打破上下文窗口的边界
记忆模式解决的核心问题是如何突破 LLM 上下文窗口的物理限制,让 Agent 具备持续感知历史的能力。本章涵盖分层记忆、RAG 检索增强和情节记忆三种模式。
3.1 分层记忆模式
书中定义:突破 LLM 上下文窗口的物理限制,通过分层存储和动态换页实现理论上无限的记忆容量。
OpenClaw 实证:OpenClaw 的上下文窗口管理(compaction.ts)是分层记忆模式的精确工程实现。当会话 Transcript 接近模型上下文限制时:
1. 通过 Token 估算检测阈值( contextWindowTokens × 0.4 × 1.2)2. 按 Token 份额将历史切分为 N 块 3. 调用 LLM 对每块生成摘要并合并 4. 用 [系统摘要 + 近期消息]替换旧历史
关键设计亮点是标识符保留策略(identifierPolicy: "strict"):压缩时显式指示 LLM 完整保留所有 UUID、哈希、Token、URL、文件名——这对 Agentic 工作流中工具调用 ID 的传递至关重要。同时,压缩前调用 stripToolResultDetails() 剥离敏感信息,防止凭证被重新嵌入压缩历史。
这套机制实现了"近期消息保持完整、远期历史保留语义"的分层记忆效果。
3.2 RAG 模式
书中定义:检索与生成的结合,让 Agent 灵活调用外部知识。
OpenClaw 实证:OpenClaw 通过 memory_search / memory_get / memory_write 三个工具以及可插拔的 Memory Plugin(如 LanceDB),实现了经典的 RAG 架构。系统提示词中条件性添加记忆节段(buildMemorySection()),仅在记忆工具可用时才注入引用行为配置——这种按需激活的设计避免了不必要的 Token 消耗。
3.3 情节记忆模式
书中定义:构建闭环系统,捕获带有时空上下文的交互轨迹。
OpenClaw 实证:OpenClaw 的会话系统将每次 Agent 运行的完整 Transcript 持久化到 ~/.openclaw/sessions/,包含时间戳、渠道来源、工具调用记录和最终回复。路由键 <agentId>:<channelId>:<accountId> 唯一标识每段对话,使 Agent 能够在恢复会话时回溯完整的交互历史。
4. 推理模式:Agent 如何"想"问题
推理模式关注 Agent 如何将复杂问题分解为可处理的步骤,并在执行中保持全局视野。本章介绍思维链与规划-执行两种核心推理范式及其在 OpenClaw 中的工程实现。
4.1 思维链模式
书中定义:借助显式的过程分解,将计算压力分散到更长的推理时序中,提升推理的准确性和可解释性。
OpenClaw 实证:OpenClaw 的流式事件处理器(pi-embedded-subscribe.ts)内置了对推理模式的原生支持。通过检测 <think> / <thinking> / <final> XML 标签,系统能区分 Agent 的推理过程和最终答案:
• "off"模式:推理块完全剥离,用户只看到结论• "on"模式:推理作为独立消息在最终答案前发送• "stream"模式:推理通过回调实时流式传输
这三种模式让开发者可以根据场景灵活控制推理过程的可见性。
4.2 规划-执行模式
书中定义:通过自顶向下的任务分解和有向无环图调度,实现对长程任务的全局掌控与并行优化。
OpenClaw 实证:Pi Agent 的五层调用栈本身就是规划-执行模式的结构化体现:
agent-command.ts (编排入口)
→ resolveSession() (规划:会话解析)
→ resolveEffectiveModelFallbacks() (规划:模型候选)
→ 构建系统提示词 (规划:上下文准备)
→ runWithModelFallback() → runEmbeddedPiAgent() (执行)
→ updateSessionStoreAfterAgentRun() (后处理)更进一步,子 Agent 编排(subagent-spawn.ts)支持将复杂任务分解为子任务并行执行,每个子 Agent 拥有独立的会话键和运行 ID,完成后通过 subagent-announce.ts 将结果注入父 Agent 的推理上下文。
5. 行动模式:从思考到执行
行动模式将 Agent 的推理结果转化为对外部世界的真实影响。本章涵盖 ReAct 动态微循环、工具编排的标准化调度,以及面对不确定性时的自适应策略选择。
5.1 ReAct 模式
书中定义:构建"思考-行动-观察"的动态微循环,有效解决仅凭内部知识难以应对的复杂问题。
OpenClaw 实证:Pi Agent 的核心推理循环天然遵循 ReAct 模式。Agent 在每个回合中:
1. Reasoning:基于上下文和历史推理下一步行动 2. Acting:调用工具( exec、read、write、web_search等)3. Observing:接收工具返回结果,将观察纳入下一轮推理
工具调用的四阶段流水线(来源→策略过滤→Schema 规范化→Hook 包装)确保每次行动都在安全且规范的框架内执行。
5.2 工具编排模式
书中定义:通过构建标准化接口与智能化选择机制,让 Agent 灵活调度海量外部能力。
OpenClaw 实证:OpenClaw 的工具链架构(pi-tools.ts)是工具编排模式的教科书级实现。工具注册经过四个阶段:
1. 来源收集: codingTools+createOpenClawTools+ 渠道专属工具2. 策略过滤:白名单/黑名单、Owner-only 策略、消息/模型提供商策略 3. Schema 规范化:针对不同模型提供商(Claude、Gemini、xAI)做兼容性适配 4. Hook 包装:AbortSignal 中止支持、beforeToolCall 钩子
系统注册了涵盖文件操作、Shell 执行、记忆、消息、定时任务、搜索、图像生成等 20+ 核心工具,每个工具都有明确的职责边界和安全约束。
5.3 自适应策略模式
书中定义:通过探索与利用之间的动态平衡,实现最优策略选择。
OpenClaw 实证:OpenClaw 的多 Provider 故障转移机制(model-fallback.ts)就是自适应策略模式的工程化表达:
• 构建 ModelCandidate候选列表(Primary + Fallbacks + Allowlist 过滤)• 逐一尝试候选,检查 Auth Profile 冷却期 • 成功则返回结果,失败则标记冷却并记录错误,尝试下一候选 • Auth Profile 系统追踪每个凭证的使用统计、失败次数和冷却时间 • resolveAuthProfileOrder()自动选择未触达限流的凭证
这套机制使系统在面对 API 限流、服务不可用等不确定性时,能自动在多个提供商和凭证之间寻找最优路径。
6. 反思模式:从错误中学习
反思模式赋予 Agent 自我评估和持续改进的能力。本章介绍两种反思机制:系统层面的自我修正(循环检测与熔断),以及经验层面的反思记忆(将教训转化为可检索的知识)。
6.1 自我修正模式
书中定义:借助模型自身的批判能力或外部工具的验证能力,自动识别并纠正错误。
OpenClaw 实证:OpenClaw 的工具循环检测(tool-loop-detection.ts)是自我修正模式在系统层面的防御性实现。维护最近 30 次工具调用的滚动窗口,四种检测器并行运行:
generic_repeat | |
known_poll_no_progress | |
ping_pong | |
global_circuit_breaker |
阈值设计为三级递进:warning(10) → critical(20) → circuit_breaker(30)。达到 critical 时向 Agent 注入循环警告消息(提示其已陷入重复调用状态),触发熔断时终止执行。这种机制让系统具备了"意识到自己犯错"的能力。
6.2 反思记忆模式
书中定义:通过语言强化学习,将失败经验转化为语义化的长期记忆。
OpenClaw 实证:OpenClaw 的 memory_write 工具允许 Agent 将重要的经验和教训写入持久化记忆。当 Agent 在某个任务中遇到困难并最终解决后,它可以主动将解决方案记录到记忆系统中,供未来类似场景检索使用。这形成了一个从"执行→反思→记忆→再执行"的闭环。
7. 协作模式:多 Agent 的交响
协作模式将单体 Agent 扩展为分布式的多 Agent 系统,通过合理的任务分发与消息路由实现整体能力的跃升。本章讨论委托模式与路由模式的工程设计。
7.1 委托模式
书中定义:通过"分而治之",有效缓解单体 Agent 上下文窗口限制和注意力分散导致的能力瓶颈。
OpenClaw 实证:OpenClaw 的子 Agent 编排是委托模式最完整的工程实现。其推送式(Push-based)设计与传统轮询式有本质区别:
父 Agent 调用 subagents(action=spawn, task=..., mode="run"|"session")
├─ 校验深度限制(默认 3 层)
├─ 分配子会话 sessionKey 和 runId
├─ 异步非阻塞调用 Gateway
└─ 子 Agent 完成后,结果自动注入父 Agent 的下一次推理上下文关键设计决策:
• 推送而非轮询:子运行结束后主动通告父 Agent,避免轮询浪费 • 深度限制:防止无限递归派生 • 沙箱继承:子 Agent 可继承或要求父 Agent 的沙箱配置 • 完成通告包含丰富元数据:最终回复、工具摘要、结果状态、运行时长
7.2 路由模式
书中定义:以"星形网络"为核心,构建去中心化的生态,优化任务流转效率。
OpenClaw 实证:OpenClaw 的消息路由系统(src/routing/)实现了精确的七级优先级路由链:
Peer 级别 → Parent-Peer → Guild+成员角色 → Guild 级别 → Team 级别 → Account/Provider 级别 → Channel 默认 → 全局默认Gateway 作为中心枢纽("星形网络"的中心节点),将来自数十个渠道(Telegram、Discord、Slack、WhatsApp、Signal、iMessage等)的消息,基于确定性的路由规则分发到对应的 Agent + 会话对。这种无状态、基于规则的设计确保路由结果可预测、可重放。
8. 从模式到系统:OpenClaw 的架构哲学
回顾 OpenClaw 的 10 大架构原则,我们可以看到 Agent 设计模式如何在系统层面融合为一个有机整体:
结语:熵的园丁
正如黄佳在后记中以"熵的园丁"为喻——Agent 工程师的角色不是构建一台精密机器,而是培育一个能自组织、能演化的生态系统。21 个设计模式不是僵化的模板,而是一套"可复用的治理语法",帮助我们在不确定的大模型之上构建可靠的系统。
OpenClaw 的实践表明:当这些模式被正确地工程化——从分层记忆的 Token 精算,到委托模式的推送式编排,再到工具循环检测的自我修正——Agent 系统不仅能"工作",还能在复杂、多渠道、长运行的真实场景中稳健地工作。
这或许就是 Agent 设计模式最大的价值:将"概率性智能"重新锚定在"可预期、可治理、可演进"的工程轨道上。