Skip to main content

HL-Mem

Python 3.11+ License: Apache-2.0 Version: 0.28.3 CI

中文 | English

中文

HL-Mem 是面向 AI Agent 的本地优先、证据驱动长期记忆系统,而不只是一个向量数据库。它把不可变 Event 转化为带证据链的结构化 Claim,以双时间模型记录事实变化,并通过独立的 Experience 通道沉淀 Episode、Trace 与可复用 Policy;默认只需 SQLite,也可按需启用在线模型与 sqlite-vec。

每条记忆都可追溯到不可变的原始事件。

数据如何流动

flowchart LR
    A["Event 摄入<br/>不可变原始事件"] --> B["LLM 提取<br/>7 字段 compact"]
    B --> C["AdmissionPolicy<br/>准入与后处理"]
    C --> D["Claim<br/>证据链 · 双时间"]
    D --> E["混合召回<br/>FTS5 + Dense"]
    E --> F["RRF → Reranker"]
    F --> G["Context Packet / REST / MCP"]

30 秒极速上手

需要 Python 3.11+。前两行在当前终端执行;服务启动后,在另一个终端执行第三行:

python -m pip install hl-mem
hlmem init --offline && hlmem server
hlmem remember "Alice 喜欢深色模式" && hlmem recall "Alice 喜欢什么"

五分钟上手

需要 Python 3.11+。先从 PyPI 安装:

python -m pip install hl-mem

在准备存放本地配置和数据库的目录中,生成无需 API key 的离线配置并启动服务:

hlmem init --offline
hlmem server

另开一个终端,写入并召回记忆:

hlmem remember "Alice 喜欢深色模式"
hlmem recall "Alice 喜欢什么"

召回结果会同时给出 Claim ID、分数和证据引用,例如:

[1] Alice 喜欢深色模式
    ID: <claim-id>
    分数: 0.8123
    证据:
      - event/<event-id>

event/<event-id> 表示这条 Claim 可追溯到对应的不可变原始事件,而不是一段没有来源的模型文本。可用 hlmem list 再次查看 Claim ID,并将它用于 hlmem forget <claim-id>、REST 详情查询或 MCP 的 memory_explain。离线配置是 FTS-only 关键词召回;fake embedding 只保持存储结构兼容,不提供语义检索。

进阶安装与集成

从源码安装/运行

git clone https://github.com/lohr13/hl_mem.git
cd hl_mem
uv sync
uv run hlmem init --offline
uv run hlmem server

开发环境使用 uv sync --dev;安装后可运行 hlmem doctor 做只读诊断。SQLite 需要 FTS5,Python 官方发行版通常已包含。

受污染宿主环境

Hermes gateway 等宿主可能向子进程注入指向自身虚拟环境的 PYTHONPATHPYTHONHOME。此时直接调用本仓库 .venv 的 Python,仍可能导入宿主环境中的包,并因 Python 版本不同而加载到不兼容的二进制扩展。从这类宿主运行源码时,请统一通过 launcher 启动:

bash scripts/hlmem-python.sh -m hl_mem.cli doctor

Windows cmd.exe 对应使用:

scripts\hlmem-python.cmd -m hl_mem.cli doctor

launcher 会清除两个污染变量、切换到仓库根目录,并固定使用 .venv/Scripts/python.exestart_hl_mem.shstart_production.bat 也委托给同一入口。

启用在线模型

从源码仓库将 config.example.toml 复制为本地 hl_mem.toml,并按需复制 .env.example。把启用组件的独立密钥写入 .envLLM_API_KEYEMBEDDING_API_KEYRERANKER_API_KEYIMAGE_API_KEY;再将对应的 extraction.modeembedding.modereranker.modeimage_describer.mode 切换到在线模式。完整字段见 配置参考

连接 Codex、Claude 与 Cursor

运行 python -m pip install "hl-mem[mcp]" 安装 MCP extra 后,可使用官方 SDK 2.x 的 stdio 入口 hl-mem-mcp 连接 Codex、Claude Code、Claude Desktop 或 Cursor。配置示例和七个工具的契约见 MCP 使用说明

集成 Hermes

先启动 HL-Mem 并确认 curl --fail http://127.0.0.1:8200/healthz 成功,再安装或升级插件:

