Skip to main content
Glama

ERINYS — AI 代理的反射式记忆

🇯🇵 日本語版 / Japanese

它不仅能创造曾经存在的记忆,甚至能创造从未发生过的记忆。

AI 代理的记忆系统一直都在模仿人类记忆。短期、长期、情景、语义——这些教科书式的分类直接被生搬硬套到了实现中。

总觉得哪里不对劲。

人类会遗忘,但现有的记忆系统不会。它们无休止地增长,用陈旧的事实与新鲜的事实同等对待。人类会注意到“等等,你之前不是这么说的吗?”,但记忆系统会悄无声息地覆盖。人类会将两个不相关的经历联系起来并思考“哦,我可以在这里用上它”,但记忆系统只会存储和检索。

需要模仿的不是记忆的分类学,而是其行为。

正是这种不适感召唤了 ERINYS。

ERINYS 是一条看门狗。它会记忆、遗忘、质疑并反击。

ERINYS 的独特之处

遗忘。 大多数记忆系统只会累积。ERINYS 遵循艾宾浩斯遗忘曲线,让记忆随时间衰减。旧的噪音会沉淀,频繁访问的知识会浮现。搜索结果无需手动整理也能保持相关性。

提炼。 一个具体的 Bug 修复(“缺少 JWT httpOnly 标志”)会自动生成三个层级:具体事实 → 可重用的模式(“新端点需要安全检查清单”)→ 通用原则(“安全默认设置应在无需选择的情况下保持安全”)。没有其他记忆系统能做到这一点。

梦境循环 (Dream Cycle)。 将两条记忆输入给 LLM:“它们之间有联系吗?”候选对通过语义相似度进行选择——足够接近以至于相关(余弦相似度 > 0.65),又足够遥远以至于不冗余(< 0.90)。通过 cron 定时在夜间运行,它能发现你从未想过要寻找的联系。没有魔法,只是大规模的自动化笔记比对。

设计哲学

记忆具有层级

并非所有记忆都是平等的。ERINYS 按抽象级别组织知识:

  • 具体 (Concrete) — 发生了什么。“/api/auth 缺少 JWT httpOnly 标志。”

  • 抽象 (Abstract) — 从事实中提取的模式。“新的 API 端点需要安全标头检查清单。”

  • 元 (Meta) — 从模式中提取的原则。“安全默认设置应在无需手动选择的情况下保持安全。”

单个 Bug 修复通过提炼生成所有这三个层级。元层级积累了可在不同项目和技术栈之间迁移的原则。

遗忘是一种特性

每条记忆都有一个随时间衰减的强度分数。6 个月前保存的记忆排名低于昨天保存的记忆。频繁访问的记忆会抵抗衰减——重复检索会强化它们。

当强度降至阈值以下时,该记忆就成为修剪候选对象。数据库保持精简,搜索保持相关性。

事实会变,历史不应消失

当信息更新时——“我们从 AWS 迁移到了 GCP”——ERINYS 不会覆盖。它会创建一个替代链:旧事实被标记为已替换但被保留。你可以问“我们在三月份时认为是什么?”,并得到当时正确答案。

矛盾应被捕捉

如果记忆中同时包含“使用 PostgreSQL”和“使用 SQLite”,ERINYS 会检测到冲突。代理不会悄悄切换,而是会询问:“你之前选择了 PostgreSQL——需求发生变化了吗?”

搜索寻找的是意义,而非仅仅是关键词

同时运行两次搜索并融合结果:

  • 关键词搜索 (FTS5) — 精确术语匹配。

  • 向量搜索 (sqlite-vec) — 语义相似度。“authentication”可以找到“login”、“JWT”、“session tokens”。

结果通过倒数排名融合 (RRF) 合并。两者排名都高 = 最高分。

一切保持本地

单个 SQLite 文件。没有云 API。没有 API 密钥。没有订阅。支持离线。你代理的记忆永远不会离开你的机器。

使用场景

1. 编码代理的跨会话记忆

# Agent saves a learning after fixing a bug
erinys_save(
  title="Fixed JWT httpOnly flag missing",
  content="Cookie was accessible via JS. Added httpOnly: true, secure: true, sameSite: strict.",
  type="bugfix",
  project="my-app"
)

# Next week, similar task — agent searches memory
erinys_search(query="authentication cookie security", project="my-app")
# → Returns the JWT fix with relevance score

2. 矛盾检测

erinys_save(title="Database choice", content="Using SQLite for simplicity", project="my-app")
erinys_conflict_check(observation_id=42)
# → "⚠️ Conflicts with #18: 'Using PostgreSQL for production reliability'"

3. 梦境循环 — 夜间知识合成

erinys_dream(max_collisions=10)
# Picks memory pairs in the "sweet spot" (cosine 0.65–0.90)
# Memory A: "RTK reduces token usage by 60-90%"
# Memory B: "Bootstrap Gate takes 3 seconds due to multiple script calls"
# → Insight: "Apply RTK prefix to Bootstrap Gate scripts to reduce overhead"

4. 时间查询

erinys_timeline(query="deployment target", as_of="2026-03-01")
# → "AWS EC2 (decided 2026-02-15)"

erinys_timeline(query="deployment target", as_of="2026-04-01")
# → "GCP Cloud Run (superseded AWS on 2026-03-20)"

5. 知识提炼

