乐于分享
好东西不私藏

OpenClaw源码分析

本文最后更新于2026-03-12,某些文章具有时效性,若有错误或已失效,请在下方留言或联系老夜

OpenClaw源码分析

初看 OpenClaw 的源码(主要是 TypeScript 实现),你可能会觉得它像是一个巨大的“模型包装器”,但深入进去你会发现,它在状态管理、持久化记忆和异步任务编排上的设计思想,其实和我们搞分布式系统、微服务治理的逻辑高度契合。
我们可以把 OpenClaw 的源码架构拆解为四个核心支柱:网关层、推理引擎、记忆仓储、执行技能。

1. 架构全景图:四层模型循环
OpenClaw 的核心逻辑不是传统的 Request-Response,而是一个 Autonomous Loop(自主循环)。

1.1 Gateway(网关层):多模态 I/O 适配器
在源码中,packages/gateway 是整个系统的“门户”。它不像我们平时写的 REST API 那么简单,它更像是一个消息总线。

多端挂载: 源码通过 Provider 模式适配了 WhatsApp、Telegram、Slack、Discord 等。
Session 隔离: 它通过 SessionManager 实现了会话隔离。每一个 DM(私聊)或 Group 都是一个独立的 Context,这在 Java 里就像是为每个用户维护一个带 TTL 的 ThreadLocal 或者分布式 Session。

1.2 Reasoning(推理层):大模型编排
这是“大脑”所在。它不是简单地调用一次 LLM API。
Megaprompt(超长提示词): 源码中你会发现极其复杂的 System Prompt,包含了对 Agent 身份、边界、工具使用规范的定义。
规划机制: 这里的核心是 ReAct(Reasoning and Acting)模式。它会不断循环:观察(Observe)-> 思考(Think)-> 行动(Act)。

2. 核心黑科技:Markdown 记忆系统
OpenClaw 宣称自己是“Local-first”,它的记忆系统设计非常有意思,完全摒弃了复杂的图数据库,走的是**“文件即数据”**的路线。

2.1 存储结构:Markdown Files All the Way Down
在 ~/.openclaw/workspace/ 下,所有记忆都存为 .md 和 .yaml 文件。
Senior Java 视角分析: 这种设计其实是为了 Git 可追踪性和透明度。对于 Java 开发者来说,这就像是把数据库表映射成了磁盘上的一个个 Log 文件,类似 LSM-Tree 的思想,但更易读。

2.2 检索算法:混合搜索(Hybrid Retrieval)
不要以为它只是简单的读文件。源码中引入了 SQLite FTS5 配合向量嵌入:
BM25 (30%): 传统的关键词匹配。
Vector Embeddings (70%): 基于语义的检索。
Compaction(压实策略): 这是一个亮点。当对话太长超过 Token 限制时,它会触发 compact 指令。源码里有一个专门的逻辑,先运行“Durable Notes”写入持久化笔记,再进行摘要压缩。这类似于 JVM 的 GC 过程,把不常用的旧对象(上下文)压缩或清理,保留存活的根对象。

3. Skills 系统:高权重的“特权外挂”
OpenClaw 的强大在于它的 Skills(技能)。
SKILL.md 规范: 每个技能就是一个目录,包含一个声明文件。

执行环境: 它可以直接调用你的终端、读写文件、甚至操控浏览器。
Java 版实现(SolonClaw): 如果你看 solonclaw 等 Java 实现版本,它是通过动态代理和反射将 Java 方法映射为 Agent 的 Tool。这和 Spring AI 的 Function Calling 机制异曲同工。

4. 深度痛点:安全性与“Vibe Coding”的隐患
必须指出 OpenClaw 源码中让人“心惊肉跳”的地方:
权限失控: 默认配置下,Agent 拥有非常高的系统权限(Terminal Access)。如果它被“提示词注入”(Prompt Injection),攻击者可以直接通过它删库、跑路或窃取 SSH Key。

WebSocket 风险: 之前的漏洞(CVE-2026–25253)显示,其 Gateway 的 WebSocket 鉴权逻辑在早期版本非常薄弱,容易被劫持。
状态不一致: 因为是文件存储,在高并发或者多 Agent 协作时,容易出现文件锁冲突或状态竞态条件(Race Condition)。

5. 总结:我们能学到什么?
分析完 OpenClaw,我觉得它给 Java 社区带来的思考是:
从面向对象到面向 Agent: 传统的 Service/DAO 模式正在被“感知-思考-执行”的 Loop 模式取代。
RAG 的极致简化: 不要一上来就搞向量数据库集群,Markdown + 本地 SQLite 向量插件在个人/中小型场景下有着极高的效能。

工程规范胜过算法: OpenClaw 能够火遍全球,不是因为它的模型多牛(模型是别人的),而是因为它把消息路由、上下文管理、工具链集成这些“杂活”干到了极致。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » OpenClaw源码分析

猜你喜欢

  • 暂无文章