


















最近OpenClaw(原moltbot)实在是大火了一把,有如当时DeepSeek的国内热潮。但是DeepSeek模型的训练、微调包括前端的数据集收集和清理等都不是一般人能负担的,而OpenClaw不仅代码开源,在Agent开发的工程技术上也提供了一些实践,由此引入了一波”养虾潮”。
早期Langchain,llamaIndex以及AutoGen等都封装了一系列工具调用、记忆机制、分块策略以及结构化输出等。
目前langchain团队有Deep Agents,LangGraph,LangSmith以及LangChain等开源框架,都与AI应用开发与部署相关。
但这些框架都是用于开发AI产品的,实际的AI应用又往往依附具体平台。OpenClaw在我看来的一个优势就是开源,使得其与多个IM系统通信(当然,前提是这些IM公司也愿意支持),更加实用。下面具体介绍其重要组件。
Gateway 是一个常驻后台的消息路由服务。它负责接收各个客户端的消息,例如QQ,微信,发送给Agent,然后再分发响应。核心思想是“单网关、多端接入”。它不像传统的单一程序,而是一个分布式设计的通信枢纽。具体来说,通过websocket并约定消息格式与clients通信。
唯一性:一台主机上只能运行一个 Gateway 进程。
职责:它统一管理所有的通信插件(WhatsApp, Telegram, Slack, Discord, Signal 等)。它是唯一一个直接维护这些第三方平台 Session 的地方。
通信:通过 WebSocket(默认端口 18789)与外界沟通。

