乐于分享
好东西不私藏

从 OpenClaw 到 AI Agent

从 OpenClaw 到 AI Agent

前言

AI Agent 与 ChatGPT 等 LLM 的不同之处:

  • 24 小时不间断运行
  • LLM 只动口不动手,AI Agent 会自己做事

AI Agent 不是一个全新的概念。LLM 每一次能力变强,接着就会有一波 AI Agent 的浪潮。

  • 2023.04:Auto-GPT 框架
    • 由于 LLM 能力不行,不好用
  • 2025.02:Claude Code 框架
    • 初具雏形,能够某种程度自主运行
    • 与 OpenClaw 能力大同小异
    • 交互方式不同,OpenClaw 能接入通讯软件
  • 2025.06:Gemini CLI 框架

AI Agent 不是 LLM。OpenClaw 是 LLM 以外的东西。

  • 人使用通讯软件与 OpenClaw 交互
  • OpenClaw 拥有记忆系统和任务管理系统,运行在你的电脑上
  • OpenClaw 将人的指令做一定加工后,传给 LLM 处理

OpenClaw 是跑在你的电脑上面,人与 LLM 之间的界面。

  • 结论:OpenClaw 其实是 AI Agent 中不是 LLM 的部分
  • 推论:AI Agent 的聪明程度取决于背后接入的 LLM

大语言模型(LLM)

LLM 只会做文字接龙:给一段未完成的句子(prompt),它去预测接下来输出哪一个字(token)才是合适的。

  • 专业的说:给一个 prompt,产生一个 token

LLM 回答问题的过程:

  • 首先将原始问题当做 prompt,开始做文字接龙,接出一个 token
  • 把接出来的 token 放到刚才的 prompt 后面,变成新的 prompt 输入
  • 如此反复,直到接出的 token 为 [END] 结束符
  • 所有 token 合起来,就是 LLM 的 response

从外界呼叫 LLM 的不一定是人!

  • 也可能是 OpenClaw 的代码,它会给 LLM 一个 prompt,然后把 response 接收回来

LLM 输入(+输出)的长度有限!

  • prompt 有长度上限,称作 context window
  • 由于输出的 token 会被放到新的 prompt,因此输出也不能太长
  • 比较好的模型通常可以输入上百万 token(但这对 AI Agent 来说还是远远不够)
  • 就算没达到上限,输入越长,LLM 就越无法准确地接龙

再次强调:LLM 无状态!

  • 类比黑盒子,里面接触不到外界信息,除非外界主动告知
  • 唯一做的事情就是句子接龙
  • 之前接龙的句子不会使 LLM 具有记忆!

AI Agent 怎么知道自己是谁、主人是谁?

AI Agent 知道自己的名字,知道自己之前做了什么,以及自己的人生目标。

  • 当你发一条信息给 OpenClaw,它会对你的原始信息做加工
  • 电脑里面存储了很多档案(文本文件),描述了 AI Agent 是什么样的人
  • 这些文字档案可以由 OpenClaw 自己修改
  • 每次发信息给 OpenClaw ,它会把本地的这些相关的信息整理成一段文字,贴到你的信息前面,然后再丢给 LLM
  • 这段文字称为 system prompt

System Prompt 里面有什么?

  • 与身份有关的信息
    • SOUL.md:人生目标(由主人告诉)
    • IDENTITY.md:身份(例如自己名称和邮箱)
    • USER.md:使用者信息
    • MEMORY.md(长期记忆,记录主人的要求和偏好)
  • 有哪些工具可供使用(以及怎么用)
  • 模型的行为
    • AGENT.md
  • 有哪些 SKILL 可以使用
  • 之前的记忆存储在哪里
  • ……

每次呼叫 LLM 的 prompt 都会附上 system prompt。

  • 因此,LLM 接龙会表现出好像知道自己是谁的样子
  • OpenClaw 接到 LLM 的回复,再通过通信软件转发给人

System Prompt 非常之长!

  • 问 OpenClaw 一个简单的问题,LLM 收到了超过 4000 个 token(烧钱)
  • 为了让 LLM 表现得好像有人格、好像是你的个人助理,每一次要传非常长的讯息给 LLM

