原文链接:https://bibek-poudel.medium.com/how-openclaw-works-understanding-ai-agents-through-a-real-architecture-5d59cc7a4764

原文发布于25年2月,可能存在一定信息滞后。

TL;DR

OpenClaw 是一个开源的个人 AI 智能体,在 2026 年初迅速突破了 10 万颗 GitHub Star。通过剖析它的构建方式——网关(Gateway)、智能体循环(Agentic Loop)、技能(Skills)、MCP 以及记忆系统——我们可以掌握当今所有主流 AI 智能体背后的核心模式。

核心要点

OpenClaw 的本质

OpenClaw 不是聊天机器人。它是一个运行在你的机器(或 VPS)上的本地网关进程。这个网关连接到你已经在用的消息平台,把每一条传入消息路由给一个由 LLM 驱动的智能体。智能体不只是回复文字——更重要的是,它能在现实世界中采取实际行动。

你可以接入任何你想用的模型的 API Key:Claude、GPT、Gemini,或者通过 Ollama 运行的完全本地化模型。OpenClaw 与模型无关。

乍一看它像个智能消息助手,底层其实是一个用于 AI 智能体的本地编排平台。

网关:系统的控制平面

OpenClaw 中的一切都流经一个叫做 Gateway(网关) 的单一进程。官方文档将其描述为会话、路由和通道连接的”单一事实来源”——可以把它理解为整个系统的神经中枢。

网关通常以长期运行的后台进程形式存在(Linux 上通过 systemd,macOS 上通过 LaunchAgent)。客户端通过 WebSocket 连接到配置的绑定地址,默认为 ws://127.0.0.1:18789。

网关负责路由、连接、身份验证和会话管理;Agent Runtime(智能体运行时)负责推理和执行。这种关注点分离是有意为之的,也至关重要。

智能体循环(Agentic Loop)

智能体循环是智能体的完整运行过程:接收输入 → 组装上下文 → 模型推理 → 工具执行 → 流式回复 → 持久化。

上下文组装:在模型看到你的消息之前,智能体运行时会先组装一个上下文包。系统提示词由以下四部分构建:

  • OpenClaw 基础提示词:智能体始终遵循的核心指令
  • 技能提示词:一份精简的可用技能列表(名称、描述、路径),告知模型当前有哪些技能可用
  • 引导上下文文件:提供环境级上下文的工作区文件
  • 单次运行覆盖项:为特定任务注入的额外指令

模型推理:组装好的上下文会作为标准 API 调用发送给你配置的提供商。OpenClaw 在这里处理几个重要细节:强制执行模型特定的上下文长度限制,并维护一个压缩预留——即为模型回复预留的 token 缓冲区。

工具执行:LLM 响应时,只会做两件事之一:输出文字回复(本轮结束)或请求工具调用。工具调用是指模型以结构化格式输出类似这样的内容:“我想用这些参数运行这个工具。”

OpenClaw 的智能体运行时会拦截该请求、执行工具、捕获结果,并将其作为新消息反馈回对话。模型看到结果后再决定下一步——可能继续调用工具,也可能最终给出回复。

这个循环叫做 ReAct 循环(Reason + Act 的缩写)。它是智能体 AI 的核心定义模式,也是智能体与聊天机器人的本质区别。

技能(按需加载指令)

技能(Skill) 是一个包含 SKILL.md 文件的文件夹。这个 Markdown 文件里有自然语言指令、示例,有时还有工具配置,告诉智能体如何处理特定领域。

关键点:OpenClaw 并不会把所有技能的全文都注入到系统提示词里。上下文组装阶段只会注入一份精简的技能列表,本质上就是名称、描述和文件路径。模型读取这份列表后,当它判断某个技能与当前任务相关时,才会按需加载那个 SKILL.md 的全文内容。

这是一个重要的架构区分:模型不是在被动接收指令,而是主动决定去查阅哪些技能并按需加载。上下文窗口是有限资源,这种设计让基础提示词始终保持精简,无论安装了多少技能。

MCP(集成外部工具)

一些 OpenClaw 部署会将 MCP 服务器 作为标准化工具层接入,将智能体连接到 Google 日历、Notion、Home Assistant 或自定义 API 等外部服务。

基本思路:与其把每个外部集成都硬编码进去,不如让 MCP 服务器通过定义好的 Schema 暴露一组工具。智能体发现哪些工具可用,用标准请求格式调用它们,再接收结构化的返回结果。

智能体永远不直接接触底层服务,它只调用标准接口,MCP 服务器处理其余的一切。这带来了工具可移植性:为某个兼容 MCP 的智能体构建的工具,可以复用于其他说同一种协议的系统。

记忆系统

LLM 本质上是无状态的,每段新对话都从一张白纸开始。那么,如何让智能体跨越数天乃至数周,记住你的偏好、正在进行的项目和沟通风格?

OpenClaw 的答案刻意保持简单。记忆存储在纯 Markdown 文件里,位于智能体工作区,默认路径为 ~/.openclaw/workspace。

  • AGENTS.md ← 智能体配置与指令
  • SOUL.md ← 个性、偏好、沟通风格
  • MEMORY.md ← 长期事实与摘要
  • HEARTBEAT.md ← 主动任务清单
  • memory/ ← 每日日志

每日日志(memory/YYYY-MM-DD.md)是持久的、只能追加的文件,记录每天发生的事情。重要的是,这些内容不会在每轮对话中自动注入到上下文,而是由智能体在需要时通过记忆工具按需检索。

MEMORY.md:存储智能体从你这里了解到的长期事实:比如”用户偏好简洁的回复”、“用户的技术栈是 Next.js 和 Supabase”、“周五不安排会议”。

SOUL.md:定义智能体的个性、名字和沟通风格,让它感觉像是你的专属助手,而不是一个通用机器人。

当加载所有历史记录即将超出上下文窗口时,OpenClaw 会运行压缩(Compaction)流程:将较早的对话轮次总结成压缩条目,在保留语义的同时减少 token 占用。

在记忆检索方面,OpenClaw 支持基于嵌入(Embedding)的语义搜索,可选择通过 sqlite-vec SQLite 扩展加速。

没有外部数据库,没有 Redis,没有 Pinecone。只有 SQLite 和 Markdown 文件。

心跳(主动行为机制)

OpenClaw 有一个有趣的地方:它不只是坐等你的消息。它会运行一个心跳(Heartbeat)——一个默认每 30 分钟触发一次的定时任务。

每次心跳触发时,智能体会读取 HEARTBEAT.md,这是一份它需要主动检查的任务清单。它判断当前是否有事项需要处理:如果有,就采取行动并可能给你发消息;如果没有,就回复 HEARTBEAT_OK,网关会将其拦截,不会推送给你。

这正是让 OpenClaw 显得主动而非被动的模式。其架构概念是基于 cron 触发的智能体循环:智能体不再只响应人类输入,而是被定期唤醒,主动评估自己的任务列表。

核心模式总结

大多数现代智能体框架,在不同的 API 和抽象之下,共享着相同的核心模式:

  1. 网关或编排层:负责路由和会话管理
  2. 上下文组装步骤:在推理前封装历史记录、记忆和指令
  3. ReAct 循环:模型推理、调用工具、整合结果
  4. 工具层:赋予智能体与现实世界交互的能力
  5. 技能或提示词系统:提供特定领域的专业能力,按需加载
  6. 记忆系统:提供跨会话的连续性
  7. 调度机制:实现主动行为

这种透明度既是它最大的工程美德,也是它最大的安全隐患。一个能访问你的文件、浏览器、邮件和消息应用的智能体,能力非常强大。