
1. 为什么你的 OpenClaw 总是“失忆”刚上手 OpenClaw 的朋友十有八九会遇到同一个尴尬明明昨天刚跟它说过“以后回答都用中文”今天再开对话它又切回英文了或者你花半小时喂给它一份项目背景第二天它像从没听过一样。这不是模型笨而是 memory 没配好。OpenClaw 的 memory 是一套本地长期记忆系统Agent 在对话里积累的偏好、事实、上下文会被写成结构化的 Markdown 文件存在~/.openclaw/memory/目录下再通过向量索引支持语义搜索。换句话说它给 Agent 装了一个“随身笔记本”而不是每次对话都从零开始。这套能力特别适合个人开发者、独立养虾单人维护一个 Agent 项目的场景你不需要团队协作但需要 Agent 记住你的习惯、你的项目结构、你反复强调的规则。问题在于memory 的配置项散落在config.toml里索引、存储路径、模型通道任何一环没对齐就会出现“写了但搜不到”“搜到了但读不出”“重启后全丢”这几类典型故障。这篇就按“能跑通、能验证、能排障”的顺序把 OpenClaw memory 的配置骨架和验证清单讲清楚顺带把模型通道用 TaoToken 统一起来省得你在多个 Key 之间来回切。2. 前置准备TaoToken 统一 Key 与 API 通道在动 memory 之前先把模型通道理顺。OpenClaw 的 memory 索引和语义搜索都要调用 embedding 或对话模型如果通道不稳定memory 的写入和检索会时好时坏排查起来非常痛苦。我习惯用 TaoToken 做统一入口一个 Key 覆盖对话和 embedding配置里只维护一处。你需要先拿到 API Key入口在控制台的 API Keys 页面https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。创建后复制那串sk-开头的 Key后面写进config.toml。TaoToken 的 API 基址是https://taotoken.net/api注意这个地址不带任何查询参数直接作为 base_url 使用。模型对话相关的调试可以在模型对话页做https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 先确认你的 Key 能正常出话再去配 memory能少走一半弯路。如果你后面要长期跑编码类 Agent或者让 memory 服务于一个持续运行的 coding 工作流可以了解下 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 它更适合高频、长周期的调用场景。接入细节和参数说明统一看文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。注意memory 的 embedding 调用和对话调用建议走同一个通道避免两边模型版本不一致导致向量维度对不上索引重建会报错。3. 可复制的 config.toml 骨架下面这份骨架是我实测能跑通的最小配置你可以直接抄把 Key 换成自己的。重点看[memory]和[model]两段其余按需保留。# ~/.openclaw/config.toml [model] # 统一走 TaoToken 通道 provider openai-compatible base_url https://taotoken.net/api api_key sk-你的TaoToken密钥 chat_model gpt-4o-mini embedding_model text-embedding-3-small [memory] # 记忆文件存储目录默认就是这里显式写出来方便排查 path ~/.openclaw/memory # 开启长期记忆 enabled true # 向量索引文件位置 index_path ~/.openclaw/memory/.index # 单次检索返回条数上限 search_limit 20 # 写入记忆时自动打标签 auto_tag true # 索引重建时是否清空旧索引 reindex_clean false [memory.retrieval] # 语义搜索相似度阈值低于该值不返回 min_score 0.35 # 是否混合关键词与向量检索 hybrid true [session] # 会话与记忆的关联开关 link_memory true几个容易踩的点先说明。base_url一定不要带尾部斜杠也不要拼/v1OpenClaw 会自己补路径多写一段就 404。embedding_model和chat_model可以是不同模型但都要在 TaoToken 支持的列表里否则启动时校验不过。index_path建议放在 memory 目录内部方便整体备份或迁移别丢到/tmp下重启就没了。配置写完后先别急着跑对话用命令行确认配置能被解析openclaw config validate如果输出config OK说明语法和字段都没问题。报unknown field就是字段名拼错了报missing api_key就是 Key 没填对。4. 验证 memory 读写是否真的生效配置对不对不看日志看行为。下面这套验证动作按顺序做一遍基本能确认 memory 全链路通了。第一步写入一条记忆。启动一次对话明确告诉 Agent 一个偏好openclaw chat # 在对话里输入 # 记住我以后所有技术文档都用中文代码注释也用中文。退出对话后直接看文件系统ls -la ~/.openclaw/memory/正常的话你会看到一个新的.md文件文件名类似mem_a1b2c3.md内容带 front matter--- id: mem_a1b2c3 created: 2026-03-01T10:00:00Z tags: [用户偏好, 语言] --- 用户偏好使用中文沟通技术文档也用中文。如果目录是空的说明写入没触发回去检查[memory] enabled是否为true以及[session] link_memory是否开启。第二步用命令行检索openclaw memory search 语言偏好能返回刚才那条记忆说明向量索引工作正常。如果返回空但文件确实存在那就是索引没建执行openclaw memory reindex再搜一次。reindex是手动改了记忆文件后必须做的动作否则索引和文件会对不上。第三步看统计信息确认条数和索引状态openclaw memory stats输出里会显示记忆总数、索引条目数、最后重建时间。两个数字应该一致不一致就再reindex一次。第四步做一次“跨会话召回”测试。关掉当前会话重新开一个全新对话问它openclaw chat # 输入我之前说过文档用什么语言如果它回答“中文”说明长期记忆真的生效了而不是靠当前会话的上下文。这一步是区分“假记忆”和“真记忆”的关键很多人只测了同一会话内误以为配好了。5. 常见报错与排查清单memory 相关的报错大多集中在索引和通道两块下面按现象列排查路径。报错一embedding dimension mismatch现象是写入记忆时报维度不一致。原因是embedding_model换过但旧索引还是老维度。解决方式是删掉索引目录重建rm -rf ~/.openclaw/memory/.index openclaw memory reindex重建后维度会按当前模型重新生成。以后换 embedding 模型记得都走这一步。报错二memory search返回空但文件存在先确认索引是否包含该文件openclaw memory list --format json如果列表里有但 search 搜不到多半是min_score设太高。把[memory.retrieval] min_score从0.35调到0.2再试。相似度阈值对短文本特别敏感中文短句的向量分数普遍偏低别一上来就设 0.5。报错三connection refused或401这是通道问题不是 memory 本身。检查base_url是否为https://taotoken.net/apiKey 是否过期。可以先用模型对话页单独验证 Keyhttps://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。如果那边能出话说明 Key 没问题回头检查config.toml里有没有多余空格或引号。报错四重启后记忆全丢九成是path写成了相对路径或者被写进了临时目录。确认path是绝对路径或~开头并且该目录在重启后依然存在。另外检查有没有别的进程在清理~/.openclaw。报错五reindex卡住不动记忆条数多的时候重建会慢但如果超过几分钟没动静多半是 embedding 调用被限流。看日志里有没有429有的话降低并发或者分批重建。TaoToken 的通道在文档里有并发建议参考https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。排查时有个通用习惯先openclaw memory stats看全局状态再openclaw memory list看条目最后openclaw memory get id看单条内容。三步下来问题基本定位到是写入、索引还是检索环节。6. 把 memory 用顺手的几个实操建议配置跑通只是开始真正让 memory 好用还得在用法上花点心思。第一标签别乱打。auto_tag开着方便但自动标签往往太泛建议定期用openclaw memory list --tag xxx清理把没用的删掉索引越干净检索越准。第二记忆文件是纯 Markdown你可以直接用编辑器改改完记得reindex这是它比黑盒记忆系统好的地方——内容完全可控。第三别把所有对话都往 memory 里塞只留稳定的偏好和事实临时上下文交给会话本身否则记忆库会迅速膨胀检索质量反而下降。如果你打算把 OpenClaw 接到编码工作流里长期跑建议把 memory 和 Coding Plan 配合用https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 让 Agent 记住你的项目约定和代码风格比每次重新交代省事得多。Key 管理和通道配置都在控制台统一维护https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 一处改动全局生效这也是我一开始就把通道统一的原因。最后留一个我踩过的坑reindex_clean默认是false意味着重建时旧索引不会自动清。如果你手动删过记忆文件一定要先清索引再重建否则会残留已删除条目的向量搜出来一条点进去却是空的。这个坑不报错只是行为诡异排查起来最费时间。