从Hindsight Cloud迁移到自建服务:记忆系统搬家实录

## 从Hindsight Cloud迁移到自建服务:一个记忆系统的搬家实录

### 起因:为什么搬家

之前一直用 Hindsight Cloud 做 AI 助手的外置记忆库,说白了就是给我的 AI 装了个”外挂大脑”。好处是无限容量,能记住跨会话的各种事情。坏处嘛——每个月都在扣费。虽然没多少钱(一个月几块钱),但总觉得别扭,明明自己有 VPS 闲置着,为什么还要交这个钱?

正好手头有台吃灰的绿云越南鸡(胡志明机房,2核2.9G内存),闲着也是闲着,干脆自己搭一个。

### 第一步:Docker 部署

Hindsight 官方提供 Docker 镜像,部署本身不复杂:

“`
docker run -d –name hindsight –restart unless-stopped \
-p 8888:8888 \
-e HINDSIGHT_API_HOST=0.0.0.0 \
-e HINDSIGHT_API_PORT=8888 \
-e HINDSIGHT_API_LLM_PROVIDER=openai \
-e HINDSIGHT_API_LLM_API_KEY=你的key \
-e HINDSIGHT_API_LLM_BASE_URL=https://api.deepseek.com \
-e HINDSIGHT_API_LLM_MODEL=deepseek-chat \
-v hindsight_data:/home/hindsight/.pg0 \
ghcr.io/vectorize-io/hindsight:latest
“`

这里有个坑要注意——**HINDSIGHT_API_LLM_API_KEY 是必须的**,没它服务起不来。一开始我没配这个变量,容器启动后 0 PIDs、0B memory 瞬间崩掉,查了半天日志才发现。

另外记得加 `HINDSIGHT_API_HOST=0.0.0.0`,默认是绑定容器内网 IP,不从宿主机暴露的话外网访问不了。

### 第二步:把旧记忆搬过来

Cloud 上存了三百多条记忆,涉及配置信息、项目记录、各种历史运维笔记。直接扔掉有点可惜,得导出再导入。

Hindsight 有专门的 **export/import API**,思路很直接:

1. 从 Cloud 端调导出接口,拿到 JSON 格式的全部记忆数据,保存到本地备份文件
2. 启动自建服务后,通过 `POST /v1/default/banks/{bank_id}/memories` 批量导入

我写了个 Python 脚本,一次 20 条分批次提交,总共 356 条记忆,18 批跑完,全部成功。

不过第一遍导入后发现一个问题——**中文记忆搜不到**。自建服务默认用的嵌入模型是 `BAAI/bge-small-en-v1.5`,这玩意儿对中文支持很差,生成的向量几乎没法用来做相似度搜索。召回结果永远是空的,等于记忆存进去了但拿不出来。

### 第三步:换个能看懂中文的嵌入模型

解决方法是换模型。Hindsight 支持通过环境变量指定嵌入模型:

“`
-e HINDSIGHT_API_EMBEDDINGS_MODEL=BAAI/bge-m3
“`

bge-m3 是 BAAI 出的多语言模型,中英双语都支持。换完之后重建容器,等模型下载完成(bge-m3 大约 2.2GB,第一次启动需要点时间),然后重新导入记忆。

换完效果立竿见影——之前搜索中文内容返回空结果,现在随便搜都能命中,实体识别、语义匹配都正常了。

### 最后:改配置、切通道

服务搭好后,把 AI 助手的配置从 cloud 切到 local_external 模式,指向自建服务器地址 `http://1xx.xx.xx.xxxx:8888`。

整个迁移最折腾的不是部署,而是排查中文召回的问题。折腾一圈下来其实就改了三个地方:环境变量加对、嵌入模型换对、重启一下。

如果你的 AI 助手也用外置记忆,可以试试这套方案——自建虽然前期要多花点时间调教,但长期来看省心省钱,数据也完全在自己手里。

*后记:写这篇的过程本身就是个实证——之前存在 Cloud 上的记忆切过来后,AI 助手能直接调出整个迁移过程的背景信息了。自建这条路,走对了。*

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注