DEV Community

Manoir Yantai
Manoir Yantai

Posted on

Memory Sidecar v3.5:AI 智能体的外挂记忆体,正式公开可用了

做了几个月 AI 智能体重度用户之后,感受最深的短板不是模型能力,而是记忆断层——新会话不认旧账,刚聊完的架构决策、API 地址、部署坑位,关掉终端就归零。每次续聊都要重新交代一遍,比自己写代码还累。

我们做的 Memory Sidecar v3.5 刚刚公开发布,核心思路就一句话:不侵入智能体代码,用外挂进程接管记忆。 它跑在你现有的 AI 智能体(Hermes、Claude Code、Codex、Cursor)旁边,读会话文件、建持久索引、下次聊的时候把相关记忆重新注入上下文。

四层召回 + 意图路由

v3.5 把记忆拆成四个层,不依赖 Docker,零核心代码修改:

  • 热层 — 智能体本地 memory 工具,存当前偏好和活跃修正,5KB 硬上限,0ms 延迟
  • 温层 — Hindsight PostgreSQL 事实图谱,自动从会话中提取关键实体,持久化存储
  • 冷层 — gbrain 结构化知识图谱 + FTS5 全文搜索,存主题枢纽和会话归档
  • 知识层(v3.5 新增) — 扫描 $AGENT_HOME/knowledge/notes/ 下的 Markdown 笔记,让整理好的知识直接参与召回

四层结果用 Reciprocal Rank Fusion 融合排序。代码示意其实就是这个分层注入逻辑:

# 来自 tiered_context_injector.py 的实际设计模式
def inject_into_prompt(query: str) -> str:
    # 先判断意图,选召回家族
    family = memory_family_registry.route_query(query)
    # 并行从各层拉候选
    layers = {
        "hot": hot_layer(family),
        "warm": hindsight_recall(query, top_k=5),
        "cold": gbrain_search(query) + session_search(query),
        "knowledge": knowledge_note_search(query),
    }
    # RRF 融合
    fused = reciprocal_rank_fusion(layers)
    return compress_to_prompt(fused)
Enter fullscreen mode Exit fullscreen mode

每条查询不会一股脑全翻出来——memory_family_registry.py 负责按意图分流,项目查询走项目族,系统配置走系统族,人际关系走关系族,各层权重不一样。

安装器:三种模式,中英双语

v3.5 的安装器覆盖了从「完全自动化」到「仅检测不修改」的降级路径:

export AGENT_HOME="$HOME/.hermes"
git clone https://github.com/mage0535/hermes-memory-installer.git
cd hermes-memory-installer
./install.sh --lang zh          # 中英文双语输出
./install.sh --install-mode 2   # 半自动协助模式
./install.sh --noninteractive   # CI 部署用
Enter fullscreen mode Exit fullscreen mode

装完跑 python3 "$AGENT_HOME/scripts/sidecar_acceptance_check.py" 验收,全绿通过就上线。

可观测性,不是靠猜

v3.5 新增了 memory_observability_report.py,从 governance DB 抽召回指标,每个意图分类有独立的样本数、平均延迟、P95 延迟、知识命中率。以前召回不准靠猜,现在一条命令定位问题。

和 KMM 的边界

hermes-memory-installer 管运行时——安装、召回、上下文注入。知识从哪里来、怎么整理,是 Knowledge-and-Memory-Management 的事。两项目定位清晰互补。

如果你也在被 AI 会话失忆折磨,这个项目值得花十分钟装上。GitHub 搜 mage0535/hermes-memory-installer,MIT 协议。

Top comments (0)