Nyx — 把「检索失败」也当作一类信号的记忆系统
用户说「我们聊过的那家川菜馆」,检索返回空。agent 只能答「我没有相关记忆」—— 但用户确实聊过,只是当时的说法和现在不一样。
这是 recall 系统的一类系统性失败: 没发生过,和发生过但没找到, 在所有主流检索器里返回的是同一个东西 —— 空。
| 向量检索 | BM25 / FTS | Nyx Déjà Vu | |
|---|---|---|---|
| 没发生过 | top-k 非空但全是噪音 | 0 命中 | 陌生(明确信号) |
| 发生过但找不到 | top-k 非空但全是噪音 | 0 命中 | 熟悉 + 找回痕迹 |
| 能否区分这两者 | ✗ | ✗ | ✓ |
Nyx 不去和向量库比召回率 —— 它不降 miss 率。它做的事是把 miss 分成两类, 让上层知道什么时候该说「没聊过」,什么时候该说「好像聊过,我再找找」。
from nexsandglass.dejavu import DejaVu # 零依赖,stdlib + sqlite3
dv = DejaVu("./my_memory")
dv.imprint("msg-1", "上周三和张老板聊了川菜馆的事")
dv.sense("我们聊过的那家川菜馆") # -> 熟悉 0.22(普通检索在这里返回空)
dv.hunt("川菜馆") # -> [Phantom(token='川菜馆', refs=['msg-1'], ...)]两层结构:Veil(Bloom Filter,128 KiB)回答「这个词见过没有」, Mist(SQLite)记录它何时、何地、几次出现过。
⚠️ 它不是什么:不替代检索器,不提高召回质量。 实测中sense()能正确标出「熟悉」的场景,hunt()往往找不回细节 —— 分类有效,寻回有限。完整实测数据见benchmarks/dejavu_bench.py, 设计取舍见docs/dejavu.md。
和 mem0 / cognee / Zep 的差别:那些系统在「如何在找得到的时候找得更准」上竞争 (更好的 embedding、更好的图结构、更好的重排)。Nyx 的 Déjà Vu 处理的是 它们都不返回的那一格 —— 检索失败本身。两者的关系是互补而非替代。
| 能力 | 模块 | 说明 |
|---|---|---|
| 👻 Déjà Vu | dejavu/(独立子包) |
「感觉聊过但搜不到」 —— Veil(Bloom) + Mist(SQLite),零依赖,可单独安装使用 |
| 🧠 沙漏 Sandglass | core/sandglass_sqlite.py |
长期记忆存储、全文搜索、语义搜索 |
| 🆔 ID 中枢 | core/memid.py |
记忆唯一标识(mem_id)+ 物理行号跨度(line_start/line_end)+ 墓碑(v7.4) |
| 🗑️ 擦除级联 | core/erasure.py |
一次删除贯通中枢/日志正文/FTS/倒排/影子/engram/向量,可独立验收(v7.4) |
| 🧬 Skill Distiller | features/skill_distiller.py |
过程记忆 → 技能候选自动蒸馏,观察反复出现的工作流并生成可复用 skill 草案(v7.5) |
| 🕸️ 织线 Thread | features/weavethread.py |
知识图谱(实体关系三元组),支持 OpenViking Memory Link 类型化 links + PPR 图增强 |
| 🏜️ 影子沙 Fact Store | features/shadow_sand.py |
结构化事实存储(带信任评分) |
| 📊 情绪/画像 | core/emotion_vocab.py, l3/persona_l3.py |
用户状态追踪、偏移率计算、回音折 |
| 🌙 梦境 Dream | dream/ |
夜间多阶段复盘:记忆整理、反思成长、创造联结 |
| 📚 记忆书 NyxBook | nyx-web/ |
「纸质晨光」主题的可视化记忆浏览 / 写日记 / 盖章 UI(FastAPI + Vue3) |
| 🕸️ 类型化 Memory Link | features/weavethread.py |
支持 OpenViking Memory Link 关系类型(belongs_to / evolved_from / contradicts / related_to …)+ PPR 图增强 |
| 🔍 语义检索 | core/embedding_provider.py, core/vector_search.py |
真正的向量语义检索(本地多语言模型 + RRF 混合,v3.4.0) |
| 🤖 LLM 图谱抽取 | core/llm_extract.py, features/weavethread.py |
可选 LLM 知识图谱补充抽取 + 实体归一化(可降级,v3.4.0) |
| 🔌 MCP 接口 | interfaces/sandglass_mcp.py, interfaces/nyx.py |
MCP 工具接入 Hermes / Claude |
| 🧬 记忆加工 | engram/types.py, engram/decay.py |
Tulving 四类记忆 + Ebbinghaus 衰减(EngramTide 融合) |
| 🧬 差异化写入 | engram/writer.py |
semantic 覆盖 / emotional 强化 / procedural 去重 / episodic 直插 |
| 🧬 Constitutional | engram/context.py |
记忆融入 system prompt 隐性影响(自然无痕) |
| 🧩 Canon 集成 | runtime/intent.py / features/skill_distiller.py |
与 Canon 技能生态联动:意图召回时确定是否需要某个 skill,反复出现的工作流自动蒸馏为 skill 候选 |
| 🕸️ 类型化 Memory Link | features/weavethread.py |
吸收 OpenViking Memory Link,支持 belongs_to / evolved_from / contradicts / related_to 等关系类型 + PPR 图增强 |
| 🔄 记忆自我演化 | engram/evolve.py, engram/loops/ |
四闭环:事实↔图谱、梦境↔加工、画像↔上下文、召回↔重要性 |
| 🌙 梦境管线 | engram/dream_pipeline.py, engram/prompts/ |
hypnos 三女神融合:浅睡总结→深睡内化→灵感联结 |
| 🎛️ 热路径收编 | runtime/orchestrator.py |
NyxOrchestrator:写入/召回统一入口,包住底层引擎 |
| 🧭 意图召回 | runtime/intent.py |
MemoryIntent 自适应召回(v5.0),语义/时间/领域/关系感知排序 |
| 📦 记忆 Bundle | runtime/bundle.py |
MemoryBundle 合并两套出口(Constitutional + system_prompt),10 槽位 |
| 🌱 候选晋升 | runtime/promotion.py |
"什么值得记住"——Observation→Extract→Score→Type→Promote/Session/Drop |
| 🕰️ 时序事实 | engram/loops/temporal_fact.py |
current_only / as_of / history_of 演变链,不静默覆盖 |
| 🌙 Consolidation Engine | runtime/consolidation.py |
Dream 生产化:Proposal→Validator→Apply/Quarantine + 快照回滚 |
| 🧭 Cognitive OS 端到端 | runtime/eval.py, orchestrator.cognitive_recall |
Formation→Store→Dream→Intent→Bundle→Context→Agent 全链路 |
在原有记忆基础设施之上,新增的"认知记忆"层次,解决 What to remember / What to recall now / How memory changed 三问。
runtime/facade.py:四个稳定操作observe / recall / feedback / forget,对外不暴露实现细节runtime/orchestrator.py:NyxOrchestrator收编所有热路径——写入经FormationRouter,读取经RecallPlanner- 禁止新代码直写内部表(dev escape hatch 打日志);MCP 工具仍可暴露但内部转 orchestrator
runtime/intent.py:MemoryIntent解析 entities / temporal / domain / relation / types / current|history- 策略路由:ownership+vehicle+previous → 多源;熟悉但搜不到 → nyx_hunt;generic → SearchRouter 混合
- 多因子排序:semantic / temporal_validity / importance / confidence / recency / lifecycle_penalty / trust
- 意图失败自动降级 generic_semantic;包住而非替换 SearchRouter
runtime/bundle.py:把 engram Constitutional + Provider system_prompt 两套出口统一为 10 槽位 Bundlecore_facts / preferences / current_thread / historical_events / related_memories / contradictions / confidence_summary / temporal_state / persona_layer / offset_layer / open_loops- 流水线:candidates → score → temporal → budget → compress → render;
utility = relevance/token_cost
runtime/promotion.py:替代默认"整轮 dump",只晋升值得长期记住的- 复用 engram.writer 差异化策略(override/reinforce/dedup/insert)
- 重复→reinforce 不双写;冲突→conflict candidate 不静默覆盖;闲聊/OTP 不晋升
engram/loops/temporal_fact.py:get_current / as_of / history_of / evolution_chain- 写入新值 → 旧值 valid_until=now + historical,新值 active + 链接;禁止静默覆盖
- Golden:2025 Tesla → 2026 Geely,现在 vs 以前答案不同
runtime/consolidation.py:所有变更 → DreamProposal → Validator → Apply/Quarantine- 保留 provenance(source memory ids);destructive merge 可回滚快照
- 压缩/抽象/关系/冲突/衰减;冲突写入 Bundle.contradictions;异步调度不阻塞热路径
orchestrator.cognitive_recall():Formation→Store/Graph→Dream async→Intent Recall→Bundle→Context→Agentruntime/eval.py:formation P/R、temporal accuracy、token utility、p95 latency- MCP 统一入口
memory_observe / memory_recall / memory_feedback / memory_forget(旧工具保留作适配层)
nexsandglass/
├── core/ # 基础设施
│ ├── memid.py # 🆔 ID 中枢:记忆唯一标识 + 行号跨度 + 墓碑(v7.4)
│ ├── erasure.py # 🗑️ 擦除级联:中枢/日志/FTS/索引/影子/向量(v7.4)
│ ├── embedding_provider.py # 语义向量后端(本地/外部 API,Task 1)
│ ├── vector_store.py # 向量存储(JSON/sqlite-vec,Task 1)
│ ├── vector_search.py # 向量语义检索 + RRF 融合(Task 1)
│ ├── search_router.py # 检索路由器(五路混合排序)
│ ├── llm_extract.py # 可选 LLM 抽取接口(Task 2)
│ ├── sandglass_sqlite.py # SQLite 沙漏存储
│ ├── sandglass_paths.py # 数据路径管理
│ ├── sandglass_archive.py # 记忆归档
│ ├── l0_buffer.py # L0 缓冲层
│ ├── emotion_vocab.py # 情绪词库
├── interfaces/ # 对外接口
│ ├── nexsandglass.py # 主接口
│ ├── nyx.py # Nyx 适配层(含 Veil Bloom Filter + Déjà Vu 寻回)
│ ├── sandglass_mcp.py # MCP 工具
│ └── plugin.py # 插件接口
├── features/ # 特性模块
│ ├── weavethread.py # 知识图谱(正则 + 可选 LLM 抽取,Task 2)
│ ├── shadow_sand.py # 结构化事实存储(信任评分)
│ ├── sandglass_vault.py # 沙漏索引检索
│ ├── soul_diff.py # 灵魂差分导出/迁移
│ ├── nightwatch.py # 夜间值守
│ └── ... # decision_particles/multi_analysis/pulse/think
├── l3/ # L3 层(高级记忆)
│ ├── persona_l3.py # 画像构建
│ ├── l3_search_core.py # SimHash/搜索核心
│ └── ... # tasks/emotion/scene/offset/weave/arch
├── engram/ # 🧬 EngramTide 融合层(记忆加工)
│ ├── types.py # Tulving 四类记忆
│ ├── decay.py # Ebbinghaus 衰减 + 浮现 + 激活
│ ├── writer.py # 差异化写入 + embedding 计算(Task 1)
│ ├── context.py # Constitutional 上下文
│ ├── evolve.py # 演化协调器
│ ├── dream_pipeline.py # 🌙 梦境管线(hypnos 融合)
│ ├── prompts/ # 三女神 prompt(Mnemosyne/Epimetheus/Prometheus)
│ └── loops/ # 四闭环(事实↔图谱/梦境↔加工/画像↔上下文/召回↔重要性)
└── utils/ # 工具
├── heartbeat.py # 心跳
└── discipline.py # 纪律约束```
---
## 📊 Benchmark
基于 `tests/eval/run_eval.py` 运行的记忆系统评测(测试集 60 条,top-k=5):
| 指标 | 结果 |
|------|------|
| 词法检索召回率 | 75.00% |
| Episodic 记忆 30 天衰减后权重 | 22.31% |
| 评测脚本 | `tests/eval/run_eval.py` |
>注:混合检索(词法+RRF向量)需要安装 `[vector]` 或 `[chroma]` 额外依赖后运行。
---
## 🚀 安装
### 方式一:pip 安装(推荐)
```bash
pip install nyx-memory
带 MCP 支持:
pip install "nyx-memory[mcp]"带向量语义检索:
pip install "nyx-memory[vector,chroma]"包名
nyx-memory(PyPI);Python 模块名仍为nexsandglass(import nexsandglass)。
# Linux / macOS
./install.sh
# Windows
install.batdocker compose up -d技能文件位于 skills/nyx/,复制到 Hermes 技能目录即可自动加载:
cp -r skills/nyx ~/.hermes/skills/memory/memory_bus_config.yaml(或 Hermes config.yaml)示例:
memory:
provider: nexsandglass
memory_enabled: true
user_profile_enabled: true
nyx:
sandglass:
backend: tfidf # 或 chromadb
auto_consolidate: true
dream:
enabled: true
cron: "0 3 * * *"
dejavu:
enabled: true
sensitivity: 0.7| 工具 | 功能 |
|---|---|
sandglass_search |
倒排索引关键词搜索 |
sandglass_semantic |
语义搜索(TF-IDF / ChromaDB 后端) |
sandglass_recent |
最近 N 条记忆 |
sandglass_persona |
当前主人画像 |
sandglass_offset |
当前偏移率(决策趋势) |
sandglass_echo |
回音折(情感风向) |
sandglass_chart |
情绪熵 ASCII 可视化 |
sandglass_dejavu |
Déjà Vu 模糊感知(check/stats/save_bf/awaken) |
sandglass_thread |
织线知识图谱查询 |
sandglass_thread_graph |
实体子图展开 |
sandglass_thread_weave |
因果链摘要 |
sandglass_dream |
幽灵决策("如果选另一个选项会怎样") |
sandglass_export/import |
记忆迁移 |
soul_export/merge |
灵魂差分导出/合并 |
fact_store |
事实增删查(信任评分) |
fact_feedback |
信任评分反馈 |
memory_observe |
🆕 统一记忆写入入口(经 PromotionEngine 晋升) |
memory_recall |
🆕 统一记忆召回入口(经 MemoryIntent 自适应) |
memory_feedback |
🆕 统一反馈入口 |
memory_forget |
🆕 统一遗忘入口 |
# 搜索记忆
sandglass_search(query="荷兰 BV 公司", limit=10)
# 语义搜索
sandglass_semantic(query="如何优化网络延迟", backend="tfidf")
# 查看主人画像
sandglass_persona()
# 查询知识图谱
sandglass_thread(entity="用户", relation="偏好", limit=5)
# 展开知识子图
sandglass_thread_graph(entity="Xian Delicious Foods", depth=2)
# 幽灵决策
sandglass_dream(question="如果选择另一个方案会怎样")| 数据 | 位置 | 格式 |
|---|---|---|
| 沙漏记忆 | ~/.hermes/sandglass/ |
SQLite / JSONL |
| 织线图谱 | ~/.hermes/sandglass/thread/ |
JSON(三元组) |
| 事实存储 | ~/.hermes/sandglass/facts/ |
SQLite |
| Déjà Vu | ~/.hermes/sandglass/dejavu.bf |
Bloom Filter 持久化 |
| 梦境日志 | ~/.hermes/dreams/ |
Markdown |
新增
- 👻
nexsandglass/dejavu/:Déjà Vu 从interfaces/nyx.py抽出为独立子包, 零外部依赖(stdlib + sqlite3),可单独安装使用DejaVu(storage_dir)显式传目录,不再假设~/.hermes或任何路径imprint(key, text, ts)——key为调用方任意字符串,不再假设是沙漏行号sense(text) -> FamiliarityResult(dataclass)、hunt() -> list[Phantom]persist / reindex / forget / cleanup / gaze,支持上下文管理器
- 📊
benchmarks/dejavu_bench.py:全量实测基准(假阳性率、拐点、延迟、占用、 「熟悉但检索不到」对照实验),结果落benchmarks/results/dejavu_bench.json - 🔁
benchmarks/render_docs.py:文档数字自动渲染自基准结果,不手抄 - 📄
docs/dejavu.md/docs/dejavu.en.md:对外技术文章(中英) - 🧪
tests/test_dejavu.py:30 项独立测试 - 🚀
examples/dejavu_minimal.py:30 行可跑 demo
修复
- ⚡ imprint 慢 17 倍:原先每个 token 一次
commit()(fsync 密集), 实测 66 ms/条。改为整条记忆一次事务提交 → 3.98 ms/条 - ⚡ hunt 慢 3000 倍:
stalk用LIKE '%x%'子串匹配,前导通配符无法走索引, 23 万行时单次 30-105ms;且 hunt 对每个候选 token 各降级一次。 改为先精确匹配(走主键索引 0.01ms)+ 整体降级一次 → 406ms → 0.13ms - 🛠️ 基准单节运行覆盖整个 JSON:
--section fp会抹掉 B/C/D 的历史结果, 导致文档数字失准。改为合并写盘 - 📉
MAX_REFS50 → 20(实测省 32% 磁盘、快 20%;50 个引用是过度设计)
记录在案的失败尝试
⚠️ refs规范化到独立表 —— 实测更差(磁盘 518 B/token vs 内嵌 151 B/token, 写入慢 5 倍),已回退。原因:内嵌串每 token 一行,规范化后每 (token,key) 一行, 行数放大 N 倍,SQLite 每行固定开销吃掉收益。代码中保留了这段说明
实测结论(诚实报告)
- 假阳性率实测与理论吻合到小数点后三位(验证实现正确)
- 1M bits 位图在真实中文场景约 1.8 万条记忆达到 1% 假阳性(非标称的百万)
- 对照实验:FTS5 找回 0/4,
sense()判熟悉 3/4,hunt()找回 0/4 → 分类有效,寻回有限,这是「零依赖」契约的必然代价,已在文档中写明
新增
- 🆔
core/memid.py:记忆唯一标识中枢。一条记忆 ≠ 一个物理行—— 日志按「时间戳 | 发送者 | 正文」切分为逻辑记忆,多行消息记line_start/line_end跨度; 不再依赖「行号 = 记忆」这一在 1590 条多行消息面前失效的假设。 提供allocate / resolve / get / tombstone / verify / repair_from_journal / health - 🗑️
core/erasure.py:擦除级联。一次forget贯通中枢墓碑 → 日志正文原地抹除(保持行数) → FTS → 倒排 → 影子(trust/fact_tags/entities/triples) → engram → 向量;verify_erasure独立验收「内容真的没了」;forget(apply=False)默认 dry-run - 🩺
scripts/nyx_healthcheck.py:六项体检(hub_vs_journal / fts_index / erasure_integrity / inverted_index / write_amplification / entity_index),OK/WARN/BAD 三态 - ✅ 新增测试 6 个文件:
test_memidtest_step2_writepathtest_step3_indexingtest_step4_repairtest_step5_erasuretest_step7_leaks
修复
- 🛠️ 缺陷1 数据目录在 import 时固化
core/memid.py:_DB/_SANDGLASS在导入时求值并永久固定, 之后NEXSANDBASE_HOME改变也不生效。跨目录场景(测试隔离、多租户、同进程切换数据目录)下 写入端与读取端指向不同目录,/api/memories永远读不到刚写入的日记。 改为惰性解析(_db_path()/_journal_path()/_lock_path()每次读环境) - 🛠️ 缺陷2 路径覆盖跨环境泄漏
core/memid.py:set_db_path()建立的覆盖永不失效, A 测试留下的覆盖会污染 B 测试。新增「覆盖归属目录」判定——环境换目录即自动作废; 同时支持直接setattr的场景(按路径自身所在目录比对) - 🛠️ 缺陷3 模块级路径固化 + 父包持有旧模块引用
nyx_server.py:del sys.modules[...]后重新 import 拿到的仍是旧模块对象(父包nexsandglass仍持有引用), 重载形同虚设。改用 PEP 562__getattr__惰性属性,无需重载即可跟随数据目录 - 🔗
core/erasure.py跟进上述惰性化(原先引用memid._SANDGLASS模块属性)
教训(写入 README 以免重蹈)
⚠️ 按line_start抹除日志前,必须先验证行号语义。本版清理测试夹具时, 中枢里存在伪行号记录(测试写到临时 journal,算出 line_start=1,2,3…), 而生产日志的第 1、2、3 行是真实对话——一次forget误抹 345 行真实记忆。 这类污染不能按行号抹除,须以「重建中枢」(从日志重新分配 mem_id)方式处理; 修复缺陷1/2 正是为了不再产生新的伪行号记录⚠️ 破坏性操作前先备份,且 dry-run 需人工核对「目标行号在生产日志里究竟指向什么」, 仅看「选中 N 条」是不够的
- 🛠️ 缺陷1
shadow_sand批提交策略导致同库直写死锁:_maybe_commit每累积 3 次写才 commit, 持久连接在操作间隙仍持有shadow_sand.db写锁,阻塞同库其他连接(resolve_temporal_conflict直连weavethread._DB)→database is locked、写入被吞。改为每次写操作结束立即 commit_get_conn加timeout=10+PRAGMA journal_mode=WAL,移除_commit_pending计数器
- 🛠️ 缺陷2
_Mist连接跨线程崩坏导致 phantom 数据静默丢失:_drift()建持久连接未设check_same_thread=False,跨线程用(SearchRouter/MCP)在 Python 3.11+ 抛ProgrammingError被except吞掉。改为check_same_thread=False+_Mist加threading.RLock保护haunt/stalk/census及nyx_forget/cleanup/reindex全部 DB 操作 - 🛠️ 缺陷3
temporal_fact隐藏依赖外部建表:wthread_triples的 DDL 只在weavethread._ensure_table()定义,第三方直接使用 temporal API(全新空库/未触发 weavethread)→no such table静默失败、 读路径直接崩溃。新增参数化_ensure_table(db_path)并在resolve_temporal_conflict与ensure_temporal_columns内调用,使模块自足建表;并为TEMPORAL_RELATIONS补语义 docstring - ✅ 3 项均以独立 ad-hoc 验证脚本复现+验证(缺陷1 5/5、缺陷2 4/4、缺陷3 6/6);全量 19 测试文件逐文件独立运行全绿
- ✅ DoD#7 新增 5 个 golden scenarios 自动化验收(
tests/test_engram_cognitive_os.py): A. "还是按照之前那个方案" → 找回决策/约束/结论;B. 跨 session 偏好演化(Tesla→Geely); C. 闲聊不污染长期记忆(Formation 门禁);D. token_budget 受限保留铁律/关键事实;E. 单源失败降级不崩 - ✅ 每个 golden 场景使用独立临时数据目录(
NEXSANDBASE_HOME),不污染生产记忆、场景间不串扰 - ✅ DoD#9
skills/memory/nyx/SKILL.md收敛单一事实来源:删除历史scripts/engram副本残留引用, 代码路径统一指向nexsandglass/engram,移除"双向同步拷贝"铁律 - ✅
test_engram_cognitive_os.py全绿(21 项检查 PASS) - ✅ 9 条 Definition of Done 全部达标:唯一 API / 经 Promotion / Intent-Rank 召回 / Bundle 唯一出口 / temporal current vs history / Dream Proposal / golden scenarios / 无双写与 NameError / 无第二套实现
- 🛠️ Bug1
system_prompt_blockopen_loops NameError → 不再静默 fallback 旧拼接(改用open_loops_layer) - 🛠️ Bug2
cognitive_recall误调intent.history_context实例方法 → 改用模块级函数 - 🛠️ Bug3
sandglass_mcptools/list 补声明memory_observe/recall/feedback/forget四工具 - 🛠️ Bug4
RecallPlanner._adapt_nyx对齐nyx_sense/hunt真实返回结构(phantom whisper + 熟悉度) - 🛠️ Bug5
sync_turn与 FormationRouter 双写 sandglass → 加raw_already_logged参数,审计日志一行一次 - 🛠️ Bug6
facade.feedback传空 memories 名存实亡 → 加载匹配行并回写权重(helpful 提升 / weaken 降低) - 🛠️ Bug7 删除
skills/nyx/scripts/与主包分叉的 22 个副本,单一事实来源归nexsandglass/ - 📄 新增
RUNTIME.md(B0 唯一对外 API + MemoryContext/MemoryObject 契约)+PR_BUGFIX.md - ✅ 新增
tests/test_runtime_{api,b1,b2,b3,bugfixes}.py;全量 19 个测试文件独立运行全绿
- 🧭 Cognitive OS 端到端:Formation→Store/Graph→Dream async→Intent Recall→Bundle→Context→Agent
- 🧭 评测框架
runtime/eval.py:formation P/R、temporal accuracy、token utility、p95 latency - 🎛️ MCP 统一入口
memory_observe/recall/feedback/forget(旧工具保留适配层)
- 🌙
runtime/consolidation.py:DreamProposal→Validator→Apply/Quarantine + 快照回滚 - 🌙 冲突写入 Bundle.contradictions;异步调度不阻塞 observe/recall
- 🕰️
engram/loops/temporal_fact.py融合查询 API:current_only / as_of / history_of / evolution_chain - 🕰️ 不静默覆盖:旧值 historical + 新值 active + supersedes 链接
- 🧭
runtime/intent.py:MemoryIntent 解析 + 策略路由 + 多因子排序 - 🧭 意图失败降级 generic_semantic;包住 SearchRouter
- 🌱
runtime/promotion.py:Observation→Extract→Score→Type→Promote/SessionOnly/Drop - 🌱 重复→reinforce;冲突→conflict candidate;闲聊/OTP 不晋升
- 🎛️
runtime/facade.py:observe/recall/feedback/forget 稳定门面 - 🎛️
runtime/orchestrator.py:NyxOrchestrator 收编热路径(FormationRouter/RecallPlanner) - 📦
runtime/bundle.py:MemoryBundle 合并两套出口 - 🧬
engram/types.py:MemoryObject canonical schema + lifecycle 状态机
- 📊 评测测试集扩充至 60 条(fact_exact 10 / fact_semantic 15 / cross_session 10 / emotional 8 / procedural 8 / tech 9)
- 📊 run_eval.py 词法对比真实接入(token 重叠检索),产出具体数字:
- 首轮评测:60 条测试集词法召回率 75%,衰减系数 0.223(30 天 episodic)
- 报告模板:
tests/eval/latest_report.md
- 混合检索对比支持注入向量组件后自动启用(RRF 融合)
- 🔍 真正的语义检索(Task 1):新增
core/embedding_provider.py(本地 sentence-transformers + 外部 API 可插拔)、core/vector_store.py(JSON/sqlite-vec 后端)、core/vector_search.py(向量检索 + RRF 融合);SearchRouter 新增第五路向量检索,与现有四路做混合排序;engram/writer.py写入时自动计算 embedding - 🤖 LLM 知识图谱抽取(Task 2):新增
core/llm_extract.py(可选接口);features/weavethread.py新增wthread_extract_with_source(regex/llm 来源标注)和wthread_extract_llm(可降级 LLM 补充抽取);环境变量WTHREAD_LLM_EXTRACTION=1开启,关闭时纯正则 - 📝 文档修复(Task 3):README 包结构替换虚构路径(core/thread_*.py→features/weavethread.py, core/fact_store.py→features/shadow_sand.py, core/persona.py→l3/persona_l3.py);修正 Déjà Vu 描述(明确实现在 interfaces/nyx.py 的 _Veil Bloom Filter + nyx_hunt 寻回)
- 🌙 新增
engram/dream_pipeline.py:hypnos 三女神流程并入 Nyx 梦境 - 🌙 Mnemosyne 浅睡总结(prompt + 规则兜底)/ Epimetheus 深睡内化(确定性代码)/ Prometheus 灵感联结
- 🌙 新增
engram/prompts/:hypnos 三女神 prompt 资产入库 - 📝 README/SKILL.md 更新:梦境管线章节 + 融合设计文档
- 🔄 新增
engram/loops/四闭环 +engram/evolve.py演化协调器 - 🔄 闭环1 Thread↔FactStore:事实→图谱自动更新,图谱反向验证冲突
- 🔄 闭环2 Dream↔Engram:梦境触发重分类(≥3次提炼)/合并/关系发现
- 🔄 闭环3 Persona↔Context:画像确认事实加权,字段变更触发重建
- 🔄 闭环4 Recall↔Writer:成功召回提升重要性,长期无关加速衰减
- 📝 README/SKILL.md 更新:演化闭环章节 + 设计文档
- 🧬 新增
nexsandglass/engram/记忆加工层(types / decay / writer / context) - 🧠 Tulving 四类记忆:semantic / episodic / emotional / procedural 差异化写入
- ⏳ Ebbinghaus 指数衰减:episodic/emotional 衰减,DECAY_FLOOR 永不归零
- 📤 分层浮现 R1-R4:规则 > 高唤醒情绪 > 未解决 > 近期事件
- ⚡ 逐轮激活:当前输入相似记忆 boost(封顶 1.0)
- 📜 Constitutional 上下文:记忆隐性影响回复,严禁暴露机械检索
- 📝 README 更新:包结构 + 核心能力表加入融合层
- 🔄 重构为模块化包结构(core / interfaces / utils / features / l3)
- 🧠 技能层同步:
skills/nyx/完整纳入仓库(SKILL.md + 14 篇参考文档) - 📝 README 重写:新增架构说明、MCP 工具表、使用示例
- 🐛 修复
_fail_open装饰器循环导入问题 - 🔀 合并远端文件(nyx.py、PROTOCOL.md、demo/)
- v2.9.9:雷军 TOCTOU 修复(Lock + 元组原子赋值)
- v2.9.9:词库自生长修复(马云 + 托尼双审)
- 基础沙漏记忆存储与检索
MIT License
Made with 🧠 by Nyx — 夜神记忆感知系统