HY Memory provider plugin for Hermes Agent (native, 100% passive injection)
Project description
HY Memory Provider for Hermes
Hermes Agent 的原生 Memory Provider 插件 —— 第一梯队 100% 被动注入。
工作原理
Hermes 框架在每次 LLM 调用前自动触发 prefetch(query),本 Provider:
- 用 query 在 HY Memory 里搜(chat 链路三路召回)
- 把命中结果按 layer 格式化(
§ [profile]/§ [intent]/§) - Hermes 把这块文本注入 system prompt
用户无需任何额外操作,记忆自动工作。
每轮对话结束 Hermes 调 sync_turn(user, assistant),Provider 提交到内部线程池异步写入,不阻塞主流程。
安装
SDK 包
hy-memory已发布到公网 PyPI(pypi.org),直接pip install即可,无需任何额外源或凭证。
chroma 后端需
sqlite3 >= 3.35(默认MEMORY_VECTOR_STORE=chroma)。系统 sqlite 过低 (旧版 CentOS/Linux 会报unsupported version of sqlite3)时:pip install pysqlite3-binary并在进程入口 swap(import sys; sys.modules["sqlite3"]=__import__("pysqlite3")), 或改用MEMORY_VECTOR_STORE=qdrant/faiss。
方式 A:通过 hermes memory setup(推荐)
hermes memory setup hy-memory
Hermes 会按 plugin.yaml 的 pip_dependencies 自动安装 hy-memory,并启动配置向导询问 HY_MEMORY_USER_ID / HY_MEMORY_AGENT_ID / mode。
方式 B:手动 pip install
# 装这个 plugin(自动拉 hy-memory 作为依赖)
pip install hermes-hy-memory
# 让 Hermes 启用
hermes config set memory.provider hy-memory
方式 C:folder-drop(开发调试)
cp -r plugins/native/hermes ~/.hermes/plugins/memory/hy-memory
pip install "hy-memory>=1.2.17"
内网安装(腾讯内部,可选)
腾讯内网用内部包 hy-memory-internal(与公网 hy-memory 同源,import 同为 hy_memory),
通过腾讯镜像源安装,无需凭证:
pip install "hy-memory-internal>=0.1.5.14" --index-url https://mirrors.tencent.com/pypi/simple/
配置
环境变量
| 变量 | 必填 | 默认 | 说明 |
|---|---|---|---|
HY_MEMORY_USER_ID |
✅ | — | 一级隔离 key(你的记忆命名空间) |
HY_MEMORY_AGENT_ID |
❌ | hermes |
二级隔离 key |
HY_MEMORY_MODE |
❌ | pro |
处理模式:lite / pro / ultra |
HY_MEMORY_PREFETCH_MAX_CHARS |
❌ | 2000 |
prefetch 注入文本总字符数上限 |
HY_MEMORY_SYNC_WORKERS |
❌ | 2 |
sync_turn 后台线程池大小 |
HY_MEMORY_SHUTDOWN_GRACE_SEC |
❌ | 10 |
shutdown 等 in-flight 写入的最长秒数 |
OPENAI_API_KEY(或对应 LLM/embedder key) |
✅* | — | pro/ultra 必须;lite 仅 embed 用得到 |
*HY Memory SDK 自身的 LLM/Embedder 配置(详见 hy-memory-internal 文档)。
~/.hermes/config.yaml
memory:
provider: hy-memory
环境变量优先级最高,可在 ~/.hermes/.env 里持久化(hermes memory setup 自动写)。
处理模式(HY_MEMORY_MODE)
| 模式 | 写入流程 | 速度 | 召回质量 |
|---|---|---|---|
lite |
纯 embedding 写入(不调 LLM) | 最快 | 仅向量相似 |
pro(默认) |
LLM 抽取事实/身份 + reconcile 演化 | 中 | 含画像 + 事实层 |
ultra |
pro + System2 异步认知(Schema/Intention) | 最完整 | + 跨域归纳 + 前瞻意图 |
⚠️
lite模式不适用于 Hermes 被动注入 / 检索。 lite 只做 embedding、不经 LLM 抽取, 记忆停留在L1_RAW层;而 SDK 的list/search会过滤掉L1_RAW,因此 lite 写入的记忆 无法被prefetch召回(表现为写入成功但检索恒为空)。Hermes 集成请使用pro(默认)或ultra;lite仅适合“只写、不依赖语义召回”的特殊场景。
CLI
pip install 后可用 hermes-hy-memory 子命令做体检和手动操作(脱离 Hermes 主进程):
# 体检:env 齐 / Client 能否构造 / list 能否跑通(只读)
hermes-hy-memory doctor
# 手动写入
hermes-hy-memory add "我喜欢 K-Pop 但更喜欢 Jazz"
# 手动搜索
hermes-hy-memory search "音乐口味" --limit 5
# 列出最近 20 条
hermes-hy-memory list
# 跨用户测试(覆盖 env)
hermes-hy-memory search "x" --user-id other_user --agent-id test
被 Hermes 主 CLI 加载后也可:
hermes hy-memory doctor
Hooks
| Hook | 触发时机 | 行为 |
|---|---|---|
prefetch(query) |
每次 LLM 调用前 | 搜记忆 → 注入 system prompt |
sync_turn(user, ast) |
每轮对话结束 | 提交线程池异步写入 |
on_session_end(msgs) |
会话结束 | 等 in-flight 完成 + 尾部补提取 |
on_pre_compress(msgs) |
上下文压缩前 | 同 on_session_end,保住即将被裁的内容 |
on_memory_write(action, target, content) |
Hermes 内置 memory 命令 | add 同步到 HY Memory;delete 跳过(target ID 不互通) |
Tools(LLM 主动调用,可选)
| Tool | 用途 |
|---|---|
memory_search(query, limit) |
搜索记忆 |
memory_add(content) |
写入一条记忆 |
memory_delete(memory_id) |
删除一条记忆 |
memory_list(limit) |
列出当前 user/agent 的记忆 |
即使关掉 tools,prefetch 的被动注入也保证每次 LLM 调用都能看到相关记忆。
故障排查
provider not initialized 或所有 hook 静默 no-op
跑一遍体检:
hermes-hy-memory doctor
常见原因:
HY_MEMORY_USER_ID没设- embed/LLM key 没设(
OPENAI_API_KEY等)→HyMemoryClient(mode="pro")构造失败 - SDK 没装:
pip install hy-memory(内网:pip install hy-memory-internal --index-url https://mirrors.tencent.com/pypi/simple/)
prefetch 没注入任何记忆
- 库里真没相关记忆 —— 用
hermes-hy-memory list确认 - query 太短(< 3 字符)或在跳过列表里(
ok/好的/thanks等)—— 设计如此 - 中文 query 命中率低?SDK ≥ 0.1.5.11.dev2 已修过 BM25 中文分词不对称的 bug,确认版本
sync_turn 似乎没写入
- 默认 daemon 线程,主进程退出会被 kill。生产部署用
hermesdaemon 模式 - 提高
HY_MEMORY_SHUTDOWN_GRACE_SEC让 shutdown 多等几秒 - 检查日志
[hermes] sync_turn failed: ...
cross-loop 错误(多 client 场景)
如果你的 Hermes 部署同时跑了多个 HyMemoryClient 实例(比如多租户 server),需要 SDK ≥ 0.1.5.11.dev2 + 用 SharedRuntime:
from hy_memory import HyMemoryClient, SharedRuntime
runtime = await SharedRuntime.create(base_config)
client = HyMemoryClient(cfg, runtime=runtime)
本 plugin 单 Hermes 进程默认走 solo mode 的 client,不需要这个。
与 Mem0 风格的对比
Mem0 的 Hermes 集成依赖 TypeScript SDK,本插件用 Python SDK。HY Memory 提供 lite/pro/ultra 三档处理深度(lite 不调 LLM,pro 标准抽取,ultra 加 System2 认知);Mem0 是单档 LLM 抽取。
开发
cd plugins/native/hermes
python -m pytest tests/ -v
测试 mock 掉 HyMemoryClient,无外部依赖(不需要 OPENAI_API_KEY、不需要起 Qdrant)。
版本
| Plugin | SDK 依赖 | 备注 |
|---|---|---|
| 0.1.2 | hy-memory>=1.2.17(内网 hy-memory-internal>=0.1.5.14) |
发布到公网 PyPI(hermes-hy-memory);channel-dict flatten 修复 |
| 0.1.0 | hy-memory-internal>=0.1.5.11.dev2 |
含 SharedRuntime / BM25 中文修复 / Chroma keyword_search / stdout 日志 |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hermes_hy_memory-0.1.2.tar.gz.
File metadata
- Download URL: hermes_hy_memory-0.1.2.tar.gz
- Upload date:
- Size: 21.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
24e5d1b220940f61ec1028c6321d62d6667acb822f7daa67acbaaf6e9ece2f3b
|
|
| MD5 |
96abd7abfec422dc529e88551d13d4b7
|
|
| BLAKE2b-256 |
e4302e8074a235986034f00ea532921ab6b528eaeb33eca44d6e8aab3832caaa
|
File details
Details for the file hermes_hy_memory-0.1.2-py3-none-any.whl.
File metadata
- Download URL: hermes_hy_memory-0.1.2-py3-none-any.whl
- Upload date:
- Size: 17.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6adaf379b442d2f205f716048a99d5052cffbd2e2922937b2113be827f58ab71
|
|
| MD5 |
32a2a0fc486f27f5d2bb03c58e02fcb8
|
|
| BLAKE2b-256 |
f8e5858ded306c87e387efd7f8cc453fccd60eb216edc715e024dffe7f90a4fd
|