graphmemory - 为 AI 代理设计的双时态长期记忆服务
graphmemory 是一个面向 AI 代理的双时态记忆服务,据项目自述,它把事实拆成「有效时间」与「记录时间」两条时间轴,配合六变量衰减、时间梯度与 TTL 时效,让代理的记忆会积累、会降级、也会过期。项目采用 MIT 许可,仓库创建于 2026-10-30,尚无正式 release。
graphmemory 是一个面向 AI 代理的长期记忆服务。它要解决的问题是:多数代理的「记忆」要么是塞进上下文窗口的对话片段,要么是一张只增不减的向量表,既分不清「这件事当时是什么样」和「后来被改成了什么样」,也不会随时间自然淡出。graphmemory 的做法是给每条事实配两条时间轴,再叠加一套带时间梯度的衰减与过期机制。据项目自述,它适合需要跨会话记住用户偏好、承诺、身份信息与临时状态的代理场景,也适合想研究「机器遗忘」如何工程化落地的开发者。
维护者与状态
项目由 gh9ko8y 维护,仓库创建于 2026-10-30,最后一次提交同样在 2026-10-30,属于刚公开不久的新项目。事实表显示,该项目尚无正式 release,因此没有可引用的版本号与发布说明,使用时应以仓库主干代码为准。截至 2026-11-08,仓库星标数为 201。
主要能力
以下能力均据项目 README 自述整理,未做独立验证:
- 双时态事实:每条事实同时记录「有效时间」(valid_from / valid_until)与「记录时间」(tx time),据项目说明,这样可以回答「当时是什么」以及「后来改了什么」两类问题。
- 六变量衰减模型:以 S(意义)、D(细节)、R(检索难度)、E(情绪)、C(巩固)、I(干扰)六个变量描述记忆状态,遗忘表现为「降级」而非直接删除。
- 时间梯度:按 1 天、3 天、7 天、10 天、2 周、3 周、1 月、3 月、半年、1 年等档位,越久远的事实细节上限越低、检索难度下限越高、表述口径越不确定。
- 时效性 TTL:写入时按内容自动分类并设定有效期,例如临时状态 1 天、动作 3 天、事件 7 天、承诺 10 天、普通事实 14 天、偏好永久、身份陈述 3 年、不可更改事实永久。
- 到期确认:带明确日期的约定先存 due_at,到期后进入「待确认」状态,确认之后再开始计时效。
- 动态年龄:年龄只存出生锚点,检索时实时计算,因此同一份数据在不同年份查询会得到对应年份的岁数。
- 竞争检索:以激活度、匹配度、资源适配度计算得分,经相对阈值筛选后取 Top-K,命中会反过来巩固记忆。
- 去重与遗忘工具:提供
memory_dedupe做语义重复扫描,memory_forget做墓碑式删除并保留原文账本。 - 图谱连通性:以渗流视角给出平均度 ⟨k⟩=2E/N、巨分量占比与孤立实体名单。
- 原文账本:episodes 表只追加不更新,可回溯「当时到底说了什么」。
- MCP 与 Web 管理台:内置 MCP server,任何支持 MCP 的代理可直接调用;同时自带极简 Web GUI(
/ui)与 REST API。
架构上,项目以 FastAPI 服务为入口,Neo4j 存实体与关系,PostgreSQL 配合 pgvector 存双时态事实台账、六变量状态、原文账本与墓碑,Redis 负责检索缓存与会话状态。
使用入口
仓库地址:gh9ko8y/graphmemory。
据 README,运行前置条件为 Python ≥ 3.10 以及 Docker + Docker Compose。典型流程是:复制 .env.example 并填写数据库密码与 LLM key,用 docker compose up -d 拉起 Neo4j / PostgreSQL / Redis,创建虚拟环境后 pip install -e .,再用 scripts/init_db.sql 与 scripts/upgrade_chat_memory.sql 初始化 schema,最后以 uvicorn 启动服务:
uvicorn graphmemory.main:app --host 127.0.0.1 --port 8000
写入与检索通过 REST 接口完成,例如向 /api/v1/memory/add 提交 content、user_id、source_type 与 raw_quote,向 /api/v1/memory/search 提交 query、user_id 与 top_k;/api/v1/memory/decay 可手动触发一轮衰减。以 MCP 方式接入时,README 给出的配置是让客户端以 stdio 启动 mcp_server.py,并通过环境变量 GRAPHMEMORY_BASE_URL 与 GRAPHMEMORY_AGENT_ID 指向服务地址与代理标识;可用工具包括 add_memory、search_memory、memory_stats、list_episodes、get_timeline、list_facts、chat、memory_dedupe、memory_forget、get_status 等。
配置全部走环境变量,除数据库连接外,还需要 OpenAI 兼容的 Embedding 接口与用于事实抽取的 LLM 接口;API_KEY 非空时,/api 请求需携带 X-API-Key。
许可与限制
许可证为 MIT,可查阅仓库中的 LICENSE 文件。
据项目说明,仓库不包含任何真实用户数据、API key、Cookie 或服务器凭据,示例中的账号与用户名均为占位符;部署前需要修改数据库密码、API_KEY 与端口暴露面,且不应把 .env 提交进仓库。README 也明确列出未包含的内容:桌面控制台小组件、QQ / NapCat 等即时通讯软件的适配插件(含每轮自动记忆注入钩子)、以及私有的提示词、人设与业务数据,这些都需要使用者按自身环境另行实现。此外,项目依赖 Neo4j、PostgreSQL 与 Redis 三套外部服务,属于偏重的部署形态;由于尚无正式 release,接口与 schema 存在随主干变动的可能,升级前应留意 scripts/ 下的迁移脚本。