ARTICLE DETAIL

资讯详情

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

OpenCode 长期记忆体新思路:用 AGENTS.md 本地 MD 文件替代 OpenMemory 的配置实践

OpenCode 长期记忆体新思路:用 AGENTS.md 本地 MD 文件替代 OpenMemory 的配置实践 1. 为什么我又把 OpenMemory 换回了本地 MD 文件OpenCode 长期记忆体这件事我前后折腾过两套方案。第一套是 OpenMemoryDocker 起服务、Ollama 拉模型、MCP 协议接插件跑通那一刻确实有成就感AI 能记住我上个会话说过的项目背景。但用了一周我就开始烦了——每次开工先开 Ollama再docker compose up再启动 OpenCode三步少一步记忆就查不到。更难受的是排查记忆没生效到底是插件没连上、MCP 配置写错、还是相似度阈值设太高三个地方来回看半小时就没了。后来我换了个思路我本来就在 Obsidian 里写 Markdown 笔记项目状态、待办、决策记录全在.md文件里躺着这些本身就是我的记忆。为什么非要转一道手塞进向量库于是我把记忆体改成最朴素的方式——本地 MD 文件 AGENTS.md引用。OpenCode 启动时会读AGENTS.md里的指令我只要告诉它「记忆都在记忆/目录下对话前先读」一个文件夹加几行配置就完事了。这套方案适合希望记忆可控、能进 Git、能直接打开文件夹改的开发者尤其适合已经在用 Markdown 管项目的人。下面把目录结构、config.toml骨架、TaoToken 统一 Key 接入、读写验证和回滚步骤完整写一遍。2. 前置准备TaoToken 统一 Key 与 API 通道本地 MD 记忆体本身不依赖任何外部服务但 OpenCode 要调用模型就得有稳定的 API 通道。我这边统一用 TaoToken 做 Key 管理一个 Key 走多个模型省得每个模型单独配一遍。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个地址不加 UTM 参数配置里直接写。你需要先拿到 Key进控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 在 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 新建一个复制出来形如sk-xxxx的字符串。这个 Key 后面会写进 OpenCode 的config.toml同时AGENTS.md里也会引用它作为默认通道。注意Key 只存在本地配置文件里别提交进 Git。下面给的.gitignore会把config.toml排除掉记忆文件本身可以进版本库Key 不行。如果你还没决定用哪个模型可以先去模型对话页 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 会更划算这个后面第 6 节再说。3. 可复制配置AGENTS.md 目录结构与 config.toml 骨架3.1 记忆目录结构在项目根目录建一个记忆/文件夹保持扁平最多一层存档/子目录。层级太深 AI 读目录时容易迷路我试过记忆/项目/2026/商城/会员模块/这种嵌套结果它经常只读到一半。项目根/ ├── AGENTS.md ├── config.toml ├── .gitignore └── 记忆/ ├── 当前重点.md # 当前 TODO 和近期动态AI 每次更新 ├── 项目状态.md # 项目进展和阻塞项 ├── 客户管理.md # 客户信息和沟通记录 ├── 决策记录.md # 重要决策及理由 └── 存档/ ├── 项目状态-2026Q1.md └── 决策记录-2026Q1.md每个记忆文件用 YAML frontmatter 标时间和标签方便后续 grep 和归档--- tags: - 记忆 - 项目 created: 2026-01-15 modified: 2026-02-01 --- # 项目状态 ## 商城系统 - 状态已上线 - 版本v2.3 - 阻塞项无3.2 AGENTS.md 指令骨架AGENTS.md放在项目根目录OpenCode 启动时会读它。核心是两段对话开始时怎么读对话结束时怎么写。## 记忆系统 AI 每次对话开始前 1. 先读取 记忆/当前重点.md了解当前最要紧的事 2. 根据对话内容按需查阅 记忆/ 下其他文件 3. 不要一次性读完所有文件按相关性读取 AI 每次对话结束时如果状态有变化 1. 更新 记忆/当前重点.md 中的 TODO 2. 更新 记忆/项目状态.md 中的变更 3. 重大决策写入 记忆/决策记录.md 4. 新客户信息写入 记忆/客户管理.md 写入规则 - 只追加或修改相关段落不要重写整个文件 - 保留 YAML frontmatter更新 modified 字段 - 过时内容移到 记忆/存档/不要直接删除3.3 config.toml 骨架OpenCode 的模型通道写在config.toml里把 TaoToken 的 API 基址和 Key 填进去[provider.taotoken] base_url https://taotoken.net/api api_key sk-你的Key model claude-sonnet-4-5 [agent] memory_dir 记忆 agents_file AGENTS.md.gitignore里加上config.toml记忆文件本身可以进 Gitconfig.toml不行。这样团队里每个人用自己的 Key记忆共享Key 不泄露。4. 验证请求记忆读写是否真的生效配置写完别急着信跑三个动作验证。4.1 验证读取新开一个 OpenCode 会话直接问当前项目的重点任务是什么如果AGENTS.md和记忆/当前重点.md配对了它应该能说出你写在文件里的 TODO而不是回一句「我没有上下文」。如果它答不上来先检查AGENTS.md是否在项目根目录、记忆/路径是否写对。4.2 验证写入在会话里给一条新信息记一下客户 A 下周三要确认会员系统的接口文档。然后退出会话打开记忆/客户管理.md看有没有新增内容。正常情况下它会追加一段带日期的记录。如果没写进去检查AGENTS.md里的写入规则是否明确指定了目标文件——规则越具体AI 越不容易写错地方。4.3 验证 Git 可追溯记忆文件进 Git 后每次 AI 更新你都能看到 diffgit diff 记忆/当前重点.md这一步是本地 MD 方案最大的优势。OpenMemory 的记忆存在向量库里你想看它到底记了啥得走 API 或界面本地文件直接git diff改了哪一行清清楚楚。实测下来这个透明度比语义搜索更让我放心。5. 本篇常见错排查5.1 AI 不读记忆文件最常见的原因是AGENTS.md没被加载。确认三点文件在项目根目录、文件名大小写正确AGENTS.md不是agents.md、OpenCode 启动时的工作目录就是项目根。如果都对了还不读把AGENTS.md里的读取指令写得更硬一点比如「每次对话开始必须先读记忆/当前重点.md这是强制步骤」。5.2 记忆文件越写越厚用久了当前重点.md会堆几百行AI 读起来慢还容易读到过时信息。解决办法是按季度归档把已结项的内容移到记忆/存档/项目状态-2026Q1.md主文件只留当前季度。归档动作可以手动做也可以在AGENTS.md里加一条「每月 1 号检查并归档过时内容」。5.3 写入覆盖了原有内容如果 AI 每次更新都重写整个文件说明AGENTS.md里的写入规则不够细。加上「只修改相关段落保留其他内容不变」「保留 YAML frontmatter」这两条基本能解决。另外建议记忆文件进 Git万一被覆盖还能git checkout回来。5.4 API 通道报错如果 OpenCode 调模型时报 401 或连接失败先确认config.toml里的base_url是https://taotoken.net/apiKey 没有多余空格。可以去接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 对照参数格式。Claude Code 相关的接入配置在 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 也有说明如果你同时用 Claude Code可以统一走同一个 Key。5.5 回滚步骤改配置改出问题了回滚很简单。记忆文件走 Gitgit checkout 记忆/当前重点.md配置回滚就把config.toml恢复上一版或者临时把AGENTS.md里的记忆系统段落注释掉OpenCode 就回到无记忆状态。本地 MD 方案的好处就是回滚成本极低不像 Docker 方案还得清容器、清向量库。6. 选型建议与长期编码通道本地 MD 记忆体和 OpenMemory 不是谁替代谁是两条路。你要跨项目语义搜索、要向量召回OpenMemory 更合适你要记忆可控、能进 Git、能直接打开文件夹改本地 MD 更省心。我现在的做法是日常项目用本地 MD需要跨项目检索时再单独起 OpenMemory两套并存不冲突。如果你长期跑编码和 Agent 任务模型调用量大建议把通道固定下来。Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 适合这种高频场景一个 Key 覆盖多个模型省得每次换模型重配一遍。配置方式和我上面写的config.toml一样把base_url和 Key 填进去就行。最后说个我踩过的坑记忆文件别用中文文件名加空格当前 重点.md这种在某些终端里路径会断AI 读的时候容易找不到。用当前重点.md或者current-focus.md都行保持一致就好。
返回列表