这是「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"
}

这些参数的意思:

参数作用小白理解
apiUrlOpenMemory 服务地址告诉插件记忆体在哪
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 的协作方式变了——不用每次重新认识,它越来越了解你的项目。

如果你今天第一次配,记住:

  1. 先跑通架构:Ollama → OpenMemory → 插件 → OpenCode
  2. 存一条记忆验证:“记住:XXX”
  3. 日常遇到有用的信息顺手存一笔

如果这篇文章对你有帮助:

  • 点个在看,让更多 OpenCode 用户用上记忆体
  • 收藏起来,跟着步骤配一套

系列目录

  • ✅ 第一篇:安装与使用技巧
  • ✅ 第二篇:子代理系统——Build、Plan、Explore 怎么用
  • ✅ 第三篇:让 OpenCode 更好用的神器——OpenMemory 记忆体(本篇)
  • ⬜ 第四篇:化简为繁——用本地 MD 文件做记忆体
  • ⬜ 第五篇:5 个内置工具让你写代码效率翻倍
  • ⬜ 第六篇:30 分钟做一个全栈功能——完整工作流演示
  • ⬜ 第七篇:用 AGENTS.md 让 AI 表现翻倍
  • ⬜ 第八篇:OpenCode 三个月实战,这 5 个坑我帮你踩过了
  • ⬜ 第九篇:一个人维护 5 个仓库——我的真实 OpenCode 工作流
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