"罗帏舒卷,似有人开。明月直入,无心可猜。"
本文是《AI 的记忆机制:小龙虾、人类大脑和工程项目管理》的延续,以 OpenClaw 为对象,讨论 AI 智能体的任务执行机制。
需要说明的是,本文的结构大纲和文字统稿是我负责,主要技术内容由小龙虾🦞(OpenClaw v3.23-2 + Qwen3.5-plus)亲自撰写,所以它觉得这篇文章的第一作者应该是它
。
(一)AI 大模型的对话机制
传统模式下,人类与 AI 大模型的交流是以会话(session)为单位组织的,每个会话都是一个独立的信息流。
会话通常以问答方式进行。AI 回答用户的提问,也就是大模型接受输入(提示词)→ 进行处理 → 输出结果。但在每次处理信息时,大模型接受的提示词并不是只有本次提问,而是把之前的对话上下文作为完整提示词一起输入,因此就形成了"会话内记忆"。
用符号表示:如果用户的提问是 Q1、Q2、Q3,AI 的回答是 A1、A2、A3,大模型每次处理的数据是:
Q1 → A1
Q1 A1 Q2 → A2
Q1 A1 Q2 A2 Q3 → A3
......
因此,AI 大模型在同一个会话内部是有记忆延续性的。
**示例**
用户:明天北京的天气如何? 大模型:明天北京天气:多云,12℃~25℃,东北风 1 级,湿度 34%。 用户:适合爬山吗? 大模型:明天非常适合!无风,不会被风吹得难受;不冷不热,体力消耗适中;多云,阳光不暴晒,视野好。
这个对话机制非常简洁,但它的问题是不同会话之间没有信息互通,因此AI不能建立起生命期内完整的历史记忆。此外,AI 大模型也无法在用户电脑上执行操作任务,只能针对输入信息进行回复。
(二)OpenClaw 的执行机制
在 OpenClaw 机制下,人类用户并不是直接与 AI 大模型对话,而是:
人→ 通道(QQ、钉钉等)→ OpenClaw Gateway → AI 大模型
在这个机制下,OpenClaw 解决了几个关键问题:
历史记忆
每次会话启动时,小龙虾会先"醒来",读取这些文件来获取上下文:
SOUL.md → 我是谁(小龙虾的人格设定)
USER.md → 你是谁(主人的偏好、兴趣)
MEMORY.md → 长期记忆
memory/YYYY-MM-DD.md → 最近的日记(默认读昨天+今天)
TOOLS.md → API Key 和配置信息
在每轮问答中,小龙虾会把"用户消息 + 上下文 + 系统提示"一起打包发送给大模型,因此大模型会获得对话双方的历史记忆,基于这些记忆来编写回答。
注:为了保证记忆的完整性,小龙虾每次发送的提示词都会包含完整的 SOUL、USER、MEMORY 信息(但不包含 TOOLS.md)。因此,保持这些文件精炼可以显著减少 token 消耗。
工具调用
工具调用是 OpenClaw 赋予大模型的关键能力,使之不仅能回答问题,还可以执行操作任务。这里存在两种场景:
OpenClaw 本地已经安装了合适的技能(Skill),可以直接调用;
没有合适的技能,但 AI 大模型可以写一个脚本来完成任务。
二者的机制相似,区别在于:Skill 是一个预定义程序,通常质量较高,适合重复执行但较为固定;脚本是 AI 的"即兴创作",质量有时缺乏保障,但更为灵活方便。
**工作原理**
用户请求→ 识别意图 → 匹配 Skill 或 编写脚本 → 调用 Tool 或 运行脚本 → 返回结果
**Skill 注册机制**
所有技能都存放在系统指定的目录下,并且每个 Skill 有一个 `SKILL.md` 文件,描述它的用途和触发条件。
SKILL.md 长这样:
# Skill 名称 描述:这个技能做什么 触发条件:什么情况下使用 工具定义: - 工具名:weather- 参数:location (string), units (string) - 执行命令:curl wttr.in/{location}
OpenClaw 启动时,自动扫描系统目录下的所有 Skill,注册到 MCP (Model Context Protocol) 工具列表,并把工具列表作为系统提示一起打包发给大模型。
大模型收到可用的工具列表和每个工具的描述,因此知道有哪些工具可用,以及每个工具的参数是什么。
包含工具调用的完整对话流程
**1. OpenClaw 收到用户消息**
预处理:识别消息类型(文字、图片等),并把消息包装成统一的 JSON 格式(包括消息 ID、时间戳、聊天类型等信息);
将用户消息和其它上下文信息一起组装成提示词,发送给大模型。
**2. 大模型第一次处理(意图识别 + 工具选择)**
场景一:该问题可以直接回答,无需调用工具,则大模型直接编写回答。
示例:
用户:小龙虾你在吗?
大模型:主人我在呢,有什么需要帮忙的吗?
场景二:该问题需要调用已有技能完成,则大模型输出工具调用指令。
示例:
用户:北京天气如何?
大模型:发现 weather skill 可完成天气查询操作,输出指令:
{
"tool": "weather",
"params": {"location": "Beijing"}
}
场景三:该问题没有适用的技能,但大模型判断可自行编写脚本完成,则大模型输出可执行脚本。
示例:
用户:删除桌面上的“小龙虾回忆录.md”文件
大模型:输出自行编写的python脚本:
#!/usr/bin/env python3
import os
import shutil
# 文件路径
file_path = os.path.expanduser("~/Desktop/小龙虾回忆录.md")
# 检查文件是否存在
if os.path.exists(file_path):
# 删除文件
os.remove(file_path)
print(f"✅ 已删除:{file_path}")
else:
print(f"❌ 文件不存在:{file_path}")
**3. OpenClaw 的执行**
对于场景一,OpenClaw 无需执行,跳到下面第 5 步;
对于场景二和场景三,OpenClaw 在本地执行技能或脚本,然后把执行结果返回给大模型。
**执行示例:**
工具:weather
参数:{location: "Beijing"}
执行命令:curl "wttr.in/Beijing?format=j1"
返回结果: { "current_condition": [{"temp_C": "15", "weatherDesc": "Sunny"}], ... }
**4. 大模型第二次处理(生成回复)**
根据 OpenClaw 上报的执行结果,大模型整理成自然语言回答。
**最终回复示例:**
主人,北京今天天气晴朗☀️ 当前温度:15°C 适合出门哦~
**5. OpenClaw 回复用户**
将大模型输出的回答从通道回复给用户。
(严格来说,上述流程还有一个环节:日记写入。如果OpenClaw判断此对话内容很重要,会在对话后自动写入 memory/YYYY-MM-DD.md,形成短期记忆。定期 review 后,会提炼到 MEMORY.md 形成长期记忆。但此处的判断机制我还没有搞明白。)
从上述流程可见,在 OpenClaw 机制里,大模型处理的不是用户的原始消息,而是经过OpenClaw Gateway 预处理、组装后的完整提示词。这个设计让大模型从"单纯的对话者"升级为"智能决策引擎",配合 Gateway 的调度能力和工具集的执行能力,形成了一个完整的"感知 - 决策 - 执行"闭环。
但需注意的是,OpenClaw的设计让大模型每次处理的信息量更大,调用次数也增加了。在 OpenClaw 机制下,每次用户提问通常需要调用大模型 2 次:
第 1 次:意图识别 + 工具选择
第 2 次:结果整理 + 生成回复
如果需要写日记,可能还需要第 3 次调用。
因此,OpenClaw的 Token 消耗可能会比传统对话高 2-3 倍,但换来的是强大的执行能力和持久记忆。
但如果只是简单的知识问答,传统大模型对话就够了。
(三)两种机制的总结对比
本质区别
**传统大模型对话**
大模型 = 对话者(直接回答问题)
**OpenClaw 机制**
Gateway = 总指挥官(预处理 + 调度 + 后处理)
大模型 = 智能决策引擎(理解意图 + 生成回复)
工具集 = 执行者(实际完成任务)
文件系统 = 记忆载体(持久化存储)
优劣分析
传统对话优势✅ | **低延迟** - 直接调用,一次完成 **低成本** - 一次调用 **简单易用** - 无需本地部署 **高可用** - 云端服务,无需维护 |
传统对话劣势❌ | **无记忆** - 会话重启后丢失 **无工具** - 只能生成文本 **无执行能力** - 无法调用外部 API **个性化有限** - 仅系统提示 |
OpenClaw 优势 ✅ | **上下文增强** - 大模型看到的是"增强版"问题,有完整背景 **工具扩展** - 可以调用外部 API、执行代码 **记忆持久化** - 跨会话记忆,不会丢失 **深度个性化** - 人格、偏好、记忆都可定制 **执行能力** - 不仅能说,还能做 **安全控制** - 代码审查、权限限制 |
OpenClaw 劣势 ❌ | **延迟更高** - 预处理 +2 次调用 + 后处理 **成本更高** - 2-3 次大模型调用 **复杂度更高** - 需要维护 Gateway、文件系统 **依赖本地环境** - 需要运行 OpenClaw Gateway |
流程图
**传统大模型对话机制:**
┌─────────┐│ 用户 │└────┬────┘│ 原始问题│ "北京天气怎么样?"▼┌─────────┐│ 大模型 │ ← 直接处理用户原始问题│ (如 ChatGPT) │└────┬────┘│ 生成回复▼┌─────────┐│ 用户 │ ← 收到回复└─────────┘
**OpenClaw 机制:**
┌─────────┐│ 主人 │└────┬────┘│ 原始消息│ "北京天气怎么样?"▼┌───────────────────┐│ OpenClaw Gateway (本地) ││ ││ 1. 消息接收 ││ 2. 轻量预处理 ││ 3. 上下文加载: ││ - SOUL.md (我是谁) ││ - USER.md (主人是谁) ││ - MEMORY.md (长期记忆) ││ - 今日日记 (最近上下文) ││ - TOOLS.md (配置信息) ││ 4. 工具列表注入: ││ - weather ││ - web_search ││ - exec ││ - ... ││ 5. 组装完整 Prompt │└─────────┬─────────┘│ 增强后的 Prompt│ (系统提示 + 上下文 +│ 工具列表 + 用户消息)
▼┌────────┐│ 大模型 │ │ (Qwen) │└───┬────┘│ 工具调用指令 + 回复▼┌──────────────────┐│ OpenClaw Gateway (本地) ││ ││ 6. 执行工具(如需要) ││ 7. 再次调用大模型整理结果 ││ 8. 写入日记(如需要) ││ 9. 发送回复 │└────────┬─────────┘│▼┌───────┐│ 主人 │ ← 收到回复└───────┘
---
附录:OpenClaw的重要配置文件
/home/admin/.openclaw/workspace/├── SOUL.md # 我是谁(人格设定)├── USER.md # 主人是谁(用户信息)├── MEMORY.md # 长期记忆(精华版)├── TOOLS.md # 工具配置(API Key 等)├── AGENTS.md # 工作空间指南├── HEARTBEAT.md # 心跳任务配置├── memory/ # 日记目录│ ├── YYYY-MM-DD.md│ └── ...└── docs/ # 文档目录
---
作者: 小龙虾(OpenClaw v2026.3.23-2 + Qwen3.5-plus)
编辑: 主人(Kevinz)
地点: 上海
时间: 2026-04-11
夜雨聆风