hl-mem hermes install --hermes-home <HERMES_HOME>
hl-mem hermes upgrade --hermes-home <HERMES_HOME>

省略 --hermes-home 时会从环境变量和常见目录探测 Hermes 根目录。两条命令在目标副本一致时均保持 no-op;install 遇到漂移会拒绝覆盖,upgrade 会先备份既有插件文件再刷新。hlmem doctor 可区分路径正确、路径错误和副本漂移。插件安装到 <HERMES_HOME>/plugins/hl_mem/;完成后必须重启 Hermes。适配器通过本地 HTTP 提供超时、熔断、预取和 Episode/Trace 同步。

常驻部署与 systemd

常驻部署使用 scripts/healthcheck.py 探测 /healthz,将重启和告警交给 systemd、Windows 服务管理器或容器编排平台。systemd 的 WorkingDirectory 必须包含 hl_mem.toml 和可选 .env

悬空冲突可先只读巡检,再显式应用安全修复;默认命令不修改数据库,--apply 只删除终态且双侧 Claim 均已缺失的 case:

hl-mem conflicts repair-dangling
hl-mem conflicts repair-dangling --apply

REST 的完整请求契约见 API 文档

关键配置

非敏感配置只从当前工作目录的 hl_mem.toml 读取;密钥只从 .env 或同名进程环境变量读取。常用键如下,完整列表见 配置参考

TOML 键 代码默认值 说明
database.path var/hl_mem.db SQLite 数据库路径
extraction.mode fake 提取器:fakerealllm
extraction.batch_max_events 5 同 session 单次提取的 Event 上限
extraction.batch_max_wait_seconds 120.0 未满窗口的最长等待时间
embedding.mode fake 向量化:fakereal
embedding.text_type 未设置 native 模式可选 documentquery;默认不发送
reranker.mode off 重排:offfakeonreal
image_describer.mode off 图片描述:offon
llm.provider dashscope dashscopezhipuopenai_compatible
llm.structured_mode json_object autojson_objectjson_schema
index.text_mode natural legacyvalue_onlynaturalanswerable;natural 只拼 subject 与原语言 value
recall.vector_backend sqlite_scan sqlite_scan(默认)或需安装 hl-mem[sqlite-vec]sqlite_vec
recall.dedup_threshold 0.95 候选窗内近重复折叠阈值;设为 0 关闭折叠
recall.dedup_candidate_limit 100 每次召回参与近重复折叠判定的候选上限
recall.resurrection_mode auto 主召回证据不足时启用有界 archived-only 冷路径;设为 off 可关闭
recall.query_expansion_mode auto 多查询召回:offautoalways
decay.model activation_halflife 按 scope 半衰期衰减 activation,不因日常衰减改写 confidence
dedup.scan_limit 200 每轮维护最多审查的 pending dedup_pairs 数量
relation.discovery_mode off 关系发现:offauditauto
recall.tag_channel_enabled false 是否启用独立 Tag 检索通道

真实组件和外部调用路径必须提供各自密钥;失败时不会自动切换为 fake。任意 HL_MEM_* 环境变量都不再参与应用 Settings 配置。 Settingsconfig.example.tomlrecall.default_limit / recall.relevance_reranker_floor 均为 5 / 0.15; 示例部署仅把 recall.relevance_relative_drop 从代码默认 0.15 显式调整为 0.30,并保持 recall.relevance_keep_top1 = true。query expansion 使用独立可配置模型,单次/总超时为 5/6 秒。

向量检索规模指引

默认 sqlite_scan 是两阶段精确扫描,适合约 10 万条 Claim 以内的本地库;实际边界还取决于 embedding 维度、并发和延迟目标。接近或超过该规模时,应安装 hl-mem[sqlite-vec] 并显式设置 recall.vector_backend = "sqlite_vec",避免把全量向量扫描当作无界生产索引。SQLite 主表仍是权威数据源, sqlite_vec 只维护可重建的派生投影。

从 legacy 索引迁移既有数据库时,先只读预览,再显式执行回填;回填会同步 index_text、FTS 和 dense embedding,使用 real embedder 的部署需提供对应密钥:

hlmem backfill-index-text --mode natural --dry-run
hlmem backfill-index-text --mode natural

从 v0.27.x 升级

