ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

MemOS Neo4j 图数据库模块实战:为 LLM Agent 构建可推理、可演化的图记忆存储

MemOS Neo4j 图数据库模块实战:为 LLM Agent 构建可推理、可演化的图记忆存储 人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-plugin【免费下载链接】MemOSSelf-evolving memory OS for LLM AI Agents: ultra-persistent memory, hybrid-retrieval, and cross-task skill reuse, with 35.24% token savings and DeepSeek Harness support.项目地址https://gitcode.com/gh_mirrors/memos/MemOS点击查看免费下载导读本文围绕 MemOS 开源项目Self-evolving memory OS for LLM AI Agents中的图数据库记忆模块展开完整讲解其基于图结构的记忆存储与查询设计为什么长期记忆需要图存储、如何通过统一抽象接口BaseGraphDB接入 Neo4j、如何配置向量增强检索、如何用单库多租户模式在一个数据库中逻辑隔离多个用户以及如何兼容 Neo4j 社区版并扩展新的图后端。读完本文你将能够独立配置并调用这套图记忆存储为自己的 RAG、认知代理或个人记忆助手提供链、层次与因果关系级别的记忆组织能力。为什么记忆需要图存储向量存储擅长回答哪条记忆在语义上最相似但它难以表达记忆之间的结构关系。MemOS 的图数据库模块文档位于 docs/cn/open_source/modules/memories/neo4j_graph_db.md给出了图存储相对于纯向量存储的四个核心优势将记忆组织成链、层次和因果关系一条记忆不再是孤立的点而是通过PARENT、BELONGS_TO、RELATED等关系类型与前因后果、上下级节点相连执行多跳推理和子图遍历给定一个中心节点可以在有限深度内取出其局部子图get_subgraph或沿特定关系类型追踪上下文链支持记忆重复数据删除、冲突检测和调度抽象接口中预留了deduplicate_nodes、detect_conflicts、merge_nodes等结构维护能力为记忆系统的自演化提供支撑随时间动态地演化图记忆节点带有created_at、updated_at时间戳字段写入时自动补齐配合删除、更新操作图记忆可以随会话持续生长。这些能力共同构成了长期的、可解释的和组成性记忆推理的主干——这与 MemOS 项目hybrid-retrieval、cross-task skill reuse的整体定位一脉相承。模块架构与目录结构图数据库模块位于仓库的 src/memos/graph_dbs/ 目录包含三个核心文件src/memos/graph_dbs/ ├── base.py # BaseGraphDB 的抽象接口 ├── factory.py # 工厂从配置中实例化 GraphDB ├── neo4j.py # Neo4jGraphDB 的产品实现此外仓库还实现了其他后端在 factory.py 中可以看到完整的后端注册表后端状态文件neo4jStablesrc/memos/graph_dbs/neo4j.pyneo4j-communityStablesrc/memos/graph_dbs/neo4j_community.pypolardbStablesrc/memos/graph_dbs/polardb.pypostgresStablesrc/memos/graph_dbs/postgres.py配置侧由 src/memos/configs/graph_db.py 承担GraphDBConfigFactory会依据backend字段自动把字典配置校验并实例化为对应的 Pydantic 配置类Neo4jGraphDBConfig、Neo4jCommunityGraphDBConfig等。配置错误会在实例化阶段直接抛出ValueError例如单库模式下未提供user_name时Neo4jGraphDBConfig.validate_config会报出user_namemust be provided for logical isolation见 graph_db.py。快速上手三行代码接入图记忆以标准 Neo4j企业版或支持管理命令的实例为例构建图存储只需三个步骤完整示例见 examples/basic_modules/neo4j_example.pyfrom memos.graph_dbs.factory import GraphStoreFactory from memos.configs.graph_db import GraphDBConfigFactory # 步骤1构建工厂配置 config GraphDBConfigFactory( backendneo4j, config{ uri: bolt://localhost:7687, user: your_neo4j_user_name, password: your_password, db_name: memory_user1, auto_create: True, embedding_dimension: 768 } ) # 步骤2实例化图存储 graph GraphStoreFactory.from_config(config) # 步骤3增加记忆 graph.add_node( idnode-001, memoryToday I learned about retrieval-augmented generation., metadata{type: WorkingMemory, tags: [RAG, AI], timestamp: 2025-06-05, sources: []} )各配置字段的语义对应 Neo4jGraphDBConfig字段类型默认值说明uristr/list必填Neo4j 连接地址通常为bolt://localhost:7687userstr必填Neo4j 用户名passwordstr必填Neo4j 密码db_namestr必填目标数据库名auto_createboolFalse多库模式下若目标库不存在则自动创建并等待其 onlineuse_multi_dbboolTrueTrue为多库物理隔离False为共享库逻辑隔离user_namestr/NoneNone租户标识use_multi_dbFalse时必填embedding_dimensionint768向量索引维度需与 embedding 模型输出维度一致提示Neo4jGraphDB初始化时会自动通过create_index建立名为memory_vector_index的余弦相似度向量索引以及memory_type、created_at、updated_at等 B-tree 索引共享库模式下还会额外为user_name建索引见 neo4j.py。可插拔的设计BaseGraphDB接口全景BaseGraphDB定义于 src/memos/graph_dbs/base.py是所有图后端必须实现的抽象基类整个 API 可分为四组覆盖记忆的完整生命周期1. 节点操作记忆的增删改查插入add_node(id, memory, metadata)添加单节点add_nodes_batch(nodes)批量添加节点内部使用 CypherUNWIND一次性写入见 neo4j.py。查询get_node查单节点可控制是否返回 embedding、get_nodes查多个节点、get_memory_count按memory_type统计节点数、node_not_exist判断某类记忆是否尚无节点。更新update_node(id, fields)更新节点属性created_at/updated_at会被自动转换为 Neo4jdatetime类型。删除delete_node(id)删除单节点clear(user_name)按user_name清空该租户的所有相关节点共享库模式下只删本用户的数据见 neo4j.py。向量搜索search_by_embedding(vector, top_k, ...)支持附加filter条件过滤完整的过滤用法参见示例函数neo4j_example.example_complex_shared_db_search_filterexamples/basic_modules/neo4j_example.py。2. 边操作三元组记忆插入add_edge(source_id, target_id, type)添加三元组记忆如(事实)-[:BELONGS_TO]-(概念)。查询get_edges查询一个节点关联的多条关系可按类型与方向过滤、edge_exists判断关系是否存在支持ANY类型与OUTGOING/INCOMING/ANY方向、get_children_with_embeddings查询PARENT关系的子节点列表社区版会从外部向量库补齐 embedding、get_subgraph多跳子图遍历返回{core_node, neighbors, edges}结构。删除delete_edge(source_id, target_id, type)删除指定关系。3. 导入导出操作export_graph以结构化字典导出全部图节点与边支持分页page/page_size、按memory_type/status过滤、include_embedding开关返回{nodes, edges, total_nodes, total_edges}。import_graph(data)从{nodes: [], edges: []}形式的序列化字典整图导入节点用MERGE保证幂等。4. 图查询与结构维护get_neighbors、get_path、get_context_chain邻居/路径/上下文链查询用于多跳推理。get_by_metadata结构化元数据过滤支持、in、contains、starts_with、ends_with、比较运算符等见 neo4j.py。get_grouped_counts按任意字段分组计数例如按[memory_type, status]统计图谱构成见 neo4j.py。deduplicate_nodes、detect_conflicts、merge_nodes、get_structure_optimization_candidates为记忆去重、冲突检测与结构优化预留的维护接口其中get_structure_optimization_candidates在 Neo4j 后端已有实现定位孤立节点、无背景节点、单子节点等。完整的抽象方法文档参见 src/memos/graph_dbs/base.py。向量增强检索的底层原理pre-filter 与 ANN 双路径图记忆与纯向量检索的关键区别在于带条件的语义召回。Neo4jGraphDB.search_by_embedding见 neo4j.py根据是否带过滤条件选择两条执行路径带过滤条件pre-filter 路径需 Neo4j 5.18先MATCH (node:Memory)并用WHERE收紧候选集scope、status、user_name、search_filter、filter等再对过滤后的节点用vector.similarity.cosine(node.embedding, $embedding)计算相似度排序。这样避免了queryNodes全局 Top-K 在多租户共享库中把目标用户节点挤出结果的问题。无过滤条件ANN 路径直接调用db.index.vector.queryNodes(memory_vector_index, ...)走近似最近邻索引效率最高。此外还支持threshold相似度阈值返回score threshold的结果与return_fields返回id、score之外的额外字段。仓库测试 tests/graph_dbs/test_neo4j_vector_search.py 明确验证了带scope过滤时走 MATCH cosine、无过滤时走 queryNodes两条查询路径的结构正确性并覆盖了多租户共享库场景下的回归。单库多租户Shared DB, Multi-Tenant通过配置user_name字段MemOS 支持在单个 Neo4j 数据库中逻辑隔离多个用户的记忆图谱适用于协同系统、多角色场景config GraphDBConfigFactory( backendneo4j, config{ uri: bolt://localhost:7687, user: neo4j, password: your_password, db_name: shared-graph, user_name: alice, use_multi_db: false, embedding_dimension: 768, }, )此时每个用户的数据通过user_name字段在读写、搜索、导出中被逻辑隔离系统自动完成过滤写入时add_node/add_nodes_batch会把user_name自动写入节点 metadata见 neo4j.py查询时get_node、get_nodes、get_by_metadata、search_by_embedding、get_all_memory_items等所有读操作都会自动追加n.user_name $user_name条件导出时export_graph同样按user_name过滤节点与边的两端返回给外部消费者前_parse_node会主动移除user_name字段避免租户标识泄漏见 neo4j.py。与之对照的另一种模式是多库物理隔离use_multi_dbTrue每个租户使用独立的 Neo4j 数据库db_name通常等于user_nameauto_createTrue时会自动创建并轮询等待数据库 online见 neo4j.py。示例参考完整的共享库多租户示例见examples/basic_modules/neo4j_example.example_complex_shared_db(db_nameshared-traval-group-complex-new)examples/basic_modules/neo4j_example.py其中 Alice 与 Bob 在同一数据库构建各自独立的主题—概念—事实三层记忆图谱。Neo4j 社区版Community Edition支持社区版没有企业版的多数据库与原生向量索引能力因此 MemOS 提供了独立的后端标识neo4j-community实现于 src/memos/graph_dbs/neo4j_community.py使用方式与标准 Neo4j 类似但自动关闭企业功能❌ 不支持auto_create数据库配置校验强制auto_createFalse见 neo4j_community.py❌ 不支持原生向量索引必须外接向量库目前只支持Qdrant✅ 强制启用user_name逻辑隔离Neo4jCommunityGraphDBConfig.validate_community会拒绝use_multi_dbTrue或缺失user_name的配置。社区版写入节点时embedding 会同步写入外部 Qdrant 集合payload 中携带vector_sync状态标记search_by_embedding则先在外接向量库中按过滤条件做相似度检索再回查 Neo4j 做id级过滤与字段补充见 neo4j_community.py。示例配置config GraphDBConfigFactory( backendneo4j-community, config{ uri: bolt://localhost:7687, user: neo4j, password: 12345678, db_name: paper, user_name: bob, auto_create: False, embedding_dimension: 768, use_multi_db: False, vec_config: { backend: qdrant, config: { host: localhost, port: 6333, collection_name: neo4j_vec_db, vector_dimension: 768, distance_metric: cosine }, }, }, )示例参考社区版完整示例见examples/basic_modules/neo4j_example.example_complex_shared_db(db_namepaper, communityTrue)examples/basic_modules/neo4j_example.py。扩展接入新的图后端BaseGraphDB的可插拔设计允许为任意图形引擎增加支持如TigerGraph、DGraph、Weaviate hybrid只需三步子类化BaseGraphDB实现抽象方法清单中的所有方法创建配置数据类如DgraphConfig继承BaseConfig并声明自身字段注册到两个工厂GraphDBConfigFactory.backend_to_class配置类注册见 graph_db.pyGraphStoreFactory.backend_to_class存储类注册见 factory.pyGraphStoreFactory.from_config会根据backend查表并实例化对应的存储类未注册的后端会抛出ValueError: Unsupported graph database backend。可参考 src/memos/graph_dbs/neo4j.py 作为参考实现——尤其是其中的 metadata 预处理链补时间戳、info字段扁平化、Neo4j 属性类型消毒、多租户 WHERE 条件构造_build_user_name_and_kb_ids_conditions_cypher与复杂过滤条件构造_build_filter_conditions_cypher支持and/or逻辑与gt/lt/gte/lte/contains/in/like运算符这些是与上层记忆模块对接时需要保持一致的契约。小结MemOS 的 Neo4j 图数据库模块用统一抽象 工厂注册的方式把图结构记忆存储沉淀为可直接复用的基础设施BaseGraphDB定义了节点、边、图查询、结构维护与导入导出的完整契约Neo4jGraphDB提供了带向量增强检索、多租户隔离的生产级实现neo4j-community后端让无法使用企业版特性的团队也能享受图记忆能力。无论是构建带层次结构的长期记忆、多跳推理的认知代理还是多角色协同的个人记忆助手这套图记忆 API 都能直接嵌入你的 RAG 管线。赞分享人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-plugin【免费下载链接】MemOSSelf-evolving memory OS for LLM AI Agents: ultra-persistent memory, hybrid-retrieval, and cross-task skill reuse, with 35.24% token savings and DeepSeek Harness support.项目地址https://gitcode.com/gh_mirrors/memos/MemOS点击查看免费下载相关推荐MemOS Neo4j 图数据库记忆模块实战指南从 BaseGraphDB 抽象到多租户共享库与社区版支持MemOS Neo4j 图数据库记忆模块实战指南从 BaseGraphDB 抽象到多租户共享库与社区版支持 MemOS 的 Neo4j 图数据库模块 mem人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-pluginPDF 补丁丁完整指南免费 PDF 工具箱合并拆分、批量改书签只需几步PDF 补丁丁完整指南免费 PDF 工具箱合并拆分、批量改书签只需几步 PDF 补丁丁是一款免费、免安装的 Windows PDF 工具箱供办公人员和学习人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆Agent 工作流AI 评测MCP 服务MCP Clients语音MemOS PreferenceTextMemory 实战指南用文本记忆为 LLM Agent 构建用户偏好引擎MemOS PreferenceTextMemory 实战指南用文本记忆为 LLM Agent 构建用户偏好引擎 PreferenceTextMemory 是人工智能大模型Agent 记忆AI AgentRAG知识图谱dsh-plugin创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表