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_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。创建后复制那串sk-开头的字符串后面配置里要用。TaoToken 的 API 基址是https://taotoken.net/api注意这个地址不带任何查询参数直接作为 OpenAI 兼容的base_url使用。OpenClaw 的模型调用层如果走 OpenAI SDK 风格填这个就行。想先确认通道通不通可以去模型对话页发一条测试消息https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。如果你打算长期跑编码类 Agent 任务Coding Plan 的额度模型更适合高频调用入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。注意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 10base_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是insighttags里带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_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。超时的话把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_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 拿 Key接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有 OpenAI 兼容调用的完整示例。长期跑编码 Agent 的话Coding Plan 的额度模型比按次计费更划算入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。想先验证模型回复质量去模型对话页发几条测试消息最快https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。最后提醒一句记忆文件里别存密钥、密码、身份证号这类东西。sensitive_filter能挡一部分但挡不住所有变体。养成习惯敏感信息走环境变量记忆只存偏好和项目上下文。