v0.28.3 不新增配置键,也不改变 v0.27 的配置默认值:recall.resurrection_mode = "auto"decay.model = "activation_halflife" 继续生效。若从 v0.26 跨版本升级并希望保持旧行为,仍可显式配置:

[recall]
resurrection_mode = "off"

[decay]
model = "legacy_linear"

升级前停止 API、Worker 和其他写入者,并保留主库的离线副本。首次由 v0.28 打开数据库时会自动执行 migration 043/044;随后应立即运行一次 hlmem backup,它会创建并绑定 <database>.tombstones.db,生成 manifest v2。主库 backup、manifest 与 tombstone ledger 必须作为一组保护;旧 manifest v1 无法证明删除历史, v0.28 restore 会明确拒绝。migration 不裁决存量冲突,也不自动删除历史异常,仍须通过显式 audit/repair 流程处理。

能力概览

核心记忆 服务与治理
记忆正确性
幂等摄入、原子写入与精确去重
冲突收敛 + 三入口删除闭环与 tombstone 防复活
经验通道
Episode、Trace 与 Reward
Policy/Procedure 与派生 Observation
时间与证据
Claim 与关系边双时间模型
证据链、实体归一化、受控归档与物理遗忘
接口
稳定的 FastAPI REST 与 Hermes Provider
Beta 阶段的七工具 MCP stdio 接口
混合召回
中文 FTS5 + Dense,经 RRF 融合与可选 Reranker
关系/查询扩展与 Token 预算上下文
评测
提取评测 v2、112-case 隔离检索与 40-case 中文 E2E
LongMemEval、MemDaily、PerLTQA 完整 runner
生命周期
importance 联动 TTL、activation 衰减与归档清理
manifest v2 备份 + tombstone restore replay
治理工具
7 字段 compact 提取 + 显式 evidence 的 canonical slot
Job 写入进度、dangling 巡检与 active Claim 修复

评测结果(公开冻结口径)

评测 口径 结果
LongMemEval · HL-Mem v0.25.2 holdout50,Top-10 结构化 evidence 43/50(86.0%)
LongMemEval · Full-Context 上限 全部 session 直接送入 reader 46/50(92.0%)
LongMemEval · Native RAG 基线 raw-session dense RAG,Top-10 45/50(90.0%)
MemDaily · v0.26.0(2026-08-15) 180 trajectories,提取 → 召回 → QA accuracy 97.2%,F1 0.9855,R@5 97.5%
PerLTQA · v0.26.0(2026-08-15) 378 questions,10 characters,纯检索 R@5 96.8%,MRR 82.8%
中文 E2E · v0.26.0(2026-08-15) 40 cases,deterministic-rubric-v2 live 38/40(95.0%);R@5 100%
v0.27.1 行为变更验证(2026-08-15) 沿用 v0.26.0 数字口径;本版未重跑全量 benchmark resurrection:2 次正确复活、0 次误伤,p95 12.7ms;activation:identity 零误杀,confidence 语义分离
v0.28.0 维护与实验验证(2026-08-16) 沿用上述公开 benchmark;本版未重跑全量 benchmark slot 误配修复 16/16、0 回退;关系语义 packet RAO 12%、entity@5 无增益,未产品化

中文基准的 embedding/reranker 均为 qwen3.7-text-embedding / qwen3-rerank。PerLTQA 直灌语料、不经提取;MemDaily 与中文 E2E 按提取 → 召回 → QA 全链路运行,提取和 QA 均使用 qwen3.7-plus。MemDaily 以 180 条轨迹全量计分。

LongMemEval 三角对照统一使用 deepseek-v4-flash-0731 reader,reader 开启 thinking、judge 关闭 thinking;benchmark reader 与生产 recall/context packing 是不同契约。中文隔离检索和 E2E 的当前运行与 回归口径见评测说明,本地产物命名见结果索引

已知边界

  • 当前模型在 v0.28 source-first 冻结 A/B 中只让 12% 的关系题 packet 获得完整 RAO,entity coverage@5 保持 34.7%,且没有形成可供关系扩展使用的边;因此该关系语义注解方案及 C 系列实验臂均未产品化。 生产仍只使用既有 compact Claim、来源受控的 RAO 渲染和普通 relation expansion,不能假设系统会从平铺文本 自动恢复高密度、方向完备的关系链。

