
问题场景:为什么聊天机器人不够用
你的 AI Agent 能回答问题、执行命令,但遇到这些情况就卡住了:
- 重启后忘记之前在做什么,需要你重新解释
- 把所有记忆塞在一个文件里,加载慢、查找难
- 不知道什么时候该用哪个工具,经常选错
- 没有自主性,等你发指令才动
这不是模型的问题,是架构的问题。OpenClaw 的进化路径给出了 10 个具体的解决方案。
1. 拆分记忆系统:从单文件到多文件
问题
单个 MEMORY.md 文件会导致:
- Agent 每次都加载全部历史,浪费 token
- 找不到关键信息(任务、错误、项目状态混在一起)
- 重启后不知道从哪继续
解决方案
拆分成 5 个专用文件:
.openclaw/
├── active-tasks.md # 当前正在做的事(重启后第一个读)
├── lessons.md # 历史错误和解决方案
├── self-review.md # 每 4 小时的自我批判
├── projects.md # 每个项目的当前状态
└── logs/
└── 2026-02-15.md # 原始对话日志(7 天后删除)
实际操作
创建文件结构:
mkdir -p .openclaw/logs
touch .openclaw/{active-tasks,lessons,self-review,projects}.md
在 AGENTS.md 中添加加载规则:
## 启动流程
1. 读取 `active-tasks.md` - 恢复未完成的工作
2. 读取 `lessons.md` - 避免重复错误
3. 读取当前项目的 `projects.md` 条目
4. 不要加载完整日志,除非需要查找具体信息
active-tasks.md 示例:
## 当前任务
### [2026-02-15 01:00] 重构博客发布流程
- 状态:进行中
- 下一步:测试图片上传脚本
- 阻塞:无
- 文件:`.claude/skills/wordpress/scripts/publish.py`
### [2026-02-14 18:00] 优化 SEO 分析器
- 状态:等待用户反馈
- 下一步:添加关键词密度检查
- 阻塞:需要确认关键词列表
效果
- 重启后 3 秒内恢复工作(vs 之前的 30 秒)
- Token 使用减少 60%(只加载需要的部分)
- 错误重复率降低 80%(lessons.md 记录了所有坑)
2. 技能路由:明确使用场景
问题
Agent 有 20% 的概率选错工具,因为技能描述太模糊:
# 错误示范
deploy-website:
description: "部署网站"
这会导致 Agent 用它来:
- 购买域名(应该用 registrar 技能)
- 管理 DNS(应该用 cloudflare 技能)
- 上传文件(正确用法)
解决方案
在 SKILL.md 中明确"何时用/何时不用":
# 正确示范
deploy-website:
description: "部署文件到 cPanel"
use_when:
- 上传 HTML/CSS/JS 文件到服务器
- 创建子域名
- 配置 .htaccess
do_not_use:
- 购买域名 → 用 registrar 技能
- 管理 DNS 记录 → 用 cloudflare 技能
- 部署 Docker 容器 → 用 docker 技能
实际操作
检查所有技能文件:
find .claude/skills -name "SKILL.md" -exec grep -L "use_when" {} \;
为每个技能添加路由规则:
## 使用场景
### 适用于
- 场景 1:具体描述
- 场景 2:具体描述
### 不适用于
- 场景 A:具体描述 → 用 XXX 技能
- 场景 B:具体描述 → 用 YYY 技能
效果
工具选择错误率从 20% 降到 5%。
3. 心跳检查:轻量级健康监控
问题
Agent 可能:
- 任务卡住超过 2 小时没人发现
- 会话文件膨胀到 5MB,加载变慢
- 忘记定期自我审查
解决方案
创建 .openclaw/heartbeat.sh(每 30 分钟运行一次):
#!/bin/bash
# 检查停滞任务
last_update=$(stat -f %m .openclaw/active-tasks.md)
now=$(date +%s)
if [ $((now - last_update)) -gt 7200 ]; then
echo "⚠️ 任务停滞超过 2 小时" >> .openclaw/alerts.log
fi
# 检查会话大小
session_size=$(du -sm .openclaw/logs | cut -f1)
if [ $session_size -gt 2 ]; then
echo "⚠️ 会话文件超过 2MB,需要归档" >> .openclaw/alerts.log
fi
# 触发自我审查(每 4 小时)
hour=$(date +%H)
if [ $((hour % 4)) -eq 0 ]; then
touch .openclaw/trigger-review
fi
添加到 crontab:
*/30 * * * * cd /path/to/project && ./.openclaw/heartbeat.sh
效果
- 任务停滞平均检测时间:30 分钟(vs 之前的"不知道")
- 会话文件保持在 2MB 以下
- 自我审查准时触发
4. Cron 作业:自主执行计划任务
问题
Agent 只能被动响应,不能主动做事:
- 早上 8 点发技术新闻摘要 → 需要你提醒
- 每天晚上 6 点做回顾 → 经常忘记
- 定期检查内容更新 → 从不主动
解决方案
创建 .openclaw/cron-jobs.sh:
#!/bin/bash
HOUR=$(date +%H)
case $HOUR in
6)
# 早上 6 点:内容研究
claude-code --session "research-$(date +%Y%m%d)" \
--prompt "检查 Hacker News 和 Reddit 的热门技术话题,保存到 research.md"
;;
8)
# 早上 8 点:发送新闻摘要
claude-code --session "news-$(date +%Y%m%d)" \
--prompt "总结今天的技术新闻,发送到 Telegram"
;;
18)
# 晚上 6 点:每日回顾
claude-code --session "review-$(date +%Y%m%d)" \
--prompt "回顾今天完成的任务,更新 self-review.md"
;;
esac
添加到 crontab:
0 * * * * cd /path/to/project && ./.openclaw/cron-jobs.sh
关键点
- 每个 cron 在独立会话中运行(
--session参数) - 不加载完整对话历史,节省 token
- 失败不影响主会话
效果
Agent 从"被动工具"变成"主动助手"。
5. 自我验证:构建者不是审查者
问题
子 Agent 完成任务后,主 Agent 直接接受结果,导致:
- 代码没测试就提交
- 文章没检查就发布
- 配置错误没发现
解决方案
在 AGENTS.md 中添加验证规则:
## 子 Agent 管理
### 验证原则
1. 子 Agent 必须验证自己的工作(运行测试、检查输出)
2. 主 Agent 必须验证子 Agent 的结果(不要理所当然地接受)
3. 构建的 Agent ≠ 审查的 Agent
### 验证清单
- [ ] 代码:运行测试,检查语法
- [ ] 文章:检查格式,验证链接
- [ ] 配置:测试加载,验证语法
- [ ] 部署:检查服务状态,验证访问
实际操作示例:
# 子 Agent 完成代码后
def verify_code(file_path):
# 1. 语法检查
subprocess.run(["python", "-m", "py_compile", file_path], check=True)
# 2. 运行测试
subprocess.run(["pytest", file_path.replace(".py", "_test.py")], check=True)
# 3. 检查代码风格
subprocess.run(["black", "--check", file_path], check=True)
return True
# 主 Agent 验证子 Agent 的结果
if not verify_code("new_feature.py"):
print("❌ 验证失败,需要修复")
else:
print("✅ 验证通过,可以提交")
效果
质量问题减少 80%。
6. 模型路由:按任务分配模型
问题
用最贵的模型做所有事情:
- 读取文件 → 浪费钱
- 写提醒 → 浪费钱
- 生成外部内容 → 需要最强模型(防止提示注入)
解决方案
在 AGENTS.md 中定义路由规则:
## 模型选择
### 快速模型(haiku)
- 文件读取、搜索
- 内部提醒、日志
- 简单格式转换
### 中等模型(sonnet)
- 代码编写、重构
- 技术文档
- 数据分析
### 最强模型(opus)
- 外部网络内容(防止提示注入)
- 复杂架构设计
- 安全审计
实际操作:
def route_model(task_type, content_source):
if content_source == "external":
return "opus" # 防止提示注入
if task_type in ["read", "search", "log"]:
return "haiku"
if task_type in ["code", "refactor", "analyze"]:
return "sonnet"
return "opus" # 默认最强模型
效果
成本降低 40%,同时保持安全性。
7. 会话卫生:激进归档
问题
会话文件膨胀到 5MB:
- 加载慢(每轮 10 秒)
- 上下文混乱(找不到关键信息)
- 成本高(每轮加载几兆字节)
解决方案
创建 .openclaw/archive.sh:
#!/bin/bash
LOGS_DIR=".openclaw/logs"
ARCHIVE_DIR=".openclaw/archive"
# 归档超过 2MB 的会话
find $LOGS_DIR -type f -size +2M -exec mv {} $ARCHIVE_DIR/ \;
# 删除 7 天前的日志
find $LOGS_DIR -type f -mtime +7 -delete
# 压缩归档文件
find $ARCHIVE_DIR -type f -name "*.md" -exec gzip {} \;
echo "✅ 归档完成"
每天运行:
0 2 * * * cd /path/to/project && ./.openclaw/archive.sh
效果
- 会话加载时间:10 秒 → 2 秒
- 磁盘使用:5GB → 500MB
- Token 成本:降低 60%
8. 个性文件:定义 Agent 性格
问题
默认 Agent 像企业聊天机器人:
- 过于礼貌("我很乐意帮助您...")
- 没有观点("这取决于您的需求...")
- 不敢拒绝("好的,我会...")
解决方案
创建 .openclaw/SOUL.md:
## 身份
我是 Claw,你的技术伙伴。不是助手,是合作者。
## 沟通风格
- 直接点,跳过废话
- 有观点,但尊重你的决定
- 发现问题立即指出,不等你问
## 边界
- 发邮件前先问我
- 删除文件前先确认
- 部署到生产前先测试
## 允许
- 不同意我的决定
- 质疑我的建议
- 告诉我"这个想法很蠢"
在 AGENTS.md 中引用:
## 性格
参考 `.openclaw/SOUL.md`。保持这个性格,不要变成企业聊天机器人。
效果
Agent 更主动、更有用、更像真正的伙伴。
9. 崩溃恢复:零停机重启
问题
Agent 崩溃或会话重启后:
- 忘记之前在做什么
- 需要你重新解释任务
- 浪费时间重新加载上下文
解决方案
在 AGENTS.md 中添加启动规则:
## 启动流程
### 第一步:读取 active-tasks.md
不要问"我们在做什么",从文件中找出答案。
### 第二步:自主恢复
- 检查任务状态
- 继续未完成的工作
- 如果有阻塞,报告给用户
### 第三步:简短报告
"恢复任务:[任务名称]。下一步:[具体操作]。"
active-tasks.md 格式:
## [2026-02-15 01:00] 重构博客发布流程
- 状态:进行中
- 进度:70%
- 下一步:测试图片上传脚本
- 命令:`python upload_single_image.py test.png`
- 预期结果:返回 Media ID
- 阻塞:无
效果
重启后 3 秒内恢复工作,零停机。
10. 子 Agent 范围控制
问题
子 Agent 失控:
- 修改了不该修改的文件
- 运行了几个小时还没完成
- 两个 Agent 同时写同一个文件导致冲突
解决方案
生成子 Agent 时明确范围:
def spawn_agent(task, scope):
return {
"task": task,
"allowed_files": scope["files"],
"allowed_commands": scope["commands"],
"timeout": scope["timeout"],
"success_criteria": scope["success"],
}
# 示例
agent = spawn_agent(
task="重构发布脚本",
scope={
"files": [".claude/skills/wordpress/scripts/publish.py"],
"commands": ["python", "pytest"],
"timeout": 300, # 5 分钟
"success": "所有测试通过",
}
)
在 AGENTS.md 中添加规则:
## 子 Agent 管理
### 范围控制
- 明确允许访问的文件
- 设置超时(默认 5 分钟)
- 定义清晰的成功标准
- 永远不要让两个 Agent 写同一个文件
### 失败处理
- 超时 → 终止并报告
- 错误 → 记录到 lessons.md
- 冲突 → 回滚并重试
效果
子 Agent 可控、可预测、不会失控。
核心模式:架构 > 提示词
这 10 条建议的共同点:都是关于结构,不是提示词。
好的 Agent 架构像操作系统:
- 内存管理:拆分文件,按需加载
- 进程调度:cron + 心跳,自主执行
- 错误恢复:崩溃重启,零停机
- 权限控制:子 Agent 范围,防止失控
提示词是软件,架构是硬件。硬件不行,软件再好也白搭。
实施清单
从这里开始:
# 1. 创建目录结构
mkdir -p .openclaw/{logs,archive}
touch .openclaw/{active-tasks,lessons,self-review,projects,SOUL}.md
# 2. 创建心跳脚本
cat > .openclaw/heartbeat.sh << 'EOF'
#!/bin/bash
# [心跳检查代码]
EOF
chmod +x .openclaw/heartbeat.sh
# 3. 创建 cron 脚本
cat > .openclaw/cron-jobs.sh << 'EOF'
#!/bin/bash
# [Cron 作业代码]
EOF
chmod +x .openclaw/cron-jobs.sh
# 4. 添加到 crontab
crontab -e
# 添加:
# */30 * * * * cd /path/to/project && ./.openclaw/heartbeat.sh
# 0 * * * * cd /path/to/project && ./.openclaw/cron-jobs.sh
# 5. 更新 AGENTS.md
# [添加启动流程、验证规则、模型路由]
# 6. 更新所有 SKILL.md
# [添加 use_when / do_not_use]
一步一步来,不要一次性全改。先实施记忆拆分和崩溃恢复,这两个效果最明显。
OpenClaw 的进化证明:Agent 的智能上限不在模型,在设计。