让 OpenCode 更好用的神器——OpenMemory 记忆体,一次配置永久有效
这是「OpenCode 打造个人 AI 智能体」系列的第三篇。
这篇的目标很简单:跟着走完一遍,你的 OpenCode 就有了长期记忆。
你有没有遇到过这种情况——打开 OpenCode,刚跟 AI 聊完一个功能,关掉。下次再打开,它又对你的项目一无所知了。
你得重新说一遍:
“项目用 Spring Boot 2.7 + MyBatis-Plus,返回结果用 R 包装……”
一天重复好几次。
这不是 AI 不够聪明,是它没有记忆。每个会话是独立的,关了就清空。
OpenCode 要解决这个问题,需要接一个叫 OpenMemory 的外置记忆体。配好之后,你告诉过它的信息它会一直记得,下次开新会话也能直接查到。
这篇完整走一遍安装和配置流程。
一、先搞懂:整个系统是怎么组成的
在动手之前,先知道你要装的是什么东西。
完整架构是这样的:
┌─────────────────┐
│ OpenCode │ ← AI 编程助手(客户端)
│ (你日常用的) │
└────────┬────────┘
│ 通过插件连接
┌────────▼────────┐
│ opencode- │ ← 连接插件(装一次就行)
│ openmemory │
│ (插件) │
└────────┬────────┘
│ 通过 MCP 协议通信
┌────────▼────────┐
│ OpenMemory │ ← 记忆体服务(运行在 Docker 里)
│ (服务端) │ 负责存和查记忆
└────────┬────────┘
│ 用 Ollama 做向量化
┌────────▼────────┐
│ Ollama │ ← 本地模型,把文字转成向量
│ (本地模型) │ 让 AI 能"理解"记忆的含义
└─────────────────┘
为什么需要 Ollama? 因为 OpenMemory 存记忆的时候,不是简单存文字,而是把文字转成"向量"(可以理解为给每段记忆算一个"语义指纹")。这样你查"订单查询接口"的时候,它能把"订单列表""订单详情"这些相关的记忆也找出来。Ollama 就是做这个向量化的工具。
为什么需要 MCP? MCP 是 Model Context Protocol 的缩写,可以理解为"AI 世界的 USB 接口"。OpenCode 通过 MCP 协议跟 OpenMemory 通信,让 AI 能直接调用记忆体的功能——就像电脑通过 USB 口接硬盘一样。
整个流程全跑在本地,不需要任何云服务。
二、装之前,先准备好这些工具
你需要先装好 4 个东西。装过的可以跳过。
# 1. Node.js (v20 以上)
node -v # 没有的话去 nodejs.org 下载
# 2. bun(包管理器,比 npm 快)
npm install -g bun
bun -v
# 3. Docker Desktop
docker ps # 没有的话去 docker.com 下载安装
# 4. Ollama(本地模型)
brew install ollama
ollama --version
注意: 如果你在国内,Docker Desktop 需要配置镜像加速器。在 Docker Desktop → Settings → Docker Engine 里加这一段:
{
"registry-mirrors": [
"https://docker.m.daocloud.io"
]
}
保存后重启 Docker。
装完之后:
# 启动 Ollama(保持这个终端开着)
ollama serve
# 新开一个终端,拉取嵌入模型(约 300MB)
ollama pull nomic-embed-text
三、部署 OpenMemory(跑在 Docker 里)
3.1 克隆项目
git clone https://github.com/CaviraOSS/OpenMemory.git
cd OpenMemory
cp .env.example .env
3.2 修改配置
这是最关键的一步。编辑 .env 文件,把这些内容覆盖进去:
# 性能等级:hybrid 适合本地跑
OM_TIER=hybrid
# 嵌入模型用本地 Ollama(不用 OpenAI)
OM_EMBEDDINGS=ollama
# Ollama 地址(macOS 上固定这么写)
OLLAMA_URL=http://host.docker.internal:11434
# 嵌入模型名称(跟刚才 pull 的一样)
OM_OLLAMA_MODEL=nomic-embed-text
# 嵌入模式
OM_EMBED_MODE=simple
# 以下所有 Key 全部留空(不需要)
OPENAI_API_KEY=
GEMINI_API_KEY=
为什么这个配置重要? 默认配置用的是 OpenAI 的 API 来做向量化——这需要联网,还要花钱。改成 Ollama 之后,全部在本地完成,免费、离线可用。
3.3 启动
docker compose up --build -d
第一次启动会下载镜像并构建,等 3-5 分钟。完成后执行:
docker ps
如果看到 openmemory-backend-1 和 openmemory-frontend-1 两个容器都在运行,说明部署成功。
再验证一下服务:
curl http://localhost:8080/health
返回 {"status":"ok"} 就对了。
四、安装连接插件(OpenCode 到 OpenMemory)
4.1 为什么要装这个插件?
OpenCode 本身不认识 OpenMemory。需要一个"翻译官"来让它们对话。
@happycastle/opencode-openmemory 这个插件就是做这个的。它会:
- 每次新会话开始时,自动从 OpenMemory 加载相关记忆
- 你说"记住:XXX"的时候,自动把信息存进记忆体
- 对话上下文满了的时候,自动做精简和保存
4.2 安装插件
就一条命令:
bunx @happycastle/opencode-openmemory@latest install
这条命令会自动下载插件,并在 ~/.config/opencode/opencode.json 里添加上插件配置。
4.3 手动确认配置
打开 ~/.config/opencode/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"instructions": [
"AGENTS.md"
],
"plugin": [
"@happycastle/opencode-openmemory@latest"
],
"mcp": {
"openmemory": {
"type": "remote",
"url": "http://localhost:8080/mcp",
"enabled": true
}
}
}
关于这个 MCP 配置: 这里的 mcp.openmemory 就是告诉 OpenCode:有一个叫 OpenMemory 的外部服务,它的地址是 http://localhost:8080/mcp,通过 MCP 协议通信。"type": "remote" 表示它是一个远程服务(虽然跑在你的本地机器上,但对 OpenCode 来说是通过 HTTP 访问的远程服务)。"enabled": true 表示启动时自动启用。
4.4 配置记忆体参数
创建 ~/.config/opencode/openmemory.jsonc:
{
"apiUrl": "http://localhost:8080",
"similarityThreshold": 0.6,
"maxMemories": 5,
"maxProjectMemories": 10,
"injectProfile": true,
"defaultSector": "semantic"
}
这些参数的意思:
| 参数 | 作用 | 小白理解 |
|---|---|---|
apiUrl | OpenMemory 服务地址 | 告诉插件记忆体在哪 |
similarityThreshold | 相似度阈值(0~1) | 低于 0.6 的不算相关,不返回 |
maxMemories | 每次注入最多几条记忆 | 防止一次加载太多占上下文 |
injectProfile | 是否注入跨项目偏好 | 设为 true 能在不同项目共享习惯 |
4.5 重启 OpenCode
opencode
启动后输入 / 看看命令列表,如果出现了 /openmemory-init 说明插件加载成功了。也可以输入 mcps 查看 MCP 服务列表,里面应该有 openmemory。
五、验证:确认它能用了
新开一个对话,按顺序测试:
测试 1:存记忆
> 记住:我叫老齐,是启航电商ERP系统的作者。
AI 应该回复"已记住"之类的话,并调用 OpenMemory 存下来。
测试 2:查记忆
> 我是谁?
AI 应该能回答出"你是老齐,启航电商ERP的作者"。
测试 3:跨会话验证
关掉这个对话,新开一个。直接问:
> 我是谁?
如果它还记得,说明配置成功——记忆已经跨会话持久化了。
六、日常怎么用
记项目信息
> 记住:我的项目用 Spring Boot 2.7 + MySQL 5.7 + MyBatis-Plus
下次新会话,AI 会自动加载这条信息。你不用再介绍项目背景了。
记代码规范
> 记住:所有 Service 层必须写接口,Controller 统一返回 R<T> 包装
> 记住:数据库表名用 snake_case,字段加 f_ 前缀
记 Bug 修复方案
> 记住:EasyExcel 大文件 OOM 用 PageRead 分批读取,每批 1000 条
这个最有用。几个月前修的一个 Bug,AI 还记得。同事来问的时候,查一下记忆体答案就出来了。
一键导入项目知识库
如果你的项目有设计文档、接口说明之类的 Markdown 文件,可以用这个命令让 AI 一次性扫描并存入记忆:
/openmemory-init
它会读取当前目录下的文档,提取核心信息存入 OpenMemory。
七、日常启动顺序
OpenMemory 不会随系统自动启动。每次要用的时候,按这个顺序:
# 第 1 步:启动 Ollama(如果没开)
ollama serve &
# 第 2 步:启动 OpenMemory
cd ~/OpenMemory && docker compose up -d
# 第 3 步:启动 OpenCode
opencode
建议把这个写成一个脚本,一键启动。
八、常见问题排查
AI 说"我没有设置记忆功能"?
说明插件没装成功。检查 ~/.config/opencode/opencode.json 里有没有插件配置。
存了记忆但查不到?
先等 5-10 秒让服务就绪。然后输入 /openmemory list 手动刷新。
curl 返回 401?
检查 .env 配置是否正确,尤其是 OM_TIER=hybrid 和 OM_EMBEDDINGS=ollama。
用着用着感觉 AI 变笨了?
可能是记忆太多了。降低 maxMemories 的值(比如改成 3),减少每次注入的记忆数量。
总结
配置好 OpenMemory 之后,最大的变化不是某个功能变强了,而是你跟 AI 的协作方式变了——不用每次重新认识,它越来越了解你的项目。
如果你今天第一次配,记住:
- 先跑通架构:Ollama → OpenMemory → 插件 → OpenCode
- 存一条记忆验证:“记住:XXX”
- 日常遇到有用的信息顺手存一笔
如果这篇文章对你有帮助:
- 点个在看,让更多 OpenCode 用户用上记忆体
- 收藏起来,跟着步骤配一套
系列目录
- ✅ 第一篇:安装与使用技巧
- ✅ 第二篇:子代理系统——Build、Plan、Explore 怎么用
- ✅ 第三篇:让 OpenCode 更好用的神器——OpenMemory 记忆体(本篇)
- ⬜ 第四篇:化简为繁——用本地 MD 文件做记忆体
- ⬜ 第五篇:5 个内置工具让你写代码效率翻倍
- ⬜ 第六篇:30 分钟做一个全栈功能——完整工作流演示
- ⬜ 第七篇:用 AGENTS.md 让 AI 表现翻倍
- ⬜ 第八篇:OpenCode 三个月实战,这 5 个坑我帮你踩过了
- ⬜ 第九篇:一个人维护 5 个仓库——我的真实 OpenCode 工作流
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)