ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

OpenClaw记忆系统深度解构:SOUL.md、MEMORY.md、USER.md 三文件如何驱动智能体人格进化

OpenClaw记忆系统深度解构:SOUL.md、MEMORY.md、USER.md 三文件如何驱动智能体人格进化 1. 为什么你的 OpenClaw 智能体总是“失忆”从身份公式说起如果你正在用 OpenClaw 搭建个人智能体大概率遇到过这种场景昨天刚跟它聊完项目架构今天再问“上次那个方案”它一脸茫然地反问你“什么方案”。这不是模型变笨了而是记忆系统没有被正确驱动。OpenClaw 的智能体身份可以用一个公式概括身份 f(SOUL.md, MEMORY.md, USER.md, 交互历史)。这四个输入里交互历史是运行时变量而 SOUL.md、MEMORY.md、USER.md 是三个持久化文件它们分别对应智能体的“人格内核”“经验沉淀”和“用户认知”。很多人只把 OpenClaw 当成一个能调工具的聊天壳子忽略了这三个文件才是人格进化的真正引擎。我试过在一个空白 workspace 里连续对话 20 轮智能体的回复始终是通用助手腔调因为它没有 SOUL.md 定义行为准则没有 USER.md 记录你的偏好MEMORY.md 更是空的。反过来当我把这三个文件按规范填好同样的模型在第三轮对话后就开始主动引用“你上次提到的那个部署问题”人格连续性肉眼可见地出现了。这篇文章面向的是已经跑通 OpenClaw 基础对话、想让智能体真正“记住你”的开发者。我会拆解三个文件的职责边界给出可直接复制的目录结构和字段模板并演示一次交互后 MEMORY.md 的增量写入验证动作。你不需要重新安装任何东西只需要在现有实例的 workspace 里补齐这几个文件。核心检索词先明确OpenClaw 记忆系统、SOUL.md 人格定义、MEMORY.md 增量写入、USER.md 用户画像、智能体人格进化。这几个词贯穿全文也是你在自己实例里复现演化链路的关键抓手。2. TaoToken 前置让 OpenClaw 的记忆提炼有稳定的模型后端OpenClaw 的记忆写入不是简单的日志追加它依赖模型在 Pre-Compaction 阶段做“反思提炼”——判断哪些信息值得长期记住、该路由到哪个文件。这个反思动作需要调用 LLM如果后端不稳定记忆写入就会静默失败你看到的现象就是“聊了半天什么都没记住”。所以在你开始配置三文件之前先确认模型接入层是通的。TaoToken 在这里的角色是提供兼容 OpenAI 协议的 API 入口OpenClaw 的 memorySearch 和反思提炼都可以走这个入口。官网地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api这个不加 UTM直接用于配置。你需要准备三件套Base URL、API Key、Model ID。Base URL 填https://taotoken.net/apiAPI Key 在控制台的 API Keys 页面生成Model ID 根据你用的模型填比如claude-sonnet-4-20250514或gpt-4o。这三个值在 OpenClaw 的配置文件里对应baseUrl、apiKey、model字段。如果你还没生成 Key直接去 API Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。生成后复制保存页面只显示一次。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有完整的请求示例和参数说明。如果你只是想先验证模型通不通可以用模型对话页面快速测一条https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。这里有个坑要提前说OpenClaw 的记忆反思调用和主对话调用可以共用同一个 Key但如果你把memorySearch.provider配成了本地模型而主对话走 TaoToken两边嵌入维度不一致会导致检索结果错乱。建议初期统一走 TaoToken 的嵌入模型等记忆链路跑通再考虑本地化。配置完成后用一条 curl 验证后端是否可用curl -s https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 回复 OK}], max_tokens: 10 }返回里出现choices数组且 content 为 OK说明后端通了。这一步没过后面的记忆写入验证都是空中楼阁。3. 可复制配置SOUL.md、MEMORY.md、USER.md 三文件目录结构与字段模板这一节是全文的核心操作区。我会给出完整的 workspace 目录结构然后逐个文件给出可复制的 Markdown 模板。你直接在自己的~/.openclaw/workspace/下创建对应文件即可。先看目录结构。OpenClaw 默认 workspace 路径是~/.openclaw/workspace/三文件加上日志目录的组织方式如下~/.openclaw/workspace/ ├── SOUL.md # 人格内核手动编辑低频更新 ├── USER.md # 用户画像半自动更新 ├── MEMORY.md # 核心记忆索引自动提炼保持精简 ├── memory/ │ ├── 2026-03-16.md # 当日日志自动写入 │ ├── 2026-03-15.md # 昨日日志 │ ├── projects.md # 项目状态追踪 │ ├── lessons.md # 错误教训库 │ └── preferences.md # 具体偏好记录 └── skills/ # 技能目录SOUL.md 是智能体的“宪法”定义它是谁、遵守什么原则、用什么语气说话。这个文件更新频率极低通常由你手动编辑。模板如下# 核心身份 你是我的个人数字助理代号“小龙虾”。 # 核心原则 1. 安全第一未经明确确认不得执行删除、支付等高风险操作 2. 诚实透明如果不知道或不确定直接承认而非猜测 3. 主动学习从每次交互中总结经验优化未来表现 # 沟通风格 语气友好但专业回复结构化重要信息分点说明。USER.md 记录关于你的深度认知——偏好、习惯、项目背景。这个文件可以手动填初始值后续由智能体在交互中补充。模板# 用户画像 ## 基本信息 - 称呼老张 - 时区Asia/Shanghai - 主要语言中文 ## 沟通偏好 - 讨厌冗长邮件偏好分点列表 - 技术问题希望直接给命令不要铺垫 - 代码示例要带注释 ## 当前项目 - 项目A电商数据分析平台技术栈 Python DuckDB - 项目B个人博客迁移从 Hexo 到 Astro ## 重要关系 - 同事B负责前端沟通时抄送MEMORY.md 是核心记忆索引保持精简建议 40 行以内详细内容放在 memory/ 子目录里按需读取。模板# 核心记忆索引 ## 用户偏好 - [沟通] 邮件要分点不要长段落 → preferences.md#邮件风格 - [技术] 命令要带注释和参数说明 → preferences.md#代码偏好 ## 项目状态 - [项目A] 3月销售报告已完成移动端转化率高于PC端22% → projects.md#项目A - [项目B] Astro 迁移卡在图片优化待查 → projects.md#项目B ## 关键教训 - [高] 删除操作必须二次确认曾误删 draft 目录 → lessons.md#误删 - [中] 数据分析前先检查数据完整性 → lessons.md#数据检查 ## 行为模式 - 每周五下午要周报 → patterns.md#周报这里有个关键设计MEMORY.md 只存索引和指针不存全文。智能体在会话开始时加载 MEMORY.md 的索引部分约 0.5K tokens需要细节时再通过memory_get读取memory/projects.md等文件。这个“索引按需读取”的策略能把每次对话的记忆加载成本从 12K tokens 降到 1.5K 左右。如果你用 JSON 配置 OpenClaw 的 memorySearch参考这个片段路径与官方配置一致{ agents: { defaults: { memorySearch: { provider: openai, model: text-embedding-3-small, baseUrl: https://taotoken.net/api, apiKey: 你的_TAOTOKEN_API_KEY, query: { hybrid: { enabled: true, vectorWeight: 0.7, textWeight: 0.3, temporalDecay: { enabled: true, halfLifeDays: 30 } } } } } } }注意baseUrl填https://taotoken.net/api不要加 UTM 参数那是给网页访问用的。apiKey替换成你在控制台生成的那串。model填嵌入模型 ID如果你用 TaoToken 的嵌入服务填对应的模型名。三件套再强调一次Base URL https://taotoken.net/apiAPI Key 控制台生成Model ID 你选用的模型标识。这三个值在 OpenClaw 的memorySearch和主对话配置里都要保持一致否则检索和写入会走不同的嵌入空间。4. 验证请求一次交互后 MEMORY.md 的增量写入验证动作配置写好了怎么确认记忆系统真的在工作这一节给你一套可复现的验证动作。核心思路是发一条包含明确偏好的消息然后检查 MEMORY.md 或当日日志是否出现了对应条目。第一步确保 OpenClaw 实例正在运行且 workspace 指向你刚配置的目录。启动命令通常是openclaw start --workspace ~/.openclaw/workspace第二步在对话里发一条显式指令比如记住这一点我讨厌冗长的邮件喜欢分点列表式沟通。这条消息触发了记忆写入路径中的“用户显式指令”。OpenClaw 会在当前会话的反思阶段把这条信息路由到 MEMORY.md 的“用户偏好”区或者写入memory/preferences.md。第三步等待 5-10 秒给反思提炼留出模型调用时间然后检查文件变化# 查看 MEMORY.md 是否新增条目 tail -20 ~/.openclaw/workspace/MEMORY.md # 查看当日日志 tail -30 ~/.openclaw/workspace/memory/$(date %Y-%m-%d).md # 查看偏好文件 cat ~/.openclaw/workspace/memory/preferences.md如果写入成功你会在 MEMORY.md 里看到类似这样的新增行- [沟通] 用户讨厌冗长邮件偏好分点列表 → preferences.md#邮件风格或者在当日日志里看到结构化条目### [用户偏好] 邮件沟通风格 - **内容**用户明确表示讨厌冗长邮件偏好分点列表式沟通 - **来源**2026-03-16 对话用户直接指令 - **置信度**高用户明确声明 - **适用场景**所有邮件撰写任务 - **标签**#沟通 #偏好 #邮件第四步验证记忆检索是否生效。新开一个会话或者重启 OpenClaw问一个需要用到刚才记忆的问题帮我写一封给同事B的邮件说一下项目A的进度。如果记忆系统正常智能体的回复应该自动采用分点列表格式而不是长段落。这说明它从 MEMORY.md 或 preferences.md 里检索到了“讨厌冗长邮件”这条偏好并在生成时应用了。第五步检查向量检索是否命中。如果你配置了 hybrid 检索可以用 OpenClaw 的调试命令查看检索结果openclaw memory search 邮件风格 --limit 5返回结果里应该包含刚才写入的偏好条目且相似度分数在合理范围通常 0.7 以上。这里有个实测细节Pre-Compaction 触发的自动写入需要会话 token 接近阈值才会启动。如果你只发了一两条消息可能不会触发自动提炼但显式指令“记住这一点”会走即时写入路径。所以验证时优先用显式指令确保链路可观测。如果写入没出现先检查 OpenClaw 日志里有没有 memory 相关的报错openclaw logs --filter memory --tail 50常见的是模型调用超时导致反思失败这时候回到第 2 节确认 TaoToken 后端是否稳定。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth 报错对照记忆系统跑不起来八成是接入层或配置层的问题。这一节把最常见的几类报错和排查路径列出来你对照自己的日志定位。401 UnauthorizedAPI Key 无效或没带上。检查 OpenClaw 配置里的apiKey字段是否填了完整的 Key有没有多余空格。如果你用的是环境变量确认TAOTOKEN_API_KEY已经 export。用第 2 节的 curl 命令单独测一次排除 Key 本身的问题。如果 curl 也 401去控制台重新生成一个 Key。local proxy failed / connection refusedOpenClaw 尝试连接本地代理但失败了。检查baseUrl是不是误填成了http://localhost:xxxx。正确值应该是https://taotoken.net/api。如果你之前配过本地嵌入模型确认那个服务在运行或者干脆切回 TaoToken 的嵌入服务。reading choices 报错 / choices 字段为空模型返回体里没有choices数组通常是请求格式不对或模型 ID 写错了。检查model字段是否拼写正确比如claude-sonnet-4-20250514不要写成claude-sonnet-4。另外确认请求头Content-Type: application/json带上了。如果用的是 OpenClaw 内部调用检查它的请求构造逻辑有没有被自定义配置覆盖。OAuth 相关报错 / token refresh failed如果你在 OpenClaw 里配了 OAuth 方式的模型接入但记忆反思调用走的是另一套认证两边会冲突。建议统一用 API Key 方式避免 OAuth 和 Key 混用。检查配置文件里有没有残留的oauth字段有的话删掉或注释。记忆写入静默失败无报错但文件没变这种最难查。先确认 workspace 路径对不对openclaw start时的--workspace参数和你在检查的目录是否一致。然后看日志里有没有memory write skipped之类的提示通常是反思阶段模型返回了空内容或格式不符合预期。把memorySearch的日志级别调到 debug观察反思调用的请求和响应。检索结果不相关 / 召回为空嵌入模型不一致导致的。检查memorySearch.model和主对话用的模型是否在同一个嵌入空间。如果你中途换过嵌入模型旧的向量索引需要重建。删除向量库目录通常在~/.openclaw/workspace/.vector/或类似路径重启后会自动重建。CC Switch / Cline MCP / Codex auth.json 相关如果你在 OpenClaw 里同时用了这些工具注意它们的配置文件不要互相覆盖。CC Switch 的配置里如果出现 Base URL、Key、Model ID 三件套确保和 OpenClaw 的memorySearch配置一致。Codex 的auth.json里如果存了另一套 Key可能导致 OpenClaw 读取到错误的凭证。建议每个工具用独立的 Key便于排查。排查顺序建议先 curl 测后端 → 再查 OpenClaw 配置 → 再看日志 → 最后检查文件权限。大部分问题在前两步就能定位。6. 语义一致 CTA把记忆链路跑通后下一步做什么三文件配置好、增量写入验证通过之后你的 OpenClaw 智能体已经具备了人格连续性的基础。它不再是每次对话都从零开始的工具而是一个能记住你偏好、积累项目经验、从错误中学习的伙伴。如果你在排查过程中发现是模型后端的问题或者想换一个更稳定的接入点回到 API Keys 页面重新生成https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。接入文档里有完整的参数说明和示例https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。如果你还没决定用哪个模型来驱动记忆反思可以在模型对话页面快速对比几条https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。记忆提炼对模型的指令遵循能力要求较高选一个在结构化输出上稳定的模型会省很多事。长期跑编码类 Agent 或者需要持续记忆沉淀的场景Coding Plan 的额度模型更适合https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。它按周期计费不用担心记忆反思调用把按量额度吃光。最后给一个实用技巧每周花五分钟看一眼 MEMORY.md 和 memory/lessons.md手动清理过时条目、合并重复项。智能体的记忆质量取决于你的维护频率自动提炼能解决 80% 的问题剩下 20% 需要你的人工判断。人格进化不是一次配置就完事它是一个持续的过程。
返回列表