Doramagic 项目包 · 项目说明书

MemMachine 项目

MemMachine 是面向 AI Agent 的通用记忆层,提供可扩展、可定制、可互操作的记忆存取能力,为下一代自主系统简化 AI Agent 状态管理。

概述与系统架构

MemMachine 是一个面向大语言模型(LLM)应用的事件驱动型长期记忆中间件(memory middleware),通过统一的 Python SDK、HTTP API 与 TypeScript 客户端为 Agent 提供可持久化的「语义记忆 + 情景记忆」双通道能力。 资料来源:[README.md:1-40]()

章节 相关页面

继续阅读本节完整说明和来源证据。

核心设计目标

系统通过抽象接口将 向量存储(VectorStore)图数据库(Graph DB)语言模型(LLM)嵌入模型(Embedder) 解耦,使后端可在不修改业务代码的前提下替换为本地嵌入式实现或云端托管服务。 资料来源:packages/meta/README.md:1-30

双通道记忆模型:

  • 语义记忆(Semantic Memory):从会话中抽取事实、偏好与实体特征,存储为结构化条目并附带源 episode 的引用(citation)。
  • 情景记忆(Episodic Memory):基于事件图(event graph)保留原始交互上下文,依赖图数据库实现多跳检索与时间序列回溯。

这种分层恰好对应了社区中讨论较密集的几类痛点,例如 search 调用返回的 semantic_memory 字段为空(issue #690)以及同一事实被重复摄入导致的语义重复(issue #640),都需要由摄入端在写入前完成去重与合并。 资料来源:packages/server/src/memmachine_server/semantic_memory/semantic_ingestion.py:1-50

系统分层与模块拓扑

服务进程以 memmachine_server 包为核心,按职责划分为若干层:

关键模块职责
入口层server/app.pymain/memmachine.py加载配置、暴露 REST/OpenAPI
资源层common/resource_manager/resource_manager.py统一管理 LLM、Embedder、向量库、图库的句柄生命周期
记忆层semantic_memory/episodic_memory/执行摄入(ingestion)、检索、合并、去重
存储层vector_store/graph_store/适配 Qdrant、SQLite 等后端,未来扩展 Milvus 与 Apache AGE

资料来源:packages/server/src/memmachine_server/server/app.py:1-60 packages/server/src/memmachine_server/common/resource_manager/resource_manager.py:1-80

数据流与请求生命周期

一次 add memory 请求的标准处理路径:

flowchart LR
    Client[SDK / HTTP] --> Entry[server/app.py 路由]
    Entry --> RM[resource_manager 复用句柄]
    RM --> SI[semantic_ingestion 抽取事实]
    SI --> VS[(VectorStore)]
    SI --> EM[episodic_memory 写图]
    EM --> GS[(Graph DB)]
    VS -.相似度检索.-> Retriever
    GS -.多跳检索.-> Retriever
    Retriever --> Client

资料来源:packages/server/src/memmachine_server/main/memmachine.py:1-50 packages/server/src/memmachine_server/semantic_memory/semantic_ingestion.py:30-120

由于摄入阶段依赖 LLM 输出事实条目,当模型返回异常时曾出现死循环反复调用 semantic_ingestion 的故障(issue #1270),故该模块内置了去重与失败退避逻辑以避免重复扣费。 资料来源:packages/server/src/memmachine_server/semantic_memory/semantic_ingestion.py:60-150

扩展性与已知约束

  • 后端可插拔VectorStoreGraphStore 均采用工厂模式注册,社区已请求的 Milvus 向量库(issue #1470)与 Apache AGE 图库(issue #1324)属于此类扩展点。
  • 并发安全SQLiteVectorStoredelete 与并发 upsert 竞争时存在 row_id 复用隐患,会静默丢失向量(issue #1468),使用本地后端时需启用同步锁。
  • 许可证影响:默认图库 Neo4j Community Edition 采用 GPLv3,对商业分发不友好,是推动 AGE 后端开发的主要原因。
  • 发布节奏:截至 v0.3.9,项目持续完善文档与嵌入式 VectorStore(v0.3.8 PR #1292),后续路线图包含前端 SDK 与 Strands Agents 等集成(v0.3.7 PR #1330)。

资料来源:pyproject.toml:1-40 packages/server/src/memmachine_server/common/resource_manager/resource_manager.py:40-120 packages/server/src/memmachine_server/episodic_memory/episodic_memory.py:1-60

资料来源:packages/server/src/memmachine_server/server/app.py:1-60 packages/server/src/memmachine_server/common/resource_manager/resource_manager.py:1-80

记忆系统与数据流 (Episodic、Semantic、Short-Term)

MemMachine 的记忆系统以 EpisodicMemory 为顶层编排者,统一对外暴露 addmessage、search、delete 等接口,并把数据流派发到三个具有不同生命周期与存储后端的子模块:短期记忆(Short-Term)、事件/情景记忆(Event Memory + Long-Term Memory)以及语义记忆(Semantic Memory)。Epi...

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 1. Short-Term 缓冲

继续阅读本节完整说明和来源证据。

章节 2. Event Memory 切分与派生

继续阅读本节完整说明和来源证据。

章节 3. Long-Term 持久化与图谱关联

继续阅读本节完整说明和来源证据。

概述与分层职责

MemMachine 的记忆系统以 EpisodicMemory 为顶层编排者,统一对外暴露 add_messagesearchdelete 等接口,并把数据流派发到三个具有不同生命周期与存储后端的子模块:短期记忆(Short-Term)、事件/情景记忆(Event Memory + Long-Term Memory)以及语义记忆(Semantic Memory)。EpisodicMemory 在构造时同步实例化这三个组件,从而形成"上下文缓冲 → 事件持久化 → 语义提炼"的处理链路 资料来源:packages/server/src/memmachine_server/episodic_memory/episodic_memory.py:1-120

写入路径:从消息到长期记忆

1. Short-Term 缓冲

add_message 调用首先把消息推入 ShortTermMemory 的环形上下文缓冲,以便同会话后续轮次直接复用;同时该缓冲也是后续分段(segmentation)的输入。短期缓冲遵循容量上限,超出时按 FIFO 淘汰最旧条目 资料来源:packages/server/src/memmachine_server/episodic_memory/short_term_memory/short_term_memory.py:40-110

2. Event Memory 切分与派生

EventMemory 把累积的消息交给 TextSegmenter,按时间或 token 阈值切成若干候选事件;随后 TextDeriver 使用 LLM 提炼出语义结构化的派生事件(derived events) 资料来源:packages/server/src/memmachine_server/episodic_memory/event_memory/segmenter/text_segmenter.py:1-90 资料来源:packages/server/src/memmachine_server/episodic_memory/event_memory/deriver/text_deriver.py:1-110

3. Long-Term 持久化与图谱关联

派生事件被 LongTermMemory 写入后端图数据库,并维护"事件 ↔ 派生事件 ↔ 特征"的多跳关联关系;在长期记忆之上还维护向量索引用于相似度检索 资料来源:packages/server/src/memmachine_server/episodic_memory/long_term_memory/long_term_memory.py:1-150

flowchart LR
  A[add_message] --> B[ShortTermMemory]
  B --> C[TextSegmenter]
  C --> D[TextDeriver LLM]
  D --> E[LongTermMemory GraphDB]
  D --> F[SemanticMemory 特征库]
  E --> G[VectorStore 向量索引]
  F --> H[FeatureProfile]

读取路径:search 与语义召回

search 是统一查询入口。EpisodicMemory 并行执行两类检索:

  1. Episodic 检索EventMemory 在图数据库中按时间、标签与邻接关系召回事件,同时复用 LongTermMemory 的向量索引做相似度排序,返回最近上下文 资料来源:packages/server/src/memmachine_server/episodic_memory/event_memory/event_memory.py:80-200
  2. Semantic 检索SemanticMemory 按当前 session 与用户维度查询特征库,组合成"长期事实画像"返回 资料来源:packages/server/src/memmachine_server/semantic_memory/semantic_memory.py:60-180

两条结果流在 EpisodicMemory.search 末尾聚合为 episodic_memorysemantic_memory 两个字段回传给调用方。需要注意的是,社区曾报告 MemMachineClient.search 返回的 semantic_memory 始终为空(Issue #690),这通常源自客户端未正确开启语义通道或会话维度不匹配,而非服务端搜索逻辑缺失 资料来源:packages/server/src/memmachine_server/semantic_memory/semantic_memory.py:120-160

已知问题与扩展点

小结

MemMachine 的三层记忆遵循"短期缓冲 → 事件派生 → 长期图谱与语义特征"的单向写路径,并在读取时合并为 episodic 与 semantic 两条召回通道。理解 EpisodicMemory 的编排职责、各子模块的存储后端,以及社区中已暴露的语义去重、LLM 重试与并发竞争问题,有助于在自定义后端(如 Milvus / AGE)和高吞吐场景下安全扩展该数据流。

来源:https://github.com/MemMachine/MemMachine / 项目说明书

存储后端与数据抽象

MemMachine 通过统一的抽象接口,将长期记忆相关的数据持久化与相似度检索解耦,使向量存储和图存储具备可插拔的后端实现能力。本页说明核心抽象类、当前已实现的后端、社区正在讨论的扩展方向,以及一处已知并发缺陷。

章节 相关页面

继续阅读本节完整说明和来源证据。

抽象层设计

VectorStore 抽象基类定义了事件驱动型长期记忆所需的核心 CRUD 与检索语义,所有具体后端都必须遵循其契约。该层向上为情景记忆(episodic memory)与语义记忆(semantic memory)提供统一的 upsert()search()delete() 等异步方法族,向下隐藏不同向量库的差异。资料来源:packages/server/src/memmachine_server/common/vector_store/vector_store.py

VectorGraphStore 是与图记忆配套的图后端抽象层,它将情景记忆中对节点—边遍历与多跳查询的需求封装为统一的 search()add_*() 等方法族,让上层不必关心底层是 Neo4j、Apache AGE 还是其它图数据库。资料来源:packages/server/src/memmachine_server/common/vector_graph_store/vector_graph_store.py

这两个抽象层共同支撑了 MemMachine 的两层记忆模型:向量层负责相似度召回,图层负责关系建模与结构化遍历。

向量存储后端实现

当前 MemMachine 在 common/vector_store/ 目录下已提供多类向量后端实现:

图存储后端与社区诉求

默认的图后端基于 Neo4j Community Edition(neo4j_vector_graph_store.py),其 GPLv3 许可证成为 Apache 系商业分发的硬性阻断,社区已正式提交 feature request 提议引入 Apache AGE 作为可替代图后端,以便保留 Cypher 语义的同时摆脱 GPL 传染问题。资料来源:packages/server/src/memmachine_server/common/vector_graph_store/neo4j_vector_graph_store.py / Issue #1324: Add Apache AGE as an alternative graph backend

类似地,向量层社区也呼吁引入 Milvus / Milvus Lite / Zilliz Cloud 后端,覆盖那些已经拥有 Milvus 基础设施或希望在嵌入场景使用 Milvus Lite 的用户。资料来源:Issue #1470: Add Milvus vector store backend

已知并发缺陷

SQLiteVectorStore 中,并发的 delete()upsert() 可能因 row_id 复用而静默丢失一条刚写入的向量——行依然存在、待处理操作被标记为 applied,但向量字段已无可恢复数据。复现条件与时间序列在跟踪 issue 中有详细描述,建议在同一集合上避免写入与删除的并发执行,或在业务侧引入幂等键与重试以规避竞态。资料来源:packages/server/src/memmachine_server/common/vector_store/sqlite_vector_store.py / Issue #1468: SQLiteVectorStore row_id reuse + concurrent async writes silently lose a record's vector

数据流与扩展指引

新增后端的标准流程是:实现 VectorStore / VectorGraphStore 中规定的异步方法,并在对应配置注册点声明依赖与连接参数,即可被服务端读取与装配,从而使现有情景/语义记忆管线无需改动即可使用新的后端。

flowchart LR
    Client[MemMachine Client] --> Server[Server API]
    Server --> Episodic[情景记忆]
    Server --> Semantic[语义记忆]
    Episodic --> VS[VectorStore 抽象]
    Episodic --> VG[VectorGraphStore 抽象]
    Semantic --> VS
    VS --> Qdrant[Qdrant]
    VS --> SQLite[SQLite]
    VS --> SQLVec[sqlite-vec]
    VS --> Hnswlib[Hnswlib]
    VS -.-> Milvus[Milvus(拟)]
    VG --> Neo4j[Neo4j]
    VG -.-> AGE[Apache AGE(拟)]

来源:https://github.com/MemMachine/MemMachine / 项目说明书

集成、SDK 与部署运维

MemMachine 是面向长上下文 AI 代理的事件回放型记忆系统。本页聚焦其对外集成面:Python/TypeScript 客户端 SDK、HTTP REST API、Model Context Protocol (MCP) 桥接、第三方代理框架集成,以及 CI/CD 中的部署运维要点。所有公共接口均由 apiv2/router.py 统一暴露,并由各自语言的客户端类封装。

章节 相关页面

继续阅读本节完整说明和来源证据。

章节 Python SDK (MemMachineClient)

继续阅读本节完整说明和来源证据。

章节 TypeScript SDK

继续阅读本节完整说明和来源证据。

章节 REST 路由 (apiv2/router.py)

继续阅读本节完整说明和来源证据。

客户端 SDK

Python SDK (`MemMachineClient`)

Python 客户端以 MemMachineClient 类作为入口,封装会话与三类记忆 API。client.py 中的 add() 方法对应长期记忆写入,而 search() 同时返回 episodic_memorysemantic_memory 两个字段。社区问题 #690 曾报告 semantic_memory 始终为空,这通常源于摄入端未触发语义提取流水,而非客户端解析问题,使用时需确认调用顺序遵循「先 add 后 search」。资料来源:packages/client/src/memmachine_client/client.py:1-120

v0.3.9 文档明确推荐通过已发布的 pip 包安装 Python 客户端,取代早期从源码 editable install 的写法,避免依赖漂移。资料来源:packages/client/src/memmachine_client/client.py:30-80

TypeScript SDK

TS 客户端导出 MemMachineClient 类型,封装与 Python 版一致的 HTTP 调用。其内部使用 fetch 适配层,在 HTTPS 代理环境下会自动选择合适的底层实现(在 PR #1369 中针对 #1269 修复),确保 Node.js 与浏览器两端都能跨代理正常工作。资料来源:packages/ts-client/src/client/memmachine-client.ts:1-200

TS 客户端在 v0.3.7 起列为推荐浏览器/前端绑定入口,与社区 #148「前端 SDK 路线图」中提出的 React 绑定演进保持一致。

服务器 API 与 MCP 集成

REST 路由 (`api_v2/router.py`)

router.py 是 HTTP 面与 MCP 面的统一注册点:它挂载 OpenAPI 文档、版本化 REST 端点 (/api/v2/...),并通过 include_router() 引入 MCP 子路由器。openapi.json 由 CI 在每次合并后自动重新生成(见 v0.3.6、v0.3.8 release notes)。资料来源:packages/server/src/memmachine_server/server/api_v2/router.py:1-160

MCP 桥接

文件传输模式适用场景
mcp.py路由挂载FastAPI 内部子应用注册
mcp_stdio.pystdio本地 IDE / Claude Desktop 直接调用
mcp_http.pystreamable HTTP远程或容器化代理调用

mcp.pyrouter.py 中通过 mount 注入,确保 MCP 与 REST 共用同一份业务状态。mcp_http.pymcp_stdio.py 各自负责其传输差异化的握手与会话保活。资料来源:packages/server/src/memmachine_server/server/api_v2/mcp.py:1-120 / packages/server/src/memmachine_server/server/mcp_stdio.py:1-80 / packages/server/src/memmachine_server/server/mcp_http.py:1-80

第三方框架集成

Strands Agents 桥接 (v0.3.7)

v0.3.7 起官方维护 strands-memmachine 集成(PR #1330),把记忆读写直接绑定到 Strands Agent 的 callbacks,在 ReAct / 工具调用步骤前后自动写入 episodic memory。Strands 用户只需在 Agent 构造中传入 memory=MemMachine(...) 即可。

生态扩展点

社区正在评估 Apache AGE 作为 episodic 图后端(#1324)和 Milvus 向量库后端(#1470)。两者均以 VectorStore / 图存储抽象为接缝接入,不影响上层 SDK 的调用方式。这意味着即使后端替换,SDK 集成代码无需改动,只需调整服务端的配置文件。资料来源:packages/server/src/memmachine_server/server/api_v2/router.py:80-160

部署运维要点

  1. OpenAPI 同步:服务端 openapi.json 由 GitHub Actions 自动重新生成并随 release 发布(PR #1237 / #1385)。集成方应以仓库内最新版本为准生成类型 stub。资料来源:packages/server/openapi.json:1-40。
  1. 后端依赖许可:默认 Neo4j Community 为 GPLv3,部分商业分发受限。若需闭源打包,应切换至 #1324 中提议的 Apache AGE 图库。
  1. 异步并发可靠性:在嵌入式 SQLite 向量库下,删除与 upsert 同集合并发时会因 row_id 复用静默丢失向量(#1468)。生产部署若选用 SQLite 后端,应在 SQLiteVectorStore 层配以显式事务或迁移到独立的 Qdrant/Milvus 实例。资料来源:packages/client/src/memmachine_client/client.py:120-200
  1. 依赖更新:Dependabot 持续维护 authlibpytest 等关键依赖(如 v0.3.5 / v0.3.7 升级),部署前应固定锁文件版本。
  1. 安全修复:v0.3.4 修复了归档路径遍历漏洞(PR #1287),升级部署需确保命中该补丁版本。
flowchart LR
  App[应用/Agent] -->|MemMachineClient| SDK[Python/TS SDK]
  SDK -->|HTTP/JSON| Router[api_v2/router.py]
  Router --> REST[/REST endpoints/]
  Router --> MCP[MCP stdio / HTTP]
  Router --> Mem[(Long-term Memory: episodic + semantic)]

来源:https://github.com/MemMachine/MemMachine / 项目说明书

失败模式与踩坑日记

保留 Doramagic 在发现、验证和编译中沉淀的项目专属风险,不把社区讨论只当作装饰信息。

high 来源证据:[Feat]: Add Apache AGE as an alternative graph backend for episodic memory

可能阻塞安装或首次运行。

high 来源证据:[Bug]: MemMachineClient does not return semantic memory when calling search.

可能增加新用户试用和生产接入成本。

high 来源证据:[Bug]: Semantic messages duplication

可能增加新用户试用和生产接入成本。

medium 来源证据:SQLiteVectorStore: row_id reuse + concurrent async writes silently lose a record's vector

可能增加新用户试用和生产接入成本。

Pitfall Log / 踩坑日志

项目:MemMachine/MemMachine

摘要:发现 12 个潜在踩坑项,其中 3 个为 high/blocking;最高优先级:安装坑 - 来源证据:[Feat]: Add Apache AGE as an alternative graph backend for episodic memory。

1. 安装坑 · 来源证据:[Feat]: Add Apache AGE as an alternative graph backend for episodic memory

  • 严重度:high
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:[Feat]: Add Apache AGE as an alternative graph backend for episodic memory
  • 对用户的影响:可能阻塞安装或首次运行。
  • 证据:community_evidence:github | https://github.com/MemMachine/MemMachine/issues/1324 | 来源讨论提到 docker 相关条件,需在安装/试用前复核。

2. 配置坑 · 来源证据:[Bug]: MemMachineClient does not return semantic memory when calling search.

  • 严重度:high
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个配置相关的待验证问题:[Bug]: MemMachineClient does not return semantic memory when calling search.
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 证据:community_evidence:github | https://github.com/MemMachine/MemMachine/issues/690 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

3. 配置坑 · 来源证据:[Bug]: Semantic messages duplication

  • 严重度:high
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个配置相关的待验证问题:[Bug]: Semantic messages duplication
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 证据:community_evidence:github | https://github.com/MemMachine/MemMachine/issues/640 | 来源类型 github_issue 暴露的待验证使用条件。

4. 安装坑 · 来源证据:SQLiteVectorStore: row_id reuse + concurrent async writes silently lose a record's vector

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安装相关的待验证问题:SQLiteVectorStore: row_id reuse + concurrent async writes silently lose a record's vector
  • 对用户的影响:可能增加新用户试用和生产接入成本。
  • 证据:community_evidence:github | https://github.com/MemMachine/MemMachine/issues/1468 | 来源讨论提到 python 相关条件,需在安装/试用前复核。

5. 能力坑 · 能力判断依赖假设

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:README/documentation is current enough for a first validation pass.
  • 对用户的影响:假设不成立时,用户拿不到承诺的能力。
  • 证据:capability.assumptions | https://github.com/MemMachine/MemMachine | README/documentation is current enough for a first validation pass.

6. 维护坑 · 维护活跃度未知

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:未记录 last_activity_observed。
  • 对用户的影响:新项目、停更项目和活跃项目会被混在一起,推荐信任度下降。
  • 证据:evidence.maintainer_signals | https://github.com/MemMachine/MemMachine | last_activity_observed missing
  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 证据:downstream_validation.risk_items | https://github.com/MemMachine/MemMachine | no_demo; severity=medium

8. 安全/权限坑 · 存在评分风险

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:no_demo
  • 对用户的影响:风险会影响是否适合普通用户安装。
  • 证据:risks.scoring_risks | https://github.com/MemMachine/MemMachine | no_demo; severity=medium

9. 安全/权限坑 · 来源证据:[Bug]: Dead loop to trigger memmachine_server.semantic_memory.semantic_ingestion when LLM reponse is invalid

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:[Bug]: Dead loop to trigger memmachine_server.semantic_memory.semantic_ingestion when LLM reponse is invalid
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 证据:community_evidence:github | https://github.com/MemMachine/MemMachine/issues/1270 | 来源讨论提到 docker 相关条件,需在安装/试用前复核。

10. 安全/权限坑 · 来源证据:[Feat]: Add Milvus vector store backend

  • 严重度:medium
  • 证据强度:source_linked
  • 发现:GitHub 社区证据显示该项目存在一个安全/权限相关的待验证问题:[Feat]: Add Milvus vector store backend
  • 对用户的影响:可能影响授权、密钥配置或安全边界。
  • 证据:community_evidence:github | https://github.com/MemMachine/MemMachine/issues/1470 | 来源类型 github_issue 暴露的待验证使用条件。

11. 维护坑 · issue/PR 响应质量未知

  • 严重度:low
  • 证据强度:source_linked
  • 发现:issue_or_pr_quality=unknown。
  • 对用户的影响:用户无法判断遇到问题后是否有人维护。
  • 证据:evidence.maintainer_signals | https://github.com/MemMachine/MemMachine | issue_or_pr_quality=unknown

12. 维护坑 · 发布节奏不明确

  • 严重度:low
  • 证据强度:source_linked
  • 发现:release_recency=unknown。
  • 对用户的影响:安装命令和文档可能落后于代码,用户踩坑概率升高。
  • 证据:evidence.maintainer_signals | https://github.com/MemMachine/MemMachine | release_recency=unknown

来源:Doramagic 发现、验证与编译记录