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_openvikingskill — Viking 记忆操作技能