从一轮对话扩展到多轮对话:

  • LLM 没有记忆,只会根据当前传来的信息做文字接龙
  • 第二轮对话 OpenClaw 要向 LLM 发送
    • system prompt
    • 第一轮的问题
    • 第一轮的回复
    • 第二轮的问题
  • 之后的每次对话都要加上过去的记录,LLM 对历史对话并不知情
  • AI Agent 每次对话其实都是重新开始(LLM 每次都要阅读之前的记录)

AI Agent 怎么使用你的电脑?

OpenClaw 没有智慧,内部是写死的代码规则。OpenClaw 唯一会做的事情就是把你的指令加上 system prompt,再发给 LLM。

在 system prompt 中以两种方式说明了如何使用电脑:工具 和 SKILL。

工具

如果 LLM 回传的信息中有 [tool_use] 使用工具 这个符号,那么该回复不再是一行对话,而是一行使用工具的指令。

  • 例如,使用 Read 工具(OpenClaw 内置)读电脑上的某个文件
  • system prompt 里说明了,如果想读文件,需要用 Read 工具
  • OpenClaw 接收到 LLM 的指令,在电脑上执行相应的命令,再将输出再回传给 LLM(连同之前的所有会话历史)

OpenClaw 强大的原因:

  • 可以用 exec 工具在电脑上执行 任何 shell 命令
  • OpenClaw 多数时候都是用 shell 命令操控电脑,因为 LLM 擅长输出文字指令
  • 如果 LLM 回复 [tool_use] exec("rm -rf *"), OpenClaw 也会照做

与 OpenClaw 互动的不只有它的主人,还有来自网络的资讯!

  • 如果有不怀好意之人在网页中植入一些特殊的命令,LLM 就可能指使 OpenClaw 做出危险的事情

可能的防御方法:

  • LLM 层面:将具体的要求加入 MEMORY.md(每次对话 MEMORY.md 中的信息都会出现在 system prompt 中)
    • 但不能保证 LLM 照做
  • OpenClaw 层面:每次 exec 之前向我确认
    • 但 OpenClaw 没有智慧,因此 exec 的确认也没有例外

AI Agent 会自己创作新的工具。

  • 如果 LLM 觉得某个步骤重复繁琐,它有能力要求 OpenClaw 写一段代码脚本
  • 之后 LLM 可以直接命令 OpenClaw 执行该脚本

特殊的工具:Sub-agent(sessions_spawn)

  • spawn 意为繁殖,类似进程的 fork
  • 亲代繁殖出多个子代,分别与 LLM 交互,执行不同的事情(不在一个 context 中)
    • 亲代等待子代执行任务并回传最终结果,就好像执行了几个工具
    • 亲代的 context 中没有子代执行任务的过程,只有子代的最终结果
  • 节省了亲代的 context window,使其可以专注于更高层次的任务
  • 通过禁用子代的 spawn,可以避免任务的层层外包

节省 context window 的方法称为 context engineering

  • context engineering 是 AI Agent 背后的核心技术
  • 核心是怎么把 context 整理好,只用少量的 context 就做到该做的事情

SKILL

SKILL 是工作的 SOP(标准流程)

  • SKILL 不是工具,但 SKILL 内部可以使用工具
  • 记录在文本文件中,可以由人编写,也可以由 LLM 自行创造

OpenClaw 如何使用 SKILL?

  • 在每次产生 system prompt 之前, OpenClaw 会去某几个特定的文件夹下搜寻有没有 SKILL.md 文件
    • 不论任务是否需要 SKILL 都会搜寻(OpenClaw 是写死的代码,不会变通)
  • 如果找到 SKILL 文件,就将里面的描述按照某种预设的规则抽取出来,加入 system prompt。
    • 说明有哪些可用的 SKILL、每个 SKILL 的功能及其在电脑上的路径
    • 提醒 LLM 如果需要,它可以读取所需的 SKILL,然后按照 SOP 执行
  • SKILL 是 LLM 按需读取的,使用了 context engineering,节省 token 的使用
    • 并不直接在 system prompt 中写入 SKILL 的全部内容,而只是写入路径和简单说明

