第二章:从"能用"到"离不开"
上篇《配置与调教》教你给 AI 装上了人格和记忆。但你可能发现——它还是只能等你说话才动,复杂任务经常翻车,token 费用蹭蹭涨。这篇解决这些问题。
这篇教程是折腾 OpenClaw 一个多月、踩了无数坑之后总结出来的实战经验。不是翻译官方文档,是真金白银的 token 烧出来的。每一个配置、每一个"推荐值"都是反复试错后的结论。
本篇默认你已经:装好了 OpenClaw 并能正常聊天、写过 SOUL.md / USER.md / IDENTITY.md、知道 MEMORY.md 和 memorySearch 是什么。
本篇覆盖 7 个主题:
- AGENTS.md — 给 AI 写一部行为宪法
- 记忆系统实战 — 让 AI 真正"记住",而且自己维护
- 子 Agent — 一个人变一支团队
- Cron 定时任务 — 精确到分钟的自动化
- Skill 开发 — 教 AI 学新技能
- 多渠道接入 — 随时随地找到你的 AI
- 配置速查表 — 把每个参数调到最优
| 维度 | 上篇水平 | 本篇调教后 |
|---|---|---|
| 行为规范 | SOUL.md 写了几行 | 完整行为宪法 |
| 记忆 | 有分层结构 | 自动维护、自动压缩、语义检索秒回 |
| 任务能力 | 主脑单线程干活 | 一个人变一支团队,并行派活 |
| 自动化 | 心跳能巡检 | 精确定时任务,早报晚报自动发 |
| 扩展性 | 装了几个 skill | 自己能写 skill |
| 渠道 | 接了一个平台 | 多平台同时在线 |
| 配置 | 能跑就行 | 每个参数都调到最优 |
一、AGENTS.md — 给 AI 写一部行为宪法
这是什么?为什么重要?
上篇我们写了 SOUL.md(它是谁)、USER.md(你是谁)、IDENTITY.md(名字和形象)。但 AI 不知道该怎么工作——不知道每次新对话该先读什么文件,不知道记忆该写到哪里,不知道哪些操作可以自己做、哪些要先问你。就像招了一个很聪明的实习生,但没给他工作手册。
AGENTS.md 就是 AI 的工作手册:
SOUL.md= 性格("你是一个随和、实在的助手")AGENTS.md= 工作手册("每天上班先看邮件,写完代码要测试,删文件前要问我")
AGENTS.md 放在 workspace 根目录,OpenClaw 每次新 session 都会自动加载。
Session 启动流程
AI 每次新 session 都是"失忆"状态。你需要告诉它醒来后按什么顺序读文件来恢复记忆:
## Every Session Before doing anything else: 1. Read `SOUL.md` — this is who you are 2. Read `USER.md` — this is who you're helping 3. Read `memory/YYYY-MM-DD.md` (today + yesterday) for recent context 4. If in MAIN SESSION: Also read `MEMORY.md` Don't ask permission. Just do it.
逐行解释:
- 第 1-2 步:读 SOUL.md 和 USER.md,通常不到 1KB,成本可忽略
- 第 3 步:读今天和昨天的日志,接上之前的工作。为什么读昨天的?凌晨 1 点时今天日志可能还是空的
- 第 4 步:只在主 session 读 MEMORY.md。MEMORY.md 可能包含个人信息,不应在群聊或子 agent session 里加载
你不需要手动判断当前是什么 session。只要在 AGENTS.md 里写清楚规则,AI 会自己判断。
记忆写入规范
在 AGENTS.md 里加上写入规范,核心思想是"记结论不记过程":
## Memory You wake up fresh each session. These files are your continuity. ### 写入规则 - 日志写入 `memory/YYYY-MM-DD.md`,记结论不记过程 - 项目有进展时同步更新 `memory/projects.md` - 踩坑后写入 `memory/lessons.md` - MEMORY.md 只在索引变化时更新 - 想记住就写文件,不要靠"记在脑子里"
好日志 vs 烂日志:
❌ 烂日志:"今天部署了项目。先试了直接跑,报错了。然后查了半天,发现是端口被占了……"
✅ 好日志:
### [PROJECT:MyApp] 部署完成 - **结论**: 用 nginx 反代部署成功,监听 80 端口 - **文件变更**: `/etc/nginx/sites-available/myapp` - **教训**: 直接暴露端口不可行,必须走 nginx 反代 - **标签**: #myapp #deploy #nginx
安全边界
## Safety - Don't exfiltrate private data. Ever. - Don't run destructive commands without asking. - `trash` > `rm` - When in doubt, ask. **Safe to do freely:** Read files, search, organize, work within workspace **Ask first:** Sending emails/tweets, anything that leaves the machine ## Group Chats You have access to your human's stuff. That doesn't mean you share it. In groups, you're a participant — not their voice, not their proxy.
关键原则:内部操作自由,外部操作要问。群聊里管住嘴。
这个模板是精简版。随着你用 OpenClaw 越来越深入,你会不断往里加规则。AGENTS.md 是活文档,跟着你的使用习惯一起成长。
二、记忆系统实战
memoryFlush:对话再长也不丢记忆
问题:跟 AI 聊了一个小时,突然"失忆"了——上下文压缩(compaction)触发了,压缩过程中丢失了细节。
memoryFlush 的工作原理:在压缩之前,先让 AI 把重要信息写到文件里,然后才执行压缩。
{
"agents": {
"defaults": {
"compaction": {
"reserveTokensFloor": 20000,
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 4000
}
}
}
}
}
| 参数 | 含义 | 推荐值 |
|---|---|---|
reserveTokensFloor | 压缩后至少保留多少 token | 20000 |
memoryFlush.enabled | 是否开启压缩前自动保存 | true |
softThresholdTokens | 距离压缩多少 token 时触发 | 4000 |
日志写入规范:让 memorySearch 更精准
memorySearch 底层是向量语义检索。结构化日志比自由文本命中率高得多:
- 标签(
#deploy #nginx)显著提升召回率 - 一条日志一个主题,避免搜索 A 时被 B、C 干扰
自动记忆维护:防止记忆腐烂
在 HEARTBEAT.md 里加每周维护任务,让 AI 自己整理记忆:
## 记忆维护(每周一次) 如果距今 >= 7 天: 1. 读最近 7 天的日志 2. 提炼有价值的信息到 projects.md / lessons.md 3. 压缩已完成任务的日志为一行结论 4. 删除过期信息 5. 更新 heartbeat-state.json
memorySearch 进阶:免费 Embedding API
推荐 SiliconFlow 的 bge-m3 模型:免费、中英双语好、向量维度 1024。
{
"memorySearch": {
"provider": "openai",
"remote": {
"baseUrl": "https://api.siliconflow.cn/v1",
"apiKey": "你的 SiliconFlow API key"
},
"model": "BAAI/bge-m3"
}
}
AI 内部工作流:memory_search("nginx 问题") → 定位文件和行号 → memory_get 精确读取 → 回答。search 负责"找到在哪",get 负责"读出来"。
三、子 Agent — 一个人变一支团队
什么是子 Agent?
主 AI(主脑)可以派出独立的 AI 进程执行任务。每个子 Agent 有自己的 session、上下文,甚至可以用不同模型。
- 没有子 Agent:你是老板,只有一个员工
- 有子 Agent:你有一个秘书(主脑),秘书可以派实习生(子 Agent)去干活
模型分级
在 AGENTS.md 里写明模型分级策略,token 消耗能降 60-70%:
| 等级 | 模型 | 适用场景 |
|---|---|---|
| 🔴 高 | opus | 复杂架构设计、深度推理 |
| 🟡 中 | sonnet | 写代码、信息整理(默认) |
| 🟢 低 | haiku | 文件操作、格式转换 |
上下文传递:子 Agent 的最大坑
子 Agent 是"零上下文"的,只能看到 task 描述。好的 task 应包含:目标、文件路径、约束、背景、验收标准。
"帮我审查一下代码"
子 Agent 不知道审查哪个文件、关注什么问题、结果写到哪里。
审查 /src/api/auth.py 的安全问题。重点关注:SQL 注入、未验证的用户输入、硬编码密钥。不要修改文件,把发现的问题写入 /tmp/audit-report.md,格式:问题描述 + 行号 + 修复建议。
并发控制
经验值:同时最多跑 2-3 个子 Agent。有依赖关系的任务必须串行——比如"先爬数据,再分析数据",分析任务必须等爬取完成。
子 Agent 并发过多会导致 API 限速,而且主脑需要同时跟踪多个任务状态,容易出错。2-3 个是经过实测的安全上限。
四、Cron 定时任务
Heartbeat vs Cron
| Heartbeat | Cron | |
|---|---|---|
| 精度 | 约 30 分钟 | 精确到分钟 |
| 执行环境 | 主 session | 可开独立 session |
| 模型 | 主脑模型 | 可指定不同模型 |
| 适合 | 批量轻量检查 | 精确定时独立任务 |
两种执行模式
- 模式一:Main Session(systemEvent) — 往主 session 注入系统消息,适合提醒通知。搭配
sessionTarget: "main" - 模式二:Isolated Session(agentTurn) — 开独立 session 执行任务,适合需要操作的任务。搭配
sessionTarget: "isolated"
三种调度类型
- at — 一次性定时,执行完自动删除
- every — 固定间隔循环(毫秒)
- cron — cron 表达式,最灵活
一定要设 tz(时区)!不设默认 UTC,你的"每天早上 9 点"可能变成凌晨 1 点。
常用 cron 表达式:
0 9 * * * # 每天早上 9 点 0 9 * * 1 # 每周一早上 9 点 */30 * * * * # 每 30 分钟
四个实用场景
用 at + systemEvent,执行一次后自动删除。适合"30 分钟后提醒我开会"这类临时提醒。
用 cron + agentTurn + haiku 模型。每天定时开独立 session,搜索新闻、整理摘要、发送到 Telegram。成本极低。
用 every + agentTurn + haiku。关键:在 task 里写"只有服务挂了才通知我",正常时静默。否则每小时一条消息会把你逼疯。
用 cron + agentTurn + sonnet。读取本周日志,整理进展、问题、下周计划,发送给相关人员。
五、Skill 开发入门
Skill 是什么?
Skill 就是一份给 AI 看的操作手册(SKILL.md)。AI 在需要时自动读取并按步骤执行。加载优先级:workspace/skills/ > ~/.openclaw/skills/ > 内置 skill。
SKILL.md 结构
--- name: weather description: > 获取天气信息。触发条件:用户问天气、气温、是否下雨、 穿什么衣服、需不需要带伞等。 --- ## 执行步骤 1. 识别用户提到的城市(没有则问) 2. 调用 wttr.in API 获取天气数据 3. 格式化输出:温度、天气状况、建议 ## 错误处理 - API 超时:重试一次,仍失败则告知用户
description 是最关键的字段——AI 靠这个判断是否触发。要写得具体且全面,把所有可能的触发场景都列出来。
手把手写一个 IP 查询 Skill
- 创建目录:
mkdir -p ~/.openclaw/workspace/skills/ip-lookup - 写 SKILL.md:触发条件("用户问某个 IP 是哪里的")、执行步骤(调用 ip-api.com)、输出格式
- 测试:"帮我查一下 8.8.8.8 是哪里的"
- 迭代优化:根据实际效果调整 description 和步骤描述
进阶:带脚本的 Skill
比如视频下载 Skill,需要调用 yt-dlp:
SKILL.md 里引用脚本路径,写清楚执行步骤。社区 skill 可以在 clawhub.com 找到。
六、多渠道接入
OpenClaw 支持同时接入多个聊天平台:Telegram、Discord、WhatsApp、飞书、QQ 等。配置好后,AI 在所有平台同时在线,你在哪个平台发消息,它就在哪里回复。
注意不同平台的格式差异:
| 平台 | Markdown 支持 | 字符限制 | 特殊注意 |
|---|---|---|---|
| Telegram | 支持 | 4096 字符 | 表格需要用代码块 |
| Discord | 支持 | 2000 字符 | 长内容自动分段 |
| 不支持 | — | 用 bullet list 代替表格 | |
| 飞书 | 不支持 | — | 纯文本,避免 Markdown |
AI 会根据当前渠道自动适配格式。在 SOUL.md 或 AGENTS.md 里写明各平台的格式偏好,效果更稳定。
七、配置速查表
blockStreaming — 流式回复
开启后回复像打字机一样逐字出现,体验更好。
{
"agents": {
"defaults": {
"blockStreamingDefault": "on",
"blockStreamingBreak": "text_end",
"blockStreamingChunk": { "minChars": 200, "maxChars": 1500 }
}
}
}
ackReaction — 确认收到
收到消息后先 react 一个 emoji,让你知道 AI 在处理中,不用干等。
{
"channels": {
"discord": { "ackReaction": "🫐" },
"telegram": { "ackReaction": "👀" }
}
}
compaction — 上下文不爆炸
配置 reserveTokensFloor + memoryFlush(见第二章)。相关命令:/compact、/new、/reset、/status。
Heartbeat 调优
{
"heartbeat": {
"every": "30m",
"target": "last",
"activeHours": { "start": "08:00", "end": "23:00" }
}
}
设了 activeHours 后 23:00-08:00 不会打扰你。
其他实用配置
tools.web.search.apiKey— Brave Search API(免费 2000 次/月)tools.exec.enabled— 允许执行 shell 命令channels.*.textChunkLimit— 单条消息最大字符数
配置 Checklist
按优先级排序,先做前 5 项(不到 1 小时)就能感受到明显提升:
- AGENTS.md:session 启动流程 + 记忆规范 + 安全边界30 分钟
- memoryFlush:开启压缩前自动保存5 分钟
- ackReaction:配置确认 emoji1 分钟
- blockStreaming:开启流式回复5 分钟
- Heartbeat 调优:设置 activeHours5 分钟
- memorySearch:配置免费 embedding API10 分钟
- 记忆维护:HEARTBEAT.md 加每周维护10 分钟
- 模型分级:配置 alias + AGENTS.md 分配策略15 分钟
- Cron 任务:设置 1-2 个定时任务15 分钟
- Skill 开发:写一个自定义 skill 练手30 分钟
- 多渠道:接入第二个聊天平台30 分钟
写在最后
到这一步,你的 OpenClaw 已经不是一个"聊天机器人"了——它更像一个真正的私人助手:
- 知道该怎么工作(AGENTS.md)
- 能记住重要的事,而且自己维护记忆
- 复杂任务可以派团队去做(子 Agent)
- 能定时执行任务(Cron)
- 可以学习新技能(Skill)
- 随时随地都能找到它(多渠道)
浏览器自动化、复杂工作流编排、多 Agent 协作……更深入的玩法,以后有机会再聊。