
人工智能大模型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点击查看免费下载本篇指南以 MOS 用户管理文档 为核心深入讲解 MemOS 中基于角色的访问控制RBAC、记忆立方体MemCube所有权与共享机制。读完你将掌握create_user、list_users、create_cube_for_user、get_user_info、share_cube_with_user五个核心 API 的用法理解其底层 SQLite 持久化模型与权限校验链路并能在多用户 Agent 场景下独立搭建一人一立方、按需共享的记忆隔离方案。一、为什么 MemOS 需要用户管理MemOS 是一个面向 LLM 与 AI Agent 的自进化记忆操作系统。在实际部署中一个 MemOS 实例往往同时服务多个用户或 Agent 会话例如多 Agent 协作场景中每个 Agent 拥有独立身份与专属记忆产品级服务中不同终端用户需要访问彼此隔离的记忆空间团队共享场景下成员之间需要可控地共享项目记忆。如果缺少用户抽象所有记忆将混在一起既无法隔离隐私也无法实现跨会话的权限控制。为此MemOS 在 src/memos/mem_user/ 目录下实现了完整的用户管理子系统并在 MOSCore 初始化时自动装配一个UserManager为整个记忆操作系统提供用户—立方体两层访问模型。二、四种用户角色与权限模型MOS 支持 4 种不同权限级别的用户角色枚举定义于 user_manager.py角色枚举值描述权限ROOTUserRole.ROOT系统管理员访问所有的立方体和用户且不可被删除ADMINUserRole.ADMIN管理员用户可以管理用户和立方体访问所有立方体USERUserRole.USER常规用户可以创建和管理自己的立方体访问共享的立方体GUESTUserRole.GUEST受限用户仅仅可以访问共享的立方体不能创建立方体从源码结构看角色目前作为User表上的一个枚举列持久化SQLite 后端使用 SQLAlchemy 的EnumMySQL 后端则降级为String(20)见 mysql_user_manager.py。权限语义主要体现在两个层面初始化保护首次创建数据库时UserManager会自动以user_id默认root初始化一个ROOT用户user_manager.py并且delete_user对 ROOT 角色直接返回Falseuser_manager.py。操作前校验MOSCore的_validate_user_exists与_validate_cube_access会在所有关键操作前执行用户存在性、激活状态与立方体访问权限检查core.py。需要说明的是ADMIN的管理所有立方体、GUEST的不能创建立方体等约束主要由上层业务逻辑把关当前仓库的UserManager核心实现聚焦于用户与立方体的数据建模、访问关系维护与软删除。三、用户管理核心 API 详解所有下述方法均通过MOS实例memory.xxx()调用其转发逻辑位于 MOSCore 与 core.py 的共享立方体实现。3.1create_user创建用户在 MOS 系统中创建一个新的用户。参数参数类型说明user_idstr用户的唯一标识符必填roleUserRole用户角色默认UserRole.USERuser_namestr展示用户名不提供时回退为user_id返回值str创建的用户 ID。import uuid from memos.mem_user.user_manager import UserRole # 创建一个标准用户 user_id str(uuid.uuid4()) memory.create_user(user_iduser_id, roleUserRole.USER, user_nameJohn Doe) # 创建一个管理员用户 admin_id str(uuid.uuid4()) memory.create_user(user_idadmin_id, roleUserRole.ADMIN, user_nameAdmin User) # 创建一个访客用户 guest_id str(uuid.uuid4()) memory.create_user(user_idguest_id, roleUserRole.GUEST, user_nameGuest User)注意事项与源码一致如果具有相同user_name的用户已存在create_user返回现有用户的 ID且保留原用户角色user_manager.py不会报错或覆盖初始化过程中系统会自动创建一个 root 用户用户 ID 在整个系统中必须唯一user_id为主键不传自定义 ID 时由uuid.uuid4()生成user_manager.py。测试用例test_uuid_generation验证了自动生成的 ID 符合 UUID 格式tests/mem_user/test_mem_user.py。3.2list_users列出所有激活用户检索系统中所有激活用户的信息。参数无。返回值list包含用户信息的字典列表每项字段如下字段类型说明user_idstr唯一用户识别user_namestr展示用户的名称rolestr用户角色root / admin / user / guestcreated_atstr创建用户的 ISO 格式时间戳is_activebool用户账号是否激活示例# 所有用户列表 users memory.list_users() for user in users: print(fUser: {user[user_name]} (ID: {user[user_id]})) print(fRole: {user[role]}) print(fActive: {user[is_active]}) print(fCreated: {user[created_at]}) print(---)输出示例User: root (ID: root) Role: root Active: True Created: 2024-01-15T10:30:00 --- User: John Doe (ID: 550e8400-e29b-41d4-a716-446655440000) Role: user Active: True Created: 2024-01-15T11:00:00 ---实现细节MOSCore.list_users从UserManager.list_users()取回 ORM 对象后逐字段序列化为字典core.py。底层查询只返回is_activeTrue的记录user_manager.py因此软删除的用户不会出现在列表中——测试用例test_list_users验证了删除后列表数量随之减少tests/mem_user/test_mem_user.py。3.3create_cube_for_user为用户创建立方体创建一个新的记忆立方体并将指定用户设为其所有者。参数参数类型说明cube_namestr立方体名称owner_idstr立方体所有者的用户 IDcube_pathstr立方体的本地文件路径或远程存储库 URL可选cube_idstr定制立方体标识符未提供时生成 UUID可选返回值str创建的立方体 ID。import uuid # 第一次创建用户 user_id str(uuid.uuid4()) memory.create_user(user_iduser_id, user_nameAlice) # 为用户创建一个立方 cube_id memory.create_cube_for_user( cube_nameAlices Personal Memory, owner_iduser_id, cube_path/path/to/alice/memory, cube_idalice_personal_cube ) print(fCreated cube: {cube_id})注意事项所有者自动访问创建的所有立方体——create_cube在插入Cube记录后会执行cube.users.append(owner)建立关联user_manager.py立方体所有者可以和其他用户共享如果提供了cube_path它可以是本地目录路径或远程存储库 URLuser_manager.py自定义cube_id必须在整个系统中唯一若owner_id对应的用户不存在create_cube会抛出ValueErroruser_manager.py测试test_create_cube_invalid_owner覆盖了该分支tests/mem_user/test_mem_user.py。提示与create_cube_for_user配套的还有register_mem_cubecore.py。前者负责在数据库登记立方体元数据与所有权后者负责将实际的GeneralMemCube实例加载进mem_cubes运行时字典。两者配合才构成注册即用的完整链路。3.4get_user_info获取当前用户信息检索当前用户及其可访问立方体的详细信息。参数无源码注释提示该方法以self.user_id即配置中的默认用户为查询对象见 core.py。返回值dict包含user_id(str)当前用户 IDuser_name(str)当前用户名称role(str)当前用户角色created_at(str)创建用户的 ISO 格式时间戳accessible_cubes(list)每个可访问立方体的字典列表cube_id(str)立方体标识符cube_name(str)立方体名称cube_path(str)立方体文件路径或仓库 URLowner_id(str)立方体所有者 IDis_loaded(bool)立方体当前是否已加载进内存判断依据是cube.cube_id in self.mem_cubes见 core.py示例# 获取当前用户信息 user_info memory.get_user_info() print(fCurrent User: {user_info[user_name]} ({user_info[user_id]})) print(fRole: {user_info[role]}) print(fCreated: {user_info[created_at]}) print(\nAccessible Cubes:) for cube in user_info[accessible_cubes]: print(f- {cube[cube_name]} (ID: {cube[cube_id]})) print(f Owner: {cube[owner_id]}) print(f Loaded: {cube[is_loaded]}) print(f Path: {cube[cube_path]})输出示例Current User: Alice (550e8400-e29b-41d4-a716-446655440000) Role: user Created: 2024-01-15T11:00:00 Accessible Cubes: - Alices Personal Memory (ID: alice_personal_cube) Owner: 550e8400-e29b-41d4-a716-446655440000 Loaded: True Path: /path/to/alice/memory - Shared Project Memory (ID: project_cube) Owner: bob_user_id Loaded: False Path: /path/to/project/memory实现细节底层通过get_user_cubes(user_id)返回用户可访问的激活立方体并按created_at倒序排列user_manager.py。可访问集合 自己拥有的立方体 ∪ 别人共享给自己的立方体这正是User与Cube之间多对多关联表的语义体现。3.5share_cube_with_user共享立方体与其他用户共享一个记忆立方体授予他们访问立方体内容的权限。参数参数类型说明cube_idstr共享立方体 IDtarget_user_idstr接收共享的目标用户 ID返回值bool共享成功返回True否则返回False。# 和其他用户共享一个立方 success memory.share_cube_with_user( cube_idalice_personal_cube, target_user_idbob_user_id ) if success: print(Cube shared successfully) else: print(Failed to share cube)注意事项与源码实现一一对应当前用户必须有权访问正在共享的立方体share_cube_with_user首先调用_validate_cube_access(self.user_id, cube_id)core.py无权限会抛出ValueError目标用户必须存在且激活通过validate_user(target_user_id)校验否则抛ValueErrorcore.py共享一个立方体授予目标用户对该立方体的读写访问权限立方体所有者总是可以共享自己的立方体所有者天然在cube.users关联中具有立方体访问权限的用户也可以与其他用户共享当前实现基于用户是否在该立方体的访问列表内判定未做更细粒度的角色门槛。底层原理共享本质上是在user_cube_association多对多关联表中插入一条(user_id, cube_id)记录add_user_to_cube见 user_manager.py。反过来remove_user_from_cube会从关联表中移除记录且不允许移除所有者user_manager.py。测试test_add_user_to_cube、test_remove_user_from_cube完整覆盖了这些行为tests/mem_user/test_mem_user.py。四、完整的用户管理工作流下面演示从初始化、建用户、建立方、互相共享、写入记忆到检索记忆的完整链路覆盖了上述所有 APIimport uuid from memos.configs.mem_os import MOSConfig from memos.mem_os.main import MOS from memos.mem_user.user_manager import UserRole # 初始化MOS mos_config MOSConfig.from_json_file(examples/data/config/simple_memos_config.json) memory MOS(mos_config) # 1. 创建用户 alice_id str(uuid.uuid4()) bob_id str(uuid.uuid4()) memory.create_user(user_idalice_id, user_nameAlice, roleUserRole.USER) memory.create_user(user_idbob_id, user_nameBob, roleUserRole.USER) # 2. 所有用户列表 print(All users:) users memory.list_users() for user in users: print(f- {user[user_name]} ({user[role]})) # 3. 为用户创建一个立方 alice_cube_id memory.create_cube_for_user( cube_nameAlices Personal Memory, owner_idalice_id, cube_path/path/to/alice/memory ) bob_cube_id memory.create_cube_for_user( cube_nameBobs Work Memory, owner_idbob_id, cube_path/path/to/bob/work ) # 4. 和其他用户共享立方 memory.share_cube_with_user(alice_cube_id, bob_id) memory.share_cube_with_user(bob_cube_id, alice_id) # 5. 获取用户信息 alice_info memory.get_user_info() print(f\nAlices accessible cubes: {len(alice_info[accessible_cubes])}) # 6. 添加记忆到立方 memory.add( messages[ {role: user, content: I like playing football.}, {role: assistant, content: Thats great! Football is a wonderful sport.} ], user_idalice_id, mem_cube_idalice_cube_id ) # 7. 搜索记忆 retrieved memory.search( queryWhat does Alice like?, user_idalice_id ) print(fRetrieved memories: {retrieved[text_mem]})工作流要点MOSConfig.from_json_file读取的示例配置见 examples/data/config/simple_memos_config.json其user_id默认为root所有面向用户的读写操作add、search、chat都接受user_id参数MOSCore 会据此解析该用户可访问的立方体集合再在对应立方体上执行记忆操作从而实现多用户隔离可参考 core.py 中按用户获取可访问立方体的通用模式若传入的user_id不存在或未激活MOS 会直接抛出ValueError提示先注册用户core.py。五、错误处理机制用户管理方法内置了全面的错误处理可从 user_manager.py 与 core.py 的实现中逐条印证用户验证方法在操作之前验证用户是否存在并处于激活状态。validate_user同时检查user is not None and user.is_activeuser_manager.py立方体访问验证确保用户在操作前对立方体具有适当的访问权限。validate_user_cube_access依次校验用户存在、立方体存在且激活、用户是所有者或在访问列表中user_manager.py防止重复优雅地处理重复的用户名返回已有用户 ID和立方体 ID主键约束冲突时回滚并记录日志权限检查验证敏感操作的用户角色和权限如 ROOT 用户不可删除、立方体所有者不可被移出立方体数据库异常兜底所有写操作都包裹在 try/except 中发生异常时session.rollback()回滚事务并关闭会话避免脏数据与连接泄漏例如 user_manager.py。六、数据库持久性用户管理数据持久化在 SQLite 数据库中默认后端相关证据如下位置默认~/.memos/memos_users.db。准确地说路径由settings.MEMOS_DIR / memos_users.db计算得出而MEMOS_DIR Path(os.getenv(MEMOS_BASE_PATH, Path.cwd())) / .memossettings.py、user_manager.py即默认存放在当前工作目录下的.memos子目录可通过环境变量MEMOS_BASE_PATH调整表users、cubes、user_cube_association三张表由 SQLAlchemyBase.metadata.create_all自动建表user_manager.py关系用户和立方体之间是多对多关系通过user_cube_association关联表含user_id、cube_id、created_at维系user_manager.py同时Cube.owner_id外键表达所有者这一单向强关系软删除用户和立方体被软删除——将is_active标记为False而非物理删除user_manager.py。测试test_delete_user验证了软删除后记录仍存在但校验失败tests/mem_user/test_mem_user.py。扩展切换到 MySQL 后端UserManagerFactory支持sqlite与mysql两种后端factory.pyMySQL 后端的连接参数包括host默认localhost、port默认3306、username默认root、password、database默认memos_users、charset默认utf8mb4配置类见 configs/mem_user.py。在需要多进程/多实例共享用户数据的服务化部署中MySQL 后端是 SQLite 的替代选项。七、安全注意事项基于角色的访问控制不同的用户角色具有不同的权限ROOT拥有系统级完全访问权限立方体所有权立方体所有者可以完全控制他们的立方体且所有权不可通过remove_user_from_cube剥夺user_manager.py访问验证所有操作在执行前都要验证用户访问权限MOSCore层面对未授权访问统一抛出带明确提示的ValueErrorcore.py根用户保护根用户不可删除具有系统完全访问权限——delete_user对 ROOT 角色直接拒绝user_manager.py测试test_delete_root_user与test_root_user_protection双重验证tests/mem_user/test_mem_user.py、tests/mem_user/test_mem_user.py。八、小结MemOS 的用户管理子系统以用户—角色—立方体三层模型为核心users表承载身份与角色cubes表承载记忆空间元数据user_cube_association表实现用户与立方体的多对多共享关系。通过MOS暴露的 5 个高层 API开发者可以快速实现多用户记忆隔离、跨用户立方体共享与基于角色的访问控制为多 Agent、多租户的记忆应用提供坚实的地基。相关测试tests/mem_user/test_mem_user.py覆盖了角色枚举、重复创建、软删除、根用户保护、关联增删、UUID 生成、会话管理、级联删除等 20 余个场景可作为理解与二次开发的行为契约。赞分享人工智能大模型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标签协作机制全解析如何高效实现团队知识共享Memos标签协作机制全解析 Memos 作为一款开源轻量级笔记服务不仅提供便捷的个人知识管理功能更通过创新的标签共享机制重新定后端前端知识管理Photoview 用户管理指南多用户共享与权限控制详解Photoview 用户管理指南多用户共享与权限控制详解 想要构建一个安全可靠的家庭照片共享系统吗Photoview 作为一款功能强大的自托管个人照片库提后端前端图像处理Lens 完整指南如何用可视化工具轻松管理 Kubernetes 集群 Lens 完整指南如何用可视化工具轻松管理 Kubernetes 集群 Lens 是全球超过 100 万开发者选择的 Kubernetes IDE集成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考