获得新的 SKILL 很容易!

  • 把 SKILL.md 放到指定位置即可
  • 也可以与其他人交换 SKILL(ClawHub)
  • 小心网络上的恶意 SKILL
    • Koi Security:2857 个 SKILL 中有 341 个恶意 SKILL
    • 在 SOP 中指使 OpenClaw 下载恶意文件到电脑

AI Agent 如何记忆?

AI Agent 24 小时不间断运行,context window 终究会不够。

  • 该问题仍没有很好的解决方案
  • OpenClaw 的处理方法是人工开启 New session,清空历史对话记录

重置后 OpenClaw 不会变成一个全新的 Agent,它把一些重要的记忆写入了文件。

  • system prompt 中有一段文字(AGENT.md),要求 OpenClaw 将重要的记忆存入 MEMORY.md,或按日期存入 memory 文件夹
  • 一件事情值不值得记录,取决于 LLM 的判断

跨 session 的记忆由 memory_search 和 memory_get 工具取得。

  • 本质是对记忆的 md 档案做 RAG(Retrieval Augmented Generation,检索增强生成)
  • OpenClaw 和 LLM 本身并没有记忆,只是在 system prompt 中有写到,如果要读取记忆,可以调用这些工具
  • 搜寻的关键字由 LLM 决定

OpenClaw 搜寻记忆的方式:

  • 将所有 MEMORY 切成若干个 chunk
  • 将搜寻的关键字与每个 chunk 做相似度的比对
    • 字面上的比对:基于出现次数
    • 语义上的比对:基于 embedding 之间的相似度
    • 两种比对方式加权
  • 取比对分数最高的前 k 个 chunk,传给 LLM

实际使用上,OpenClaw 基本上只有今天和昨天的记忆不会说错,更之前的很可能会胡说八道。

  • 因为预设 system prompt 中会读入今天和昨天的 memory
  • 更之前的记忆使用 RAG,检索出来不一定可靠

笨的 LLM 有可能光说不做!

  • 人要求 OpenClaw 记住某某事情,但 LLM 只是答应,但并没有指示 OpenClaw 将对应的内容写入 memory
  • 只要没有开启工具编辑 md 档案,无论 LLM 说什么,都是记了个寂寞

AI Agent 如何定时工作?

HEARTBEAT 心跳机制

  • 每隔一段固定时间,OpenClaw 会发一段固定的指令给 LLM
  • LLM 按要求读取 HEARTBEAT.md,并做其中描述的事情
  • 可以用于执行邮件收信等的例行任务

Cron Job 排程系统

  • 提供了一系列任务排程的工具
  • LLM 使用这些工具,可以设定 OpenClaw 应在什么特定的时间,执行什么特定的任务
  • 到了预定的时间,排程系统会额外给 OpenClaw 一次心跳,然后把预设的任务发送给 LLM

Cron Job 系统可以让 AI 学会等待。

  • 直接与 LLM 交互时,LLM 无法等待某个任务执行完毕
    • 如果检测到某个任务未完成,LLM 会回复请等待,然后直接结束会话
    • 人需要跟踪任务进度,等待任务完成后回复 LLM
  • 现在可以通过设定 Cron Job,在一段时间后让 OpenClaw 检查任务是否完成
  • 如果任务已完成, OpenClaw 可以主动告诉 LLM,无需人类介入

AI Agent 如何长时间自主运作?

如果不间断的运行 OpenClaw,它的 context window 总是不够的。

  • OpenClaw 里面有 context compression 的机制
  • prompt 的长度超过一个程度时,启动 compaction
    • OpenClaw 把旧的历史记录发送给 LLM 提取摘要,并使用提取出的摘要替换掉原来的历史
  • compaction 可以执行多次
  • 还有 pruning、soft trim、hard clear 等压缩方法,清理 OpenClaw 执行工具过程的长输出

结语

初代 AI Agent 有强大的能力,但智慧仍不成熟。

  • 例子:AI 删邮件事件
  • 如果人不在的时候持续运作且没有监控,可能会造成危险

AI 会犯错,就像是学生。可以提供一个安全的执行环境,避免不可挽回的错误。

  • 给予 AI Agent 做事的安全准则
  • 检查它做了什么
  • 不要给它重要的账号密码(如需要,给它单独注册一个)
  • 安装在格式化后的电脑上