Hermes Viking 记忆系统触发机制

概述

Hermes Agent 的记忆系统基于 OpenViking 实现,采用被动触发机制,不会主动回忆或定时搜索。

触发时机

1. Prefetch(预取) — 每次用户发消息时

用户发消息 → run_agent.py
→ memory_manager.prefetch_all(query)
→ Viking 后台搜索相关内容
→ 注入到 <memory-context> 块中

触发条件:每次用户发消息时,系统用用户的问题作为 query 去 Viking 搜索相关记忆。

2. Sync Turn(同步对话) — 每轮对话后

助手回复完成 → run_agent.py
→ memory_manager.sync_turn(user_content, assistant_content)
→ 把对话内容发送到 Viking 的 session

3. Session Commit(会话提交) — 会话结束时

会话结束 / atexit → on_session_end()
→ 提交整个 session 到 Viking
→ Viking 自动提取 6 类记忆:
  - profile(用户画像)
  - preferences(偏好)
  - entities(实体)
  - events(事件)
  - cases(案例)
  - patterns(模式)

4. Memory Write(记忆写入) — 调用 memory() 工具时

调用 memory(action="add") → on_memory_write()
→ 同步写入 Viking 作为显式记忆

关键特性

特性说明
被动触发系统不会主动定时搜索 Viking
延迟提取记忆提取发生在会话结束时,不是实时的
无主动回忆系统不会在对话中主动”想起”相关记忆
上下文注入每次对话开始时,Viking 会搜索相关内容注入上下文

限制

  • Viking 中的记忆只有当用户的问题恰好匹配时才会被触发
  • 没有定时提醒机制,需要配合 cron 任务实现主动提醒
  • Session 提交是异步的,记忆提取有延迟

相关文件

  • run_agent.py — Agent 主程序,包含记忆管理逻辑
  • hermes_memory_openviking skill — Viking 记忆操作技能