2026-02-14 · 实战
32
实战 · 2026-02-14

OpenClaw 进化指南:从聊天机器人到自主操作系统的 10 个架构决策

问题场景:为什么聊天机器人不够用

你的 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 分析器
- 状态:等待用户反馈
- 下一步:添加关键词密度检查
- 阻塞:需要确认关键词列表

效果

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

效果

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

关键点

效果

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

效果

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 的智能上限不在模型,在设计。

目录 最新
← 左侧翻上一屏 · 右侧翻下一屏 · 中间唤出菜单