编辑
2026-07-29
技术
00

目录

多 Agent 记忆共享:我用 OpenViking 搭建的协作记忆层
背景:为什么不继续"各记各的"
选型:为什么是 OpenViking
架构:两层记忆
落地实操
部署
配置 Hermes 记忆提供者
写入记忆
检索
实际效果
踩坑记录

多 Agent 记忆共享:我用 OpenViking 搭建的协作记忆层

背景:为什么不继续"各记各的"

我在本地跑了一套 Hermes Agent 作为个人助手,底下还有几个子 Agent(千川投放、知识库填充、代码审查等)。之前每个 Agent 各有一份记忆文件(MEMORY.md / USER.md),各自维护、互相隔离。

问题很快就来了:

  • 重复录入 — 子 Agent 遇到了同一个踩坑点,各自在记忆里记一遍
  • 信息孤岛 — 用户偏好、操作规范这种全局信息,每个 Agent 都要单独喂
  • 同步失效 — 更新了某个规范,但另一个 Agent 还在用旧版本

需要一个共享的知识层。


选型:为什么是 OpenViking

可选方案对比了一圈:

方案优势痛点
共享文件 + NFS简单并发写入冲突、无语义搜索
ChromaDB(已有的)语义搜索强只适合静态文档,不适合动态记忆
Redis无持久化结构,无搜索
OpenViking v0.4.11语义搜索 + 结构化 + Peer 隔离项目较新,社区小

OpenViking 胜出的关键:

  1. viking_remember — 语义记忆,不只是关键词,能自然语言检索
  2. viking_add_resource — 文件级索引,整份文档进去自动拆 chunk
  3. Peer 隔离 — 多个 Agent 共享同一份数据,但每个 Peer 有自己的命名空间
  4. HTTP API — 不需要 SDK,curl 就能读写

架构:两层记忆

┌─────────────────────┐ ┌───────────────────┐ │ 本地 MEMORY.md │ │ OpenViking 共享层 │ │ (私有) │ │ (全局) │ │ │ │ │ │ - 架构决策 │ │ - 用户画像 │ │ - 工具路径 │ │ - 操作规范 │ │ - 环境配置 │ │ - 踩坑记录 │ │ - 内部约定 │ │ - 活跃项目清单 │ │ │ │ - 账号信息(脱敏) │ └─────────────────────┘ └─────────────────────┘ │ │ └── 两套并行,各管各的 ──┘

什么放本地(MEMORY.md):

  • Hermes 自身的架构决策(custom_providers 必须是 list 不是 map)
  • 环境路径(/data 挂载盘路径、Ollama 模型目录)
  • 行为规则("用户插话立即停手")
  • 只对当前 Agent 有意义的内容

什么放 OpenViking(共享):

  • 用户画像(偏好、习惯、性格特点)
  • 操作规范(跟播透明原则、汇报格式、时间估算规则)
  • 踩坑记录(火山方舟 429 限流、飞书 @ 格式)
  • 活跃项目列表及当前状态
  • 所有 Agent 都需要知道的全局上下文

落地实操

部署

OpenViking v0.4.11 跑在 1933 端口,Docker 部署,一个容器搞定。

配置 Hermes 记忆提供者

yaml
# ~/.hermes/config.yaml memory: provider: openviking openviking: base_url: "http://127.0.0.1:1933" peer: hermes

注意 Peer 参数——不同的 Agent 用不同的 Peer 名,数据物理上共享但逻辑上能区分来源。

写入记忆

python
# 写入用户偏好 viking_remember("丘丘偏好全程中文,INTJ/4w5,凌晨5-6点睡") # 写入操作规范 viking_remember("跟播每步操作需汇报逻辑+判断+结果") # 写入踩坑记录 viking_remember("custom_providers 必须是 list 格式,不能用 hermes config set 写入")

检索

python
# 语义检索,不用关心关键词 viking_search("投流操作规范") # → 返回跟播透明原则、ROI 决策阈值等

实际效果

之前: 每次 Agent 初始化,要手动把一堆上下文塞进来,还经常漏。

现在:

  1. Agent 启动就带上 OpenViking 上下文
  2. 遇到新坑,viking_remember 写一条,所有 Agent 下次都能检索到
  3. 项目状态变更,改一次共享,不用逐个通知

踩坑记录

  1. Credentials 绝对别存共享层 — OpenViking 支持 Peer 隔离但不加密,密码 token 放进去等于裸奔
  2. 别当 SQL 用 — 语义搜索在精确查询上不准("查询用户密码"),针对性搜索用专用工具
  3. Peer 命名别冲突 — 两个系统用了同名 Peer 会导致数据交叉,建议统一命名规则
  4. Chunk 大小影响召回 — 太短的记忆("用户喜欢简洁")容易被噪声淹没,建议写够上下文

OpenViking 目前还在早期,但作为多 Agent 共享记忆层已经够用了。如果哪天社区成熟了或者出了更好的方案,换掉它也不亏——因为抽象层就是 HTTP API,换后端不换接口。

本文作者:丘丘

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!