虽然都连接到 Gateway,但身份不同:
camera.*)、获取位置 (location.get) 或屏幕录制。Agent 运行必须有一个工作区目录(默认在 agents.defaults.workspace)。
当一个Agent启动时,它会干哪些事情?
首先,OpenClaw包含一系列配置文件,工作区文件~/.openclaw/openclaw.json配置启动端口和模式等。另外工作区目录还包含一系列md文件用于设置Agent个性、工作流程和使用的工具等。
AGENTS.md:核心运行指令和“长期记忆”。SOUL.md:定义 Agent 的性格、语气和行为边界(灵魂)。IDENTITY.md:Agent 的名字、图标和基本人设。USER.md:你的个人信息,方便 Agent 称呼你。BOOTSTRAP.md:初次运行时的引导流程(完成后会被自动删除)。注入逻辑: 在每个会话的第一轮,OpenClaw 会把这些文件的内容直接塞进模型的 Context 里。空文件会被跳过。大文件会被截断并加上标记,以便提示信息保持简洁.如果文件缺失,OpenClaw 会注入一条“缺失文件”标记行.
会话记录以 JSONL 格式存储在:~/.openclaw/agents/<agentId>/sessions/<SessionId>.jsonl
read(读)、write(写)、exec(执行命令)等。这些是 Agent 与系统交互的基础。~/.openclaw/skills)。OpenClaw 的 Agent 运行时是建立在 Pi agent core 之上的,它负责:
~/.openclaw/agents/<agentId>/sessions/ 下,以 .jsonl 格式存储。Agent Loop(智能体循环) 是将静态的 AI 模型转化为动态“智能体”的核心机制。它不只是简单的一问一答,而是一个自动化的、闭环的执行过程。
Agent Loop 是 Agent 运行的“真实”生命周期:从接收消息到执行动作,再到最终回复。 在 OpenClaw 中,这通常是一个序列化(Serialized)的过程,确保每个会话(Session)在同一时间只有一个逻辑在运行,防止工具调用产生冲突或竞态条件。
一次完整的循环包含以下五个关键步骤:
AGENTS.md、SOUL.md 和会话历史。exec 运行代码或 read 读取文件),OpenClaw 的后端会代为执行。.jsonl 会话文件为了保证稳定性,OpenClaw 引入了 Lane Queue(车道队列) 系统:
collect:收集一段时间内的消息,一次性处理。steer:在 Agent 运行过程中注入新指令(转向)。followup:当前任务结束后立刻开始下一个任务。OpenClaw 的 Loop 支持 Partial Replies(部分回复):
系统提示词 是 OpenClaw 每次运行智能体时自动构建的“操作指令集”。它不像普通的聊天机器人那样只有一段固定的文字,而是由多个动态模块拼装而成的。
OpenClaw 的系统提示词是权属归网关(Gateway)所有的,意味着它会根据你当前的运行环境(时间、工作区文件、已安装的技能)实时生成。其核心目标是在有限的上下文窗口内,为模型提供最精准的“行动指南”
一个标准的 OpenClaw 系统提示词通常按顺序包含以下板块:
SKILL.md 按需加载详细指令。agents.defaults.workspace)。AGENTS.md、SOUL.md、USER.md)。上下文注入逻辑,OpenClaw 会扫描工作区,并将特定的 Markdown 文件内容注入提示词:
[TRUNCATED] 标记。简单来说,Context 就是 OpenClaw 在单次运行中发送给 AI 模型的所有信息总和。
Context 受到模型“上下文窗口”(Token 限制)的约束。它不同于“Memory(存储在磁盘上的长期记忆)”,Context 仅指当前模型窗口内可见的内容。
它主要由三部分组成:
每次运行都会重新构建系统提示词,其中最特别的是 项目上下文 (Project Context)。它会自动注入工作区中的特定文件(如果存在):
AGENTS.md / SOUL.md(定义性格/灵魂)TOOLS.md / IDENTITY.md(定义工具和身份)USER.md(用户信息)BOOTSTRAP.md(首次运行引导)注意: 为了防止撑爆上下文,大文件会被自动截断(默认每个文件 20,000 字符)。
注意skills和tools的差别,两者对上下文窗口的占用:
SKILL.md 指令,这样可以节省空间。可以通过斜杠命令实时监控和优化上下文:
/status:快速查看当前窗口有多满。/context list:列出当前注入的文件及其大小,查看是否被截断。/context detail:深入分析哪些工具或技能占用了最多的空间。/compact:压缩指令。将旧的对话历史总结为一个精简的条目,从而释放窗口空间。Context Engine 是一个可插拔的模块,它的唯一任务是:把散落在各处的数据(对话历史、文件、工具结果)按照优先级和 Token 限制,拼成最终发给模型的那个长字符串。
当模型准备运行(Run)时,上下文引擎会执行以下操作:
系统提示词 -> 项目上下文文件 -> 被裁剪的历史记录 -> 最新的用户消息。这是解决“记不住事”和“Token 太贵”的核心技术。
.jsonl 会话文件中,确保下次加载时依然有效。Agent Workspace(智能体工作区) 是智能体赖以生存的“物理世界”。如果把智能体比作一个程序员,那么 Workspace 就是他的这台电脑和当前打开的项目目录。它是所有工具操作、文件读写和上下文注入的唯一基准点。
在 OpenClaw 启动时,它会指定一个目录作为 agents.defaults.workspace。
read("file.txt"))都相对于这个目录。一个健康的工作区通常包含以下几个关键部分:
| 文件/目录 | 作用 |
|---|---|
AGENTS.md | 长期指令、任务清单和重要记忆。 |
SOUL.md | 核心性格、语气准则和行为边界。 |
USER.md | 关于你的信息(偏好、姓名、习惯)。 |
TOOLS.md | 你对工具使用的特殊要求(例如:“用 curl 时必须加 -L”)。 |
skills/ | 存放所有 SKILL.md 的文件夹。 |
scratchpad/ | 智能体存放临时文件、代码片段或中间数据的地方 |
在 OpenClaw 的架构中,并没有一个持久不变的“大脑状态”。每一轮你发消息给 Agent,Context Engine(上下文引擎) 都会执行一次“组装”动作:
AGENTS.md, SOUL.md, USER.md 等全部内容。BOOTSTRAP.md。连续的后续对话(第 2, 3… N 轮):
SOUL.md 和 AGENTS.md(确保人设不走样)。SKILL.md(如果还没被裁剪掉)。System Prompt 的来源:
启动扫描:每次对话开始前,OpenClaw 会扫描工作区。
.md 文件并拼装进提示词。OpenClaw 引入了 Sandbox 概念来保护你的工作区:
workspaceRoot 下)。这防止了不同任务之间互相“污染”代码或配置。当你第一次启动 Agent 时,OpenClaw 会在你的工作区(默认 ~/.openclaw/workspace)执行以下动作:
AGENTS.md、IDENTITY.md、USER.md 和关键的 BOOTSTRAP.md。IDENTITY.md(它的名字/人设)、USER.md(你的偏好)和 SOUL.md(它的语气/边界)中。BOOTSTRAP.md 会被自动删除,确保这个过程不会在下次启动时重复运行Session(会话) 是系统管理对话状态、隔离上下文和持久化记忆的核心单位。
OpenClaw 对 Session 的持久化分为两个层面,确保了即使程序重启,对话和状态也不会丢失:
sessions.json):<sessionId>.jsonl):OpenClaw 通过 sessionKey 来决定一条新消息应该进入哪个会话:
main),由 session.dmScope 参数控制。sessionKey,确保不同群组之间的对话上下文不会互相污染。Session 并不是永恒不变的,它有明确的刷新机制:
/new 或 /reset 命令强制开启一个全新的 Session ID。idleMinutes,如果在设定的时间内没有互动,会话将过期。为了防止 Session 文件无限增长导致性能下降,OpenClaw 会执行:
AGENTS.md 或 USER.md,实现从“短期会话”到“长期记忆”的转化。Session Pruning(会话裁剪) 是一种为了节省 Token 成本、优化缓存效率而设计的“内存即时清理”机制。它和你之前看到的 Compaction(压缩) 有本质区别:压缩是永久性的总结,而裁剪是临时性的剔除。
即时清理,不改存档
.jsonl 会话文件。为什么需要裁剪?(主要针对 Anthropic 模型)
这个功能主要是为 Anthropic(如 Claude 系列)的 Prompt Caching(提示词缓存) 优化的:
ttl: "5m"),裁剪就会触发,清理掉不再需要的旧数据,只保留最近几轮的上下文。裁剪的两种手段
... 代替。[Old tool result content cleared]。裁剪的保护规则(哪些不删)
OpenClaw 非常谨慎,以下内容会被保护:
keepLastAssistants: 3),确保模型不会因为丢失最近的工具结果而变傻。| 维度 | Session Pruning (裁剪) | Compaction (压缩) |
|---|---|---|
| 持久性 | 暂时的(仅限本次请求) | 永久的(写入历史文件) |
| 内容变化 | 只是删除旧的工具输出 | 将旧对话总结成一小段话 |
| 主要目的 | 降低缓存写入成本、保持窗口整洁 | 彻底释放 Token 空间,解决长时记忆问题 |
Session Tools(会话工具) 是一组专门为 AI Agent 设计的功能,允许 AI 能够“感知”并“操作”不同的对话上下文。简单来说,这套工具让 AI 不再局限于当前的这一段对话,而是可以查看其他历史记录、列出活跃会话,甚至主动给另一个会话发送消息。
AI 可以调用以下四个具体的函数:
sessions_list:列出当前的会话。AI 可以通过它看到有哪些活跃的群聊、私聊或任务(Cron)。sessions_history:获取指定会话的历史记录(Transcript)。这对于 AI 回溯之前的决策或获取跨会话的信息至关重要。sessions_send:向另一个会话发送消息。这实现了 “Agent 间通信”,例如一个负责调度的 AI 让另一个负责执行的 AI 去干活。sessions_spawn:产生一个隔离的子会话。AI 可以创建一个“分身”去处理特定的子任务,处理完后再把结果汇报回来,而不会污染主会话的上下文为了准确操作,OpenClaw 为不同类型的会话定义了唯一的 Key:
main:指代当前 Agent 的主对话。agent:<id>:<channel>:group:<id>:群组对话的标识。cron:<id>:定时任务产生的会话。node-<id>:特定节点(如硬件设备)的会话。Memory(记忆) 机制并不是指 AI 模型本身的参数,也不是简单的数据库存储,而是一套基于文件系统的持久化长短期记忆系统。
OpenClaw 将记忆存储在配置的工作空间(如 /root/.picoclaw/workspace)中,采用人类可读的 Markdown 格式:
memory/YYYY-MM-DD.md):MEMORY.md):AI 并不是“被动”拥有记忆,而是通过以下两个工具主动管理:
memory_search:语义搜索。即使 AI 问的问题和记录的文字不完全一样,系统也会通过向量索引(Vector Index)找到最相关的片段。memory_get:精准读取。AI 可以指定读取某个 Markdown 文件的特定行。自动冲刷机制
这是 OpenClaw 的一个精妙设计。由于 AI 的对话上下文(Context Window)有限,当对话太长需要进行“压缩(Compaction)”时,系统会执行以下操作:
memory/YYYY-MM-DD.md。agents.defaults.compaction.memoryFlush 控制。为了让记忆搜索更聪明,OpenClaw 支持为这些 Markdown 文件建立向量索引:
| 特性 | 会话 (Session) | 记忆 (Memory) |
|---|---|---|
| 物理形态 | sessions/<id>.json (全量原始数据) | workspace/memory/*.md (Markdown 文本) |
| 生命周期 | 随对话增长。过长时会被“压缩”或“修剪”。 | 永久存储。除非你手动删除文件。 |
| AI 的感知 | 每一轮对话都在“重读”历史记录。 | AI 需要通过“搜索”或“回溯”才能想起。 |
| 存储内容 | 所有的废话、工具报错、原始 JSON。 | 只有事实、结论、偏好和重要摘要。 |
| Token 消耗 | 高。历史越长,每一泡对话越贵。 | 低。只在需要时检索相关的片段注入。 |
Compaction(压缩/精简) 是解决“对话太长导致 AI 变傻或 Token 爆表”的核心技术。
当对话轮数过多,超出了大模型(LLM)的上下文窗口(Context Window)限制时,OpenClaw 会启动这个流程,将旧的对话“脱水”成精华摘要,从而为新对话腾出空间。
自动化与手动触发
🧹 Auto-compaction complete。/compact。/compact 重点保留关于 Docker 部署的决策。这会指导 AI 在压缩时重点关注你指定的信息。在openclaw.json (或 config.toml) 中,可以通过 agents.defaults.compaction 进行精细控制:
model:你可以指定一个专门用于压缩的模型。例如,平时用本地的 Ollama 聊天,但压缩时调用 Claude 3.5 Sonnet 以获得更高质量的摘要。identifierPolicy:strict(默认):强制要求 AI 在摘要中保留所有的 ID(如 Session ID、File ID),防止压缩后 AI 找不到文件。memoryFlush:memory/YYYY-MM-DD.md 或 MEMORY.md。| 特性 | Compaction (压缩) | Pruning (修剪) |
|---|---|---|
| 操作对象 | 所有的对话文本 | 主要是工具执行结果 (Tool Results) |
| 处理方式 | 总结、概括 | 直接截断、丢弃冗余部分 |
| 持久化 | 写入磁盘 JSONL 文件 | 往往只在内存中处理,不一定持久化 |
| 目的 | 维持长期的上下文理解 | 防止单个巨大的工具输出(如读取 1MB 文件)撑爆上下文 |
在 OpenClaw 中,一个 Agent 被视为一个独立的“大脑”。
agentDir)、系统提示词(System Prompt)、工作空间、会话记录和授权信息。单智能体在复杂场景下的局限性:
OpenClaw 提供了三种典型的协作架构,开发者可以通过 YAML 文件进行声明式配置:
Gateway 如何处理输入:
OpenClaw 的重试逻辑遵循三个原则:
OpenClaw 通常执行以下默认行为:
当模型由于“上下文窗口溢出”(Context Overflow)而报错时,OpenClaw 会:
由于OpenClaw需求内存还是大一些,这里使用zeroclaw,使用Rust编写,更轻量。
使用docker安装
1 | git clone https://github.com/zeroclaw-labs/zeroclaw.git |
修改docker-compose.yaml文件,修改
1 | services: |
同时增加环境变量启动IP地址
1 | ZEROCLAW_GATEWAY_HOST=0.0.0.0 |
然后启动,并通过docker exec或docker attach执行命令。
1 | docker compose up -d |
可以考虑创建QQ和飞书通道。
通过cron可以设置定时任务,同时结合skills使得模型能复用流程、经验以及使用function calling获取数据。
开源skiils:The Agent Skills Directory
这里主要使用到Summarize和News Summary — ClawHub
然后设置cron,可以通过命令,但还是推荐直接与AI对话创建
1 | zeroclaw cron add |
1 | zeroclaw agent |
这样模型会调用提供给它的cron增加任务命令,而这些命令反而没有暴露给用户。
此外还可以找到很多新奇的skill,比如让模型自我思考、进化,通过skill查找或生成skill,以及视频网站热门监控B站 (bilibili) 热门视频监控 — ClawHub。 这不禁让人们联想到软件开发中的扩展,从原本的用户上传代码插件再到直接上传一个md文件搭配一些脚本,例如增加一个skill,爬取新闻网站,也许这就是未来吧。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。