erinys_save(title="Forgot CORS headers on new endpoint", type="bugfix", ...)
erinys_distill(observation_id=50, level="meta")
# → concrete: "CORS headers missing on /api/v2/users endpoint"
# → abstract: "New API endpoints need a CORS review checklist"
# → meta:     "Security concerns should be opt-out, not opt-in"

6. Obsidian 导出

erinys_export(format="markdown")
# → Generates .md files with [[wikilinks]]
# Drop into Obsidian → instant knowledge graph

快速开始

python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

# Run as MCP server (stdio)
python -m erinys_memory.server

# Run tests
PYTHONPATH=src pytest tests/ -v

MCP 配置

Claude Desktop / Claude Code

{
  "mcpServers": {
    "erinys": {
      "command": "/path/to/ERINYS-mem/.venv/bin/python3",
      "args": ["-m", "erinys_memory.server"],
      "env": {
        "ERINYS_DB_PATH": "~/.erinys/memory.db"
      }
    }
  }
}

Gemini (Antigravity)

添加到 ~/.gemini/antigravity/settings.json 中的 mcpServers 下:

{
  "erinys": {
    "command": "/path/to/ERINYS-mem/.venv/bin/python3",
    "args": ["-m", "erinys_memory.server"],
    "env": {
      "ERINYS_DB_PATH": "~/.erinys/memory.db"
    }
  }
}

环境变量

变量

默认值

描述

ERINYS_DB_PATH

~/.erinys/memory.db

SQLite 数据库路径

ERINYS_EMBEDDING_MODEL

BAAI/bge-small-en-v1.5

fastembed 模型

工具 (25)

核心

  • erinys_save — 保存观察结果(带有 topic_key 更新插入)

  • erinys_get — 按 ID 获取(完整内容,不截断)

  • erinys_update — 部分更新

  • erinys_delete — 删除(带有外键级联)

  • erinys_search — RRF 混合搜索 (FTS5 + 向量)

  • erinys_save_prompt — 保存用户提示词

  • erinys_recall — 最近的观察结果

  • erinys_context — 会话上下文回顾

  • erinys_export — 兼容 Obsidian 的 Markdown 导出

  • erinys_backup — SQLite 备份

  • erinys_stats — 数据库统计信息

图谱

  • erinys_link — 创建类型化边

  • erinys_traverse — BFS 图遍历

  • erinys_prune — 修剪弱/衰减的边

时间

  • erinys_reinforce — 增强观察强度

  • erinys_supersede — 对观察结果进行版本控制

  • erinys_timeline — 按时间戳查询

  • erinys_conflict_check — 检测矛盾

梦境循环

  • erinys_collide — 通过 LLM 碰撞两条观察结果

  • erinys_dream — 批量碰撞循环

提炼

  • erinys_distill — 3 粒度抽象(具体 → 抽象 → 元)

批处理与评估

  • erinys_batch_save — 批量保存(带自动链接)

  • erinys_eval — 受 LOCOMO 启发的质量指标

会话

  • erinys_session_start — 开始会话

  • erinys_session_end — 结束会话(带摘要)

  • erinys_session_summary — 保存结构化摘要

ERINYS 的对比

特性

ERINYS

Mem0

官方 MCP Memory

混合搜索 (关键词 + 向量)

✅ FTS5 + sqlite-vec RRF

✅ 向量 + 图谱

❌ 仅知识图谱

时间衰减遗忘

✅ 艾宾浩斯曲线

⚠️ 优先级评分

3 级提炼 (具体 → 抽象 → 元)

梦境循环 (基于碰撞的洞察)

矛盾检测

⚠️ 通过解析器覆盖

时间查询 (“我们在三月份时认为是什么?”)

✅ 替代链

⚠️ 图谱失效

本地优先 (无云 API)

✅ SQLite 单文件

❌ 默认云端

Obsidian 导出

✅ [[wikilinks]]

保存时自动提炼

MCP 原生

✅ 25 个工具

自我评估 (LOCOMO 指标)

简而言之 — 大多数记忆服务器只是存储和检索。ERINYS 还会遗忘、提炼和做梦。

架构

┌──────────────────────────┐
│     FastMCP Server       │  25 tools, unified envelope
├──────────────────────────┤
│  search.py  │ graph.py   │  RRF hybrid │ typed edges
│  decay.py   │ session.py │  Ebbinghaus │ lifecycle
│  temporal.py│collider.py │  versioning │ cross-pollination
│  distill.py │ db.py      │  abstraction│ SQLite + vec
├──────────────────────────┤
│  embedding.py            │  fastembed (BAAI/bge-small-en-v1.5)
├──────────────────────────┤
│  SQLite + FTS5 + vec0    │  Local-first, no network at runtime
└──────────────────────────┘

路线图

  • [ ] 梦境守护进程 (Dream Daemon) — 后台自动执行梦境循环

  • [x] 保存时自动提炼 — 每次保存时触发 3 粒度提炼

  • [ ] 自动修剪 — 当数据库超过大小阈值时进行 GC 衰减观察

  • [ ] 支持 Cron 的 CLI — erinys dream --max 10 用于定时夜间合成

  • [ ] PyPI 包 — pip install erinys-memory

  • [ ] 多代理支持 — 每个代理身份的范围化记忆

许可证

MIT

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/GhostyAI-HA/ERINYS-mem'

If you have feedback or need assistance with the MCP directory API, please join our Discord server