原力注入

Agent 设计模式:从理论到工程落地——以 OpenClaw 架构为实证

Agent 设计模式:从理论到工程落地——以 OpenClaw 架构为实证

引言:为什么 Agent 需要设计模式?

1994 年,GoF(Gang of Four)提出了 23 种经典设计模式,为软件工程提供了可复用的解决方案。三十年后的今天,当软件范式从"确定性结构"向"概率性智能"演进,设计模式再一次成为工程师的刚需——但这一次,模式的主角从对象和类变成了能感知、会推理、可行动的 AI Agent。

黄佳在《Agent 设计模式:图解可复用智能体架构》一书中系统梳理了 21 个核心 Agent 设计模式,围绕感知、记忆、推理、行动、反思、协作六大主轴展开。这些模式并非纸上谈兵——我们可以在 OpenClaw(一款本地优先的个人 AI 助手平台)的架构设计中找到它们的工程化实证。

本文将以书中的六大模式类别为经,以 OpenClaw 的实际架构为纬,展开一次理论与实践交织的深度探讨。

Image

1. 五大设计原则:Agent 工程的根基

在进入具体模式之前,书中提出了五条贯穿全书的设计原则,这些原则同样可以在 OpenClaw 的架构决策中找到呼应:

设计原则
核心含义
OpenClaw 中的体现
目标优先
从"要达成什么目标"出发,而非先考虑"能调用什么工具"
Pi Agent 的编排入口 agent-command.ts 将一次运行视为对调用方无状态的操作,目标驱动整个执行流
上下文为王
真正决定 Agent 行为的是上下文工程与记忆治理
系统提示词模块化组装(~700 行),上下文压缩系统(compaction.ts)保证长会话质量
显式反馈
反馈与反思内建于系统设计,而非事后补救
工具循环检测四种检测器并行运行,达到阈值时主动注入警告
渐进自治
在安全护栏内逐步提升自治能力,保留人类介入权
子 Agent 编排设深度限制(默认 3 层),沙箱策略逐级继承
对齐与护栏
伦理、安全、合规深度嵌入结构与协议
SSRF 防护、文件名消毒、PII 脱敏、Owner ID 哈希防注入

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 不是基于有限上下文猜测,而是主动发起搜索、查阅记忆,然后综合信息做出回应——这正是主动感知的行为体现。


本书购买地址:

Image



3. 记忆模式:打破上下文窗口的边界

记忆模式解决的核心问题是如何突破 LLM 上下文窗口的物理限制,让 Agent 具备持续感知历史的能力。本章涵盖分层记忆、RAG 检索增强和情节记忆三种模式。

3.1 分层记忆模式

书中定义:突破 LLM 上下文窗口的物理限制,通过分层存储和动态换页实现理论上无限的记忆容量。

OpenClaw 实证:OpenClaw 的上下文窗口管理(compaction.ts)是分层记忆模式的精确工程实现。当会话 Transcript 接近模型上下文限制时:

  1. 1. 通过 Token 估算检测阈值(contextWindowTokens × 0.4 × 1.2)
  2. 2. 按 Token 份额将历史切分为 N 块
  3. 3. 调用 LLM 对每块生成摘要并合并
  4. 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. 1. Reasoning:基于上下文和历史推理下一步行动
  2. 2. Acting:调用工具(exec、read、write、web_search 等)
  3. 3. Observing:接收工具返回结果,将观察纳入下一轮推理

工具调用的四阶段流水线(来源→策略过滤→Schema 规范化→Hook 包装)确保每次行动都在安全且规范的框架内执行。

5.2 工具编排模式

书中定义:通过构建标准化接口与智能化选择机制,让 Agent 灵活调度海量外部能力。

OpenClaw 实证:OpenClaw 的工具链架构(pi-tools.ts)是工具编排模式的教科书级实现。工具注册经过四个阶段:

  1. 1. 来源收集:codingTools + createOpenClawTools + 渠道专属工具
  2. 2. 策略过滤:白名单/黑名单、Owner-only 策略、消息/模型提供商策略
  3. 3. Schema 规范化:针对不同模型提供商(Claude、Gemini、xAI)做兼容性适配
  4. 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
相同工具+参数重复 N 次
known_poll_no_progress
"检查"类工具循环且无状态变化
ping_pong
两个工具交替出现(A→B→A→B…)
global_circuit_breaker
总调用次数超过 30

阈值设计为三级递进: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 设计模式
本地优先
对齐与护栏原则(数据主权)
插件优先
工具编排模式(标准化接口)
单一构建图
架构层面的一致性保证
多 Provider 容错
自适应策略模式
全渠道统一路由
路由模式
压缩安全与标识符保留
分层记忆模式
防御性媒体处理
多模态融合模式 + 安全护栏
无状态规则路由
路由模式(确定性分发)
分层可观测性
反思模式(系统级自我感知)
多目标部署
渐进自治原则(灵活的隔离粒度)

结语:熵的园丁

正如黄佳在后记中以"熵的园丁"为喻——Agent 工程师的角色不是构建一台精密机器,而是培育一个能自组织、能演化的生态系统。21 个设计模式不是僵化的模板,而是一套"可复用的治理语法",帮助我们在不确定的大模型之上构建可靠的系统。

OpenClaw 的实践表明:当这些模式被正确地工程化——从分层记忆的 Token 精算,到委托模式的推送式编排,再到工具循环检测的自我修正——Agent 系统不仅能"工作",还能在复杂、多渠道、长运行的真实场景中稳健地工作。

这或许就是 Agent 设计模式最大的价值:将"概率性智能"重新锚定在"可预期、可治理、可演进"的工程轨道上。

Image

Image