[{"data":1,"prerenderedAt":3072},["ShallowReactive",2],{"\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_cube":3,"surround-\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_cube":3056},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":3049,"description":81,"extension":3050,"links":6,"meta":3051,"navigation":6,"path":3052,"seo":3053,"stem":3054,"__hash__":3055},"docs\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_cube.md","MemCube",null,{"type":8,"value":9,"toc":3028},"minimark",[10,15,22,59,62,65,72,82,85,102,106,112,117,120,349,353,356,529,533,538,585,589,623,627,630,633,676,679,732,735,738,764,767,771,1892,1896,1917,2971,2974,2977,2991,2995,3006,3009,3024],[11,12,14],"h2",{"id":13},"什么是-memcube","什么是 MemCube？",[16,17,18,21],"p",{},[19,20,5],"strong",{}," 是一个容器，包含了三种主要类型的记忆：",[23,24,25,41,50],"ul",{},[26,27,28,31,32,36,37,40],"li",{},[19,29,30],{},"明文记忆"," (例如，",[33,34,35],"code",{},"GeneralTextMemory","、",[33,38,39],{},"TreeTextMemory","): 用于存储和检索非结构化或结构化文本知识。",[26,42,43,31,46,49],{},[19,44,45],{},"激活记忆",[33,47,48],{},"KVCacheMemory","): 用于存储键值缓存以加速 LLM 推理和上下文重用。",[26,51,52,31,55,58],{},[19,53,54],{},"参数化记忆",[33,56,57],{},"LoRAMemory","): 用于存储模型适应参数（如 LoRA 权重）。",[16,60,61],{},"每种记忆都可以独立配置，根据应用需求灵活组合。",[11,63,64],{"id":64},"结构",[16,66,67,68,71],{},"MemCube 由配置定义（参见 ",[33,69,70],{},"GeneralMemCubeConfig","），该配置为每种记忆类型指定后端和配置。典型结构是：",[73,74,79],"pre",{"className":75,"code":77,"language":78},[76],"language-text","MemCube\n ├── user_id\n ├── cube_id\n ├── text_mem: TextualMemory\n ├── act_mem: ActivationMemory\n └── para_mem: ParametricMemory\n","text",[33,80,77],{"__ignoreMap":81},"",[16,83,84],{},"所有记忆模块都可通过 MemCube 接口访问：",[23,86,87,92,97],{},[26,88,89],{},[33,90,91],{},"mem_cube.text_mem",[26,93,94],{},[33,95,96],{},"mem_cube.act_mem",[26,98,99],{},[33,100,101],{},"mem_cube.para_mem",[11,103,105],{"id":104},"view-架构","View 架构",[16,107,108,109,111],{},"从 MemOS 2.0 开始，运行时操作（add\u002Fsearch）应通过 ",[19,110,105],{},"：",[113,114,116],"h3",{"id":115},"singlecubeview","SingleCubeView",[16,118,119],{},"用于管理单个 MemCube。当系统只需要一个记忆空间时使用。",[73,121,125],{"className":122,"code":123,"language":124,"meta":81,"style":81},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from memos.multi_mem_cube.single_cube import SingleCubeView\n\nview = SingleCubeView(\n    cube_id=\"my_cube\",\n    naive_mem_cube=naive_mem_cube,\n    mem_reader=mem_reader,\n    mem_scheduler=mem_scheduler,\n    logger=logger,\n    searcher=searcher,\n    feedback_server=feedback_server,  # 可选\n)\n\n# 添加记忆\nview.add_memories(add_request)\n\n# 搜索记忆\nview.search_memories(search_request)\n","python",[33,126,127,158,165,181,202,215,228,241,254,267,285,291,296,302,321,326,332],{"__ignoreMap":81},[128,129,132,136,140,144,147,149,152,155],"span",{"class":130,"line":131},"line",1,[128,133,135],{"class":134},"s7zQu","from",[128,137,139],{"class":138},"sTEyZ"," memos",[128,141,143],{"class":142},"sMK4o",".",[128,145,146],{"class":138},"multi_mem_cube",[128,148,143],{"class":142},[128,150,151],{"class":138},"single_cube ",[128,153,154],{"class":134},"import",[128,156,157],{"class":138}," SingleCubeView\n",[128,159,161],{"class":130,"line":160},2,[128,162,164],{"emptyLinePlaceholder":163},true,"\n",[128,166,168,171,174,178],{"class":130,"line":167},3,[128,169,170],{"class":138},"view ",[128,172,173],{"class":142},"=",[128,175,177],{"class":176},"s2Zo4"," SingleCubeView",[128,179,180],{"class":142},"(\n",[128,182,184,188,190,193,197,199],{"class":130,"line":183},4,[128,185,187],{"class":186},"sHdIc","    cube_id",[128,189,173],{"class":142},[128,191,192],{"class":142},"\"",[128,194,196],{"class":195},"sfazB","my_cube",[128,198,192],{"class":142},[128,200,201],{"class":142},",\n",[128,203,205,208,210,213],{"class":130,"line":204},5,[128,206,207],{"class":186},"    naive_mem_cube",[128,209,173],{"class":142},[128,211,212],{"class":176},"naive_mem_cube",[128,214,201],{"class":142},[128,216,218,221,223,226],{"class":130,"line":217},6,[128,219,220],{"class":186},"    mem_reader",[128,222,173],{"class":142},[128,224,225],{"class":176},"mem_reader",[128,227,201],{"class":142},[128,229,231,234,236,239],{"class":130,"line":230},7,[128,232,233],{"class":186},"    mem_scheduler",[128,235,173],{"class":142},[128,237,238],{"class":176},"mem_scheduler",[128,240,201],{"class":142},[128,242,244,247,249,252],{"class":130,"line":243},8,[128,245,246],{"class":186},"    logger",[128,248,173],{"class":142},[128,250,251],{"class":176},"logger",[128,253,201],{"class":142},[128,255,257,260,262,265],{"class":130,"line":256},9,[128,258,259],{"class":186},"    searcher",[128,261,173],{"class":142},[128,263,264],{"class":176},"searcher",[128,266,201],{"class":142},[128,268,270,273,275,278,281],{"class":130,"line":269},10,[128,271,272],{"class":186},"    feedback_server",[128,274,173],{"class":142},[128,276,277],{"class":176},"feedback_server",[128,279,280],{"class":142},",",[128,282,284],{"class":283},"sHwdD","  # 可选\n",[128,286,288],{"class":130,"line":287},11,[128,289,290],{"class":142},")\n",[128,292,294],{"class":130,"line":293},12,[128,295,164],{"emptyLinePlaceholder":163},[128,297,299],{"class":130,"line":298},13,[128,300,301],{"class":283},"# 添加记忆\n",[128,303,305,308,310,313,316,319],{"class":130,"line":304},14,[128,306,307],{"class":138},"view",[128,309,143],{"class":142},[128,311,312],{"class":176},"add_memories",[128,314,315],{"class":142},"(",[128,317,318],{"class":176},"add_request",[128,320,290],{"class":142},[128,322,324],{"class":130,"line":323},15,[128,325,164],{"emptyLinePlaceholder":163},[128,327,329],{"class":130,"line":328},16,[128,330,331],{"class":283},"# 搜索记忆\n",[128,333,335,337,339,342,344,347],{"class":130,"line":334},17,[128,336,307],{"class":138},[128,338,143],{"class":142},[128,340,341],{"class":176},"search_memories",[128,343,315],{"class":142},[128,345,346],{"class":176},"search_request",[128,348,290],{"class":142},[113,350,352],{"id":351},"compositecubeview","CompositeCubeView",[16,354,355],{},"用于管理多个 MemCube。当需要跨多个记忆空间进行统一操作时使用。",[73,357,359],{"className":122,"code":358,"language":124,"meta":81,"style":81},"from memos.multi_mem_cube.composite_cube import CompositeCubeView\n\n# 创建多个 SingleCubeView\nview1 = SingleCubeView(cube_id=\"cube_1\", ...)\nview2 = SingleCubeView(cube_id=\"cube_2\", ...)\n\n# 用于多 cube 操作的组合视图\ncomposite = CompositeCubeView(cube_views=[view1, view2], logger=logger)\n\n# 跨所有 cube 搜索\nresults = composite.search_memories(search_request)\n# 结果包含 cube_id 字段以标识来源\n",[33,360,361,381,385,390,420,448,452,457,495,499,504,524],{"__ignoreMap":81},[128,362,363,365,367,369,371,373,376,378],{"class":130,"line":131},[128,364,135],{"class":134},[128,366,139],{"class":138},[128,368,143],{"class":142},[128,370,146],{"class":138},[128,372,143],{"class":142},[128,374,375],{"class":138},"composite_cube ",[128,377,154],{"class":134},[128,379,380],{"class":138}," CompositeCubeView\n",[128,382,383],{"class":130,"line":160},[128,384,164],{"emptyLinePlaceholder":163},[128,386,387],{"class":130,"line":167},[128,388,389],{"class":283},"# 创建多个 SingleCubeView\n",[128,391,392,395,397,399,401,404,406,408,411,413,415,418],{"class":130,"line":183},[128,393,394],{"class":138},"view1 ",[128,396,173],{"class":142},[128,398,177],{"class":176},[128,400,315],{"class":142},[128,402,403],{"class":186},"cube_id",[128,405,173],{"class":142},[128,407,192],{"class":142},[128,409,410],{"class":195},"cube_1",[128,412,192],{"class":142},[128,414,280],{"class":142},[128,416,417],{"class":176}," ...",[128,419,290],{"class":142},[128,421,422,425,427,429,431,433,435,437,440,442,444,446],{"class":130,"line":204},[128,423,424],{"class":138},"view2 ",[128,426,173],{"class":142},[128,428,177],{"class":176},[128,430,315],{"class":142},[128,432,403],{"class":186},[128,434,173],{"class":142},[128,436,192],{"class":142},[128,438,439],{"class":195},"cube_2",[128,441,192],{"class":142},[128,443,280],{"class":142},[128,445,417],{"class":176},[128,447,290],{"class":142},[128,449,450],{"class":130,"line":217},[128,451,164],{"emptyLinePlaceholder":163},[128,453,454],{"class":130,"line":230},[128,455,456],{"class":283},"# 用于多 cube 操作的组合视图\n",[128,458,459,462,464,467,469,472,475,478,480,483,486,489,491,493],{"class":130,"line":243},[128,460,461],{"class":138},"composite ",[128,463,173],{"class":142},[128,465,466],{"class":176}," CompositeCubeView",[128,468,315],{"class":142},[128,470,471],{"class":186},"cube_views",[128,473,474],{"class":142},"=[",[128,476,477],{"class":176},"view1",[128,479,280],{"class":142},[128,481,482],{"class":176}," view2",[128,484,485],{"class":142},"],",[128,487,488],{"class":186}," logger",[128,490,173],{"class":142},[128,492,251],{"class":176},[128,494,290],{"class":142},[128,496,497],{"class":130,"line":256},[128,498,164],{"emptyLinePlaceholder":163},[128,500,501],{"class":130,"line":269},[128,502,503],{"class":283},"# 跨所有 cube 搜索\n",[128,505,506,509,511,514,516,518,520,522],{"class":130,"line":287},[128,507,508],{"class":138},"results ",[128,510,173],{"class":142},[128,512,513],{"class":138}," composite",[128,515,143],{"class":142},[128,517,341],{"class":176},[128,519,315],{"class":142},[128,521,346],{"class":176},[128,523,290],{"class":142},[128,525,526],{"class":130,"line":293},[128,527,528],{"class":283},"# 结果包含 cube_id 字段以标识来源\n",[113,530,532],{"id":531},"api-请求字段","API 请求字段",[534,535,537],"h4",{"id":536},"添加记忆add模式","添加记忆（add模式）",[539,540,541,554],"table",{},[542,543,544],"thead",{},[545,546,547,551],"tr",{},[548,549,550],"th",{},"字段",[548,552,553],{},"描述",[555,556,557,568],"tbody",{},[545,558,559,565],{},[560,561,562],"td",{},[33,563,564],{},"writable_cube_ids",[560,566,567],{},"add 操作的目标 cube",[545,569,570,575],{},[560,571,572],{},[33,573,574],{},"async_mode",[560,576,577,580,581,584],{},[33,578,579],{},"\"async\"","（启用 scheduler 后台处理）或 ",[33,582,583],{},"\"sync\"","（禁用 scheduler 同步处理）",[534,586,588],{"id":587},"搜索记忆search模式","搜索记忆（search模式）",[539,590,591,599],{},[542,592,593],{},[545,594,595,597],{},[548,596,550],{},[548,598,553],{},[555,600,601,611],{},[545,602,603,608],{},[560,604,605],{},[33,606,607],{},"readable_cube_ids",[560,609,610],{},"search 操作的目标 cube",[545,612,613,617],{},[560,614,615],{},[33,616,574],{},[560,618,619,580,621,584],{},[33,620,579],{},[33,622,583],{},[11,624,626],{"id":625},"核心方法generalmemcube","核心方法（GeneralMemCube）",[16,628,629],{},"GeneralMemCube 是 MemCube 的标准实现，通过统一的接口管理系统的所有记忆。GeneralMemCube 提供以下核心方法来管理记忆数据的生命周期。",[113,631,632],{"id":632},"初始化",[73,634,636],{"className":122,"code":635,"language":124,"meta":81,"style":81},"from memos.mem_cube.general import GeneralMemCube\nmem_cube = GeneralMemCube(config)\n",[33,637,638,659],{"__ignoreMap":81},[128,639,640,642,644,646,649,651,654,656],{"class":130,"line":131},[128,641,135],{"class":134},[128,643,139],{"class":138},[128,645,143],{"class":142},[128,647,648],{"class":138},"mem_cube",[128,650,143],{"class":142},[128,652,653],{"class":138},"general ",[128,655,154],{"class":134},[128,657,658],{"class":138}," GeneralMemCube\n",[128,660,661,664,666,669,671,674],{"class":130,"line":160},[128,662,663],{"class":138},"mem_cube ",[128,665,173],{"class":142},[128,667,668],{"class":176}," GeneralMemCube",[128,670,315],{"class":142},[128,672,673],{"class":176},"config",[128,675,290],{"class":142},[113,677,678],{"id":678},"静态数据操作",[539,680,681,690],{},[542,682,683],{},[545,684,685,688],{},[548,686,687],{},"方法",[548,689,553],{},[555,691,692,702,712,722],{},[545,693,694,699],{},[560,695,696],{},[33,697,698],{},"init_from_dir(dir)",[560,700,701],{},"从本地目录加载 MemCube",[545,703,704,709],{},[560,705,706],{},[33,707,708],{},"init_from_remote_repo(repo, base_url)",[560,710,711],{},"从远程仓库加载 MemCube（如 Hugging Face）",[545,713,714,719],{},[560,715,716],{},[33,717,718],{},"load(dir)",[560,720,721],{},"从目录加载所有记忆到现有实例",[545,723,724,729],{},[560,725,726],{},[33,727,728],{},"dump(dir)",[560,730,731],{},"将所有记忆保存到目录以持久化",[11,733,734],{"id":734},"文件存储",[16,736,737],{},"MemCube 保存后的目录包含以下文件，每个文件对应一种记忆类型：",[23,739,740,746,752,758],{},[26,741,742,745],{},[33,743,744],{},"config.json"," (MemCube 配置)",[26,747,748,751],{},[33,749,750],{},"textual_memory.json"," (明文记忆)",[26,753,754,757],{},[33,755,756],{},"activation_memory.pickle"," (激活记忆)",[26,759,760,763],{},[33,761,762],{},"parametric_memory.adapter"," (参数化记忆)",[11,765,766],{"id":766},"使用示例",[113,768,770],{"id":769},"导出示例-dump_cubepy","导出示例 (dump_cube.py)",[73,772,774],{"className":122,"code":773,"language":124,"meta":81,"style":81},"import json\nimport os\nimport shutil\n\nfrom memos.api.handlers import init_server\nfrom memos.api.product_models import APIADDRequest\nfrom memos.log import get_logger\nfrom memos.multi_mem_cube.single_cube import SingleCubeView\n\nlogger = get_logger(__name__)\nEXAMPLE_CUBE_ID = \"example_dump_cube\"\nEXAMPLE_USER_ID = \"example_user\"\n\n# 1. 初始化服务\ncomponents = init_server()\nnaive = components[\"naive_mem_cube\"]\n\n# 2. 创建 SingleCubeView\nview = SingleCubeView(\n    cube_id=EXAMPLE_CUBE_ID,\n    naive_mem_cube=naive,\n    mem_reader=components[\"mem_reader\"],\n    mem_scheduler=components[\"mem_scheduler\"],\n    logger=logger,\n    searcher=components[\"searcher\"],\n    feedback_server=components[\"feedback_server\"],\n)\n\n# 3. 通过 View 添加记忆\nresult = view.add_memories(APIADDRequest(\n    user_id=EXAMPLE_USER_ID,\n    writable_cube_ids=[EXAMPLE_CUBE_ID],\n    messages=[\n        {\"role\": \"user\", \"content\": \"This is a test memory\"},\n        {\"role\": \"user\", \"content\": \"Another memory to persist\"},\n    ],\n    async_mode=\"sync\",  # 使用同步模式确保立即完成\n))\nprint(f\"✓ Added {len(result)} memories\")\n\n# 4. 导出特定 cube_id 的数据\noutput_dir = \"tmp\u002Fmem_cube_dump\"\nif os.path.exists(output_dir):\n    shutil.rmtree(output_dir)\nos.makedirs(output_dir, exist_ok=True)\n\n# 导出图数据（仅导出当前 cube_id 的数据）\njson_data = naive.text_mem.graph_store.export_graph(\n    include_embedding=True,  # 包含 embedding 以支持语义搜索\n    user_name=EXAMPLE_CUBE_ID,  # 按 cube_id 过滤\n)\n\n# 修复 embedding 格式：将字符串解析为列表以兼容导入\nimport contextlib\nfor node in json_data.get(\"nodes\", []):\n    metadata = node.get(\"metadata\", {})\n    if \"embedding\" in metadata and isinstance(metadata[\"embedding\"], str):\n        with contextlib.suppress(json.JSONDecodeError):\n            metadata[\"embedding\"] = json.loads(metadata[\"embedding\"])\n\nprint(f\"✓ Exported {len(json_data.get('nodes', []))} nodes\")\n\n# 保存到文件\nmemory_file = os.path.join(output_dir, \"textual_memory.json\")\nwith open(memory_file, \"w\", encoding=\"utf-8\") as f:\n    json.dump(json_data, f, indent=2, ensure_ascii=False)\nprint(f\"✓ Saved to: {memory_file}\")\n",[33,775,776,783,790,797,801,822,842,858,876,880,897,913,927,931,936,949,971,975,981,992,1004,1016,1037,1056,1067,1086,1105,1110,1115,1121,1143,1156,1168,1177,1221,1259,1265,1285,1291,1329,1334,1340,1355,1383,1400,1423,1428,1434,1462,1474,1489,1494,1499,1505,1513,1547,1576,1621,1647,1690,1695,1741,1746,1752,1785,1833,1870],{"__ignoreMap":81},[128,777,778,780],{"class":130,"line":131},[128,779,154],{"class":134},[128,781,782],{"class":138}," json\n",[128,784,785,787],{"class":130,"line":160},[128,786,154],{"class":134},[128,788,789],{"class":138}," os\n",[128,791,792,794],{"class":130,"line":167},[128,793,154],{"class":134},[128,795,796],{"class":138}," shutil\n",[128,798,799],{"class":130,"line":183},[128,800,164],{"emptyLinePlaceholder":163},[128,802,803,805,807,809,812,814,817,819],{"class":130,"line":204},[128,804,135],{"class":134},[128,806,139],{"class":138},[128,808,143],{"class":142},[128,810,811],{"class":138},"api",[128,813,143],{"class":142},[128,815,816],{"class":138},"handlers ",[128,818,154],{"class":134},[128,820,821],{"class":138}," init_server\n",[128,823,824,826,828,830,832,834,837,839],{"class":130,"line":217},[128,825,135],{"class":134},[128,827,139],{"class":138},[128,829,143],{"class":142},[128,831,811],{"class":138},[128,833,143],{"class":142},[128,835,836],{"class":138},"product_models ",[128,838,154],{"class":134},[128,840,841],{"class":138}," APIADDRequest\n",[128,843,844,846,848,850,853,855],{"class":130,"line":230},[128,845,135],{"class":134},[128,847,139],{"class":138},[128,849,143],{"class":142},[128,851,852],{"class":138},"log ",[128,854,154],{"class":134},[128,856,857],{"class":138}," get_logger\n",[128,859,860,862,864,866,868,870,872,874],{"class":130,"line":243},[128,861,135],{"class":134},[128,863,139],{"class":138},[128,865,143],{"class":142},[128,867,146],{"class":138},[128,869,143],{"class":142},[128,871,151],{"class":138},[128,873,154],{"class":134},[128,875,157],{"class":138},[128,877,878],{"class":130,"line":256},[128,879,164],{"emptyLinePlaceholder":163},[128,881,882,885,887,890,892,895],{"class":130,"line":269},[128,883,884],{"class":138},"logger ",[128,886,173],{"class":142},[128,888,889],{"class":176}," get_logger",[128,891,315],{"class":142},[128,893,894],{"class":138},"__name__",[128,896,290],{"class":142},[128,898,899,902,904,907,910],{"class":130,"line":287},[128,900,901],{"class":138},"EXAMPLE_CUBE_ID ",[128,903,173],{"class":142},[128,905,906],{"class":142}," \"",[128,908,909],{"class":195},"example_dump_cube",[128,911,912],{"class":142},"\"\n",[128,914,915,918,920,922,925],{"class":130,"line":293},[128,916,917],{"class":138},"EXAMPLE_USER_ID ",[128,919,173],{"class":142},[128,921,906],{"class":142},[128,923,924],{"class":195},"example_user",[128,926,912],{"class":142},[128,928,929],{"class":130,"line":298},[128,930,164],{"emptyLinePlaceholder":163},[128,932,933],{"class":130,"line":304},[128,934,935],{"class":283},"# 1. 初始化服务\n",[128,937,938,941,943,946],{"class":130,"line":323},[128,939,940],{"class":138},"components ",[128,942,173],{"class":142},[128,944,945],{"class":176}," init_server",[128,947,948],{"class":142},"()\n",[128,950,951,954,956,959,962,964,966,968],{"class":130,"line":328},[128,952,953],{"class":138},"naive ",[128,955,173],{"class":142},[128,957,958],{"class":138}," components",[128,960,961],{"class":142},"[",[128,963,192],{"class":142},[128,965,212],{"class":195},[128,967,192],{"class":142},[128,969,970],{"class":142},"]\n",[128,972,973],{"class":130,"line":334},[128,974,164],{"emptyLinePlaceholder":163},[128,976,978],{"class":130,"line":977},18,[128,979,980],{"class":283},"# 2. 创建 SingleCubeView\n",[128,982,984,986,988,990],{"class":130,"line":983},19,[128,985,170],{"class":138},[128,987,173],{"class":142},[128,989,177],{"class":176},[128,991,180],{"class":142},[128,993,995,997,999,1002],{"class":130,"line":994},20,[128,996,187],{"class":186},[128,998,173],{"class":142},[128,1000,1001],{"class":176},"EXAMPLE_CUBE_ID",[128,1003,201],{"class":142},[128,1005,1007,1009,1011,1014],{"class":130,"line":1006},21,[128,1008,207],{"class":186},[128,1010,173],{"class":142},[128,1012,1013],{"class":176},"naive",[128,1015,201],{"class":142},[128,1017,1019,1021,1023,1026,1028,1030,1032,1034],{"class":130,"line":1018},22,[128,1020,220],{"class":186},[128,1022,173],{"class":142},[128,1024,1025],{"class":176},"components",[128,1027,961],{"class":142},[128,1029,192],{"class":142},[128,1031,225],{"class":195},[128,1033,192],{"class":142},[128,1035,1036],{"class":142},"],\n",[128,1038,1040,1042,1044,1046,1048,1050,1052,1054],{"class":130,"line":1039},23,[128,1041,233],{"class":186},[128,1043,173],{"class":142},[128,1045,1025],{"class":176},[128,1047,961],{"class":142},[128,1049,192],{"class":142},[128,1051,238],{"class":195},[128,1053,192],{"class":142},[128,1055,1036],{"class":142},[128,1057,1059,1061,1063,1065],{"class":130,"line":1058},24,[128,1060,246],{"class":186},[128,1062,173],{"class":142},[128,1064,251],{"class":176},[128,1066,201],{"class":142},[128,1068,1070,1072,1074,1076,1078,1080,1082,1084],{"class":130,"line":1069},25,[128,1071,259],{"class":186},[128,1073,173],{"class":142},[128,1075,1025],{"class":176},[128,1077,961],{"class":142},[128,1079,192],{"class":142},[128,1081,264],{"class":195},[128,1083,192],{"class":142},[128,1085,1036],{"class":142},[128,1087,1089,1091,1093,1095,1097,1099,1101,1103],{"class":130,"line":1088},26,[128,1090,272],{"class":186},[128,1092,173],{"class":142},[128,1094,1025],{"class":176},[128,1096,961],{"class":142},[128,1098,192],{"class":142},[128,1100,277],{"class":195},[128,1102,192],{"class":142},[128,1104,1036],{"class":142},[128,1106,1108],{"class":130,"line":1107},27,[128,1109,290],{"class":142},[128,1111,1113],{"class":130,"line":1112},28,[128,1114,164],{"emptyLinePlaceholder":163},[128,1116,1118],{"class":130,"line":1117},29,[128,1119,1120],{"class":283},"# 3. 通过 View 添加记忆\n",[128,1122,1124,1127,1129,1132,1134,1136,1138,1141],{"class":130,"line":1123},30,[128,1125,1126],{"class":138},"result ",[128,1128,173],{"class":142},[128,1130,1131],{"class":138}," view",[128,1133,143],{"class":142},[128,1135,312],{"class":176},[128,1137,315],{"class":142},[128,1139,1140],{"class":176},"APIADDRequest",[128,1142,180],{"class":142},[128,1144,1146,1149,1151,1154],{"class":130,"line":1145},31,[128,1147,1148],{"class":186},"    user_id",[128,1150,173],{"class":142},[128,1152,1153],{"class":176},"EXAMPLE_USER_ID",[128,1155,201],{"class":142},[128,1157,1159,1162,1164,1166],{"class":130,"line":1158},32,[128,1160,1161],{"class":186},"    writable_cube_ids",[128,1163,474],{"class":142},[128,1165,1001],{"class":176},[128,1167,1036],{"class":142},[128,1169,1171,1174],{"class":130,"line":1170},33,[128,1172,1173],{"class":186},"    messages",[128,1175,1176],{"class":142},"=[\n",[128,1178,1180,1183,1185,1188,1190,1193,1195,1198,1200,1202,1204,1207,1209,1211,1213,1216,1218],{"class":130,"line":1179},34,[128,1181,1182],{"class":142},"        {",[128,1184,192],{"class":142},[128,1186,1187],{"class":195},"role",[128,1189,192],{"class":142},[128,1191,1192],{"class":142},":",[128,1194,906],{"class":142},[128,1196,1197],{"class":195},"user",[128,1199,192],{"class":142},[128,1201,280],{"class":142},[128,1203,906],{"class":142},[128,1205,1206],{"class":195},"content",[128,1208,192],{"class":142},[128,1210,1192],{"class":142},[128,1212,906],{"class":142},[128,1214,1215],{"class":195},"This is a test memory",[128,1217,192],{"class":142},[128,1219,1220],{"class":142},"},\n",[128,1222,1224,1226,1228,1230,1232,1234,1236,1238,1240,1242,1244,1246,1248,1250,1252,1255,1257],{"class":130,"line":1223},35,[128,1225,1182],{"class":142},[128,1227,192],{"class":142},[128,1229,1187],{"class":195},[128,1231,192],{"class":142},[128,1233,1192],{"class":142},[128,1235,906],{"class":142},[128,1237,1197],{"class":195},[128,1239,192],{"class":142},[128,1241,280],{"class":142},[128,1243,906],{"class":142},[128,1245,1206],{"class":195},[128,1247,192],{"class":142},[128,1249,1192],{"class":142},[128,1251,906],{"class":142},[128,1253,1254],{"class":195},"Another memory to persist",[128,1256,192],{"class":142},[128,1258,1220],{"class":142},[128,1260,1262],{"class":130,"line":1261},36,[128,1263,1264],{"class":142},"    ],\n",[128,1266,1268,1271,1273,1275,1278,1280,1282],{"class":130,"line":1267},37,[128,1269,1270],{"class":186},"    async_mode",[128,1272,173],{"class":142},[128,1274,192],{"class":142},[128,1276,1277],{"class":195},"sync",[128,1279,192],{"class":142},[128,1281,280],{"class":142},[128,1283,1284],{"class":283},"  # 使用同步模式确保立即完成\n",[128,1286,1288],{"class":130,"line":1287},38,[128,1289,1290],{"class":142},"))\n",[128,1292,1294,1297,1299,1303,1306,1310,1313,1315,1318,1321,1324,1327],{"class":130,"line":1293},39,[128,1295,1296],{"class":176},"print",[128,1298,315],{"class":142},[128,1300,1302],{"class":1301},"spNyl","f",[128,1304,1305],{"class":195},"\"✓ Added ",[128,1307,1309],{"class":1308},"sbssI","{",[128,1311,1312],{"class":176},"len",[128,1314,315],{"class":142},[128,1316,1317],{"class":176},"result",[128,1319,1320],{"class":142},")",[128,1322,1323],{"class":1308},"}",[128,1325,1326],{"class":195}," memories\"",[128,1328,290],{"class":142},[128,1330,1332],{"class":130,"line":1331},40,[128,1333,164],{"emptyLinePlaceholder":163},[128,1335,1337],{"class":130,"line":1336},41,[128,1338,1339],{"class":283},"# 4. 导出特定 cube_id 的数据\n",[128,1341,1343,1346,1348,1350,1353],{"class":130,"line":1342},42,[128,1344,1345],{"class":138},"output_dir ",[128,1347,173],{"class":142},[128,1349,906],{"class":142},[128,1351,1352],{"class":195},"tmp\u002Fmem_cube_dump",[128,1354,912],{"class":142},[128,1356,1358,1361,1364,1366,1370,1372,1375,1377,1380],{"class":130,"line":1357},43,[128,1359,1360],{"class":134},"if",[128,1362,1363],{"class":138}," os",[128,1365,143],{"class":142},[128,1367,1369],{"class":1368},"swJcz","path",[128,1371,143],{"class":142},[128,1373,1374],{"class":176},"exists",[128,1376,315],{"class":142},[128,1378,1379],{"class":176},"output_dir",[128,1381,1382],{"class":142},"):\n",[128,1384,1386,1389,1391,1394,1396,1398],{"class":130,"line":1385},44,[128,1387,1388],{"class":138},"    shutil",[128,1390,143],{"class":142},[128,1392,1393],{"class":176},"rmtree",[128,1395,315],{"class":142},[128,1397,1379],{"class":176},[128,1399,290],{"class":142},[128,1401,1403,1406,1408,1411,1413,1415,1417,1420],{"class":130,"line":1402},45,[128,1404,1405],{"class":138},"os",[128,1407,143],{"class":142},[128,1409,1410],{"class":176},"makedirs",[128,1412,315],{"class":142},[128,1414,1379],{"class":176},[128,1416,280],{"class":142},[128,1418,1419],{"class":186}," exist_ok",[128,1421,1422],{"class":142},"=True)\n",[128,1424,1426],{"class":130,"line":1425},46,[128,1427,164],{"emptyLinePlaceholder":163},[128,1429,1431],{"class":130,"line":1430},47,[128,1432,1433],{"class":283},"# 导出图数据（仅导出当前 cube_id 的数据）\n",[128,1435,1437,1440,1442,1445,1447,1450,1452,1455,1457,1460],{"class":130,"line":1436},48,[128,1438,1439],{"class":138},"json_data ",[128,1441,173],{"class":142},[128,1443,1444],{"class":138}," naive",[128,1446,143],{"class":142},[128,1448,1449],{"class":1368},"text_mem",[128,1451,143],{"class":142},[128,1453,1454],{"class":1368},"graph_store",[128,1456,143],{"class":142},[128,1458,1459],{"class":176},"export_graph",[128,1461,180],{"class":142},[128,1463,1465,1468,1471],{"class":130,"line":1464},49,[128,1466,1467],{"class":186},"    include_embedding",[128,1469,1470],{"class":142},"=True,",[128,1472,1473],{"class":283},"  # 包含 embedding 以支持语义搜索\n",[128,1475,1477,1480,1482,1484,1486],{"class":130,"line":1476},50,[128,1478,1479],{"class":186},"    user_name",[128,1481,173],{"class":142},[128,1483,1001],{"class":176},[128,1485,280],{"class":142},[128,1487,1488],{"class":283},"  # 按 cube_id 过滤\n",[128,1490,1492],{"class":130,"line":1491},51,[128,1493,290],{"class":142},[128,1495,1497],{"class":130,"line":1496},52,[128,1498,164],{"emptyLinePlaceholder":163},[128,1500,1502],{"class":130,"line":1501},53,[128,1503,1504],{"class":283},"# 修复 embedding 格式：将字符串解析为列表以兼容导入\n",[128,1506,1508,1510],{"class":130,"line":1507},54,[128,1509,154],{"class":134},[128,1511,1512],{"class":138}," contextlib\n",[128,1514,1516,1519,1522,1525,1528,1530,1533,1535,1537,1540,1542,1544],{"class":130,"line":1515},55,[128,1517,1518],{"class":134},"for",[128,1520,1521],{"class":138}," node ",[128,1523,1524],{"class":134},"in",[128,1526,1527],{"class":138}," json_data",[128,1529,143],{"class":142},[128,1531,1532],{"class":176},"get",[128,1534,315],{"class":142},[128,1536,192],{"class":142},[128,1538,1539],{"class":195},"nodes",[128,1541,192],{"class":142},[128,1543,280],{"class":142},[128,1545,1546],{"class":142}," []):\n",[128,1548,1550,1553,1555,1558,1560,1562,1564,1566,1569,1571,1573],{"class":130,"line":1549},56,[128,1551,1552],{"class":138},"    metadata ",[128,1554,173],{"class":142},[128,1556,1557],{"class":138}," node",[128,1559,143],{"class":142},[128,1561,1532],{"class":176},[128,1563,315],{"class":142},[128,1565,192],{"class":142},[128,1567,1568],{"class":195},"metadata",[128,1570,192],{"class":142},[128,1572,280],{"class":142},[128,1574,1575],{"class":142}," {})\n",[128,1577,1579,1582,1584,1587,1589,1592,1595,1598,1601,1603,1605,1607,1609,1611,1613,1615,1619],{"class":130,"line":1578},57,[128,1580,1581],{"class":134},"    if",[128,1583,906],{"class":142},[128,1585,1586],{"class":195},"embedding",[128,1588,192],{"class":142},[128,1590,1591],{"class":142}," in",[128,1593,1594],{"class":138}," metadata ",[128,1596,1597],{"class":142},"and",[128,1599,1600],{"class":176}," isinstance",[128,1602,315],{"class":142},[128,1604,1568],{"class":176},[128,1606,961],{"class":142},[128,1608,192],{"class":142},[128,1610,1586],{"class":195},[128,1612,192],{"class":142},[128,1614,485],{"class":142},[128,1616,1618],{"class":1617},"sBMFI"," str",[128,1620,1382],{"class":142},[128,1622,1624,1627,1630,1632,1635,1637,1640,1642,1645],{"class":130,"line":1623},58,[128,1625,1626],{"class":134},"        with",[128,1628,1629],{"class":138}," contextlib",[128,1631,143],{"class":142},[128,1633,1634],{"class":176},"suppress",[128,1636,315],{"class":142},[128,1638,1639],{"class":176},"json",[128,1641,143],{"class":142},[128,1643,1644],{"class":1368},"JSONDecodeError",[128,1646,1382],{"class":142},[128,1648,1650,1653,1655,1657,1659,1661,1664,1667,1670,1672,1675,1677,1679,1681,1683,1685,1687],{"class":130,"line":1649},59,[128,1651,1652],{"class":138},"            metadata",[128,1654,961],{"class":142},[128,1656,192],{"class":142},[128,1658,1586],{"class":195},[128,1660,192],{"class":142},[128,1662,1663],{"class":142},"]",[128,1665,1666],{"class":142}," =",[128,1668,1669],{"class":138}," json",[128,1671,143],{"class":142},[128,1673,1674],{"class":176},"loads",[128,1676,315],{"class":142},[128,1678,1568],{"class":176},[128,1680,961],{"class":142},[128,1682,192],{"class":142},[128,1684,1586],{"class":195},[128,1686,192],{"class":142},[128,1688,1689],{"class":142},"])\n",[128,1691,1693],{"class":130,"line":1692},60,[128,1694,164],{"emptyLinePlaceholder":163},[128,1696,1698,1700,1702,1704,1707,1709,1711,1713,1716,1718,1720,1722,1725,1727,1729,1731,1734,1736,1739],{"class":130,"line":1697},61,[128,1699,1296],{"class":176},[128,1701,315],{"class":142},[128,1703,1302],{"class":1301},[128,1705,1706],{"class":195},"\"✓ Exported ",[128,1708,1309],{"class":1308},[128,1710,1312],{"class":176},[128,1712,315],{"class":142},[128,1714,1715],{"class":176},"json_data",[128,1717,143],{"class":142},[128,1719,1532],{"class":176},[128,1721,315],{"class":142},[128,1723,1724],{"class":142},"'",[128,1726,1539],{"class":195},[128,1728,1724],{"class":142},[128,1730,280],{"class":142},[128,1732,1733],{"class":142}," []))",[128,1735,1323],{"class":1308},[128,1737,1738],{"class":195}," nodes\"",[128,1740,290],{"class":142},[128,1742,1744],{"class":130,"line":1743},62,[128,1745,164],{"emptyLinePlaceholder":163},[128,1747,1749],{"class":130,"line":1748},63,[128,1750,1751],{"class":283},"# 保存到文件\n",[128,1753,1755,1758,1760,1762,1764,1766,1768,1771,1773,1775,1777,1779,1781,1783],{"class":130,"line":1754},64,[128,1756,1757],{"class":138},"memory_file ",[128,1759,173],{"class":142},[128,1761,1363],{"class":138},[128,1763,143],{"class":142},[128,1765,1369],{"class":1368},[128,1767,143],{"class":142},[128,1769,1770],{"class":176},"join",[128,1772,315],{"class":142},[128,1774,1379],{"class":176},[128,1776,280],{"class":142},[128,1778,906],{"class":142},[128,1780,750],{"class":195},[128,1782,192],{"class":142},[128,1784,290],{"class":142},[128,1786,1788,1791,1794,1796,1799,1801,1803,1806,1808,1810,1813,1815,1817,1820,1822,1824,1827,1830],{"class":130,"line":1787},65,[128,1789,1790],{"class":134},"with",[128,1792,1793],{"class":176}," open",[128,1795,315],{"class":142},[128,1797,1798],{"class":176},"memory_file",[128,1800,280],{"class":142},[128,1802,906],{"class":142},[128,1804,1805],{"class":195},"w",[128,1807,192],{"class":142},[128,1809,280],{"class":142},[128,1811,1812],{"class":186}," encoding",[128,1814,173],{"class":142},[128,1816,192],{"class":142},[128,1818,1819],{"class":195},"utf-8",[128,1821,192],{"class":142},[128,1823,1320],{"class":142},[128,1825,1826],{"class":134}," as",[128,1828,1829],{"class":138}," f",[128,1831,1832],{"class":142},":\n",[128,1834,1836,1839,1841,1844,1846,1848,1850,1852,1854,1857,1859,1862,1864,1867],{"class":130,"line":1835},66,[128,1837,1838],{"class":138},"    json",[128,1840,143],{"class":142},[128,1842,1843],{"class":176},"dump",[128,1845,315],{"class":142},[128,1847,1715],{"class":176},[128,1849,280],{"class":142},[128,1851,1829],{"class":176},[128,1853,280],{"class":142},[128,1855,1856],{"class":186}," indent",[128,1858,173],{"class":142},[128,1860,1861],{"class":1308},"2",[128,1863,280],{"class":142},[128,1865,1866],{"class":186}," ensure_ascii",[128,1868,1869],{"class":142},"=False)\n",[128,1871,1873,1875,1877,1879,1882,1884,1886,1888,1890],{"class":130,"line":1872},67,[128,1874,1296],{"class":176},[128,1876,315],{"class":142},[128,1878,1302],{"class":1301},[128,1880,1881],{"class":195},"\"✓ Saved to: ",[128,1883,1309],{"class":1308},[128,1885,1798],{"class":176},[128,1887,1323],{"class":1308},[128,1889,192],{"class":195},[128,1891,290],{"class":142},[113,1893,1895],{"id":1894},"导入与搜索示例-load_cubepy","导入与搜索示例 (load_cube.py)",[1897,1898,1899],"blockquote",{},[16,1900,1901,1904,1905,1908,1909,1912,1913,1916],{},[19,1902,1903],{},"Embedding 兼容性说明","：示例数据使用 ",[19,1906,1907],{},"bge-m3"," 模型，维度为 ",[19,1910,1911],{},"1024","。如果您的环境使用不同的 embedding 模型或维度，导入后的语义搜索可能不准确或失败。请确保您的 ",[33,1914,1915],{},".env"," 配置与导出时的 embedding 配置一致。",[73,1918,1920],{"className":122,"code":1919,"language":124,"meta":81,"style":81},"import json\nimport os\n\nfrom memos.api.handlers import init_server\nfrom memos.api.product_models import APISearchRequest\nfrom memos.log import get_logger\nfrom memos.multi_mem_cube.single_cube import SingleCubeView\n\nlogger = get_logger(__name__)\nEXAMPLE_CUBE_ID = \"example_dump_cube\"\nEXAMPLE_USER_ID = \"example_user\"\n\n# 1. 初始化服务\ncomponents = init_server()\nnaive = components[\"naive_mem_cube\"]\n\n# 2. 创建 SingleCubeView\nview = SingleCubeView(\n    cube_id=EXAMPLE_CUBE_ID,\n    naive_mem_cube=naive,\n    mem_reader=components[\"mem_reader\"],\n    mem_scheduler=components[\"mem_scheduler\"],\n    logger=logger,\n    searcher=components[\"searcher\"],\n    feedback_server=components[\"feedback_server\"],\n)\n\n# 3. 从文件加载数据到 graph_store\nload_dir = \"examples\u002Fdata\u002Fmem_cube_tree\"\nmemory_file = os.path.join(load_dir, \"textual_memory.json\")\n\nwith open(memory_file, encoding=\"utf-8\") as f:\n    json_data = json.load(f)\n\nnaive.text_mem.graph_store.import_graph(json_data, user_name=EXAMPLE_CUBE_ID)\n\nnodes = json_data.get(\"nodes\", [])\nprint(f\"✓ Imported {len(nodes)} nodes\")\n\n# 4. 显示加载的数据\nprint(f\"\\nLoaded {len(nodes)} memories:\")\nfor i, node in enumerate(nodes[:3], 1):  # 显示前3条\n    metadata = node.get(\"metadata\", {})\n    memory_text = node.get(\"memory\", \"N\u002FA\")\n    mem_type = metadata.get(\"memory_type\", \"unknown\")\n    print(f\"  [{i}] Type: {mem_type}\")\n    print(f\"      Content: {memory_text[:60]}...\")\n\n# 5. 语义搜索验证\nquery = \"test memory dump persistence demonstration\"\nprint(f'\\nSearching: \"{query}\"')\n\nsearch_result = view.search_memories(\n    APISearchRequest(\n        user_id=EXAMPLE_USER_ID,\n        readable_cube_ids=[EXAMPLE_CUBE_ID],\n        query=query,\n    )\n)\n\ntext_mem_results = search_result.get(\"text_mem\", [])\nmemories = []\nfor group in text_mem_results:\n    memories.extend(group.get(\"memories\", []))\n\nprint(f\"✓ Found {len(memories)} relevant memories\")\nfor i, mem in enumerate(memories[:2], 1):  # 显示前2条\n    print(f\"  [{i}] {mem.get('memory', 'N\u002FA')[:60]}...\")\n",[33,1921,1922,1928,1934,1938,1956,1975,1989,2007,2011,2025,2037,2049,2053,2057,2067,2085,2089,2093,2103,2113,2123,2141,2159,2169,2187,2205,2209,2213,2218,2232,2263,2267,2297,2317,2321,2353,2357,2383,2410,2414,2419,2452,2489,2513,2546,2580,2613,2643,2647,2652,2666,2693,2697,2712,2719,2730,2741,2752,2757,2761,2765,2791,2801,2815,2848,2852,2880,2912],{"__ignoreMap":81},[128,1923,1924,1926],{"class":130,"line":131},[128,1925,154],{"class":134},[128,1927,782],{"class":138},[128,1929,1930,1932],{"class":130,"line":160},[128,1931,154],{"class":134},[128,1933,789],{"class":138},[128,1935,1936],{"class":130,"line":167},[128,1937,164],{"emptyLinePlaceholder":163},[128,1939,1940,1942,1944,1946,1948,1950,1952,1954],{"class":130,"line":183},[128,1941,135],{"class":134},[128,1943,139],{"class":138},[128,1945,143],{"class":142},[128,1947,811],{"class":138},[128,1949,143],{"class":142},[128,1951,816],{"class":138},[128,1953,154],{"class":134},[128,1955,821],{"class":138},[128,1957,1958,1960,1962,1964,1966,1968,1970,1972],{"class":130,"line":204},[128,1959,135],{"class":134},[128,1961,139],{"class":138},[128,1963,143],{"class":142},[128,1965,811],{"class":138},[128,1967,143],{"class":142},[128,1969,836],{"class":138},[128,1971,154],{"class":134},[128,1973,1974],{"class":138}," APISearchRequest\n",[128,1976,1977,1979,1981,1983,1985,1987],{"class":130,"line":217},[128,1978,135],{"class":134},[128,1980,139],{"class":138},[128,1982,143],{"class":142},[128,1984,852],{"class":138},[128,1986,154],{"class":134},[128,1988,857],{"class":138},[128,1990,1991,1993,1995,1997,1999,2001,2003,2005],{"class":130,"line":230},[128,1992,135],{"class":134},[128,1994,139],{"class":138},[128,1996,143],{"class":142},[128,1998,146],{"class":138},[128,2000,143],{"class":142},[128,2002,151],{"class":138},[128,2004,154],{"class":134},[128,2006,157],{"class":138},[128,2008,2009],{"class":130,"line":243},[128,2010,164],{"emptyLinePlaceholder":163},[128,2012,2013,2015,2017,2019,2021,2023],{"class":130,"line":256},[128,2014,884],{"class":138},[128,2016,173],{"class":142},[128,2018,889],{"class":176},[128,2020,315],{"class":142},[128,2022,894],{"class":138},[128,2024,290],{"class":142},[128,2026,2027,2029,2031,2033,2035],{"class":130,"line":269},[128,2028,901],{"class":138},[128,2030,173],{"class":142},[128,2032,906],{"class":142},[128,2034,909],{"class":195},[128,2036,912],{"class":142},[128,2038,2039,2041,2043,2045,2047],{"class":130,"line":287},[128,2040,917],{"class":138},[128,2042,173],{"class":142},[128,2044,906],{"class":142},[128,2046,924],{"class":195},[128,2048,912],{"class":142},[128,2050,2051],{"class":130,"line":293},[128,2052,164],{"emptyLinePlaceholder":163},[128,2054,2055],{"class":130,"line":298},[128,2056,935],{"class":283},[128,2058,2059,2061,2063,2065],{"class":130,"line":304},[128,2060,940],{"class":138},[128,2062,173],{"class":142},[128,2064,945],{"class":176},[128,2066,948],{"class":142},[128,2068,2069,2071,2073,2075,2077,2079,2081,2083],{"class":130,"line":323},[128,2070,953],{"class":138},[128,2072,173],{"class":142},[128,2074,958],{"class":138},[128,2076,961],{"class":142},[128,2078,192],{"class":142},[128,2080,212],{"class":195},[128,2082,192],{"class":142},[128,2084,970],{"class":142},[128,2086,2087],{"class":130,"line":328},[128,2088,164],{"emptyLinePlaceholder":163},[128,2090,2091],{"class":130,"line":334},[128,2092,980],{"class":283},[128,2094,2095,2097,2099,2101],{"class":130,"line":977},[128,2096,170],{"class":138},[128,2098,173],{"class":142},[128,2100,177],{"class":176},[128,2102,180],{"class":142},[128,2104,2105,2107,2109,2111],{"class":130,"line":983},[128,2106,187],{"class":186},[128,2108,173],{"class":142},[128,2110,1001],{"class":176},[128,2112,201],{"class":142},[128,2114,2115,2117,2119,2121],{"class":130,"line":994},[128,2116,207],{"class":186},[128,2118,173],{"class":142},[128,2120,1013],{"class":176},[128,2122,201],{"class":142},[128,2124,2125,2127,2129,2131,2133,2135,2137,2139],{"class":130,"line":1006},[128,2126,220],{"class":186},[128,2128,173],{"class":142},[128,2130,1025],{"class":176},[128,2132,961],{"class":142},[128,2134,192],{"class":142},[128,2136,225],{"class":195},[128,2138,192],{"class":142},[128,2140,1036],{"class":142},[128,2142,2143,2145,2147,2149,2151,2153,2155,2157],{"class":130,"line":1018},[128,2144,233],{"class":186},[128,2146,173],{"class":142},[128,2148,1025],{"class":176},[128,2150,961],{"class":142},[128,2152,192],{"class":142},[128,2154,238],{"class":195},[128,2156,192],{"class":142},[128,2158,1036],{"class":142},[128,2160,2161,2163,2165,2167],{"class":130,"line":1039},[128,2162,246],{"class":186},[128,2164,173],{"class":142},[128,2166,251],{"class":176},[128,2168,201],{"class":142},[128,2170,2171,2173,2175,2177,2179,2181,2183,2185],{"class":130,"line":1058},[128,2172,259],{"class":186},[128,2174,173],{"class":142},[128,2176,1025],{"class":176},[128,2178,961],{"class":142},[128,2180,192],{"class":142},[128,2182,264],{"class":195},[128,2184,192],{"class":142},[128,2186,1036],{"class":142},[128,2188,2189,2191,2193,2195,2197,2199,2201,2203],{"class":130,"line":1069},[128,2190,272],{"class":186},[128,2192,173],{"class":142},[128,2194,1025],{"class":176},[128,2196,961],{"class":142},[128,2198,192],{"class":142},[128,2200,277],{"class":195},[128,2202,192],{"class":142},[128,2204,1036],{"class":142},[128,2206,2207],{"class":130,"line":1088},[128,2208,290],{"class":142},[128,2210,2211],{"class":130,"line":1107},[128,2212,164],{"emptyLinePlaceholder":163},[128,2214,2215],{"class":130,"line":1112},[128,2216,2217],{"class":283},"# 3. 从文件加载数据到 graph_store\n",[128,2219,2220,2223,2225,2227,2230],{"class":130,"line":1117},[128,2221,2222],{"class":138},"load_dir ",[128,2224,173],{"class":142},[128,2226,906],{"class":142},[128,2228,2229],{"class":195},"examples\u002Fdata\u002Fmem_cube_tree",[128,2231,912],{"class":142},[128,2233,2234,2236,2238,2240,2242,2244,2246,2248,2250,2253,2255,2257,2259,2261],{"class":130,"line":1123},[128,2235,1757],{"class":138},[128,2237,173],{"class":142},[128,2239,1363],{"class":138},[128,2241,143],{"class":142},[128,2243,1369],{"class":1368},[128,2245,143],{"class":142},[128,2247,1770],{"class":176},[128,2249,315],{"class":142},[128,2251,2252],{"class":176},"load_dir",[128,2254,280],{"class":142},[128,2256,906],{"class":142},[128,2258,750],{"class":195},[128,2260,192],{"class":142},[128,2262,290],{"class":142},[128,2264,2265],{"class":130,"line":1145},[128,2266,164],{"emptyLinePlaceholder":163},[128,2268,2269,2271,2273,2275,2277,2279,2281,2283,2285,2287,2289,2291,2293,2295],{"class":130,"line":1158},[128,2270,1790],{"class":134},[128,2272,1793],{"class":176},[128,2274,315],{"class":142},[128,2276,1798],{"class":176},[128,2278,280],{"class":142},[128,2280,1812],{"class":186},[128,2282,173],{"class":142},[128,2284,192],{"class":142},[128,2286,1819],{"class":195},[128,2288,192],{"class":142},[128,2290,1320],{"class":142},[128,2292,1826],{"class":134},[128,2294,1829],{"class":138},[128,2296,1832],{"class":142},[128,2298,2299,2302,2304,2306,2308,2311,2313,2315],{"class":130,"line":1170},[128,2300,2301],{"class":138},"    json_data ",[128,2303,173],{"class":142},[128,2305,1669],{"class":138},[128,2307,143],{"class":142},[128,2309,2310],{"class":176},"load",[128,2312,315],{"class":142},[128,2314,1302],{"class":176},[128,2316,290],{"class":142},[128,2318,2319],{"class":130,"line":1179},[128,2320,164],{"emptyLinePlaceholder":163},[128,2322,2323,2325,2327,2329,2331,2333,2335,2338,2340,2342,2344,2347,2349,2351],{"class":130,"line":1223},[128,2324,1013],{"class":138},[128,2326,143],{"class":142},[128,2328,1449],{"class":1368},[128,2330,143],{"class":142},[128,2332,1454],{"class":1368},[128,2334,143],{"class":142},[128,2336,2337],{"class":176},"import_graph",[128,2339,315],{"class":142},[128,2341,1715],{"class":176},[128,2343,280],{"class":142},[128,2345,2346],{"class":186}," user_name",[128,2348,173],{"class":142},[128,2350,1001],{"class":176},[128,2352,290],{"class":142},[128,2354,2355],{"class":130,"line":1261},[128,2356,164],{"emptyLinePlaceholder":163},[128,2358,2359,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380],{"class":130,"line":1267},[128,2360,2361],{"class":138},"nodes ",[128,2363,173],{"class":142},[128,2365,1527],{"class":138},[128,2367,143],{"class":142},[128,2369,1532],{"class":176},[128,2371,315],{"class":142},[128,2373,192],{"class":142},[128,2375,1539],{"class":195},[128,2377,192],{"class":142},[128,2379,280],{"class":142},[128,2381,2382],{"class":142}," [])\n",[128,2384,2385,2387,2389,2391,2394,2396,2398,2400,2402,2404,2406,2408],{"class":130,"line":1287},[128,2386,1296],{"class":176},[128,2388,315],{"class":142},[128,2390,1302],{"class":1301},[128,2392,2393],{"class":195},"\"✓ Imported ",[128,2395,1309],{"class":1308},[128,2397,1312],{"class":176},[128,2399,315],{"class":142},[128,2401,1539],{"class":176},[128,2403,1320],{"class":142},[128,2405,1323],{"class":1308},[128,2407,1738],{"class":195},[128,2409,290],{"class":142},[128,2411,2412],{"class":130,"line":1293},[128,2413,164],{"emptyLinePlaceholder":163},[128,2415,2416],{"class":130,"line":1331},[128,2417,2418],{"class":283},"# 4. 显示加载的数据\n",[128,2420,2421,2423,2425,2427,2429,2432,2435,2437,2439,2441,2443,2445,2447,2450],{"class":130,"line":1336},[128,2422,1296],{"class":176},[128,2424,315],{"class":142},[128,2426,1302],{"class":1301},[128,2428,192],{"class":195},[128,2430,2431],{"class":138},"\\n",[128,2433,2434],{"class":195},"Loaded ",[128,2436,1309],{"class":1308},[128,2438,1312],{"class":176},[128,2440,315],{"class":142},[128,2442,1539],{"class":176},[128,2444,1320],{"class":142},[128,2446,1323],{"class":1308},[128,2448,2449],{"class":195}," memories:\"",[128,2451,290],{"class":142},[128,2453,2454,2456,2459,2461,2463,2465,2468,2470,2472,2475,2478,2480,2483,2486],{"class":130,"line":1342},[128,2455,1518],{"class":134},[128,2457,2458],{"class":138}," i",[128,2460,280],{"class":142},[128,2462,1521],{"class":138},[128,2464,1524],{"class":134},[128,2466,2467],{"class":176}," enumerate",[128,2469,315],{"class":142},[128,2471,1539],{"class":176},[128,2473,2474],{"class":142},"[:",[128,2476,2477],{"class":1308},"3",[128,2479,485],{"class":142},[128,2481,2482],{"class":1308}," 1",[128,2484,2485],{"class":142},"):",[128,2487,2488],{"class":283},"  # 显示前3条\n",[128,2490,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511],{"class":130,"line":1357},[128,2492,1552],{"class":138},[128,2494,173],{"class":142},[128,2496,1557],{"class":138},[128,2498,143],{"class":142},[128,2500,1532],{"class":176},[128,2502,315],{"class":142},[128,2504,192],{"class":142},[128,2506,1568],{"class":195},[128,2508,192],{"class":142},[128,2510,280],{"class":142},[128,2512,1575],{"class":142},[128,2514,2515,2518,2520,2522,2524,2526,2528,2530,2533,2535,2537,2539,2542,2544],{"class":130,"line":1385},[128,2516,2517],{"class":138},"    memory_text ",[128,2519,173],{"class":142},[128,2521,1557],{"class":138},[128,2523,143],{"class":142},[128,2525,1532],{"class":176},[128,2527,315],{"class":142},[128,2529,192],{"class":142},[128,2531,2532],{"class":195},"memory",[128,2534,192],{"class":142},[128,2536,280],{"class":142},[128,2538,906],{"class":142},[128,2540,2541],{"class":195},"N\u002FA",[128,2543,192],{"class":142},[128,2545,290],{"class":142},[128,2547,2548,2551,2553,2556,2558,2560,2562,2564,2567,2569,2571,2573,2576,2578],{"class":130,"line":1402},[128,2549,2550],{"class":138},"    mem_type ",[128,2552,173],{"class":142},[128,2554,2555],{"class":138}," metadata",[128,2557,143],{"class":142},[128,2559,1532],{"class":176},[128,2561,315],{"class":142},[128,2563,192],{"class":142},[128,2565,2566],{"class":195},"memory_type",[128,2568,192],{"class":142},[128,2570,280],{"class":142},[128,2572,906],{"class":142},[128,2574,2575],{"class":195},"unknown",[128,2577,192],{"class":142},[128,2579,290],{"class":142},[128,2581,2582,2585,2587,2589,2592,2594,2597,2599,2602,2604,2607,2609,2611],{"class":130,"line":1425},[128,2583,2584],{"class":176},"    print",[128,2586,315],{"class":142},[128,2588,1302],{"class":1301},[128,2590,2591],{"class":195},"\"  [",[128,2593,1309],{"class":1308},[128,2595,2596],{"class":176},"i",[128,2598,1323],{"class":1308},[128,2600,2601],{"class":195},"] Type: ",[128,2603,1309],{"class":1308},[128,2605,2606],{"class":176},"mem_type",[128,2608,1323],{"class":1308},[128,2610,192],{"class":195},[128,2612,290],{"class":142},[128,2614,2615,2617,2619,2621,2624,2626,2629,2631,2634,2636,2638,2641],{"class":130,"line":1430},[128,2616,2584],{"class":176},[128,2618,315],{"class":142},[128,2620,1302],{"class":1301},[128,2622,2623],{"class":195},"\"      Content: ",[128,2625,1309],{"class":1308},[128,2627,2628],{"class":176},"memory_text",[128,2630,2474],{"class":142},[128,2632,2633],{"class":1308},"60",[128,2635,1663],{"class":142},[128,2637,1323],{"class":1308},[128,2639,2640],{"class":195},"...\"",[128,2642,290],{"class":142},[128,2644,2645],{"class":130,"line":1436},[128,2646,164],{"emptyLinePlaceholder":163},[128,2648,2649],{"class":130,"line":1464},[128,2650,2651],{"class":283},"# 5. 语义搜索验证\n",[128,2653,2654,2657,2659,2661,2664],{"class":130,"line":1476},[128,2655,2656],{"class":138},"query ",[128,2658,173],{"class":142},[128,2660,906],{"class":142},[128,2662,2663],{"class":195},"test memory dump persistence demonstration",[128,2665,912],{"class":142},[128,2667,2668,2670,2672,2674,2676,2678,2681,2683,2686,2688,2691],{"class":130,"line":1491},[128,2669,1296],{"class":176},[128,2671,315],{"class":142},[128,2673,1302],{"class":1301},[128,2675,1724],{"class":195},[128,2677,2431],{"class":138},[128,2679,2680],{"class":195},"Searching: \"",[128,2682,1309],{"class":1308},[128,2684,2685],{"class":176},"query",[128,2687,1323],{"class":1308},[128,2689,2690],{"class":195},"\"'",[128,2692,290],{"class":142},[128,2694,2695],{"class":130,"line":1496},[128,2696,164],{"emptyLinePlaceholder":163},[128,2698,2699,2702,2704,2706,2708,2710],{"class":130,"line":1501},[128,2700,2701],{"class":138},"search_result ",[128,2703,173],{"class":142},[128,2705,1131],{"class":138},[128,2707,143],{"class":142},[128,2709,341],{"class":176},[128,2711,180],{"class":142},[128,2713,2714,2717],{"class":130,"line":1507},[128,2715,2716],{"class":176},"    APISearchRequest",[128,2718,180],{"class":142},[128,2720,2721,2724,2726,2728],{"class":130,"line":1515},[128,2722,2723],{"class":186},"        user_id",[128,2725,173],{"class":142},[128,2727,1153],{"class":176},[128,2729,201],{"class":142},[128,2731,2732,2735,2737,2739],{"class":130,"line":1549},[128,2733,2734],{"class":186},"        readable_cube_ids",[128,2736,474],{"class":142},[128,2738,1001],{"class":176},[128,2740,1036],{"class":142},[128,2742,2743,2746,2748,2750],{"class":130,"line":1578},[128,2744,2745],{"class":186},"        query",[128,2747,173],{"class":142},[128,2749,2685],{"class":176},[128,2751,201],{"class":142},[128,2753,2754],{"class":130,"line":1623},[128,2755,2756],{"class":142},"    )\n",[128,2758,2759],{"class":130,"line":1649},[128,2760,290],{"class":142},[128,2762,2763],{"class":130,"line":1692},[128,2764,164],{"emptyLinePlaceholder":163},[128,2766,2767,2770,2772,2775,2777,2779,2781,2783,2785,2787,2789],{"class":130,"line":1697},[128,2768,2769],{"class":138},"text_mem_results ",[128,2771,173],{"class":142},[128,2773,2774],{"class":138}," search_result",[128,2776,143],{"class":142},[128,2778,1532],{"class":176},[128,2780,315],{"class":142},[128,2782,192],{"class":142},[128,2784,1449],{"class":195},[128,2786,192],{"class":142},[128,2788,280],{"class":142},[128,2790,2382],{"class":142},[128,2792,2793,2796,2798],{"class":130,"line":1743},[128,2794,2795],{"class":138},"memories ",[128,2797,173],{"class":142},[128,2799,2800],{"class":142}," []\n",[128,2802,2803,2805,2808,2810,2813],{"class":130,"line":1748},[128,2804,1518],{"class":134},[128,2806,2807],{"class":138}," group ",[128,2809,1524],{"class":134},[128,2811,2812],{"class":138}," text_mem_results",[128,2814,1832],{"class":142},[128,2816,2817,2820,2822,2825,2827,2830,2832,2834,2836,2838,2841,2843,2845],{"class":130,"line":1754},[128,2818,2819],{"class":138},"    memories",[128,2821,143],{"class":142},[128,2823,2824],{"class":176},"extend",[128,2826,315],{"class":142},[128,2828,2829],{"class":176},"group",[128,2831,143],{"class":142},[128,2833,1532],{"class":176},[128,2835,315],{"class":142},[128,2837,192],{"class":142},[128,2839,2840],{"class":195},"memories",[128,2842,192],{"class":142},[128,2844,280],{"class":142},[128,2846,2847],{"class":142}," []))\n",[128,2849,2850],{"class":130,"line":1787},[128,2851,164],{"emptyLinePlaceholder":163},[128,2853,2854,2856,2858,2860,2863,2865,2867,2869,2871,2873,2875,2878],{"class":130,"line":1835},[128,2855,1296],{"class":176},[128,2857,315],{"class":142},[128,2859,1302],{"class":1301},[128,2861,2862],{"class":195},"\"✓ Found ",[128,2864,1309],{"class":1308},[128,2866,1312],{"class":176},[128,2868,315],{"class":142},[128,2870,2840],{"class":176},[128,2872,1320],{"class":142},[128,2874,1323],{"class":1308},[128,2876,2877],{"class":195}," relevant memories\"",[128,2879,290],{"class":142},[128,2881,2882,2884,2886,2888,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909],{"class":130,"line":1872},[128,2883,1518],{"class":134},[128,2885,2458],{"class":138},[128,2887,280],{"class":142},[128,2889,2890],{"class":138}," mem ",[128,2892,1524],{"class":134},[128,2894,2467],{"class":176},[128,2896,315],{"class":142},[128,2898,2840],{"class":176},[128,2900,2474],{"class":142},[128,2902,1861],{"class":1308},[128,2904,485],{"class":142},[128,2906,2482],{"class":1308},[128,2908,2485],{"class":142},[128,2910,2911],{"class":283},"  # 显示前2条\n",[128,2913,2915,2917,2919,2921,2923,2925,2927,2929,2932,2934,2937,2939,2941,2943,2945,2947,2949,2951,2954,2956,2958,2961,2963,2965,2967,2969],{"class":130,"line":2914},68,[128,2916,2584],{"class":176},[128,2918,315],{"class":142},[128,2920,1302],{"class":1301},[128,2922,2591],{"class":195},[128,2924,1309],{"class":1308},[128,2926,2596],{"class":176},[128,2928,1323],{"class":1308},[128,2930,2931],{"class":195},"] ",[128,2933,1309],{"class":1308},[128,2935,2936],{"class":176},"mem",[128,2938,143],{"class":142},[128,2940,1532],{"class":176},[128,2942,315],{"class":142},[128,2944,1724],{"class":142},[128,2946,2532],{"class":195},[128,2948,1724],{"class":142},[128,2950,280],{"class":142},[128,2952,2953],{"class":142}," '",[128,2955,2541],{"class":195},[128,2957,1724],{"class":142},[128,2959,2960],{"class":142},")[:",[128,2962,2633],{"class":1308},[128,2964,1663],{"class":142},[128,2966,1323],{"class":1308},[128,2968,2640],{"class":195},[128,2970,290],{"class":142},[113,2972,2973],{"id":2973},"完整示例",[16,2975,2976],{},"参见代码仓库中的示例：",[23,2978,2979,2985],{},[26,2980,2981,2984],{},[33,2982,2983],{},"MemOS\u002Fexamples\u002Fmem_cube\u002Fdump_cube.py"," - 导出 MemCube 数据（add + export）",[26,2986,2987,2990],{},[33,2988,2989],{},"MemOS\u002Fexamples\u002Fmem_cube\u002Fload_cube.py"," - 导入 MemCube 数据并进行语义搜索（import + search）",[113,2992,2994],{"id":2993},"旧-api-说明","旧 API 说明",[16,2996,2997,2998,3001,3002,3005],{},"早期版本中直接调用 ",[33,2999,3000],{},"mem_cube.text_mem.get_all()"," 的方式已废弃，请使用 View 架构。旧示例已移至 ",[33,3003,3004],{},"MemOS\u002Fexamples\u002Fmem_cube\u002F_deprecated\u002F","。",[11,3007,3008],{"id":3008},"开发者说明",[23,3010,3011,3014,3017],{},[26,3012,3013],{},"MemCube 强制执行模式一致性，确保安全的加载\u002F转储",[26,3015,3016],{},"每种记忆类型都是可插拔的，支持独立测试",[26,3018,3019,3020,3023],{},"参见 ",[33,3021,3022],{},"\u002Ftests\u002Fmem_cube\u002F"," 了解集成测试和使用模式",[3025,3026,3027],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":81,"searchDepth":160,"depth":160,"links":3029},[3030,3031,3032,3037,3041,3042,3048],{"id":13,"depth":160,"text":14},{"id":64,"depth":160,"text":64},{"id":104,"depth":160,"text":105,"children":3033},[3034,3035,3036],{"id":115,"depth":167,"text":116},{"id":351,"depth":167,"text":352},{"id":531,"depth":167,"text":532},{"id":625,"depth":160,"text":626,"children":3038},[3039,3040],{"id":632,"depth":167,"text":632},{"id":678,"depth":167,"text":678},{"id":734,"depth":160,"text":734},{"id":766,"depth":160,"text":766,"children":3043},[3044,3045,3046,3047],{"id":769,"depth":167,"text":770},{"id":1894,"depth":167,"text":1895},{"id":2973,"depth":167,"text":2973},{"id":2993,"depth":167,"text":2994},{"id":3008,"depth":160,"text":3008},"MemCube 是你的“记忆收纳箱”，统一管理三种类型的记忆：明文记忆、激活记忆和参数化记忆。它提供简洁的接口，方便加载、保存和操作多个记忆模块，让开发者轻松构建、保存和共享记忆增强应用。","md",{},"\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_cube",{"title":5,"description":81},"cn\u002Fopen_source\u002Fmodules\u002Fmem_cube","NXMpfZ86i-XQmj8yL1v29ZkghA-pGYOAJhpHIxtCEPg",[3057,3065],{"title":3058,"path":3059,"stem":3060,"icon":3061,"framework":6,"module":6,"class":3062,"target":-1,"active":3063,"defaultOpen":3063,"children":-1,"description":3064},"API 开发指南","\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmos\u002Foverview","open_source\u002Fmodules\u002Fmos\u002Foverview","i-ri-eye-line",[],false,"MemOS v2.0 采用了更加模块化和解耦的架构。旧版的 MOS 类已被弃用，现在推荐使用 Components (组件) + Handlers (处理器) 的模式进行开发。",{"title":3066,"path":3067,"stem":3068,"icon":3069,"framework":6,"module":6,"class":3070,"target":-1,"active":3063,"defaultOpen":3063,"children":-1,"description":3071},"MemReader 记忆读取","\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_reader","open_source\u002Fmodules\u002Fmem_reader","i-ri-book-open-line",[],"“MemReader 是你的“记忆翻译官”。它负责把杂乱的输入（聊天、文档、图片）翻译成系统能理解的、结构化的记忆片段。\"",1774339750890]