☰
OpenClaw Skill 实战:openclaw-memory 让 AI 记住你的偏好,配置文件与验证一次讲清
2026/9/26 11:38:09 网站建设 项目流程

1. 为什么你的 AI 总是“失忆”

用 OpenClaw 搭本地 AI 工具链的人,大概率都遇到过这个场景:昨天刚跟它说过“回答别啰嗦,代码块必须标语言,时区按 Asia/Shanghai 算”,今天开个新会话,它又变回那个话痨,连你项目用 Go 还是 Node 都要重新问一遍。每次都要把偏好、技术栈、项目背景重新交代一次,时间全耗在“复读”上。

这个问题的根子在于:会话是隔离的,上下文只活在当前这一轮对话里。模型本身没有跨会话的长期记忆,你不主动喂给它,它就当你是陌生人。OpenClaw 的openclaw-memorySkill 就是来解决这件事的——它把用户偏好、项目事实、关键决策写进本地文件,会话启动时自动检索并注入系统提示,让 AI 在新会话里也能“记得你”。

它适合谁?适合已经在用 OpenClaw 跑日常编码、文档、Agent 任务,并且希望减少重复交代成本的开发者。整套机制零外部数据库依赖,纯文件存储,Node.js 环境即可跑起来。下面我把配置骨架、TaoToken 通道接入、验证动作和踩坑排查一次讲清,你照着做就能让 AI 记住你的偏好。

2. TaoToken 前置:统一 Key 与 API 通道

openclaw-memory本身只负责记忆的存取和注入,真正生成回复还是要走模型通道。如果你在 OpenClaw 里同时接了好几个模型供应商,Key 散落在各处,换模型就要改配置,很烦。我的做法是用 TaoToken 做统一入口:一个 Key 覆盖多家模型,OpenClaw 侧只认一个base_url和一个api_key,记忆 Skill 注入的上下文也能稳定地送到同一个通道。

先拿到 Key。打开控制台创建 API Key,地址是 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。创建后复制那串sk-开头的字符串,后面配置里要用。

TaoToken 的 API 基址是https://taotoken.net/api,注意这个地址不带任何查询参数,直接作为 OpenAI 兼容的base_url使用。OpenClaw 的模型调用层如果走 OpenAI SDK 风格,填这个就行。想先确认通道通不通,可以去模型对话页发一条测试消息:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。如果你打算长期跑编码类 Agent 任务,Coding Plan 的额度模型更适合高频调用,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。

注意:TaoToken 在这里的角色是统一的模型 API 通道,不是“中转”也不是替代 OpenClaw 本身。记忆的存储、检索、注入全部在本地由openclaw-memory完成,TaoToken 只负责把请求送到模型。

3. 可复制配置:settings.json 与 config.toml 关键字段

OpenClaw 的 Skill 配置分两层:一层是 Skill 自身的settings.json,控制记忆行为;一层是config.toml,控制模型通道和 Skill 加载。下面这份骨架可以直接抄,改掉路径和 Key 即可。

3.1 settings.json:记忆 Skill 行为配置

放在~/.openclaw/skills/openclaw-memory/settings.json:

{ "memory": { "enabled": true, "storage_dir": "~/.openclaw/workspace/memory", "episodes_dir": "~/.openclaw/workspace/memory/episodes", "insights_file": "~/.openclaw/workspace/memory/insights.json", "entities_file": "~/.openclaw/workspace/memory/entities.json", "index_file": "~/.openclaw/workspace/memory/index.json", "auto_extract": true, "inject_on_session_start": true, "top_k": 5, "time_decay_days": 30, "max_inject_chars": 2000, "sensitive_filter": true } }

几个字段值得单独说。auto_extract打开后,Skill 会从对话里按规则识别“偏好/决策/事实/联系人”四类信息并落盘;inject_on_session_start决定新会话是否自动把检索到的记忆拼进系统提示;top_k是每次注入的记忆条数,别设太大,5 条左右既能提供上下文又不会把提示词撑爆;time_decay_days是时间衰减半衰期,30 天意味着一个月前的记忆权重降到约 0.37,避免老偏好压过新偏好。

3.2 config.toml:模型通道与 Skill 加载

放在~/.openclaw/config.toml:

[model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoToken密钥" model = "claude-sonnet-4-20250514" timeout_seconds = 60 [skills] enabled = ["openclaw-memory"] [skills.openclaw-memory] settings_path = "~/.openclaw/skills/openclaw-memory/settings.json" priority = 10

base_url填 TaoToken 的 API 地址,api_key填上一步拿到的 Key。model按你实际可用的模型名填,TaoToken 支持多家模型,具体名称以控制台展示为准。priority给 10 是为了让记忆 Skill 在会话启动阶段优先执行,保证上下文在模型调用前就注入完毕。

3.3 手动写入一条偏好做种子

配置好之后,先手动写一条偏好,方便后面验证。在~/.openclaw/workspace/memory/episodes/下按日期建一个 JSONL 文件,比如2026-03-03.jsonl,追加一行:

{"ts":1709449200000,"type":"insight","content":"用户偏好简洁回答,代码块必须标注语言,时区按 Asia/Shanghai","tags":["preference","communication"],"src":"manual_seed"}

这行的type是insight,tags里带preference,检索时更容易命中。时间戳用毫秒,随便填一个近期值即可。

4. 验证请求:重启会话确认记忆生效

配置写完不算完,得验证 AI 真的读到了。验证分三步:确认文件落盘、确认检索命中、确认模型回复沿用了偏好。

4.1 确认记忆文件已生成

先跑一次 OpenClaw 会话,随便聊两句,然后检查文件:

ls -la ~/.openclaw/workspace/memory/ cat ~/.openclaw/workspace/memory/insights.json

如果auto_extract生效,insights.json里应该能看到preferences.communication之类的结构化字段。如果文件是空的,说明提取规则没命中,回到第 5 节排查。

4.2 用检索接口验证命中

OpenClaw 的 memory Skill 一般会暴露一个检索命令,或者你可以在会话里直接问它“你还记得我的回答偏好吗”。更稳妥的方式是看注入日志。把日志级别调到 debug:

[logging] level = "debug" memory_trace = true

重启 OpenClaw 后开新会话,日志里会打印类似[memory] injected 3 episodes, 412 chars的行。看到这行,说明检索和注入链路是通的。

4.3 重启会话,观察回复是否沿用偏好

这是最关键的一步。完全退出 OpenClaw 进程,重新启动,开一个全新会话,然后发一条会触发偏好的消息,比如:

帮我写个读取 JSON 文件的 Node.js 函数

如果记忆生效,AI 的回复应该满足:代码块带语言标注、解释简短不啰嗦。如果它又开始长篇大论、代码块不标语言,说明注入没生效,去第 5 节对号入座。

我实测下来,最容易出问题的是inject_on_session_start和priority这两个字段——前者没开,记忆写了也不注入;后者太低,Skill 执行晚于模型调用,上下文就赶不上这班车。

5. 本篇常见错排查

5.1 记忆写了但新会话读不到

先看settings.json里inject_on_session_start是不是true。再看config.toml里[skills] enabled数组有没有把openclaw-memory写进去,拼写错一个字母 Skill 就不会加载。最后确认settings_path指向的路径真实存在,OpenClaw 不会自动创建这个文件。

5.2 检索命中但注入内容为空

多半是max_inject_chars设得太小,或者top_k为 0。另外检查index.json是否生成——如果索引文件缺失,检索会返回空。删掉index.json让 Skill 重建一次:

rm ~/.openclaw/workspace/memory/index.json

重启后 Skill 会扫描episodes/目录重建索引。

5.3 模型通道报 401 或超时

401 基本是 Key 问题。确认config.toml里的api_key是完整的sk-字符串,没有多余空格或换行。如果 Key 没问题还是 401,去控制台确认这个 Key 的状态和额度:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。超时的话把timeout_seconds调到 120 试试,长上下文注入会稍微增加首包时间。

5.4 敏感信息被误过滤

settings.json里sensitive_filter为true时,包含password、api_key、token等关键词的内容会被拒绝存储。如果你确实需要记一条含这些词但非敏感的信息,临时把它设为false,存完再改回来。别长期关着,容易把真密钥写进记忆文件。

5.5 中文检索效果差

默认分词是按空格和标点切的,中文长句会被切成一大块,TF-IDF 命中率低。两个办法:一是写记忆时手动加tags,检索时标签权重更高;二是把content写短一点,一条记忆只讲一件事,别把偏好、项目、决策混在一行里。

6. 把记忆接进你的日常编码流

配置跑通之后,openclaw-memory的价值会随着使用时间慢慢显现。我的习惯是:每次开新项目,先手动写一条fact类型的记忆,把技术栈和目录约定记下来;每次做了架构决策,写一条decision,把选型和理由一起存;偏好类的信息交给auto_extract自动抓,抓漏了再手动补。

如果你还没配模型通道,先去 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 拿 Key,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,里面有 OpenAI 兼容调用的完整示例。长期跑编码 Agent 的话,Coding Plan 的额度模型比按次计费更划算,入口在 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。想先验证模型回复质量,去模型对话页发几条测试消息最快:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。

最后提醒一句:记忆文件里别存密钥、密码、身份证号这类东西。sensitive_filter能挡一部分,但挡不住所有变体。养成习惯,敏感信息走环境变量,记忆只存偏好和项目上下文。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询