1. 先搞清楚 self-improving 和 self-improving-agent 到底差在哪
OpenClaw 里的 SKILL 机制允许你把不同能力拆成独立技能包,其中 self-improving 系列负责让 Agent 在跑任务的过程中"记住教训"。但很多人第一次接触时会发现有两个名字很像的技能:self-improving 和 self-improving-agent。它们不是同一个东西的版本号,而是两套设计思路完全不同的实现。
self-improving 是核心版,采用分层存储架构,把记忆分成 HOT、WARM、COLD 三层,HOT 层常驻内存且限制在 100 行以内,冷数据按 30/90 天规则自动归档。它内置了自我反思框架、冲突解决策略和明确的安全边界,适合需要长期记忆管理的场景。self-improving-agent 则是轻量版,把学习记录写进工作区的.learnings/目录,结构扁平,需要手动整理,更适合快速记录错误和修正。
如果你正在搭建一个需要跨会话积累经验的 Agent,选错技能会导致记忆膨胀、检索变慢、甚至把不该记的东西写进持久化文件。这篇内容会给出可复制的config.toml骨架、TaoToken 统一 Key 的接入方式,以及通过日志和行为对比验证 self-improving 是否真正生效的具体操作。
2. 接入前的准备:用 TaoToken 统一管理模型 Key
在配置 SKILL 之前,先把模型调用通道理顺。OpenClaw 的 self-improving 在反思阶段会调用模型做总结和模式识别,如果 Key 管理混乱,排查问题时很难区分是技能没生效还是请求根本没发出去。
TaoToken 的作用是把不同模型的调用统一到一个 API 端点上,你只需要在配置里填一个 Key,就能切换底层模型。对于 self-improving 这种需要频繁做小请求的场景,统一入口能省掉不少切换成本。
具体操作:先到控制台创建一个 API Key,地址是 https://taotoken.net/console 。创建完成后,在接入文档页 https://taotoken.net/doc 可以查到完整的请求格式和可用模型列表。如果你只是想先验证模型通不通,可以直接在模型对话页 https://taotoken.net/model 发一条测试消息,确认返回正常后再写进配置。
API 端点统一使用 https://taotoken.net/api ,不需要额外加参数。Key 建议通过环境变量注入,不要硬编码在config.toml里,后面排障时也方便替换。
3. 可复制的 config.toml 骨架
下面这份配置把 self-improving 核心版作为主技能,同时保留 self-improving-agent 的日志目录作为过渡期的兼容层。你可以直接复制后按自己的路径调整。
# ~/.openclaw/config.toml [model] provider = "taotoken" api_base = "https://taotoken.net/api" api_key_env = "TAOTOKEN_API_KEY" default_model = "claude-sonnet-4-20250514" max_tokens = 4096 timeout_seconds = 60 [workspace] root = "~/.openclaw/workspace" learnings_dir = "~/.openclaw/workspace/.learnings" [skills.self-improving] enabled = true storage_root = "~/self-improving" hot_memory_limit = 100 warm_retention_days = 30 cold_archive_days = 90 auto_promote_threshold = 3 reflection_enabled = true conflict_resolution = "priority" never_store = ["credentials", "health_data", "third_party_info"] [skills.self-improving-agent] enabled = false log_dir = "~/.openclaw/workspace/.learnings" log_format = "structured" priority_levels = ["low", "medium", "high", "critical"] [heartbeat] enabled = true interval_minutes = 30 maintenance_tasks = ["compress_hot", "archive_cold", "dedupe_patterns"]几个关键参数说明。hot_memory_limit控制常驻内存的行数,超过这个值会触发压缩,建议不要调太高,否则每次请求都要加载大量上下文。auto_promote_threshold设为 3 表示同一个模式出现三次后自动从 WARM 提升到 HOT,这是 self-improving 的核心机制之一。never_store列表是安全边界,明确禁止写入凭证和健康数据,这个不要删。
self-improving-agent这里设为false,但保留了配置段,方便你在迁移期做对比测试。等确认核心版稳定后,可以把整个段删掉。
4. 验证 self-improving 是否真正生效
配置写完不代表技能在跑。你需要通过日志和行为两个维度来确认。
4.1 日志验证
启动 OpenClaw 后,先触发一次需要反思的任务。比如让 Agent 执行一个会失败的命令,然后观察~/self-improving/目录下是否生成了对应文件。
# 查看 self-improving 存储结构 ls -la ~/self-improving/ # 预期输出 # memory.md # HOT 层,常驻 # index.md # 主题索引 # heartbeat-state.md # 心跳状态 # corrections.md # 最近修正记录 # projects/ # 项目级学习点 # domains/ # 领域级学习点 # archive/ # COLD 层归档如果memory.md不存在或者为空,说明反思流程没有触发。检查config.toml里reflection_enabled是否为true,以及模型请求是否正常返回。
接着看corrections.md的内容格式:
tail -20 ~/self-improving/corrections.md正常输出应该包含时间戳、任务类型、反思内容和改进建议。如果只有时间戳没有内容,多半是模型返回被截断,检查max_tokens是否够用。
4.2 行为对比验证
日志有了,还要确认 Agent 的行为真的变了。做一组对照实验:
第一轮,让 Agent 执行一个会报错的命令,比如访问一个不存在的文件路径。记录它的反应。
# 第一轮:触发错误 openclaw run "读取 /tmp/nonexistent-config.yaml 并解析"Agent 会报错,self-improving 会把这次失败写入corrections.md。
第二轮,隔几分钟后执行同类任务,但换一个不存在的路径。
# 第二轮:同类错误,观察是否复用上次的教训 openclaw run "读取 /tmp/another-missing-file.json 并解析"如果 self-improving 生效,第二轮的错误处理应该更快,或者 Agent 会主动提示"这类路径不存在的情况之前遇到过,建议先检查文件是否存在"。这个行为差异就是 self-improving 在起作用。
你还可以查看heartbeat-state.md确认心跳维护任务是否在跑:
cat ~/self-improving/heartbeat-state.md里面会记录上次压缩、归档、去重的时间。如果这些时间戳一直不变,说明 heartbeat 没有正确集成,检查config.toml里maintenance_tasks的配置。
5. 本篇常见错误排查
5.1 技能加载了但 memory.md 一直是空的
最常见的原因是storage_root路径没有写权限,或者路径用了相对路径导致解析到了错误位置。把storage_root改成绝对路径再试。另一个可能是reflection_enabled被其他配置覆盖了,用openclaw config show确认最终生效值。
5.2 两个技能同时开启导致日志重复写入
如果你把self-improving和self-improving-agent都设为enabled = true,会出现同一件事被记录两次的情况。核心版写进~/self-improving/,轻量版写进.learnings/,两边内容不一致时排查会很痛苦。建议按第 3 节的配置,只开核心版,轻量版设为false作为过渡。
5.3 模型请求返回 401 或 403
先确认环境变量TAOTOKEN_API_KEY是否在当前 shell 会话中生效。用echo $TAOTOKEN_API_KEY检查,如果为空,说明没有 export 或者写在了错误的 profile 文件里。另外确认api_base写的是https://taotoken.net/api,不要多加路径后缀。如果 Key 本身有问题,到 https://taotoken.net/api-keys 重新生成一个再试。
5.4 HOT 层超过 100 行但没有自动压缩
检查heartbeat段是否启用,以及interval_minutes是否设得太大。压缩动作是在心跳周期里执行的,如果间隔是 30 分钟,那最多要等 30 分钟才会触发。你可以手动跑一次维护任务来验证:
openclaw skill run self-improving --task compress_hot如果手动执行成功但自动不触发,说明 heartbeat 的调度有问题,检查 OpenClaw 主进程是否在运行。
5.5 反思内容质量差,全是套话
这通常是模型选择的问题。self-improving 的反思质量高度依赖底层模型的总结能力。如果你用的是较小的模型,反思内容容易变成"下次要注意"这种没有信息量的句子。在config.toml里把default_model换成更强的模型,或者在技能级别单独指定模型。TaoToken 的模型列表里可以找到适合做总结的选项,具体在 https://taotoken.net/doc 的模型章节有说明。
6. 长期跑下去,Key 和技能怎么配合
self-improving 的价值在于跨会话积累,这意味着它会持续调用模型做反思、压缩、去重。如果每次请求都走不同的 Key 或者不同的端点,日志会散落在各处,排查成本很高。
把 TaoToken 作为统一入口的好处是,你可以在一个地方看到所有请求的量级和失败率。当 self-improving 的反思请求突然变多或者报错率上升时,能快速定位是技能配置问题还是 Key 额度问题。
如果你打算长期跑编码类 Agent,可以了解一下 Coding Plan 的额度方案,地址是 https://taotoken.net/coding-plan 。它针对高频小请求做了优化,比较适合 self-improving 这种需要频繁做短请求的场景。
配置改完后,建议先跑一周观察~/self-improving/目录的增长速度。如果archive/膨胀太快,说明cold_archive_days设得太短,可以适当调大。如果memory.md频繁触顶,说明auto_promote_threshold太低,把 3 改成 5 能减少误提升。这些参数没有标准答案,按你自己的任务密度来调就行。