万字拆解 OpenClaw:从 Gateway、Memory、Skills、多 Agent 到 Runtime
今天我们再深入一点从源头开始看看这个 Agent 是如何实现的和其他 Agent 有啥不同。但单纯按模块介绍容易显得零散所以我们回到最底层的问题当用户真的发来一条消息时OpenClaw 这个 Agent 系统内部到底是怎么跑起来的这件事其实比表面上看起来更重要。因为你只要真的把一条消息从头跟到尾就会发现 OpenClaw 跟普通聊天机器人、传统工作流系统、以及很多只会调工具的 Agent 框架差别并不在于它会不会聊天而在于它背后有一整套完整的运行链路消息接收、协议适配、路由分发、会话隔离、上下文组装、技能注入、流式执行、工具调用、持久化存储以及在复杂任务下的多 Agent 协作。为了让整篇文章更容易理解我们先假设一个典型场景在 钉钉 里发来一句帮我整理今天的重要邮件提炼待办并生成一份给老板的简报接下来我们就沿着这条消息看看它是如何从外部世界的一段文本最终变成一套真正被 Agent 执行起来的任务链路的。希望大家带着三个问题阅读此文OpenClaw 的整体架构设计到底是什么一条消息在系统中的完整执行路径是什么多 Agent 协作到底是怎么落地实现的OpenClaw 怎么跑的很多人第一次看 OpenClaw很容易把它理解成一个能聊天、能调工具、还能帮你跨平台干活的智能助理。如果从工程实现的角度看OpenClaw 更像是一个围绕 Agent 构建出来的运行时网关系统Agent Runtime。它不是简单地把一句用户输入丢给大模型然后把输出再发回来而是把整个过程拆成了一条清晰的执行链路并在每个关键节点上做了工程治理。它的整体架构基本可以抽象成五层第 1 层用户接口层提供 CLI、Web UI、移动 App、WebSocket API 等入口把用户操作转成统一的内部请求。对用户来说可能只是网页里输入一句话或者在 钉钉、飞书 里发一条消息但对系统来说这些入口最终都要收敛成统一的内部消息模型。第 2 层Gateway 核心层这是 OpenClaw 的核心运行时。它负责连接管理、请求接入、配置热加载、健康监控等基础治理工作。换句话说真正让整个系统常驻运行、能接消息、能回消息、能维持状态的不是单个 Agent而是这个 Gateway。第 3 层消息处理层这是业务逻辑真正流转的核心包括Agent 执行器路由系统会话管理媒体处理出站投递…一条消息从进入系统到最终响应最核心的执行动作都发生在这一层。第 4 层扩展与插件层所有可插拔的扩展都在这里通道插件对接 钉钉/飞书、Telegram、WhatsApp、Slack 等技能工具系统sub Agent 机制也正因为有这一层OpenClaw 才能不断往上接新通道、往下接新工具、往内部接多 Agent 协作。第 5 层基础设施层这一层为整个系统提供通用能力包括配置与密钥管理结构化日志定时任务事件总线记忆检索沙箱安全这部分平时不太显眼但没有它前面几层都跑不稳。从数据流转的视角看一条消息的完整路径其实很清楚消息源 → 协议适配 → 路由分发 → 会话构建 → Agent 执行 → 响应投递 → 状态持久化所以接下来我们就沿着这条路径往下看。消息进门先回到刚才那个例子。帮我整理今天的重要邮件提炼待办并生成一份给老板的简报从用户视角看这就是一条普通消息。但从系统视角看问题马上就来了钉钉 的消息格式和 飞书 不一样Discord 和 WhatsApp 不一样Telegram 和内部 WebSocket 通道也不一样。有的平台带 message_id有的平台叫 thread_ts有的消息体里还嵌着复杂的结构附件、引用、线程信息各不相同。如果核心逻辑直接去处理这些异构数据代码很快就会变成一团乱麻。所以 OpenClaw 的第一步不是让 Agent 去理解任务而是先做 协议适配。每个外部渠道都有一个专属适配器插件把原始消息清洗成统一的内部对象MsgContext。大概长这样interface MsgContext { Body: string; BodyForAgent?: string; BodyForCommands?: string; RawBody?: string; SessionKey: string; Provider: string; Surface?: string; ChatType?: direct | group; SenderId?: string; SenderName?: string; SenderUsername?: string; OriginatingChannel?: string; OriginatingTo?: string; AccountId?: string; MessageThreadId?: string; CommandAuthorized?: boolean; MessageSid?: string; GatewayClientScopes?: string[];}这里最关键是统一抽象。也就是说不管消息是从哪个犄角旮旯来的进了网关之后都会变成这个标准格式。后面的流程只需要对着 MsgContext 干活完全不用操心来源平台。web端消息适配这一步把平台差异隔离在了网关入口而不是污染到整个 Agent 执行链路里。所以如果以后要接一个新通道也不需要改核心逻辑通常只要做四件事在 Registry 中添加通道元数据实现对应的 ChannelPlugin在插件加载器里注册新插件更新配置 Schema 和文档测试整个过程无需改核心系统代码这就是插件化设计真正有价值的地方。PS这里要特别提一句OpenClaw很多代码都是工程产物如果大家真的想了解他的设计核心只需要做一个渠道就好了就会少很多工程策略比如这里的收束信息信息处理所有封装好的 MsgContext最后都会流入一个统一关卡dispatchInboundMessage。这一步的作用不是做复杂业务而是把所有入站消息的处理入口收敛成同一个总开关。源码大概是这样export asyncfunction dispatchInboundMessage(params) {const finalized finalizeInboundContext(params.ctx);returnawait withReplyDispatcher({ dispatcher: params.dispatcher, run: () dispatchReplyFromConfig({ ctx: finalized, cfg: params.cfg, dispatcher: params.dispatcher, replyOptions: params.replyOptions, replyResolver: params.replyResolver, }), });}从结构上看它先做了两件事1. 最终化入站上下文也就是 finalizeInboundContext。这个步骤主要负责补全缺失字段标准化格式统一上下文表示它的意义在于前面虽然已经做了通道适配但不同通道在细节上仍可能有不一致的地方所以在真正进入核心处理逻辑前还要再做一次最终收束。2. 交给回复分发器继续往下跑这一步之后消息才真正开始进入 OpenClaw 的处理主干。也就是说到这里为止系统干的还不是“理解任务”而是先确保这条消息在格式上是可被系统安全处理的。路由系统消息一进入主链路OpenClaw 不会立刻把它扔给模型而是先做三类关键判断要不要处理有没有重复该交给哪个 Agent这一步非常像真实系统里的“前置治理层”。去重先防止消息被重复处理真实生产环境里消息重复投递是非常常见的。Webhook 可能重试平台可能重复推送网络抖动也可能导致同一条消息被系统收两次。如果不做幂等控制最坏的结果不是“多回复一句”而是同一任务被执行两次同一工具被调用两次同一个外部 API 被重复触发同一笔成本被重复消耗所以 OpenClaw 会为每条消息生成一个幂等键也就是 idempotencyKey。核心逻辑由 buildInboundDedupeKey 控制export function buildInboundDedupeKey(ctx: MsgContext): string | null { const provider normalizeProvider( ctx.OriginatingChannel ?? ctx.Provider ?? ctx.Surface ); const messageId ctx.MessageSid?.trim();if (!provider || !messageId) { return null; } const peerId resolveInboundPeerId(ctx);if (!peerId) { return null; } const sessionKey ctx.SessionKey?.trim() ?? ; const accountId ctx.AccountId?.trim() ?? ; const threadId ctx.MessageThreadId ? String(ctx.MessageThreadId) : ;return [provider, accountId, sessionKey, peerId, threadId, messageId] .filter(Boolean) .join(|);}生成格式大概是{provider}|{accountId}|{sessionKey}|{peerId}|{threadId}|{messageId}比如whatsapp||main:1234567890|msg_123discord|default|agent:assistant:123|987654321||11223slack|default|main:default|U12345678||C12345678都会变成自己的唯一标识。只要缓存里发现这个键已经处理过系统就直接返回避免重复调用昂贵的 LLM API默认 TTL 是 20 分钟。拦截有些消息不是给 Agent 干活的而是给系统发控制命令的所以除了去重系统还会做一些快速拦截。例如用户输入 /stop那它就不该继续往下跑任务理解和工具调用而应该立刻中断对应的 AbortController强行停止正在执行的 Agent 任务。这说明 OpenClaw 不是一个单纯的“问一句答一句”的壳它本质上还是一个长期运行的任务系统所以控制命令是它必须支持的一类特殊输入。快速响应对于 Web 请求系统通常还会先通过 WebSocket 返回一个 started 状态然后再异步执行后续处理。这一步看起来小但很重要。因为模型思考、工具调用、网络请求都可能很慢如果前端一直等最终结果很容易超时也很容易让用户产生“卡死了”的感觉。所以从体验上看OpenClaw 会先让你知道任务已经进入执行状态了。Agent 登场去重和拦截只是前置治理真正进入业务之前系统还得回答一个根本问题**这条消息应该由谁来处理**这就是路由系统的工作。OpenClaw 的路由根据通道类型采用两套不同策略。Web 内部通道Web 客户端通常可以直接传 sessionKey格式一般是{agentId}:{scope}例如assistant:main在这种情况下系统可以直接使用这个会话键不需要再查绑定规则。外部通道但像 Slack、WhatsApp、Discord 这类外部通道客户端本身并不知道系统内部的会话组织方式所以必须通过配置里的绑定规则来决定该交给哪个 Agent。例如{ bindings: [ { agentId: assistant, match: { channel: whatsapp, accountId: my_bot } }, { agentId: vip-assistant, match: { channel: whatsapp, peer: { id: 1234567890 } } } ]}每个绑定规则都可以根据不同维度匹配通道标识账户 ID对等体用户或群组Discord 服务器 ID团队 ID角色列表系统会按优先级从高到低匹配精确对等体匹配Discord 服务器 角色匹配Discord 服务器匹配通道账户级匹配通道级匹配默认 Agent所以回到我们的例子这条钉钉消息先被识别为来自哪个通道、哪个账号、哪个用户、哪个频道然后系统根据配置决定最终是由 assistant 来处理还是由某个专门的 support-agent、vip-assistant、coder 来处理。唯一会话键一旦 Agent 确定下来系统就会为这次对话构建 sessionKey格式一般是{agentId}:{scope}比如assistant:mainassistant:whatsapp:direct:1234567890assistant:discord:channel:987654321support:telegram:group:-1001234567890这个键非常重要因为它后面承担两件事会话隔离 与 并发控制。也就是说用户看到的只是一句消息但系统真正管理的其实是这句话属于哪个 Agent 的哪一条会话。PS这一段处理逻辑其实挺复杂的我们这里不展开车道机制到这里消息已经完成了路由知道该交给哪个 Agent也知道自己属于哪个会话。但系统仍然不会直接开跑。原因很简单如果同一会话里两条消息同时跑很容易出现上下文错乱。比如用户前一秒说帮我整理今天的重要邮件下一秒又说顺便把待办改成按优先级排序如果两条消息并行处理就可能出现第二条先完成第一条后完成上下文互相污染输出顺序颠倒工具调用状态不一致所以 OpenClaw 设计了 会话车道机制。会话级车道相同 sessionKey 的消息必须串行执行确保上下文连贯。这一步本质上是在保证一个会话在任意时刻只有一条消息真正占用它的执行上下文。这样你才能把同一条对话当成“连续对话”来理解而不是并发乱流。全局级车道除了会话级串行系统还可以配置全局最大并发数。如果整个系统同时进来太多消息超出容量就先进入等待队列。这相当于两层节流会话层防止同一条对话乱序系统层防止整个运行时被打爆这一步很有 OpenClaw 的工程味道。它不是单纯依赖模型能力而是在运行时层面主动治理资源。开始执行当消息终于排到自己真正进入 Agent 执行阶段时最重要的一件事来了系统要为模型组装完整上下文。大家马上会发现要“爆炸”了…很多人理解 Agent 时容易想成这样用户输入一句话模型理解一下调用几个工具结束但实际在 OpenClaw 里模型看到的不是单独一句用户输入而是一整套被拼装好的上下文环境。组装顺序大致是系统提示词 → 技能提示 → 对话历史 → 当前消息这个顺序很重要因为它实际上定义了模型的认知层级先知道自己是谁再知道自己能做什么再知道之前发生了什么最后才看用户刚刚说了什么系统提示词系统提示词的职责是定义 Agent 的角色、行为规则和安全边界。OpenClaw 这里做得很工程化它不是把一整段 prompt 硬写死而是通过 Bootstrap 文件系统来注入。大概会把这些文件装进上下文AGENTS.md定义 Agent 行为规则和工具使用指南SOUL.md定义个性和人格TOOLS.md工具使用说明IDENTITY.md身份标识信息USER.md用户偏好HEARTBEAT.md心跳检测提示BOOTSTRAP.md初始化引导MEMORY.md / memory.md长期记忆这些文件位于工作区目录默认是 ~/.openclaw/workspace。也就是说在真正回答你“整理邮件”之前模型先会被告知我是谁我该遵守什么规则我能用哪些工具这个用户有什么偏好这个系统有哪些长期记忆这和普通聊天机器人有个本质区别它不是每次都从零开始聊而是从一个被预先塑形过的 Agent 身份出发。记忆召回规则在 src/agents/system-prompt.ts 里系统提示词里还会显式包含记忆召回规则## Memory RecallBefore answering anything about prior work, decisions, dates, people, preferences, or todos:run memory_search on MEMORY.md memory/*.md; then use memory_get to pull only needed lines.If low confidence after search, say you checked.这段话很有意思。它不是告诉模型“你要尽量记住”而是告诉模型碰到和历史决策、偏好、待办、日期等相关的问题时先查记忆再说话。这就把“记忆”从模型模糊的上下文残留升级成了一种显式检索机制。大小限制因为这些文件每次运行都会消耗 tokens所以系统会限制单文件最大字符数总注入字符数上限是否显示截断警告这说明 OpenClaw 的思路不是把所有东西都喂给模型原因很简单系统提示词本身也要受到上下文预算约束。核心Skills 载入系统提示词组装完之后接下来要做的就是 **技能提示注入。**这部分很关键因为很多人谈 OpenClaw 时最容易误解 Skills。从源码实现上看Skills 并不是简单的一堆函数列表。它更像是先把一组可用能力的使用说明、调用边界、适用场景告诉模型再在模型决定调用时去连接真实的工具实现也就是说Skills 首先是让 Agent 知道自己该怎么用工具的方法包。技能加载流程大致分四步发现系统会从多个来源扫描技能文件工作区用户全局目录内置目录插件目录过滤不是所有发现到的技能都能直接用系统会根据多个条件过滤平台消息通道发送者权限黑白名单配置安全检查OpenClaw 对 Skills 做了三层策略管道Profile 过滤Sandbox 隔离Subagent 继承也就是说一个技能能不能被调用不只是看它存不存在还要看当前 Agent 有没有权限、安全边界允不允许、子 Agent 是否继承到对应能力。生成提示词最后系统会把可用技能描述格式化为文本注入系统提示词供 LLM 在需要时调用。所以在我们的案例里当用户说“帮我整理今天的重要邮件提炼待办并生成给老板的简报”时模型不是凭空想象自己能做什么而是会在这套技能描述中判断有没有邮件处理相关能力有没有摘要生成能力有没有文档组织能力是否需要进一步调用子 Agent这才是 Skills 真正的作用。记忆系统系统提示词和 Skills 搞定后接下来才轮到对话历史和当前消息。会话历史OpenClaw 采用双层存储管理会话历史。一、轻量索引sessions.json里面存的是元数据例如会话 ID会话键转录文件路径最后更新时间模型覆盖配置技能快照位置通常在~/.openclaw/agents/{agentId}/sessions/sessions.json内容如下二、重度转录{sessionId}.jsonl记录完整的对话历史采用 JSON Lines 格式每行一个 JSON 对象便于流式读取和追加。文件同样位于 agents 目录下的 sessions 文件夹中。历史消息加载系统从转录文件中读取历史时会做几件事从最新消息向前读取指定token数量的轮次过滤掉不需要的消息类型保证时间顺序正确估算历史消息占用的 token所以在真正调用模型前系统已经在做一件很现实的事情这次上下文预算里到底还能放多少历史。当前消息当前消息作为上下文最后一部分注入包括用户输入文本发送者信息时间戳元数据通道信息会话键这也意味着模型看到这次请求时不是只看到一句新消息而是站在一整条会话上下文的尾部来理解它的语义。记忆压缩一旦把系统提示词、技能提示、历史记录、当前消息全塞进去另一个问题马上就来了上下文总有一天会爆。所以 OpenClaw 这里专门做了一整套防爆机制。历史轮次限制系统会根据通道配置限制保留的历史轮数从最新消息开始往前扫描丢弃更早的部分。这是一层最简单也最直接的防线。工具结果截断工具调用结果可能非常大例如长文本大 JSON多页日志大段网页内容如果一股脑全塞回上下文很容易直接撑爆窗口。所以系统会自动截断工具输出并判断是否要保留尾部关键信息。如果尾部有错误信息或 JSON 结构就会采取“头尾保留”策略否则只保留开头。自动压缩当上下文窗口接近模型限制时系统会把早期历史分块然后为每块生成摘要用摘要替换早期历史同时保留最近几轮完整对话。摘要生成时要求保留活跃任务操作进度用户最后请求已做决策后续依赖信息所以这不是机械裁剪而是一种语义压缩。容错与降级如果压缩后仍然超限系统还会继续尝试切换到上下文更大的模型降低 Agent 的 thinking 级别最终回退为提示用户重置会话这说明 OpenClaw 不是把上下文管理交给模型自己而是把它视为运行时层面的硬约束问题。PS从这里大家就可以看出如果没有最近一年的模型上下文极速增长根本不可能有 OpenClaw 这类 Agent 啥事记忆系统怎么工作的除了会话历史OpenClaw 还单独维护两类记忆一、长期记忆文件名通常是MEMORY.mdmemory.md用于存常青知识例如项目规则API 文档设计决策长期偏好这类记忆在 Agent 启动时通过 Bootstrap 系统直接注入系统提示词。二、每日记忆存放在memory/YYYY-MM-DD.md用于记录时效性内容例如每日纪要当天待办临时决策会议记录这类记忆不直接注入提示词而是通过记忆搜索工具按需检索并且会带时间衰减权重越新的内容权重越高。三、记忆什么时候写入长期记忆通常由用户或 Agent 通过编辑工具手动维护。而每日记忆则会通过 Memory Flush 机制自动触发。触发条件会话 token 数接近上下文窗口上限默认软阈值 4000 tokens会话转录文件大小超过阈值默认 2MB当系统发现会话快接近压缩阈值时会先发一个特殊提示给 AgentPre-compaction memory flush.Store durable memories now (use memory/YYYY-MM-DD.md; create memory/ if needed).IMPORTANT: If file already exists, APPEND new content only and do not overwrite existing entries.也就是说在压缩发生前系统会先提醒 Agent把这轮对话中值得长期保留的信息先沉淀进每日记忆。这相当于在上下文压缩前先打一层记忆护城河。真的执行了到这里上下文已经准备好Agent 才真正开始运行。在我们的例子里这时候模型可能会判断当前任务不是普通问答它是一个执行型任务里面包含邮件整理、待办提炼、简报生成三类需求需要调用相应技能和工具如果任务过于复杂可能还要拆给子 Agent这个阶段最核心的三件事是流式响应OpenClaw 使用 SSE 或 WebSocket 做流式输出。当 LLM 开始生成内容时系统会把内容块实时推送给客户端让用户立即看到输出开始而不是等全部完成后一次性返回。这能明显降低感知延迟也更适合长任务。工具调用当 LLM 判断需要调用工具时系统会暂停文本流执行对应工具例如读取文件调 API搜索记忆访问邮件执行脚本执行完后再把结果反馈给 LLM让它继续推理。对用户来说看到的可能只是正在执行工具或者一段中断后的继续输出但对系统来说这其实是一次完整的推理—执行—再推理循环。错误处理与模型回退真实生产环境里出错是常态。所以 OpenClaw 做了多级回退策略限流指数退避或切换备用模型认证错误轮换多个 API Key超时错误降低 thinking 级别或换更快模型上下文溢出触发压缩或换更大上下文模型这部分很能说明 OpenClaw 的工程取向它不假设模型永远稳定而是假设运行过程随时可能失败所以提前把兜底路径都铺好。任务完成当 Agent 终于处理完整理今天的重要邮件提炼待办并生成给老板的简报这件事后系统仍然不能立刻算结束。它还要做三类收尾动作响应投递回复分发器会根据消息上下文中的来源通道和目标地址调用对应通道的出站适配器发送消息。如果配置了跨通道回复也可以覆盖原始目标。例如在 钉钉 发起任务最终把结果发回 WhatsApp这一点非常像智能网关的思路而不只是聊天框里的模型。但还是那句话OpenClaw 这块的源码不适合初学者初学者直接搞一个 IM 渠道就好OpenClaw 很多工程代码就是为了兜底这些代码量全部加剧了学习成本。会话持久化系统会把这次交互的完整记录写下来更新 sessions.json 里的元数据把用户消息、AI 回复、工具调用等内容追加到 JSONL 转录文件这样下一次会话继续时系统才能知道之前发生过什么。资源释放与清理执行结束后还要做释放会话车道锁释放全局并发配额标记幂等键为已处理定期清理过期会话归档旧转录轮换大文件这一步很像一个长期运行系统的善后逻辑没有它系统迟早会越来越重。记忆索引既然记忆是 Markdown 文件系统就还要解决一个问题怎么让 Agent 高效查它们。OpenClaw 的做法是给记忆系统单独建索引索引数据库通常位于~/.openclaw/memory/index.db里面大致会有这些表fileschunkschunks_vecchunks_ftsembedding_cache也就是同时支持文件元数据管理文本分块向量检索全文搜索向量缓存为了保证文件和索引同步系统还会做三种同步机制文件监视器自动触发定期同步增量同步必要时还会全量重建索引创建临时数据库遍历记忆文件分块生成 embedding建全文索引最后原子替换旧索引综上OpenClaw 的记忆并不是把 Markdown 当备忘录丢在那而是真把它做成了一层可检索、可维护的知识基座。多 Agent前面讲到这里其实已经是一条完整的单 Agent 执行链路了消息进门协议适配去重拦截路由分发会话排队上下文组装技能注入流式执行响应投递状态持久化如果任务简单到这里就闭环了。但现实问题是很多复杂任务并不适合由一个 Agent 单独完成。还是刚才那个例子帮我整理今天的重要邮件提炼待办并生成一份给老板的简报看起来一句话实际上可能包含至少三块工作筛选和归类邮件提炼关键待办组织成适合老板阅读的简报格式如果全让一个 Agent 一把抓它当然也能硬做但往往会出现上下文太重推理链过长工具调用太杂专业能力混在一起中间状态难管理所以 OpenClaw 在单 Agent 之上又做了 多 Agent 协作系统。多 Agent 的核心能力它实现了几件关键事情Agent 隔离动态任务分发层级协作生命周期管理安全边界控制也就是说主 Agent 可以根据任务需要临时创建一个或多个子 Agent把某些子任务交出去自己做总控和汇总。一个典型的多 Agent 流程在我们的案例里主 Agent 完全可能这么干先创建一个 research-agent 去筛重要邮件再创建一个 analysis-agent 去提炼待办和风险点最后由主 Agent 自己把这些结果整合成给老板的简报这时候多 Agent 就不再是抽象概念而是变成了一种很具体的任务拆解策略。创建 subAgent主 Agent 决定创建子 Agent 时通常会走 sessions_spawn 工具。系统先做一轮严格校验嵌套深度检查防止无限递归并发限制检查防止资源耗尽允许列表检查沙箱状态检查通过后系统会生成唯一子会话键例如 agent:{agentId}:subagent:{uuid}应用模型配置和 thinking 级别处理附件和上下文传递为子 Agent 生成专门的系统提示词例如# Subagent ContextYou are a subagent spawned by main agent for a specific task.## Your Role- You were created to handle: ${taskDescription}- Complete this task. Thats your entire purpose.- You are NOT main agent. Dont try to be.## Rules1. Stay focused2. Complete task3. Dont initiate4. Be ephemeral这个提示词不是在强化子 Agent 的人格而是在强调它的边界你不是主 Agent你就是来做这一个子任务的。结果返回子 Agent 完成任务后系统会触发生命周期事件读取输出结果经过通知队列判断目标是谁决定注入主 Agent 会话还是直接发给用户如果请求者是主 Agent那么结果通常会以内部事件的方式重新注入主 Agent 会话供主 Agent 下一轮推理时使用。于是整条协作链路就变成了主 Agent 接收用户任务主 Agent 拆子任务子 Agent 各自执行子 Agent 把结果回传主 Agent 汇总结果主 Agent 最终回复用户这个过程本质上就是一个层级化协作网络。配置继承OpenClaw 在 Agent 配置上采用三级继承机制Agent 级配置优先级最高全局默认配置次之代码默认值兜底例如某个 coding-agent 可以有自己的模型工作区可用工具子 Agent 策略沙箱模式而没有单独定义的部分再回落到全局默认值。这种设计让多 Agent 系统既灵活又不至于配置爆炸。OpenClaw 强在哪再回到最初那句话帮我整理今天的重要邮件提炼待办并生成一份给老板的简报那么它在 OpenClaw 里真正经历的大致过程其实是这样的钉钉原始消息进入系统通道插件把它适配成统一的 MsgContext网关做最终化处理系统检查去重、拦截控制命令、快速响应 started 状态路由系统根据绑定规则找到目标 Agent生成 sessionKey进入会话车道排队确保同一会话不乱序组装完整上下文系统提示词、Bootstrap 文件、Skills、历史记录、当前消息模型在技能描述和规则约束下开始推理过程中可能调用工具也可能 spawn 子 Agent子 Agent 完成后把结果回流给主 Agent主 Agent 生成最终答复回复分发器把结果投递回目标通道会话和转录被持久化记忆被更新索引同步资源释放执行闭环结束这样一看你就会发现OpenClaw 真正有价值的地方不是它能不能回答一句话而是它把一条消息从进入系统到完成执行做成了一条可治理、可扩展、可追踪、可恢复的Agent Runtime链路结语通过完整追踪一条消息的旅程我们可以更清楚地看到 OpenClaw 的几个核心设计原则。第一它是分层的。各层职责清晰从通道适配到执行治理再到基础设施边界都比较明确。第二它是运行时导向的。去重、会话车道、上下文压缩、错误回退、资源清理这些都说明它不是一个 把 prompt 包一层 UI 的玩具而是真在认真处理长期运行中的工程问题。第三它是可扩展的。通道插件、技能系统、子 Agent 机制、记忆索引都让它更像一个开放的 Agent 网关而不是一个封闭应用。第四它开始具备分布式协作的雏形。多 Agent 的出现意味着 OpenClaw 已经不满足于“一个模型处理一切”而是在朝任务拆解、层级协作、并行执行的方向发展。所以如果你问OpenClaw 到底是什么。我的回答会是它不是一个更会聊天的机器人也不只是一个会调工具的 Agent 壳。它更像是一个把消息入口、会话治理、上下文管理、技能调用、持久化存储和多 Agent 协作缝合在一起的 Agent Runtime Gateway而理解它最好的方式就是去开发一个 Mini-OpenClaw这也是我们正在做的。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】