1. 为什么要在本地给 AI 装一套长期记忆如果你每天都在用 Cursor、Windsurf、Claude Code 这类 AI 编程工具大概率遇到过这种场景上周刚跟 AI 讨论清楚的接口鉴权方案这周新开一个会话它又像失忆一样从头问起同一个项目里踩过的坑换个 IDE 账号登录经验全部清零。问题不在于模型不够聪明而在于这些工具默认把每次对话当成独立事件上下文一关就散。想让 AI 真正“记住”项目里的约定、踩过的坑、团队的编码习惯就得给它外挂一套持久化的记忆层。OpenMemory 就是干这个的它是一个开源的长期记忆基础设施可以本地用 Docker 跑起来通过 MCP 协议接入各种 AI 工具把事实、偏好、上下文存进本地数据库下次对话时按需召回。数据不出本机换 IDE、换账号都不影响记忆连续性。这篇是「AI 三分钟」系列第 5 弹目标很明确用 Docker 跑 OpenMemory用 MCP 把它接进 AI 工具再用 TaoToken 统一模型调用的 Key 和 API 通道最后演示一次“写入记忆 → 重启 → 召回成功”的完整闭环。全程可复制环境干净的话三分钟能跑通。适合谁本地跑 AI 编程工具、对数据隐私敏感、希望跨工具共享经验的开发者。不适合只想临时问几个问题、完全不在意上下文丢失的人。2. TaoToken 前置统一 Key 与 API 通道OpenMemory 本身负责记忆的存储和检索但它在做语义嵌入、记忆压缩、反思聚类这些动作时仍然需要调用模型能力。如果每个环节都去单独申请一家厂商的 Key配置会非常碎。我的做法是用 TaoToken 作为统一的 API 通道一个 Key 覆盖对话模型和嵌入模型OpenMemory 的.env里只填一个OPENAI_API_KEY和OPENAI_BASE_URL就能跑。TaoToken 在这里的角色是“模型调用的统一入口”不是替代 OpenMemory也不是替代你的编辑器。它解决的是 Key 管理和通道统一的问题你不需要在 OpenMemory、Cursor、Windsurf 里各配一套不同厂商的凭证改一处即可全局生效。具体要准备的东西一个 TaoToken 账号登录后进入控制台创建 API Key。地址https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite记下 API Base URLhttps://taotoken.net/api注意这个地址不加 UTM 参数直接用于配置确认你要用的模型名比如对话用gpt-4o-mini这类嵌入用text-embedding-3-small这类具体以控制台模型列表为准注意OpenMemory 的.env里默认写的是 OpenAI 官方地址你需要把OM_OPENAI_BASE_URL改成 TaoToken 的 API 地址否则请求会打到官方端点Key 对不上。如果你还没创建 Key可以先打开模型对话页面确认通道可用https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。能正常对话说明 Key 和通道没问题再往下配 OpenMemory。3. 可复制配置Docker 启动 OpenMemory这一节是全文的技术核心给出可直接复制的 Docker 参数、.env骨架和 MCP 配置片段。环境我实测过 macOSWindows 下 Docker Desktop 步骤基本一致。3.1 环境准备与仓库克隆先确认本机有 Docker 和 Git。我用的版本是 Docker 29.x、Node v20、Python 3.14但 OpenMemory 跑在容器里宿主机只要 Docker 能起来就行。git clone https://github.com/CaviraOSS/OpenMemory.git cd OpenMemory克隆完成后项目根目录会有一个.env.example。macOS 下按command shift .可以显示隐藏文件Windows 在资源管理器「查看」里勾选「隐藏的项目」。3.2 .env 配置骨架把.env.example复制成.env然后按下面的骨架改。这里只保留跑通闭环必需的部分其余保持默认即可。# # OpenMemory - 最小可跑配置 # # 服务端口 OM_PORT9090 # 认证本地开发可以留空生产环境务必设置 OM_API_KEY # 元数据存储默认 sqlite数据落在容器内 /data OM_METADATA_BACKENDsqlite OM_DB_PATH/data/openmemory.sqlite # 向量存储跟随元数据后端 OM_VECTOR_BACKENDsqlite OM_VECTOR_TABLEvectors # 嵌入提供方走 OpenAI 兼容接口 OM_EMBEDDINGSopenai OM_EMBED_MODEsimple OM_EMBEDDING_FALLBACKsynthetic # 关键把 OpenAI 兼容地址指向 TaoToken OM_OPENAI_BASE_URLhttps://taotoken.net/api OPENAI_API_KEY你的_TaoToken_API_Key # 性能档位本地机器建议 smart内存紧张用 fast OM_TIERsmart # 记忆压缩与摘要 OM_USE_SUMMARY_ONLYtrue OM_SUMMARY_MAX_LENGTH300 # 衰减与反思 OM_DECAY_INTERVAL_MINUTES120 OM_AUTO_REFLECTfalse几个参数值得单独说OM_TIER决定召回率和资源占用。fast用合成嵌入256 维适合 4 核 8G 以下的机器smart是合成加压缩语义384 维召回率约 85%适合大多数本地开发deep用完整嵌入1536 维召回率最高但吃内存。我本地 16G 内存跑smart很稳。OM_EMBED_MODEsimple表示所有记忆扇区用一次批量嵌入调用速度快、不容易触发限流。advanced会按扇区拆成 5 次调用精度略高但请求量翻倍本地跑没必要。OM_USE_SUMMARY_ONLYtrue让 OpenMemory 只存摘要单条不超过 300 字符智能提取日期、人名、数字和动作。这样数据库增长慢召回时也更快。3.3 docker compose 启动配置改好后直接在项目根目录启动docker compose up --build -d--build会在首次启动时构建镜像视网络情况大概一到三分钟。-d让容器后台运行。启动完成后用docker compose ps确认状态是running。如果你不想用 compose也可以直接用 docker run但 compose 已经帮你处理了端口映射和数据卷没必要重复造轮子。数据卷默认挂载在项目下的data目录删容器不丢记忆。3.4 MCP 配置片段OpenMemory 启动后会在http://localhost:9090/mcp暴露 MCP 端点。以 Windsurf 为例进入 Settings → 搜索 MCP → 进入 MCP 市场 → 点击齿轮进入自定义配置粘贴下面的片段{ mcpServers: { openmemory: { type: http, url: http://localhost:9090/mcp } } }Cursor 的配置位置在 Settings → MCP → Add new MCP serverJSON 结构完全一样。注意如果你已经有其他 MCP server不要把整个mcpServers对象覆盖掉只追加openmemory这一项。保存后重启 IDE让 MCP 配置生效。重启后在 MCP 面板里应该能看到openmemory处于已连接状态。4. 验证请求写入记忆并重启召回配置对不对跑一次闭环就知道。这一节给出具体的验证动作和预期结果。4.1 健康检查容器起来后先确认服务活着curl -sS http://localhost:9090/health正常会返回类似{status:ok}的 JSON。如果返回连接拒绝说明容器没起来用docker compose logs -f看日志。4.2 通过 MCP 写入一条记忆在 Windsurf 或 Cursor 的对话里直接对 AI 说请把这条经验存入长期记忆本项目所有接口鉴权统一走网关不要在业务代码里单独校验 token。AI 会调用 OpenMemory 的 MCP 工具完成写入。你可以在对话里追问一句“刚才存了什么”它应该能复述出来。这一步验证的是写入链路。4.3 重启后召回关键验证在重启。先完全关闭 IDE再重新打开新开一个对话问我们这个项目的接口鉴权是怎么处理的如果配置正确AI 会从 OpenMemory 召回刚才那条记忆回答“统一走网关不在业务代码里单独校验 token”。这一步验证的是持久化和召回链路。我实测下来第一次写入到重启召回整个动作在两分钟内完成。如果你重启后 AI 答不上来先检查 MCP 是否重连成功再看 OpenMemory 日志里有没有召回请求。4.4 直接查 API 确认数据落库想更直观地确认记忆真的写进去了可以直接打 OpenMemory 的 APIcurl -sS http://localhost:9090/api/memories \ -H Content-Type: application/json \ -d {query: 鉴权, limit: 5}返回结果里应该能看到刚才那条关于网关鉴权的记忆。如果OM_API_KEY设了值记得在 header 里带上Authorization: Bearer 你的Key。5. 本篇常见错排查跑不通的时候八成是下面几个点。我按出现频率排了序。MCP 显示已连接但 AI 不调用工具。这是最常见的情况。先确认 IDE 重启过MCP 配置是追加而不是覆盖。然后在对话里明确说“使用 openmemory 工具存入记忆”有些模型不会主动调工具需要你点名。如果还是不调检查 OpenMemory 日志里有没有收到 MCP 请求。嵌入请求 401 或 404。基本是OM_OPENAI_BASE_URL或OPENAI_API_KEY的问题。确认地址是https://taotoken.net/api结尾不要多加/v1OpenMemory 会自己拼路径。Key 确认没有多余空格。可以先用模型对话页面验证 Key 本身可用。容器起来但 health 一直不 ok。看docker compose logs -f的输出。常见原因是.env里OM_TIER没设OpenMemory 要求手动指定档位不会自动探测。另一个原因是嵌入模型名不对smart档位下如果配了不存在的模型启动会卡在嵌入初始化。重启后记忆丢失。检查数据卷有没有正确挂载。docker compose down会删容器但保留卷docker compose down -v会连卷一起删记忆就没了。如果你用的是docker run且没挂-v容器一删数据全丢。召回结果不相关。多半是档位太低。fast档位召回率约 70%关键词匹配为主语义相近但用词不同的记忆可能召不回。把OM_TIER调到smart或deep再试。另外OM_MIN_SCORE默认 0.3调高会更严格调低召回更多但噪声也更多。端口 9090 被占用。改.env里的OM_PORT同时把 MCP 配置里的 URL 端口一起改掉两处必须一致。6. 把调用链接到 TaoToken长期编码更省心到这里本地长期记忆的闭环已经跑通了Docker 跑 OpenMemoryMCP 接入 AI 工具TaoToken 统一模型通道写入和召回都验证过。接下来就是让它稳定跑在日常编码里。如果你主要用 AI 做长期项目迭代、跑 Agent 任务建议把模型调用统一收敛到 Coding Plan这样 Key 管理和额度都集中在一处不用每个工具单独配。入口https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite接入过程中遇到 MCP 连接、Key 配置、嵌入报错这类问题先翻接入文档大部分坑都有对应说明https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。需要管理多个 Key 或查看用量去控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite最后分享一个我踩过的坑OpenMemory 的.env改完后一定要docker compose up --build -d重建光restart不会重新读取环境变量。我第一次改完地址直接 restart结果嵌入请求还是打到旧端点排查了半小时才发现是没重建。记住这一条能省你不少时间。