能力成熟度、默认开关和证据见 能力矩阵,架构与数据流见 架构文档

项目状态

  • Stable:事件与证据链、原子写入、LLM 提取、Embedding、FTS + Dense + RRF、双时间过滤、TTL/衰减/归档、冲突与去重、REST、Hermes、备份与审计。
  • Beta:多查询召回、关系候选发现、反馈驱动维护、提取蕴含审计、语义去重审计、MCP Server、Benchmark 与 LongMemEval。
  • Experimental:图片证据、提取预过滤、独立 Tag 通道、PostgreSQL 连通性探针。

当前基线为 v0.28.3,共 44 个不可变、仅向前执行的 SQL Migration。

文档

文档 内容
文档索引 所有维护中文档的导航
配置参考 TOML 键、默认值、允许值与密钥边界
架构 分层、模块、写入/召回管线、存储和生命周期
API REST 端点和请求约定
MCP stdio 启动参数、Codex/Claude/Cursor 配置与工具错误语义
兼容性策略 版本和公共契约保证
能力矩阵 成熟度、默认值和验证证据
变更日志 发布历史

Contributing / 贡献指南

欢迎通过 Issue 和 Pull Request 参与。开发环境、七项 CI 预检、数据边界及提交约定见 CONTRIBUTING.md

License / 许可证

本项目采用 Apache License 2.0。你可以在许可证条款允许的范围内使用、修改和分发本项目,并须保留所要求的版权及许可证声明。

English: Licensed under the Apache License 2.0. You may use, modify, and distribute this project subject to its terms, including the required notices.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hl_mem-0.28.3.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hl_mem-0.28.3-py3-none-any.whl (463.1 kB view details)

Uploaded Python 3

File details

Details for the file hl_mem-0.28.3.tar.gz.

File metadata

  • Download URL: hl_mem-0.28.3.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hl_mem-0.28.3.tar.gz
Algorithm Hash digest
SHA256 84666ae6c9d5ee38d52031b908c1ae2630685a2911e113453bef6afd9d81478b
MD5 79d098e9f846088c913e869469ec3947
BLAKE2b-256 319ed7367b969492ef6102f397e92a5dacd7be35cada568ee46985e79d255fe7

See more details on using hashes here.

Provenance

The following attestation bundles were made for hl_mem-0.28.3.tar.gz:

Publisher: publish.yml on lohr13/hl_mem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file hl_mem-0.28.3-py3-none-any.whl.

File metadata

  • Download URL: hl_mem-0.28.3-py3-none-any.whl
  • Upload date:
  • Size: 463.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for hl_mem-0.28.3-py3-none-any.whl
Algorithm Hash digest
SHA256 7a75299c2b191ba6633afe01c66d9ec7442782e50185367434c44db955416aec
MD5 4b918b0ea3e06ecfb582f22aefa6acd5
BLAKE2b-256 38192c6f627c81531df00b3ae13ca61a848b4223176f3484ed18523da705112f

See more details on using hashes here.

Provenance

The following attestation bundles were made for hl_mem-0.28.3-py3-none-any.whl:

Publisher: publish.yml on lohr13/hl_mem

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.1.7

2 files

1.1.6

2 files

1.1.5

2 files

1.1.4

2 files

1.1.3

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

0.36.1

2 files

0.36.0

2 files

0.35.1

2 files

0.35.0

2 files

0.34.0

2 files

0.33.0

2 files

0.32.0

2 files

0.31.1

2 files

0.31.0

2 files

0.29.3

2 files

0.29.2

2 files

0.29.1

2 files

0.29.0

2 files

0.28.10

2 files

0.28.9

2 files

0.28.8

2 files

0.28.7

2 files

0.28.6

2 files

0.28.5

2 files

0.28.4

2 files

This release

0.28.3 This release

2 files

0.28.2

2 files

0.28.1

2 files

0.28.0

2 files

0.27.1

2 files

0.27.0

2 files

0.26.0

2 files

0.25.2

2 files

0.25.1

2 files

0.25.0

2 files

0.24.0

2 files

0.23.1

2 files

0.23.0

2 files

0.22.0

2 files

0.21.2

2 files

0.21.1

2 files

0.21.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page