[{"data":1,"prerenderedAt":4702},["ShallowReactive",2],{"\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Ftree_textual_memory":3,"surround-\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Ftree_textual_memory":4686},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":4679,"description":509,"extension":4680,"links":6,"meta":4681,"navigation":6,"path":4682,"seo":4683,"stem":4684,"__hash__":4685},"docs\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Ftree_textual_memory.md","TreeTextMemory: 树形明文记忆",null,{"type":8,"value":9,"toc":4652},"minimark",[10,14,125,127,131,157,159,162,174,194,202,443,455,457,460,487,497,500,503,535,538,681,684,690,698,712,715,718,3740,3742,3745,4561,4564,4590,4600,4602,4645,4648],[11,12,13],"h2",{"id":13},"目录",[15,16,17,25,51,57,113,119],"ul",{},[18,19,20],"li",{},[21,22,24],"a",{"href":23},"#%E4%BD%A0%E5%B0%86%E5%AD%A6%E5%88%B0%E4%BB%80%E4%B9%88","你将学到什么",[18,26,27,31],{},[21,28,30],{"href":29},"#%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5%E4%B8%8E%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B","核心概念与工作流程",[15,32,33,39,45],{},[18,34,35],{},[21,36,38],{"href":37},"#%E8%AE%B0%E5%BF%86%E7%BB%93%E6%9E%84","记忆结构",[18,40,41],{},[21,42,44],{"href":43},"#%E5%85%83%E6%95%B0%E6%8D%AE%E5%AD%97%E6%AE%B5-treenodetextualmemorymetadata","元数据字段",[18,46,47],{},[21,48,50],{"href":49},"#%E6%A0%B8%E5%BF%83%E5%B7%A5%E4%BD%9C%E6%B5%81","核心工作流",[18,52,53],{},[21,54,56],{"href":55},"#api-%E5%8F%82%E8%80%83","API 参考",[18,58,59,63],{},[21,60,62],{"href":61},"#%E5%8A%A8%E6%89%8B%E5%AE%9E%E8%B7%B5%E4%BB%8E-0-%E5%88%B0-1","动手实践：从 0 到 1",[15,64,65,71,77,83,89,95,101,107],{},[18,66,67],{},[21,68,70],{"href":69},"#%E5%88%9B%E5%BB%BA-treetextmemory-%E9%85%8D%E7%BD%AE","创建 TreeTextMemory 配置",[18,72,73],{},[21,74,76],{"href":75},"#%E5%88%9D%E5%A7%8B%E5%8C%96-treetextmemory","初始化 TreeTextMemory",[18,78,79],{},[21,80,82],{"href":81},"#%E6%8A%BD%E5%8F%96%E7%BB%93%E6%9E%84%E5%8C%96%E8%AE%B0%E5%BF%86","抽取结构化记忆",[18,84,85],{},[21,86,88],{"href":87},"#%E6%90%9C%E7%B4%A2%E8%AE%B0%E5%BF%86","搜索记忆",[18,90,91],{},[21,92,94],{"href":93},"#%E4%BB%8E%E4%BA%92%E8%81%94%E7%BD%91%E6%A3%80%E7%B4%A2%E8%AE%B0%E5%BF%86%E5%8F%AF%E9%80%89","从互联网检索记忆（可选）",[18,96,97],{},[21,98,100],{"href":99},"#%E6%9B%BF%E6%8D%A2%E5%B7%A5%E4%BD%9C%E8%AE%B0%E5%BF%86","替换工作记忆",[18,102,103],{},[21,104,106],{"href":105},"#%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D","备份与恢复",[18,108,109],{},[21,110,112],{"href":111},"#%E5%AE%8C%E6%95%B4%E4%BB%A3%E7%A0%81%E7%A4%BA%E4%BE%8B","完整代码示例",[18,114,115],{},[21,116,118],{"href":117},"#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9-treetextmemory","为什么选择 TreeTextMemory",[18,120,121],{},[21,122,124],{"href":123},"#%E4%B8%8B%E4%B8%80%E6%AD%A5","下一步",[11,126,24],{"id":24},[128,129,130],"p",{},"在本指南的最后，你会:",[15,132,133,136,143,150],{},[18,134,135],{},"从原始文本或对话中提取结构化记忆",[18,137,138,139],{},"在图数据库中存储他们作为",[140,141,142],"strong",{},"节点",[18,144,145,146,149],{},"将记忆链接成",[140,147,148],{},"层次结构","和语义图",[18,151,152,153,156],{},"使用",[140,154,155],{},"向量相似度+图遍历","进行搜索",[11,158,30],{"id":30},[160,161,38],"h3",{"id":38},[128,163,164,165,169,170,173],{},"每个节点在",[166,167,168],"code",{},"TreeTextMemory"," 是一个 ",[166,171,172],{},"TextualMemoryItem",":",[15,175,176,182,188],{},[18,177,178,181],{},[166,179,180],{},"id",": 唯一记忆ID（如果省略则自动生成）",[18,183,184,187],{},[166,185,186],{},"memory",": 主要文本",[18,189,190,193],{},[166,191,192],{},"metadata",": 包括层次结构信息、嵌入、标签、实体、源和状态",[160,195,197,198,201],{"id":196},"元数据字段-treenodetextualmemorymetadata","元数据字段 (",[166,199,200],{},"TreeNodeTextualMemoryMetadata",")",[203,204,205,221],"table",{},[206,207,208],"thead",{},[209,210,211,215,218],"tr",{},[212,213,214],"th",{},"字段",[212,216,217],{},"类型",[212,219,220],{},"描述",[222,223,224,247,268,289,304,328,343,357,371,386,401,415,429],"tbody",{},[209,225,226,232,244],{},[227,228,229],"td",{},[166,230,231],{},"memory_type",[227,233,234,237,238,237,241],{},[166,235,236],{},"\"WorkingMemory\"",", ",[166,239,240],{},"\"LongTermMemory\"",[166,242,243],{},"\"UserMemory\"",[227,245,246],{},"生命周期分类",[209,248,249,254,265],{},[227,250,251],{},[166,252,253],{},"status",[227,255,256,237,259,237,262],{},[166,257,258],{},"\"activated\"",[166,260,261],{},"\"archived\"",[166,263,264],{},"\"deleted\"",[227,266,267],{},"节点状态",[209,269,270,275,286],{},[227,271,272],{},[166,273,274],{},"visibility",[227,276,277,237,280,237,283],{},[166,278,279],{},"\"private\"",[166,281,282],{},"\"public\"",[166,284,285],{},"\"session\"",[227,287,288],{},"访问范围",[209,290,291,296,301],{},[227,292,293],{},[166,294,295],{},"sources",[227,297,298],{},[166,299,300],{},"list[str]",[227,302,303],{},"来源列表 (例如: 文件, URLs)",[209,305,306,311,325],{},[227,307,308],{},[166,309,310],{},"source",[227,312,313,237,316,237,319,237,322],{},[166,314,315],{},"\"conversation\"",[166,317,318],{},"\"retrieved\"",[166,320,321],{},"\"web\"",[166,323,324],{},"\"file\"",[227,326,327],{},"原始来源类型",[209,329,330,335,340],{},[227,331,332],{},[166,333,334],{},"confidence",[227,336,337],{},[166,338,339],{},"float (0-100)",[227,341,342],{},"确定性得分",[209,344,345,350,354],{},[227,346,347],{},[166,348,349],{},"entities",[227,351,352],{},[166,353,300],{},[227,355,356],{},"提及的实体或概念",[209,358,359,364,368],{},[227,360,361],{},[166,362,363],{},"tags",[227,365,366],{},[166,367,300],{},[227,369,370],{},"主题标签",[209,372,373,378,383],{},[227,374,375],{},[166,376,377],{},"embedding",[227,379,380],{},[166,381,382],{},"list[float]",[227,384,385],{},"基于向量嵌入的相似性搜索",[209,387,388,393,398],{},[227,389,390],{},[166,391,392],{},"created_at",[227,394,395],{},[166,396,397],{},"str",[227,399,400],{},"创建时间戳(ISO 8601)",[209,402,403,408,412],{},[227,404,405],{},[166,406,407],{},"updated_at",[227,409,410],{},[166,411,397],{},[227,413,414],{},"最近更新时间戳(ISO 8601)",[209,416,417,422,426],{},[227,418,419],{},[166,420,421],{},"usage",[227,423,424],{},[166,425,300],{},[227,427,428],{},"使用历史",[209,430,431,436,440],{},[227,432,433],{},[166,434,435],{},"background",[227,437,438],{},[166,439,397],{},[227,441,442],{},"附加上下文",[444,445,446],"note",{},[128,447,448,451,454],{},[140,449,450],{},"最佳实践",[452,453],"br",{},"\n使用有意义的标签和背景——它们有助于组织你的图进行多跳推理。",[160,456,50],{"id":50},[128,458,459],{},"当您运行此示例时，您的工作流将:",[461,462,463,469,475,481],"ol",{},[18,464,465,468],{},[140,466,467],{},"抽取:"," 使用LLM从原始文本中提取结构化记忆.",[18,470,471,474],{},[140,472,473],{},"嵌入:"," 为相似性搜索生成向量嵌入.",[18,476,477,480],{},[140,478,479],{},"存储和链接:"," 将具有关系的节点添加到图数据库（Neo4j）中.",[18,482,483,486],{},[140,484,485],{},"搜索:"," 通过向量相似度查询，然后通过图跳数展开结果.",[444,488,489],{},[128,490,491,494,496],{},[140,492,493],{},"提示",[452,495],{},"图链接有助于检索纯向量搜索可能遗漏的上下文!",[11,498,56],{"id":499},"api-参考",[160,501,502],{"id":502},"初始化",[504,505,510],"pre",{"className":506,"code":507,"language":508,"meta":509,"style":509},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","TreeTextMemory(config: TreeTextMemoryConfig)\n","python","",[166,511,512],{"__ignoreMap":509},[513,514,517,520,524,527,529,532],"span",{"class":515,"line":516},"line",1,[513,518,168],{"class":519},"s2Zo4",[513,521,523],{"class":522},"sMK4o","(",[513,525,526],{"class":519},"config",[513,528,173],{"class":522},[513,530,531],{"class":519}," TreeTextMemoryConfig",[513,533,534],{"class":522},")\n",[160,536,537],{"id":537},"核心方法",[203,539,540,549],{},[206,541,542],{},[209,543,544,547],{},[212,545,546],{},"方法",[212,548,220],{},[222,550,551,561,571,581,591,601,611,621,631,641,651,661,671],{},[209,552,553,558],{},[227,554,555],{},[166,556,557],{},"add(memories)",[227,559,560],{},"添加一个或多个记忆（项目或字典）",[209,562,563,568],{},[227,564,565],{},[166,566,567],{},"replace_working_memory()",[227,569,570],{},"更换所有的WorkingMemory节点",[209,572,573,578],{},[227,574,575],{},[166,576,577],{},"get_working_memory()",[227,579,580],{},"得到所有的WorkingMemory节点",[209,582,583,588],{},[227,584,585],{},[166,586,587],{},"search(query, top_k)",[227,589,590],{},"使用向量+图搜索检索top-k个记忆",[209,592,593,598],{},[227,594,595],{},[166,596,597],{},"get(memory_id)",[227,599,600],{},"通过ID获取单个记忆",[209,602,603,608],{},[227,604,605],{},[166,606,607],{},"get_by_ids(ids)",[227,609,610],{},"通过IDs获取多个记忆",[209,612,613,618],{},[227,614,615],{},[166,616,617],{},"get_all()",[227,619,620],{},"将整个记忆图导出为字典",[209,622,623,628],{},[227,624,625],{},[166,626,627],{},"update(memory_id, new)",[227,629,630],{},"通过ID更新记忆",[209,632,633,638],{},[227,634,635],{},[166,636,637],{},"delete(ids)",[227,639,640],{},"通过IDs删除记忆",[209,642,643,648],{},[227,644,645],{},[166,646,647],{},"delete_all()",[227,649,650],{},"删除所有的记忆和关系",[209,652,653,658],{},[227,654,655],{},[166,656,657],{},"dump(dir)",[227,659,660],{},"在目录中将图序列化为JSON",[209,662,663,668],{},[227,664,665],{},[166,666,667],{},"load(dir)",[227,669,670],{},"从保存的JSON文件加载图",[209,672,673,678],{},[227,674,675],{},[166,676,677],{},"drop(keep_last_n)",[227,679,680],{},"备份图和删除数据库，保留N个备份",[160,682,683],{"id":683},"文件存储",[128,685,686,687,689],{},"当调用 ",[166,688,657],{},", MemOS将树形明文记忆导出为JSON文件:",[504,691,696],{"className":692,"code":694,"language":695},[693],"language-text","\u003Cdir>\u002F\u003Cconfig.memory_filename>\n","text",[166,697,694],{"__ignoreMap":509},[128,699,700,701,704,705,708,709,711],{},"这个文件包含一个JSON结构，有 ",[166,702,703],{},"nodes"," and ",[166,706,707],{},"edges",". 它可以使用 ",[166,710,667],{},"重新加载.",[713,714],"hr",{},[11,716,62],{"id":717},"动手实践从-0-到-1",[719,720,721,724,727,738,806,809,860,862,867,872,1138,1142,1148,2873,2924,2963,2965,2968,3071,3074,3077,3080,3448,3451,3602,3605,3607,3613,3691,3693,3696],"steps",{},[160,722,70],{"id":723},"创建-treetextmemory-配置",[128,725,726],{},"定义:",[15,728,729,732,735],{},[18,730,731],{},"你的embedding模型（例如，nomic-embed-text:latest）,",[18,733,734],{},"你的图数据库后端(Neo4j),",[18,736,737],{},"记忆抽取器（基于LLM）（可选）.",[504,739,741],{"className":506,"code":740,"language":508,"meta":509,"style":509},"from memos.configs.memory import TreeTextMemoryConfig\n\nconfig = TreeTextMemoryConfig.from_json_file(\"examples\u002Fdata\u002Fconfig\u002Ftree_config.json\")\n",[166,742,743,770,777],{"__ignoreMap":509},[513,744,745,749,753,756,759,761,764,767],{"class":515,"line":516},[513,746,748],{"class":747},"s7zQu","from",[513,750,752],{"class":751},"sTEyZ"," memos",[513,754,755],{"class":522},".",[513,757,758],{"class":751},"configs",[513,760,755],{"class":522},[513,762,763],{"class":751},"memory ",[513,765,766],{"class":747},"import",[513,768,769],{"class":751}," TreeTextMemoryConfig\n",[513,771,773],{"class":515,"line":772},2,[513,774,776],{"emptyLinePlaceholder":775},true,"\n",[513,778,780,783,786,788,790,793,795,798,802,804],{"class":515,"line":779},3,[513,781,782],{"class":751},"config ",[513,784,785],{"class":522},"=",[513,787,531],{"class":751},[513,789,755],{"class":522},[513,791,792],{"class":519},"from_json_file",[513,794,523],{"class":522},[513,796,797],{"class":522},"\"",[513,799,801],{"class":800},"sfazB","examples\u002Fdata\u002Fconfig\u002Ftree_config.json",[513,803,797],{"class":522},[513,805,534],{"class":522},[160,807,76],{"id":808},"初始化-treetextmemory",[504,810,812],{"className":506,"code":811,"language":508,"meta":509,"style":509},"from memos.memories.textual.tree import TreeTextMemory\n\ntree_memory = TreeTextMemory(config)\n",[166,813,814,840,844],{"__ignoreMap":509},[513,815,816,818,820,822,825,827,830,832,835,837],{"class":515,"line":516},[513,817,748],{"class":747},[513,819,752],{"class":751},[513,821,755],{"class":522},[513,823,824],{"class":751},"memories",[513,826,755],{"class":522},[513,828,829],{"class":751},"textual",[513,831,755],{"class":522},[513,833,834],{"class":751},"tree ",[513,836,766],{"class":747},[513,838,839],{"class":751}," TreeTextMemory\n",[513,841,842],{"class":515,"line":772},[513,843,776],{"emptyLinePlaceholder":775},[513,845,846,849,851,854,856,858],{"class":515,"line":779},[513,847,848],{"class":751},"tree_memory ",[513,850,785],{"class":522},[513,852,853],{"class":519}," TreeTextMemory",[513,855,523],{"class":522},[513,857,526],{"class":519},[513,859,534],{"class":522},[160,861,82],{"id":82},[128,863,864,865,755],{},"使用记忆抽取器将对话、文件或文档解析为多个",[166,866,172],{},[868,869,871],"h4",{"id":870},"使用-simplestructmemreader基础","使用 SimpleStructMemReader（基础）",[504,873,875],{"className":506,"code":874,"language":508,"meta":509,"style":509},"from memos.mem_reader.simple_struct import SimpleStructMemReader\n\nreader = SimpleStructMemReader.from_json_file(\"examples\u002Fdata\u002Fconfig\u002Fsimple_struct_reader_config.json\")\n\nscene_data = [[\n    {\"role\": \"user\", \"content\": \"Tell me about your childhood.\"},\n    {\"role\": \"assistant\", \"content\": \"I loved playing in the garden with my dog.\"}\n]]\n\nmemories = reader.get_memory(scene_data, type=\"chat\", info={\"user_id\": \"1234\"})\nfor m_list in memories:\n    tree_memory.add(m_list)\n",[166,876,877,898,902,927,932,943,988,1028,1034,1039,1102,1120],{"__ignoreMap":509},[513,878,879,881,883,885,888,890,893,895],{"class":515,"line":516},[513,880,748],{"class":747},[513,882,752],{"class":751},[513,884,755],{"class":522},[513,886,887],{"class":751},"mem_reader",[513,889,755],{"class":522},[513,891,892],{"class":751},"simple_struct ",[513,894,766],{"class":747},[513,896,897],{"class":751}," SimpleStructMemReader\n",[513,899,900],{"class":515,"line":772},[513,901,776],{"emptyLinePlaceholder":775},[513,903,904,907,909,912,914,916,918,920,923,925],{"class":515,"line":779},[513,905,906],{"class":751},"reader ",[513,908,785],{"class":522},[513,910,911],{"class":751}," SimpleStructMemReader",[513,913,755],{"class":522},[513,915,792],{"class":519},[513,917,523],{"class":522},[513,919,797],{"class":522},[513,921,922],{"class":800},"examples\u002Fdata\u002Fconfig\u002Fsimple_struct_reader_config.json",[513,924,797],{"class":522},[513,926,534],{"class":522},[513,928,930],{"class":515,"line":929},4,[513,931,776],{"emptyLinePlaceholder":775},[513,933,935,938,940],{"class":515,"line":934},5,[513,936,937],{"class":751},"scene_data ",[513,939,785],{"class":522},[513,941,942],{"class":522}," [[\n",[513,944,946,949,951,954,956,958,961,964,966,969,971,974,976,978,980,983,985],{"class":515,"line":945},6,[513,947,948],{"class":522},"    {",[513,950,797],{"class":522},[513,952,953],{"class":800},"role",[513,955,797],{"class":522},[513,957,173],{"class":522},[513,959,960],{"class":522}," \"",[513,962,963],{"class":800},"user",[513,965,797],{"class":522},[513,967,968],{"class":522},",",[513,970,960],{"class":522},[513,972,973],{"class":800},"content",[513,975,797],{"class":522},[513,977,173],{"class":522},[513,979,960],{"class":522},[513,981,982],{"class":800},"Tell me about your childhood.",[513,984,797],{"class":522},[513,986,987],{"class":522},"},\n",[513,989,991,993,995,997,999,1001,1003,1006,1008,1010,1012,1014,1016,1018,1020,1023,1025],{"class":515,"line":990},7,[513,992,948],{"class":522},[513,994,797],{"class":522},[513,996,953],{"class":800},[513,998,797],{"class":522},[513,1000,173],{"class":522},[513,1002,960],{"class":522},[513,1004,1005],{"class":800},"assistant",[513,1007,797],{"class":522},[513,1009,968],{"class":522},[513,1011,960],{"class":522},[513,1013,973],{"class":800},[513,1015,797],{"class":522},[513,1017,173],{"class":522},[513,1019,960],{"class":522},[513,1021,1022],{"class":800},"I loved playing in the garden with my dog.",[513,1024,797],{"class":522},[513,1026,1027],{"class":522},"}\n",[513,1029,1031],{"class":515,"line":1030},8,[513,1032,1033],{"class":522},"]]\n",[513,1035,1037],{"class":515,"line":1036},9,[513,1038,776],{"emptyLinePlaceholder":775},[513,1040,1042,1045,1047,1050,1052,1055,1057,1060,1062,1066,1068,1070,1073,1075,1077,1080,1083,1085,1088,1090,1092,1094,1097,1099],{"class":515,"line":1041},10,[513,1043,1044],{"class":751},"memories ",[513,1046,785],{"class":522},[513,1048,1049],{"class":751}," reader",[513,1051,755],{"class":522},[513,1053,1054],{"class":519},"get_memory",[513,1056,523],{"class":522},[513,1058,1059],{"class":519},"scene_data",[513,1061,968],{"class":522},[513,1063,1065],{"class":1064},"sHdIc"," type",[513,1067,785],{"class":522},[513,1069,797],{"class":522},[513,1071,1072],{"class":800},"chat",[513,1074,797],{"class":522},[513,1076,968],{"class":522},[513,1078,1079],{"class":1064}," info",[513,1081,1082],{"class":522},"={",[513,1084,797],{"class":522},[513,1086,1087],{"class":800},"user_id",[513,1089,797],{"class":522},[513,1091,173],{"class":522},[513,1093,960],{"class":522},[513,1095,1096],{"class":800},"1234",[513,1098,797],{"class":522},[513,1100,1101],{"class":522},"})\n",[513,1103,1105,1108,1111,1114,1117],{"class":515,"line":1104},11,[513,1106,1107],{"class":747},"for",[513,1109,1110],{"class":751}," m_list ",[513,1112,1113],{"class":747},"in",[513,1115,1116],{"class":751}," memories",[513,1118,1119],{"class":522},":\n",[513,1121,1123,1126,1128,1131,1133,1136],{"class":515,"line":1122},12,[513,1124,1125],{"class":751},"    tree_memory",[513,1127,755],{"class":522},[513,1129,1130],{"class":519},"add",[513,1132,523],{"class":522},[513,1134,1135],{"class":519},"m_list",[513,1137,534],{"class":522},[868,1139,1141],{"id":1140},"使用-multimodalstructmemreader高级","使用 MultiModalStructMemReader（高级）",[128,1143,1144,1147],{},[166,1145,1146],{},"MultiModalStructMemReader"," 支持处理多模态内容（文本、图片、URL、文件等），能够自动感知（智能路由）到不同的解析器：",[504,1149,1151],{"className":506,"code":1150,"language":508,"meta":509,"style":509},"from memos.configs.mem_reader import MultiModalStructMemReaderConfig\nfrom memos.mem_reader.multi_modal_struct import MultiModalStructMemReader\n\n# 创建 MultiModal Reader 配置\nmultimodal_config = MultiModalStructMemReaderConfig(\n    llm={\n        \"backend\": \"openai\",\n        \"config\": {\n            \"model_name_or_path\": \"gpt-4o-mini\",\n            \"api_key\": \"your-api-key\"\n        }\n    },\n    embedder={\n        \"backend\": \"openai\",\n        \"config\": {\n            \"model_name_or_path\": \"text-embedding-3-small\",\n            \"api_key\": \"your-api-key\"\n        }\n    },\n    chunker={\n        \"backend\": \"text_splitter\",\n        \"config\": {\n            \"chunk_size\": 1000,\n            \"chunk_overlap\": 200\n        }\n    },\n    extractor_llm={\n        \"backend\": \"openai\",\n        \"config\": {\n            \"model_name_or_path\": \"gpt-4o-mini\",\n            \"api_key\": \"your-api-key\"\n        }\n    },\n    # 可选：指定哪些域名直接返回 Markdown\n    direct_markdown_hostnames=[\"github.com\", \"docs.python.org\"]\n)\n\n# 初始化 MultiModal Reader\nmultimodal_reader = MultiModalStructMemReader(multimodal_config)\n\n# ========================================\n# 示例 1: 处理包含图片的对话\n# ========================================\nscene_with_image = [[\n    {\n        \"role\": \"user\",\n        \"content\": [\n            {\"type\": \"text\", \"text\": \"这是我家的花园\"},\n            {\"type\": \"image_url\", \"image_url\": {\"url\": \"https:\u002F\u002Fexample.com\u002Fgarden.jpg\"}}\n        ]\n    },\n    {\n        \"role\": \"assistant\",\n        \"content\": \"你的花园很漂亮！\"\n    }\n]]\n\nmemories = multimodal_reader.get_memory(\n    scene_with_image,\n    type=\"chat\",\n    info={\"user_id\": \"1234\", \"session_id\": \"session_001\"}\n)\nfor m_list in memories:\n    tree_memory.add(m_list)\nprint(f\"✓ 已添加 {len(memories)} 条多模态记忆\")\n\n# ========================================\n# 示例 2: 处理网页 URL\n# ========================================\nscene_with_url = [[\n    {\n        \"role\": \"user\",\n        \"content\": \"请分析这篇文章: https:\u002F\u002Fexample.com\u002Farticle.html\"\n    },\n    {\n        \"role\": \"assistant\",\n        \"content\": \"我会帮你分析这篇文章\"\n    }\n]]\n\nurl_memories = multimodal_reader.get_memory(\n    scene_with_url,\n    type=\"chat\",\n    info={\"user_id\": \"1234\", \"session_id\": \"session_002\"}\n)\nfor m_list in url_memories:\n    tree_memory.add(m_list)\nprint(f\"✓ 已从 URL 提取并添加 {len(url_memories)} 条记忆\")\n\n# ========================================\n# 示例 3: 处理本地文件\n# ========================================\n# 支持的文件类型: PDF, DOCX, TXT, Markdown, HTML 等\nfile_paths = [\n    \".\u002Fdocuments\u002Freport.pdf\",\n    \".\u002Fdocuments\u002Fnotes.md\",\n    \".\u002Fdocuments\u002Fdata.txt\"\n]\n\nfile_memories = multimodal_reader.get_memory(\n    file_paths,\n    type=\"doc\",\n    info={\"user_id\": \"1234\", \"session_id\": \"session_003\"}\n)\nfor m_list in file_memories:\n    tree_memory.add(m_list)\nprint(f\"✓ 已从文件提取并添加 {len(file_memories)} 条记忆\")\n\n# ========================================\n# 示例 4: 混合模式（文本 + 图片 + URL）\n# ========================================\nmixed_scene = [[\n    {\n        \"role\": \"user\",\n        \"content\": [\n            {\"type\": \"text\", \"text\": \"这是我的项目文档:\"},\n            {\"type\": \"text\", \"text\": \"https:\u002F\u002Fgithub.com\u002Fuser\u002Fproject\u002FREADME.md\"},\n            {\"type\": \"image_url\", \"image_url\": {\"url\": \"https:\u002F\u002Fexample.com\u002Fdiagram.png\"}}\n        ]\n    }\n]]\n\nmixed_memories = multimodal_reader.get_memory(\n    mixed_scene,\n    type=\"chat\",\n    info={\"user_id\": \"1234\", \"session_id\": \"session_004\"}\n)\nfor m_list in mixed_memories:\n    tree_memory.add(m_list)\nprint(f\"✓ 已从混合内容提取并添加 {len(mixed_memories)} 条记忆\")\n",[166,1152,1153,1173,1193,1197,1203,1216,1224,1246,1259,1280,1299,1304,1309,1317,1336,1349,1369,1386,1391,1396,1404,1424,1437,1455,1470,1475,1480,1488,1507,1520,1539,1556,1561,1566,1572,1600,1605,1610,1616,1634,1639,1645,1651,1656,1666,1672,1691,1705,1745,1797,1803,1808,1813,1832,1850,1856,1861,1866,1882,1890,1906,1948,1953,1966,1981,2016,2021,2026,2032,2037,2047,2052,2071,2089,2094,2099,2118,2136,2141,2146,2151,2167,2175,2190,2230,2235,2249,2264,2294,2299,2304,2310,2315,2321,2331,2344,2356,2366,2371,2376,2392,2400,2416,2456,2461,2475,2490,2519,2524,2529,2535,2540,2550,2555,2574,2587,2625,2663,2711,2716,2721,2726,2731,2747,2755,2770,2810,2815,2829,2844],{"__ignoreMap":509},[513,1154,1155,1157,1159,1161,1163,1165,1168,1170],{"class":515,"line":516},[513,1156,748],{"class":747},[513,1158,752],{"class":751},[513,1160,755],{"class":522},[513,1162,758],{"class":751},[513,1164,755],{"class":522},[513,1166,1167],{"class":751},"mem_reader ",[513,1169,766],{"class":747},[513,1171,1172],{"class":751}," MultiModalStructMemReaderConfig\n",[513,1174,1175,1177,1179,1181,1183,1185,1188,1190],{"class":515,"line":772},[513,1176,748],{"class":747},[513,1178,752],{"class":751},[513,1180,755],{"class":522},[513,1182,887],{"class":751},[513,1184,755],{"class":522},[513,1186,1187],{"class":751},"multi_modal_struct ",[513,1189,766],{"class":747},[513,1191,1192],{"class":751}," MultiModalStructMemReader\n",[513,1194,1195],{"class":515,"line":779},[513,1196,776],{"emptyLinePlaceholder":775},[513,1198,1199],{"class":515,"line":929},[513,1200,1202],{"class":1201},"sHwdD","# 创建 MultiModal Reader 配置\n",[513,1204,1205,1208,1210,1213],{"class":515,"line":934},[513,1206,1207],{"class":751},"multimodal_config ",[513,1209,785],{"class":522},[513,1211,1212],{"class":519}," MultiModalStructMemReaderConfig",[513,1214,1215],{"class":522},"(\n",[513,1217,1218,1221],{"class":515,"line":945},[513,1219,1220],{"class":1064},"    llm",[513,1222,1223],{"class":522},"={\n",[513,1225,1226,1229,1232,1234,1236,1238,1241,1243],{"class":515,"line":990},[513,1227,1228],{"class":522},"        \"",[513,1230,1231],{"class":800},"backend",[513,1233,797],{"class":522},[513,1235,173],{"class":522},[513,1237,960],{"class":522},[513,1239,1240],{"class":800},"openai",[513,1242,797],{"class":522},[513,1244,1245],{"class":522},",\n",[513,1247,1248,1250,1252,1254,1256],{"class":515,"line":1030},[513,1249,1228],{"class":522},[513,1251,526],{"class":800},[513,1253,797],{"class":522},[513,1255,173],{"class":522},[513,1257,1258],{"class":522}," {\n",[513,1260,1261,1264,1267,1269,1271,1273,1276,1278],{"class":515,"line":1036},[513,1262,1263],{"class":522},"            \"",[513,1265,1266],{"class":800},"model_name_or_path",[513,1268,797],{"class":522},[513,1270,173],{"class":522},[513,1272,960],{"class":522},[513,1274,1275],{"class":800},"gpt-4o-mini",[513,1277,797],{"class":522},[513,1279,1245],{"class":522},[513,1281,1282,1284,1287,1289,1291,1293,1296],{"class":515,"line":1041},[513,1283,1263],{"class":522},[513,1285,1286],{"class":800},"api_key",[513,1288,797],{"class":522},[513,1290,173],{"class":522},[513,1292,960],{"class":522},[513,1294,1295],{"class":800},"your-api-key",[513,1297,1298],{"class":522},"\"\n",[513,1300,1301],{"class":515,"line":1104},[513,1302,1303],{"class":522},"        }\n",[513,1305,1306],{"class":515,"line":1122},[513,1307,1308],{"class":522},"    },\n",[513,1310,1312,1315],{"class":515,"line":1311},13,[513,1313,1314],{"class":1064},"    embedder",[513,1316,1223],{"class":522},[513,1318,1320,1322,1324,1326,1328,1330,1332,1334],{"class":515,"line":1319},14,[513,1321,1228],{"class":522},[513,1323,1231],{"class":800},[513,1325,797],{"class":522},[513,1327,173],{"class":522},[513,1329,960],{"class":522},[513,1331,1240],{"class":800},[513,1333,797],{"class":522},[513,1335,1245],{"class":522},[513,1337,1339,1341,1343,1345,1347],{"class":515,"line":1338},15,[513,1340,1228],{"class":522},[513,1342,526],{"class":800},[513,1344,797],{"class":522},[513,1346,173],{"class":522},[513,1348,1258],{"class":522},[513,1350,1352,1354,1356,1358,1360,1362,1365,1367],{"class":515,"line":1351},16,[513,1353,1263],{"class":522},[513,1355,1266],{"class":800},[513,1357,797],{"class":522},[513,1359,173],{"class":522},[513,1361,960],{"class":522},[513,1363,1364],{"class":800},"text-embedding-3-small",[513,1366,797],{"class":522},[513,1368,1245],{"class":522},[513,1370,1372,1374,1376,1378,1380,1382,1384],{"class":515,"line":1371},17,[513,1373,1263],{"class":522},[513,1375,1286],{"class":800},[513,1377,797],{"class":522},[513,1379,173],{"class":522},[513,1381,960],{"class":522},[513,1383,1295],{"class":800},[513,1385,1298],{"class":522},[513,1387,1389],{"class":515,"line":1388},18,[513,1390,1303],{"class":522},[513,1392,1394],{"class":515,"line":1393},19,[513,1395,1308],{"class":522},[513,1397,1399,1402],{"class":515,"line":1398},20,[513,1400,1401],{"class":1064},"    chunker",[513,1403,1223],{"class":522},[513,1405,1407,1409,1411,1413,1415,1417,1420,1422],{"class":515,"line":1406},21,[513,1408,1228],{"class":522},[513,1410,1231],{"class":800},[513,1412,797],{"class":522},[513,1414,173],{"class":522},[513,1416,960],{"class":522},[513,1418,1419],{"class":800},"text_splitter",[513,1421,797],{"class":522},[513,1423,1245],{"class":522},[513,1425,1427,1429,1431,1433,1435],{"class":515,"line":1426},22,[513,1428,1228],{"class":522},[513,1430,526],{"class":800},[513,1432,797],{"class":522},[513,1434,173],{"class":522},[513,1436,1258],{"class":522},[513,1438,1440,1442,1445,1447,1449,1453],{"class":515,"line":1439},23,[513,1441,1263],{"class":522},[513,1443,1444],{"class":800},"chunk_size",[513,1446,797],{"class":522},[513,1448,173],{"class":522},[513,1450,1452],{"class":1451},"sbssI"," 1000",[513,1454,1245],{"class":522},[513,1456,1458,1460,1463,1465,1467],{"class":515,"line":1457},24,[513,1459,1263],{"class":522},[513,1461,1462],{"class":800},"chunk_overlap",[513,1464,797],{"class":522},[513,1466,173],{"class":522},[513,1468,1469],{"class":1451}," 200\n",[513,1471,1473],{"class":515,"line":1472},25,[513,1474,1303],{"class":522},[513,1476,1478],{"class":515,"line":1477},26,[513,1479,1308],{"class":522},[513,1481,1483,1486],{"class":515,"line":1482},27,[513,1484,1485],{"class":1064},"    extractor_llm",[513,1487,1223],{"class":522},[513,1489,1491,1493,1495,1497,1499,1501,1503,1505],{"class":515,"line":1490},28,[513,1492,1228],{"class":522},[513,1494,1231],{"class":800},[513,1496,797],{"class":522},[513,1498,173],{"class":522},[513,1500,960],{"class":522},[513,1502,1240],{"class":800},[513,1504,797],{"class":522},[513,1506,1245],{"class":522},[513,1508,1510,1512,1514,1516,1518],{"class":515,"line":1509},29,[513,1511,1228],{"class":522},[513,1513,526],{"class":800},[513,1515,797],{"class":522},[513,1517,173],{"class":522},[513,1519,1258],{"class":522},[513,1521,1523,1525,1527,1529,1531,1533,1535,1537],{"class":515,"line":1522},30,[513,1524,1263],{"class":522},[513,1526,1266],{"class":800},[513,1528,797],{"class":522},[513,1530,173],{"class":522},[513,1532,960],{"class":522},[513,1534,1275],{"class":800},[513,1536,797],{"class":522},[513,1538,1245],{"class":522},[513,1540,1542,1544,1546,1548,1550,1552,1554],{"class":515,"line":1541},31,[513,1543,1263],{"class":522},[513,1545,1286],{"class":800},[513,1547,797],{"class":522},[513,1549,173],{"class":522},[513,1551,960],{"class":522},[513,1553,1295],{"class":800},[513,1555,1298],{"class":522},[513,1557,1559],{"class":515,"line":1558},32,[513,1560,1303],{"class":522},[513,1562,1564],{"class":515,"line":1563},33,[513,1565,1308],{"class":522},[513,1567,1569],{"class":515,"line":1568},34,[513,1570,1571],{"class":1201},"    # 可选：指定哪些域名直接返回 Markdown\n",[513,1573,1575,1578,1581,1583,1586,1588,1590,1592,1595,1597],{"class":515,"line":1574},35,[513,1576,1577],{"class":1064},"    direct_markdown_hostnames",[513,1579,1580],{"class":522},"=[",[513,1582,797],{"class":522},[513,1584,1585],{"class":800},"github.com",[513,1587,797],{"class":522},[513,1589,968],{"class":522},[513,1591,960],{"class":522},[513,1593,1594],{"class":800},"docs.python.org",[513,1596,797],{"class":522},[513,1598,1599],{"class":522},"]\n",[513,1601,1603],{"class":515,"line":1602},36,[513,1604,534],{"class":522},[513,1606,1608],{"class":515,"line":1607},37,[513,1609,776],{"emptyLinePlaceholder":775},[513,1611,1613],{"class":515,"line":1612},38,[513,1614,1615],{"class":1201},"# 初始化 MultiModal Reader\n",[513,1617,1619,1622,1624,1627,1629,1632],{"class":515,"line":1618},39,[513,1620,1621],{"class":751},"multimodal_reader ",[513,1623,785],{"class":522},[513,1625,1626],{"class":519}," MultiModalStructMemReader",[513,1628,523],{"class":522},[513,1630,1631],{"class":519},"multimodal_config",[513,1633,534],{"class":522},[513,1635,1637],{"class":515,"line":1636},40,[513,1638,776],{"emptyLinePlaceholder":775},[513,1640,1642],{"class":515,"line":1641},41,[513,1643,1644],{"class":1201},"# ========================================\n",[513,1646,1648],{"class":515,"line":1647},42,[513,1649,1650],{"class":1201},"# 示例 1: 处理包含图片的对话\n",[513,1652,1654],{"class":515,"line":1653},43,[513,1655,1644],{"class":1201},[513,1657,1659,1662,1664],{"class":515,"line":1658},44,[513,1660,1661],{"class":751},"scene_with_image ",[513,1663,785],{"class":522},[513,1665,942],{"class":522},[513,1667,1669],{"class":515,"line":1668},45,[513,1670,1671],{"class":522},"    {\n",[513,1673,1675,1677,1679,1681,1683,1685,1687,1689],{"class":515,"line":1674},46,[513,1676,1228],{"class":522},[513,1678,953],{"class":800},[513,1680,797],{"class":522},[513,1682,173],{"class":522},[513,1684,960],{"class":522},[513,1686,963],{"class":800},[513,1688,797],{"class":522},[513,1690,1245],{"class":522},[513,1692,1694,1696,1698,1700,1702],{"class":515,"line":1693},47,[513,1695,1228],{"class":522},[513,1697,973],{"class":800},[513,1699,797],{"class":522},[513,1701,173],{"class":522},[513,1703,1704],{"class":522}," [\n",[513,1706,1708,1711,1713,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1736,1738,1741,1743],{"class":515,"line":1707},48,[513,1709,1710],{"class":522},"            {",[513,1712,797],{"class":522},[513,1714,1715],{"class":800},"type",[513,1717,797],{"class":522},[513,1719,173],{"class":522},[513,1721,960],{"class":522},[513,1723,695],{"class":800},[513,1725,797],{"class":522},[513,1727,968],{"class":522},[513,1729,960],{"class":522},[513,1731,695],{"class":800},[513,1733,797],{"class":522},[513,1735,173],{"class":522},[513,1737,960],{"class":522},[513,1739,1740],{"class":800},"这是我家的花园",[513,1742,797],{"class":522},[513,1744,987],{"class":522},[513,1746,1748,1750,1752,1754,1756,1758,1760,1763,1765,1767,1769,1771,1773,1775,1778,1780,1783,1785,1787,1789,1792,1794],{"class":515,"line":1747},49,[513,1749,1710],{"class":522},[513,1751,797],{"class":522},[513,1753,1715],{"class":800},[513,1755,797],{"class":522},[513,1757,173],{"class":522},[513,1759,960],{"class":522},[513,1761,1762],{"class":800},"image_url",[513,1764,797],{"class":522},[513,1766,968],{"class":522},[513,1768,960],{"class":522},[513,1770,1762],{"class":800},[513,1772,797],{"class":522},[513,1774,173],{"class":522},[513,1776,1777],{"class":522}," {",[513,1779,797],{"class":522},[513,1781,1782],{"class":800},"url",[513,1784,797],{"class":522},[513,1786,173],{"class":522},[513,1788,960],{"class":522},[513,1790,1791],{"class":800},"https:\u002F\u002Fexample.com\u002Fgarden.jpg",[513,1793,797],{"class":522},[513,1795,1796],{"class":522},"}}\n",[513,1798,1800],{"class":515,"line":1799},50,[513,1801,1802],{"class":522},"        ]\n",[513,1804,1806],{"class":515,"line":1805},51,[513,1807,1308],{"class":522},[513,1809,1811],{"class":515,"line":1810},52,[513,1812,1671],{"class":522},[513,1814,1816,1818,1820,1822,1824,1826,1828,1830],{"class":515,"line":1815},53,[513,1817,1228],{"class":522},[513,1819,953],{"class":800},[513,1821,797],{"class":522},[513,1823,173],{"class":522},[513,1825,960],{"class":522},[513,1827,1005],{"class":800},[513,1829,797],{"class":522},[513,1831,1245],{"class":522},[513,1833,1835,1837,1839,1841,1843,1845,1848],{"class":515,"line":1834},54,[513,1836,1228],{"class":522},[513,1838,973],{"class":800},[513,1840,797],{"class":522},[513,1842,173],{"class":522},[513,1844,960],{"class":522},[513,1846,1847],{"class":800},"你的花园很漂亮！",[513,1849,1298],{"class":522},[513,1851,1853],{"class":515,"line":1852},55,[513,1854,1855],{"class":522},"    }\n",[513,1857,1859],{"class":515,"line":1858},56,[513,1860,1033],{"class":522},[513,1862,1864],{"class":515,"line":1863},57,[513,1865,776],{"emptyLinePlaceholder":775},[513,1867,1869,1871,1873,1876,1878,1880],{"class":515,"line":1868},58,[513,1870,1044],{"class":751},[513,1872,785],{"class":522},[513,1874,1875],{"class":751}," multimodal_reader",[513,1877,755],{"class":522},[513,1879,1054],{"class":519},[513,1881,1215],{"class":522},[513,1883,1885,1888],{"class":515,"line":1884},59,[513,1886,1887],{"class":519},"    scene_with_image",[513,1889,1245],{"class":522},[513,1891,1893,1896,1898,1900,1902,1904],{"class":515,"line":1892},60,[513,1894,1895],{"class":1064},"    type",[513,1897,785],{"class":522},[513,1899,797],{"class":522},[513,1901,1072],{"class":800},[513,1903,797],{"class":522},[513,1905,1245],{"class":522},[513,1907,1909,1912,1914,1916,1918,1920,1922,1924,1926,1928,1930,1932,1935,1937,1939,1941,1944,1946],{"class":515,"line":1908},61,[513,1910,1911],{"class":1064},"    info",[513,1913,1082],{"class":522},[513,1915,797],{"class":522},[513,1917,1087],{"class":800},[513,1919,797],{"class":522},[513,1921,173],{"class":522},[513,1923,960],{"class":522},[513,1925,1096],{"class":800},[513,1927,797],{"class":522},[513,1929,968],{"class":522},[513,1931,960],{"class":522},[513,1933,1934],{"class":800},"session_id",[513,1936,797],{"class":522},[513,1938,173],{"class":522},[513,1940,960],{"class":522},[513,1942,1943],{"class":800},"session_001",[513,1945,797],{"class":522},[513,1947,1027],{"class":522},[513,1949,1951],{"class":515,"line":1950},62,[513,1952,534],{"class":522},[513,1954,1956,1958,1960,1962,1964],{"class":515,"line":1955},63,[513,1957,1107],{"class":747},[513,1959,1110],{"class":751},[513,1961,1113],{"class":747},[513,1963,1116],{"class":751},[513,1965,1119],{"class":522},[513,1967,1969,1971,1973,1975,1977,1979],{"class":515,"line":1968},64,[513,1970,1125],{"class":751},[513,1972,755],{"class":522},[513,1974,1130],{"class":519},[513,1976,523],{"class":522},[513,1978,1135],{"class":519},[513,1980,534],{"class":522},[513,1982,1984,1987,1989,1993,1996,1999,2002,2004,2006,2008,2011,2014],{"class":515,"line":1983},65,[513,1985,1986],{"class":519},"print",[513,1988,523],{"class":522},[513,1990,1992],{"class":1991},"spNyl","f",[513,1994,1995],{"class":800},"\"✓ 已添加 ",[513,1997,1998],{"class":1451},"{",[513,2000,2001],{"class":519},"len",[513,2003,523],{"class":522},[513,2005,824],{"class":519},[513,2007,201],{"class":522},[513,2009,2010],{"class":1451},"}",[513,2012,2013],{"class":800}," 条多模态记忆\"",[513,2015,534],{"class":522},[513,2017,2019],{"class":515,"line":2018},66,[513,2020,776],{"emptyLinePlaceholder":775},[513,2022,2024],{"class":515,"line":2023},67,[513,2025,1644],{"class":1201},[513,2027,2029],{"class":515,"line":2028},68,[513,2030,2031],{"class":1201},"# 示例 2: 处理网页 URL\n",[513,2033,2035],{"class":515,"line":2034},69,[513,2036,1644],{"class":1201},[513,2038,2040,2043,2045],{"class":515,"line":2039},70,[513,2041,2042],{"class":751},"scene_with_url ",[513,2044,785],{"class":522},[513,2046,942],{"class":522},[513,2048,2050],{"class":515,"line":2049},71,[513,2051,1671],{"class":522},[513,2053,2055,2057,2059,2061,2063,2065,2067,2069],{"class":515,"line":2054},72,[513,2056,1228],{"class":522},[513,2058,953],{"class":800},[513,2060,797],{"class":522},[513,2062,173],{"class":522},[513,2064,960],{"class":522},[513,2066,963],{"class":800},[513,2068,797],{"class":522},[513,2070,1245],{"class":522},[513,2072,2074,2076,2078,2080,2082,2084,2087],{"class":515,"line":2073},73,[513,2075,1228],{"class":522},[513,2077,973],{"class":800},[513,2079,797],{"class":522},[513,2081,173],{"class":522},[513,2083,960],{"class":522},[513,2085,2086],{"class":800},"请分析这篇文章: https:\u002F\u002Fexample.com\u002Farticle.html",[513,2088,1298],{"class":522},[513,2090,2092],{"class":515,"line":2091},74,[513,2093,1308],{"class":522},[513,2095,2097],{"class":515,"line":2096},75,[513,2098,1671],{"class":522},[513,2100,2102,2104,2106,2108,2110,2112,2114,2116],{"class":515,"line":2101},76,[513,2103,1228],{"class":522},[513,2105,953],{"class":800},[513,2107,797],{"class":522},[513,2109,173],{"class":522},[513,2111,960],{"class":522},[513,2113,1005],{"class":800},[513,2115,797],{"class":522},[513,2117,1245],{"class":522},[513,2119,2121,2123,2125,2127,2129,2131,2134],{"class":515,"line":2120},77,[513,2122,1228],{"class":522},[513,2124,973],{"class":800},[513,2126,797],{"class":522},[513,2128,173],{"class":522},[513,2130,960],{"class":522},[513,2132,2133],{"class":800},"我会帮你分析这篇文章",[513,2135,1298],{"class":522},[513,2137,2139],{"class":515,"line":2138},78,[513,2140,1855],{"class":522},[513,2142,2144],{"class":515,"line":2143},79,[513,2145,1033],{"class":522},[513,2147,2149],{"class":515,"line":2148},80,[513,2150,776],{"emptyLinePlaceholder":775},[513,2152,2154,2157,2159,2161,2163,2165],{"class":515,"line":2153},81,[513,2155,2156],{"class":751},"url_memories ",[513,2158,785],{"class":522},[513,2160,1875],{"class":751},[513,2162,755],{"class":522},[513,2164,1054],{"class":519},[513,2166,1215],{"class":522},[513,2168,2170,2173],{"class":515,"line":2169},82,[513,2171,2172],{"class":519},"    scene_with_url",[513,2174,1245],{"class":522},[513,2176,2178,2180,2182,2184,2186,2188],{"class":515,"line":2177},83,[513,2179,1895],{"class":1064},[513,2181,785],{"class":522},[513,2183,797],{"class":522},[513,2185,1072],{"class":800},[513,2187,797],{"class":522},[513,2189,1245],{"class":522},[513,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2211,2213,2215,2217,2219,2221,2223,2226,2228],{"class":515,"line":2192},84,[513,2194,1911],{"class":1064},[513,2196,1082],{"class":522},[513,2198,797],{"class":522},[513,2200,1087],{"class":800},[513,2202,797],{"class":522},[513,2204,173],{"class":522},[513,2206,960],{"class":522},[513,2208,1096],{"class":800},[513,2210,797],{"class":522},[513,2212,968],{"class":522},[513,2214,960],{"class":522},[513,2216,1934],{"class":800},[513,2218,797],{"class":522},[513,2220,173],{"class":522},[513,2222,960],{"class":522},[513,2224,2225],{"class":800},"session_002",[513,2227,797],{"class":522},[513,2229,1027],{"class":522},[513,2231,2233],{"class":515,"line":2232},85,[513,2234,534],{"class":522},[513,2236,2238,2240,2242,2244,2247],{"class":515,"line":2237},86,[513,2239,1107],{"class":747},[513,2241,1110],{"class":751},[513,2243,1113],{"class":747},[513,2245,2246],{"class":751}," url_memories",[513,2248,1119],{"class":522},[513,2250,2252,2254,2256,2258,2260,2262],{"class":515,"line":2251},87,[513,2253,1125],{"class":751},[513,2255,755],{"class":522},[513,2257,1130],{"class":519},[513,2259,523],{"class":522},[513,2261,1135],{"class":519},[513,2263,534],{"class":522},[513,2265,2267,2269,2271,2273,2276,2278,2280,2282,2285,2287,2289,2292],{"class":515,"line":2266},88,[513,2268,1986],{"class":519},[513,2270,523],{"class":522},[513,2272,1992],{"class":1991},[513,2274,2275],{"class":800},"\"✓ 已从 URL 提取并添加 ",[513,2277,1998],{"class":1451},[513,2279,2001],{"class":519},[513,2281,523],{"class":522},[513,2283,2284],{"class":519},"url_memories",[513,2286,201],{"class":522},[513,2288,2010],{"class":1451},[513,2290,2291],{"class":800}," 条记忆\"",[513,2293,534],{"class":522},[513,2295,2297],{"class":515,"line":2296},89,[513,2298,776],{"emptyLinePlaceholder":775},[513,2300,2302],{"class":515,"line":2301},90,[513,2303,1644],{"class":1201},[513,2305,2307],{"class":515,"line":2306},91,[513,2308,2309],{"class":1201},"# 示例 3: 处理本地文件\n",[513,2311,2313],{"class":515,"line":2312},92,[513,2314,1644],{"class":1201},[513,2316,2318],{"class":515,"line":2317},93,[513,2319,2320],{"class":1201},"# 支持的文件类型: PDF, DOCX, TXT, Markdown, HTML 等\n",[513,2322,2324,2327,2329],{"class":515,"line":2323},94,[513,2325,2326],{"class":751},"file_paths ",[513,2328,785],{"class":522},[513,2330,1704],{"class":522},[513,2332,2334,2337,2340,2342],{"class":515,"line":2333},95,[513,2335,2336],{"class":522},"    \"",[513,2338,2339],{"class":800},".\u002Fdocuments\u002Freport.pdf",[513,2341,797],{"class":522},[513,2343,1245],{"class":522},[513,2345,2347,2349,2352,2354],{"class":515,"line":2346},96,[513,2348,2336],{"class":522},[513,2350,2351],{"class":800},".\u002Fdocuments\u002Fnotes.md",[513,2353,797],{"class":522},[513,2355,1245],{"class":522},[513,2357,2359,2361,2364],{"class":515,"line":2358},97,[513,2360,2336],{"class":522},[513,2362,2363],{"class":800},".\u002Fdocuments\u002Fdata.txt",[513,2365,1298],{"class":522},[513,2367,2369],{"class":515,"line":2368},98,[513,2370,1599],{"class":522},[513,2372,2374],{"class":515,"line":2373},99,[513,2375,776],{"emptyLinePlaceholder":775},[513,2377,2379,2382,2384,2386,2388,2390],{"class":515,"line":2378},100,[513,2380,2381],{"class":751},"file_memories ",[513,2383,785],{"class":522},[513,2385,1875],{"class":751},[513,2387,755],{"class":522},[513,2389,1054],{"class":519},[513,2391,1215],{"class":522},[513,2393,2395,2398],{"class":515,"line":2394},101,[513,2396,2397],{"class":519},"    file_paths",[513,2399,1245],{"class":522},[513,2401,2403,2405,2407,2409,2412,2414],{"class":515,"line":2402},102,[513,2404,1895],{"class":1064},[513,2406,785],{"class":522},[513,2408,797],{"class":522},[513,2410,2411],{"class":800},"doc",[513,2413,797],{"class":522},[513,2415,1245],{"class":522},[513,2417,2419,2421,2423,2425,2427,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2449,2452,2454],{"class":515,"line":2418},103,[513,2420,1911],{"class":1064},[513,2422,1082],{"class":522},[513,2424,797],{"class":522},[513,2426,1087],{"class":800},[513,2428,797],{"class":522},[513,2430,173],{"class":522},[513,2432,960],{"class":522},[513,2434,1096],{"class":800},[513,2436,797],{"class":522},[513,2438,968],{"class":522},[513,2440,960],{"class":522},[513,2442,1934],{"class":800},[513,2444,797],{"class":522},[513,2446,173],{"class":522},[513,2448,960],{"class":522},[513,2450,2451],{"class":800},"session_003",[513,2453,797],{"class":522},[513,2455,1027],{"class":522},[513,2457,2459],{"class":515,"line":2458},104,[513,2460,534],{"class":522},[513,2462,2464,2466,2468,2470,2473],{"class":515,"line":2463},105,[513,2465,1107],{"class":747},[513,2467,1110],{"class":751},[513,2469,1113],{"class":747},[513,2471,2472],{"class":751}," file_memories",[513,2474,1119],{"class":522},[513,2476,2478,2480,2482,2484,2486,2488],{"class":515,"line":2477},106,[513,2479,1125],{"class":751},[513,2481,755],{"class":522},[513,2483,1130],{"class":519},[513,2485,523],{"class":522},[513,2487,1135],{"class":519},[513,2489,534],{"class":522},[513,2491,2493,2495,2497,2499,2502,2504,2506,2508,2511,2513,2515,2517],{"class":515,"line":2492},107,[513,2494,1986],{"class":519},[513,2496,523],{"class":522},[513,2498,1992],{"class":1991},[513,2500,2501],{"class":800},"\"✓ 已从文件提取并添加 ",[513,2503,1998],{"class":1451},[513,2505,2001],{"class":519},[513,2507,523],{"class":522},[513,2509,2510],{"class":519},"file_memories",[513,2512,201],{"class":522},[513,2514,2010],{"class":1451},[513,2516,2291],{"class":800},[513,2518,534],{"class":522},[513,2520,2522],{"class":515,"line":2521},108,[513,2523,776],{"emptyLinePlaceholder":775},[513,2525,2527],{"class":515,"line":2526},109,[513,2528,1644],{"class":1201},[513,2530,2532],{"class":515,"line":2531},110,[513,2533,2534],{"class":1201},"# 示例 4: 混合模式（文本 + 图片 + URL）\n",[513,2536,2538],{"class":515,"line":2537},111,[513,2539,1644],{"class":1201},[513,2541,2543,2546,2548],{"class":515,"line":2542},112,[513,2544,2545],{"class":751},"mixed_scene ",[513,2547,785],{"class":522},[513,2549,942],{"class":522},[513,2551,2553],{"class":515,"line":2552},113,[513,2554,1671],{"class":522},[513,2556,2558,2560,2562,2564,2566,2568,2570,2572],{"class":515,"line":2557},114,[513,2559,1228],{"class":522},[513,2561,953],{"class":800},[513,2563,797],{"class":522},[513,2565,173],{"class":522},[513,2567,960],{"class":522},[513,2569,963],{"class":800},[513,2571,797],{"class":522},[513,2573,1245],{"class":522},[513,2575,2577,2579,2581,2583,2585],{"class":515,"line":2576},115,[513,2578,1228],{"class":522},[513,2580,973],{"class":800},[513,2582,797],{"class":522},[513,2584,173],{"class":522},[513,2586,1704],{"class":522},[513,2588,2590,2592,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2621,2623],{"class":515,"line":2589},116,[513,2591,1710],{"class":522},[513,2593,797],{"class":522},[513,2595,1715],{"class":800},[513,2597,797],{"class":522},[513,2599,173],{"class":522},[513,2601,960],{"class":522},[513,2603,695],{"class":800},[513,2605,797],{"class":522},[513,2607,968],{"class":522},[513,2609,960],{"class":522},[513,2611,695],{"class":800},[513,2613,797],{"class":522},[513,2615,173],{"class":522},[513,2617,960],{"class":522},[513,2619,2620],{"class":800},"这是我的项目文档:",[513,2622,797],{"class":522},[513,2624,987],{"class":522},[513,2626,2628,2630,2632,2634,2636,2638,2640,2642,2644,2646,2648,2650,2652,2654,2656,2659,2661],{"class":515,"line":2627},117,[513,2629,1710],{"class":522},[513,2631,797],{"class":522},[513,2633,1715],{"class":800},[513,2635,797],{"class":522},[513,2637,173],{"class":522},[513,2639,960],{"class":522},[513,2641,695],{"class":800},[513,2643,797],{"class":522},[513,2645,968],{"class":522},[513,2647,960],{"class":522},[513,2649,695],{"class":800},[513,2651,797],{"class":522},[513,2653,173],{"class":522},[513,2655,960],{"class":522},[513,2657,2658],{"class":800},"https:\u002F\u002Fgithub.com\u002Fuser\u002Fproject\u002FREADME.md",[513,2660,797],{"class":522},[513,2662,987],{"class":522},[513,2664,2666,2668,2670,2672,2674,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698,2700,2702,2704,2707,2709],{"class":515,"line":2665},118,[513,2667,1710],{"class":522},[513,2669,797],{"class":522},[513,2671,1715],{"class":800},[513,2673,797],{"class":522},[513,2675,173],{"class":522},[513,2677,960],{"class":522},[513,2679,1762],{"class":800},[513,2681,797],{"class":522},[513,2683,968],{"class":522},[513,2685,960],{"class":522},[513,2687,1762],{"class":800},[513,2689,797],{"class":522},[513,2691,173],{"class":522},[513,2693,1777],{"class":522},[513,2695,797],{"class":522},[513,2697,1782],{"class":800},[513,2699,797],{"class":522},[513,2701,173],{"class":522},[513,2703,960],{"class":522},[513,2705,2706],{"class":800},"https:\u002F\u002Fexample.com\u002Fdiagram.png",[513,2708,797],{"class":522},[513,2710,1796],{"class":522},[513,2712,2714],{"class":515,"line":2713},119,[513,2715,1802],{"class":522},[513,2717,2719],{"class":515,"line":2718},120,[513,2720,1855],{"class":522},[513,2722,2724],{"class":515,"line":2723},121,[513,2725,1033],{"class":522},[513,2727,2729],{"class":515,"line":2728},122,[513,2730,776],{"emptyLinePlaceholder":775},[513,2732,2734,2737,2739,2741,2743,2745],{"class":515,"line":2733},123,[513,2735,2736],{"class":751},"mixed_memories ",[513,2738,785],{"class":522},[513,2740,1875],{"class":751},[513,2742,755],{"class":522},[513,2744,1054],{"class":519},[513,2746,1215],{"class":522},[513,2748,2750,2753],{"class":515,"line":2749},124,[513,2751,2752],{"class":519},"    mixed_scene",[513,2754,1245],{"class":522},[513,2756,2758,2760,2762,2764,2766,2768],{"class":515,"line":2757},125,[513,2759,1895],{"class":1064},[513,2761,785],{"class":522},[513,2763,797],{"class":522},[513,2765,1072],{"class":800},[513,2767,797],{"class":522},[513,2769,1245],{"class":522},[513,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2806,2808],{"class":515,"line":2772},126,[513,2774,1911],{"class":1064},[513,2776,1082],{"class":522},[513,2778,797],{"class":522},[513,2780,1087],{"class":800},[513,2782,797],{"class":522},[513,2784,173],{"class":522},[513,2786,960],{"class":522},[513,2788,1096],{"class":800},[513,2790,797],{"class":522},[513,2792,968],{"class":522},[513,2794,960],{"class":522},[513,2796,1934],{"class":800},[513,2798,797],{"class":522},[513,2800,173],{"class":522},[513,2802,960],{"class":522},[513,2804,2805],{"class":800},"session_004",[513,2807,797],{"class":522},[513,2809,1027],{"class":522},[513,2811,2813],{"class":515,"line":2812},127,[513,2814,534],{"class":522},[513,2816,2818,2820,2822,2824,2827],{"class":515,"line":2817},128,[513,2819,1107],{"class":747},[513,2821,1110],{"class":751},[513,2823,1113],{"class":747},[513,2825,2826],{"class":751}," mixed_memories",[513,2828,1119],{"class":522},[513,2830,2832,2834,2836,2838,2840,2842],{"class":515,"line":2831},129,[513,2833,1125],{"class":751},[513,2835,755],{"class":522},[513,2837,1130],{"class":519},[513,2839,523],{"class":522},[513,2841,1135],{"class":519},[513,2843,534],{"class":522},[513,2845,2847,2849,2851,2853,2856,2858,2860,2862,2865,2867,2869,2871],{"class":515,"line":2846},130,[513,2848,1986],{"class":519},[513,2850,523],{"class":522},[513,2852,1992],{"class":1991},[513,2854,2855],{"class":800},"\"✓ 已从混合内容提取并添加 ",[513,2857,1998],{"class":1451},[513,2859,2001],{"class":519},[513,2861,523],{"class":522},[513,2863,2864],{"class":519},"mixed_memories",[513,2866,201],{"class":522},[513,2868,2010],{"class":1451},[513,2870,2291],{"class":800},[513,2872,534],{"class":522},[2874,2875,2877,2884],"alert",{"type":2876},"info",[128,2878,2879,2882],{},[140,2880,2881],{},"MultiModal Reader 优势",[452,2883],{},[15,2885,2886,2894,2902,2910,2918],{},[18,2887,2888,2891,2892],{},[140,2889,2890],{},"智能路由","：自动识别内容类型（图片\u002FURL\u002F文件）并选择合适的解析器",[452,2893],{},[18,2895,2896,2899,2900],{},[140,2897,2898],{},"格式支持","：支持 PDF、DOCX、Markdown、HTML、图片等多种格式",[452,2901],{},[18,2903,2904,2907,2908],{},[140,2905,2906],{},"URL 解析","：自动提取网页内容（包括 GitHub、文档站点等）",[452,2909],{},[18,2911,2912,2915,2916],{},[140,2913,2914],{},"大文件处理","：自动分块处理超大文件，避免 token 超限",[452,2917],{},[18,2919,2920,2923],{},[140,2921,2922],{},"上下文保持","：使用滑动窗口保持分块间的上下文连续性",[444,2925,2926,2933],{},[128,2927,2928,2931],{},[140,2929,2930],{},"配置提示",[452,2932],{},[15,2934,2935,2944,2957],{},[18,2936,2937,2938,2941,2942],{},"使用 ",[166,2939,2940],{},"direct_markdown_hostnames"," 参数可以指定哪些域名直接返回 Markdown 格式",[452,2943],{},[18,2945,2946,2947,2950,2951,2954,2955],{},"支持 ",[166,2948,2949],{},"mode=\"fast\""," 和 ",[166,2952,2953],{},"mode=\"fine\""," 两种提取模式，fine 模式提取更详细",[452,2956],{},[18,2958,2959,2960],{},"查看完整示例: ",[166,2961,2962],{},"\u002Fexamples\u002Fmem_reader\u002Fmultimodal_struct_reader.py",[160,2964,88],{"id":88},[128,2966,2967],{},"尝试向量搜索+图搜索:",[504,2969,2971],{"className":506,"code":2970,"language":508,"meta":509,"style":509},"results = tree_memory.search(\"Talk about the garden\", top_k=5)\nfor i, node in enumerate(results):\n    print(f\"{i}: {node.memory}\")\n",[166,2972,2973,3009,3034],{"__ignoreMap":509},[513,2974,2975,2978,2980,2983,2985,2988,2990,2992,2995,2997,2999,3002,3004,3007],{"class":515,"line":516},[513,2976,2977],{"class":751},"results ",[513,2979,785],{"class":522},[513,2981,2982],{"class":751}," tree_memory",[513,2984,755],{"class":522},[513,2986,2987],{"class":519},"search",[513,2989,523],{"class":522},[513,2991,797],{"class":522},[513,2993,2994],{"class":800},"Talk about the garden",[513,2996,797],{"class":522},[513,2998,968],{"class":522},[513,3000,3001],{"class":1064}," top_k",[513,3003,785],{"class":522},[513,3005,3006],{"class":1451},"5",[513,3008,534],{"class":522},[513,3010,3011,3013,3016,3018,3021,3023,3026,3028,3031],{"class":515,"line":772},[513,3012,1107],{"class":747},[513,3014,3015],{"class":751}," i",[513,3017,968],{"class":522},[513,3019,3020],{"class":751}," node ",[513,3022,1113],{"class":747},[513,3024,3025],{"class":519}," enumerate",[513,3027,523],{"class":522},[513,3029,3030],{"class":519},"results",[513,3032,3033],{"class":522},"):\n",[513,3035,3036,3039,3041,3043,3045,3047,3050,3052,3055,3057,3060,3062,3065,3067,3069],{"class":515,"line":779},[513,3037,3038],{"class":519},"    print",[513,3040,523],{"class":522},[513,3042,1992],{"class":1991},[513,3044,797],{"class":800},[513,3046,1998],{"class":1451},[513,3048,3049],{"class":519},"i",[513,3051,2010],{"class":1451},[513,3053,3054],{"class":800},": ",[513,3056,1998],{"class":1451},[513,3058,3059],{"class":519},"node",[513,3061,755],{"class":522},[513,3063,186],{"class":3064},"swJcz",[513,3066,2010],{"class":1451},[513,3068,797],{"class":800},[513,3070,534],{"class":522},[160,3072,94],{"id":3073},"从互联网检索记忆可选",[128,3075,3076],{},"你也可以从 Google \u002F Bing \u002F Bocha（博查） 等搜索引擎实时获取网页内容，并自动切分为记忆节点。MemOS 提供了统一接口。",[128,3078,3079],{},"以下示例演示如何检索“Alibaba 2024 ESG report”相关网页，并自动提取为结构化记忆。",[504,3081,3083],{"className":506,"code":3082,"language":508,"meta":509,"style":509},"\n# 创建embedder\nembedder = EmbedderFactory.from_config(\n    EmbedderConfigFactory.model_validate({\n        \"backend\": \"ollama\",\n        \"config\": {\"model_name_or_path\": \"nomic-embed-text:latest\"},\n    })\n)\n\n# 配置检索器（以 BochaAI 为例）\nretriever_config = InternetRetrieverConfigFactory.model_validate({\n    \"backend\": \"bocha\",\n    \"config\": {\n        \"api_key\": \"sk-xxx\",  # 替换为你的 BochaAI API Key\n        \"max_results\": 5,\n        \"reader\": {  # 自动分块的 Reader 配置\n            \"backend\": \"simple_struct\",\n            \"config\": ...,  # 你的mem-reader config\n        },\n    }\n})\n\n# 实例化检索器\nretriever = InternetRetrieverFactory.from_config(retriever_config, embedder)\n\n# 执行网页检索\nresults = retriever.retrieve_from_internet(\"Alibaba 2024 ESG report\")\n\n# 添加到记忆图中\nfor m in results:\n    tree_memory.add(m)\n\n",[166,3084,3085,3089,3094,3111,3124,3143,3172,3177,3181,3185,3190,3206,3225,3237,3259,3275,3291,3310,3328,3333,3337,3341,3345,3350,3376,3380,3385,3410,3414,3419,3433],{"__ignoreMap":509},[513,3086,3087],{"class":515,"line":516},[513,3088,776],{"emptyLinePlaceholder":775},[513,3090,3091],{"class":515,"line":772},[513,3092,3093],{"class":1201},"# 创建embedder\n",[513,3095,3096,3099,3101,3104,3106,3109],{"class":515,"line":779},[513,3097,3098],{"class":751},"embedder ",[513,3100,785],{"class":522},[513,3102,3103],{"class":751}," EmbedderFactory",[513,3105,755],{"class":522},[513,3107,3108],{"class":519},"from_config",[513,3110,1215],{"class":522},[513,3112,3113,3116,3118,3121],{"class":515,"line":929},[513,3114,3115],{"class":519},"    EmbedderConfigFactory",[513,3117,755],{"class":522},[513,3119,3120],{"class":519},"model_validate",[513,3122,3123],{"class":522},"({\n",[513,3125,3126,3128,3130,3132,3134,3136,3139,3141],{"class":515,"line":934},[513,3127,1228],{"class":522},[513,3129,1231],{"class":800},[513,3131,797],{"class":522},[513,3133,173],{"class":522},[513,3135,960],{"class":522},[513,3137,3138],{"class":800},"ollama",[513,3140,797],{"class":522},[513,3142,1245],{"class":522},[513,3144,3145,3147,3149,3151,3153,3155,3157,3159,3161,3163,3165,3168,3170],{"class":515,"line":945},[513,3146,1228],{"class":522},[513,3148,526],{"class":800},[513,3150,797],{"class":522},[513,3152,173],{"class":522},[513,3154,1777],{"class":522},[513,3156,797],{"class":522},[513,3158,1266],{"class":800},[513,3160,797],{"class":522},[513,3162,173],{"class":522},[513,3164,960],{"class":522},[513,3166,3167],{"class":800},"nomic-embed-text:latest",[513,3169,797],{"class":522},[513,3171,987],{"class":522},[513,3173,3174],{"class":515,"line":990},[513,3175,3176],{"class":522},"    })\n",[513,3178,3179],{"class":515,"line":1030},[513,3180,534],{"class":522},[513,3182,3183],{"class":515,"line":1036},[513,3184,776],{"emptyLinePlaceholder":775},[513,3186,3187],{"class":515,"line":1041},[513,3188,3189],{"class":1201},"# 配置检索器（以 BochaAI 为例）\n",[513,3191,3192,3195,3197,3200,3202,3204],{"class":515,"line":1104},[513,3193,3194],{"class":751},"retriever_config ",[513,3196,785],{"class":522},[513,3198,3199],{"class":751}," InternetRetrieverConfigFactory",[513,3201,755],{"class":522},[513,3203,3120],{"class":519},[513,3205,3123],{"class":522},[513,3207,3208,3210,3212,3214,3216,3218,3221,3223],{"class":515,"line":1122},[513,3209,2336],{"class":522},[513,3211,1231],{"class":800},[513,3213,797],{"class":522},[513,3215,173],{"class":522},[513,3217,960],{"class":522},[513,3219,3220],{"class":800},"bocha",[513,3222,797],{"class":522},[513,3224,1245],{"class":522},[513,3226,3227,3229,3231,3233,3235],{"class":515,"line":1311},[513,3228,2336],{"class":522},[513,3230,526],{"class":800},[513,3232,797],{"class":522},[513,3234,173],{"class":522},[513,3236,1258],{"class":522},[513,3238,3239,3241,3243,3245,3247,3249,3252,3254,3256],{"class":515,"line":1319},[513,3240,1228],{"class":522},[513,3242,1286],{"class":800},[513,3244,797],{"class":522},[513,3246,173],{"class":522},[513,3248,960],{"class":522},[513,3250,3251],{"class":800},"sk-xxx",[513,3253,797],{"class":522},[513,3255,968],{"class":522},[513,3257,3258],{"class":1201},"  # 替换为你的 BochaAI API Key\n",[513,3260,3261,3263,3266,3268,3270,3273],{"class":515,"line":1338},[513,3262,1228],{"class":522},[513,3264,3265],{"class":800},"max_results",[513,3267,797],{"class":522},[513,3269,173],{"class":522},[513,3271,3272],{"class":1451}," 5",[513,3274,1245],{"class":522},[513,3276,3277,3279,3282,3284,3286,3288],{"class":515,"line":1351},[513,3278,1228],{"class":522},[513,3280,3281],{"class":800},"reader",[513,3283,797],{"class":522},[513,3285,173],{"class":522},[513,3287,1777],{"class":522},[513,3289,3290],{"class":1201},"  # 自动分块的 Reader 配置\n",[513,3292,3293,3295,3297,3299,3301,3303,3306,3308],{"class":515,"line":1371},[513,3294,1263],{"class":522},[513,3296,1231],{"class":800},[513,3298,797],{"class":522},[513,3300,173],{"class":522},[513,3302,960],{"class":522},[513,3304,3305],{"class":800},"simple_struct",[513,3307,797],{"class":522},[513,3309,1245],{"class":522},[513,3311,3312,3314,3316,3318,3320,3323,3325],{"class":515,"line":1388},[513,3313,1263],{"class":522},[513,3315,526],{"class":800},[513,3317,797],{"class":522},[513,3319,173],{"class":522},[513,3321,3322],{"class":519}," ...",[513,3324,968],{"class":522},[513,3326,3327],{"class":1201},"  # 你的mem-reader config\n",[513,3329,3330],{"class":515,"line":1393},[513,3331,3332],{"class":522},"        },\n",[513,3334,3335],{"class":515,"line":1398},[513,3336,1855],{"class":522},[513,3338,3339],{"class":515,"line":1406},[513,3340,1101],{"class":522},[513,3342,3343],{"class":515,"line":1426},[513,3344,776],{"emptyLinePlaceholder":775},[513,3346,3347],{"class":515,"line":1439},[513,3348,3349],{"class":1201},"# 实例化检索器\n",[513,3351,3352,3355,3357,3360,3362,3364,3366,3369,3371,3374],{"class":515,"line":1457},[513,3353,3354],{"class":751},"retriever ",[513,3356,785],{"class":522},[513,3358,3359],{"class":751}," InternetRetrieverFactory",[513,3361,755],{"class":522},[513,3363,3108],{"class":519},[513,3365,523],{"class":522},[513,3367,3368],{"class":519},"retriever_config",[513,3370,968],{"class":522},[513,3372,3373],{"class":519}," embedder",[513,3375,534],{"class":522},[513,3377,3378],{"class":515,"line":1472},[513,3379,776],{"emptyLinePlaceholder":775},[513,3381,3382],{"class":515,"line":1477},[513,3383,3384],{"class":1201},"# 执行网页检索\n",[513,3386,3387,3389,3391,3394,3396,3399,3401,3403,3406,3408],{"class":515,"line":1482},[513,3388,2977],{"class":751},[513,3390,785],{"class":522},[513,3392,3393],{"class":751}," retriever",[513,3395,755],{"class":522},[513,3397,3398],{"class":519},"retrieve_from_internet",[513,3400,523],{"class":522},[513,3402,797],{"class":522},[513,3404,3405],{"class":800},"Alibaba 2024 ESG report",[513,3407,797],{"class":522},[513,3409,534],{"class":522},[513,3411,3412],{"class":515,"line":1490},[513,3413,776],{"emptyLinePlaceholder":775},[513,3415,3416],{"class":515,"line":1509},[513,3417,3418],{"class":1201},"# 添加到记忆图中\n",[513,3420,3421,3423,3426,3428,3431],{"class":515,"line":1522},[513,3422,1107],{"class":747},[513,3424,3425],{"class":751}," m ",[513,3427,1113],{"class":747},[513,3429,3430],{"class":751}," results",[513,3432,1119],{"class":522},[513,3434,3435,3437,3439,3441,3443,3446],{"class":515,"line":1541},[513,3436,1125],{"class":751},[513,3438,755],{"class":522},[513,3440,1130],{"class":519},[513,3442,523],{"class":522},[513,3444,3445],{"class":519},"m",[513,3447,534],{"class":522},[128,3449,3450],{},"你也可以直接在 TreeTextMemoryConfig 中配置 internet_retriever 字段，例如：",[504,3452,3456],{"className":3453,"code":3454,"language":3455,"meta":509,"style":509},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"internet_retriever\": {\n    \"backend\": \"bocha\",\n    \"config\": {\n      \"api_key\": \"sk-xxx\",\n      \"max_results\": 5,\n      \"reader\": {\n        \"backend\": \"simple_struct\",\n        \"config\": ...\n      }\n    }\n  }\n}\n","json",[166,3457,3458,3463,3477,3496,3508,3527,3541,3553,3571,3584,3589,3593,3598],{"__ignoreMap":509},[513,3459,3460],{"class":515,"line":516},[513,3461,3462],{"class":522},"{\n",[513,3464,3465,3468,3471,3473,3475],{"class":515,"line":772},[513,3466,3467],{"class":522},"  \"",[513,3469,3470],{"class":1991},"internet_retriever",[513,3472,797],{"class":522},[513,3474,173],{"class":522},[513,3476,1258],{"class":522},[513,3478,3479,3481,3484,3486,3488,3490,3492,3494],{"class":515,"line":779},[513,3480,2336],{"class":522},[513,3482,1231],{"class":3483},"sBMFI",[513,3485,797],{"class":522},[513,3487,173],{"class":522},[513,3489,960],{"class":522},[513,3491,3220],{"class":800},[513,3493,797],{"class":522},[513,3495,1245],{"class":522},[513,3497,3498,3500,3502,3504,3506],{"class":515,"line":929},[513,3499,2336],{"class":522},[513,3501,526],{"class":3483},[513,3503,797],{"class":522},[513,3505,173],{"class":522},[513,3507,1258],{"class":522},[513,3509,3510,3513,3515,3517,3519,3521,3523,3525],{"class":515,"line":934},[513,3511,3512],{"class":522},"      \"",[513,3514,1286],{"class":1451},[513,3516,797],{"class":522},[513,3518,173],{"class":522},[513,3520,960],{"class":522},[513,3522,3251],{"class":800},[513,3524,797],{"class":522},[513,3526,1245],{"class":522},[513,3528,3529,3531,3533,3535,3537,3539],{"class":515,"line":945},[513,3530,3512],{"class":522},[513,3532,3265],{"class":1451},[513,3534,797],{"class":522},[513,3536,173],{"class":522},[513,3538,3272],{"class":1451},[513,3540,1245],{"class":522},[513,3542,3543,3545,3547,3549,3551],{"class":515,"line":990},[513,3544,3512],{"class":522},[513,3546,3281],{"class":1451},[513,3548,797],{"class":522},[513,3550,173],{"class":522},[513,3552,1258],{"class":522},[513,3554,3555,3557,3559,3561,3563,3565,3567,3569],{"class":515,"line":1030},[513,3556,1228],{"class":522},[513,3558,1231],{"class":3064},[513,3560,797],{"class":522},[513,3562,173],{"class":522},[513,3564,960],{"class":522},[513,3566,3305],{"class":800},[513,3568,797],{"class":522},[513,3570,1245],{"class":522},[513,3572,3573,3575,3577,3579,3581],{"class":515,"line":1036},[513,3574,1228],{"class":522},[513,3576,526],{"class":3064},[513,3578,797],{"class":522},[513,3580,173],{"class":522},[513,3582,3583],{"class":751}," ...\n",[513,3585,3586],{"class":515,"line":1041},[513,3587,3588],{"class":522},"      }\n",[513,3590,3591],{"class":515,"line":1104},[513,3592,1855],{"class":522},[513,3594,3595],{"class":515,"line":1122},[513,3596,3597],{"class":522},"  }\n",[513,3599,3600],{"class":515,"line":1311},[513,3601,1027],{"class":522},[128,3603,3604],{},"这样，在调用 tree_memory.search(query) 时，系统会自动调用互联网检索（如 BochaAI \u002F Google \u002F Bing）然后将结果与本地图中的节点一起排序返回，无需手动调用 retriever.retrieve_from_internet",[160,3606,100],{"id":100},[128,3608,3609,3610,173],{},"用一个新的节点替换你当前的 ",[166,3611,3612],{},"WorkingMemory",[504,3614,3616],{"className":506,"code":3615,"language":508,"meta":509,"style":509},"tree_memory.replace_working_memory(\n    [{\n        \"memory\": \"User is discussing gardening tips.\",\n        \"metadata\": {\"memory_type\": \"WorkingMemory\"}\n    }]\n)\n",[166,3617,3618,3630,3635,3654,3682,3687],{"__ignoreMap":509},[513,3619,3620,3623,3625,3628],{"class":515,"line":516},[513,3621,3622],{"class":751},"tree_memory",[513,3624,755],{"class":522},[513,3626,3627],{"class":519},"replace_working_memory",[513,3629,1215],{"class":522},[513,3631,3632],{"class":515,"line":772},[513,3633,3634],{"class":522},"    [{\n",[513,3636,3637,3639,3641,3643,3645,3647,3650,3652],{"class":515,"line":779},[513,3638,1228],{"class":522},[513,3640,186],{"class":800},[513,3642,797],{"class":522},[513,3644,173],{"class":522},[513,3646,960],{"class":522},[513,3648,3649],{"class":800},"User is discussing gardening tips.",[513,3651,797],{"class":522},[513,3653,1245],{"class":522},[513,3655,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674,3676,3678,3680],{"class":515,"line":929},[513,3657,1228],{"class":522},[513,3659,192],{"class":800},[513,3661,797],{"class":522},[513,3663,173],{"class":522},[513,3665,1777],{"class":522},[513,3667,797],{"class":522},[513,3669,231],{"class":800},[513,3671,797],{"class":522},[513,3673,173],{"class":522},[513,3675,960],{"class":522},[513,3677,3612],{"class":800},[513,3679,797],{"class":522},[513,3681,1027],{"class":522},[513,3683,3684],{"class":515,"line":934},[513,3685,3686],{"class":522},"    }]\n",[513,3688,3689],{"class":515,"line":945},[513,3690,534],{"class":522},[160,3692,106],{"id":106},[128,3694,3695],{},"支持树结构的持久化存储与随时重载:",[504,3697,3699],{"className":506,"code":3698,"language":508,"meta":509,"style":509},"tree_memory.dump(\"tmp\u002Ftree_memories\")\ntree_memory.load(\"tmp\u002Ftree_memories\")\n",[166,3700,3701,3721],{"__ignoreMap":509},[513,3702,3703,3705,3707,3710,3712,3714,3717,3719],{"class":515,"line":516},[513,3704,3622],{"class":751},[513,3706,755],{"class":522},[513,3708,3709],{"class":519},"dump",[513,3711,523],{"class":522},[513,3713,797],{"class":522},[513,3715,3716],{"class":800},"tmp\u002Ftree_memories",[513,3718,797],{"class":522},[513,3720,534],{"class":522},[513,3722,3723,3725,3727,3730,3732,3734,3736,3738],{"class":515,"line":772},[513,3724,3622],{"class":751},[513,3726,755],{"class":522},[513,3728,3729],{"class":519},"load",[513,3731,523],{"class":522},[513,3733,797],{"class":522},[513,3735,3716],{"class":800},[513,3737,797],{"class":522},[513,3739,534],{"class":522},[160,3741,112],{"id":112},[128,3743,3744],{},"该示例整合了上述所有步骤，提供一个端到端的完整流程 —— 复制即可运行！",[504,3746,3748],{"className":506,"code":3747,"language":508,"meta":509,"style":509},"from memos.configs.embedder import EmbedderConfigFactory\nfrom memos.configs.memory import TreeTextMemoryConfig\nfrom memos.configs.mem_reader import SimpleStructMemReaderConfig\nfrom memos.embedders.factory import EmbedderFactory\nfrom memos.mem_reader.simple_struct import SimpleStructMemReader\nfrom memos.memories.textual.tree import TreeTextMemory\n\n# 嵌入设置\nembedder_config = EmbedderConfigFactory.model_validate({\n    \"backend\": \"ollama\",\n    \"config\": {\"model_name_or_path\": \"nomic-embed-text:latest\"}\n})\nembedder = EmbedderFactory.from_config(embedder_config)\n\n# 创建TreeTextMemory\ntree_config = TreeTextMemoryConfig.from_json_file(\"examples\u002Fdata\u002Fconfig\u002Ftree_config.json\")\nmy_tree_textual_memory = TreeTextMemory(tree_config)\nmy_tree_textual_memory.delete_all()\n\n# 阅读器设置\nreader_config = SimpleStructMemReaderConfig.from_json_file(\n    \"examples\u002Fdata\u002Fconfig\u002Fsimple_struct_reader_config.json\"\n)\nreader = SimpleStructMemReader(reader_config)\n\n# 从对话中抽取\nscene_data = [[\n    {\n        \"role\": \"user\",\n        \"content\": \"Tell me about your childhood.\"\n    },\n    {\n        \"role\": \"assistant\",\n        \"content\": \"I loved playing in the garden with my dog.\"\n    },\n]]\nmemory = reader.get_memory(scene_data, type=\"chat\", info={\"user_id\": \"1234\", \"session_id\": \"2222\"})\nfor m_list in memory:\n    my_tree_textual_memory.add(m_list)\n\n# 搜索\nresults = my_tree_textual_memory.search(\n    \"Talk about the user's childhood story?\",\n    top_k=10\n)\nfor i, r in enumerate(results):\n    print(f\"{i}'th result: {r.memory}\")\n\n# 从文档添加[可选项]\ndoc_paths = [\".\u002Ftext1.txt\", \".\u002Ftext2.txt\"]\ndoc_memory = reader.get_memory(\n  doc_paths, \"doc\", info={\n      \"user_id\": \"your_user_id\",\n      \"session_id\": \"your_session_id\",\n  }\n)\nfor m_list in doc_memory:\n    my_tree_textual_memory.add(m_list)\n\n# 转储和丢弃[可选项]\nmy_tree_textual_memory.dump(\"tmp\u002Fmy_tree_textual_memory\")\nmy_tree_textual_memory.drop()\n",[166,3749,3750,3769,3787,3806,3827,3845,3867,3871,3876,3892,3910,3938,3942,3961,3965,3970,3993,4009,4022,4026,4031,4047,4055,4059,4074,4078,4083,4091,4095,4113,4129,4133,4137,4155,4171,4175,4179,4246,4259,4274,4278,4283,4298,4309,4319,4323,4344,4378,4382,4387,4415,4430,4449,4468,4487,4491,4495,4508,4522,4526,4531,4550],{"__ignoreMap":509},[513,3751,3752,3754,3756,3758,3760,3762,3764,3766],{"class":515,"line":516},[513,3753,748],{"class":747},[513,3755,752],{"class":751},[513,3757,755],{"class":522},[513,3759,758],{"class":751},[513,3761,755],{"class":522},[513,3763,3098],{"class":751},[513,3765,766],{"class":747},[513,3767,3768],{"class":751}," EmbedderConfigFactory\n",[513,3770,3771,3773,3775,3777,3779,3781,3783,3785],{"class":515,"line":772},[513,3772,748],{"class":747},[513,3774,752],{"class":751},[513,3776,755],{"class":522},[513,3778,758],{"class":751},[513,3780,755],{"class":522},[513,3782,763],{"class":751},[513,3784,766],{"class":747},[513,3786,769],{"class":751},[513,3788,3789,3791,3793,3795,3797,3799,3801,3803],{"class":515,"line":779},[513,3790,748],{"class":747},[513,3792,752],{"class":751},[513,3794,755],{"class":522},[513,3796,758],{"class":751},[513,3798,755],{"class":522},[513,3800,1167],{"class":751},[513,3802,766],{"class":747},[513,3804,3805],{"class":751}," SimpleStructMemReaderConfig\n",[513,3807,3808,3810,3812,3814,3817,3819,3822,3824],{"class":515,"line":929},[513,3809,748],{"class":747},[513,3811,752],{"class":751},[513,3813,755],{"class":522},[513,3815,3816],{"class":751},"embedders",[513,3818,755],{"class":522},[513,3820,3821],{"class":751},"factory ",[513,3823,766],{"class":747},[513,3825,3826],{"class":751}," EmbedderFactory\n",[513,3828,3829,3831,3833,3835,3837,3839,3841,3843],{"class":515,"line":934},[513,3830,748],{"class":747},[513,3832,752],{"class":751},[513,3834,755],{"class":522},[513,3836,887],{"class":751},[513,3838,755],{"class":522},[513,3840,892],{"class":751},[513,3842,766],{"class":747},[513,3844,897],{"class":751},[513,3846,3847,3849,3851,3853,3855,3857,3859,3861,3863,3865],{"class":515,"line":945},[513,3848,748],{"class":747},[513,3850,752],{"class":751},[513,3852,755],{"class":522},[513,3854,824],{"class":751},[513,3856,755],{"class":522},[513,3858,829],{"class":751},[513,3860,755],{"class":522},[513,3862,834],{"class":751},[513,3864,766],{"class":747},[513,3866,839],{"class":751},[513,3868,3869],{"class":515,"line":990},[513,3870,776],{"emptyLinePlaceholder":775},[513,3872,3873],{"class":515,"line":1030},[513,3874,3875],{"class":1201},"# 嵌入设置\n",[513,3877,3878,3881,3883,3886,3888,3890],{"class":515,"line":1036},[513,3879,3880],{"class":751},"embedder_config ",[513,3882,785],{"class":522},[513,3884,3885],{"class":751}," EmbedderConfigFactory",[513,3887,755],{"class":522},[513,3889,3120],{"class":519},[513,3891,3123],{"class":522},[513,3893,3894,3896,3898,3900,3902,3904,3906,3908],{"class":515,"line":1041},[513,3895,2336],{"class":522},[513,3897,1231],{"class":800},[513,3899,797],{"class":522},[513,3901,173],{"class":522},[513,3903,960],{"class":522},[513,3905,3138],{"class":800},[513,3907,797],{"class":522},[513,3909,1245],{"class":522},[513,3911,3912,3914,3916,3918,3920,3922,3924,3926,3928,3930,3932,3934,3936],{"class":515,"line":1104},[513,3913,2336],{"class":522},[513,3915,526],{"class":800},[513,3917,797],{"class":522},[513,3919,173],{"class":522},[513,3921,1777],{"class":522},[513,3923,797],{"class":522},[513,3925,1266],{"class":800},[513,3927,797],{"class":522},[513,3929,173],{"class":522},[513,3931,960],{"class":522},[513,3933,3167],{"class":800},[513,3935,797],{"class":522},[513,3937,1027],{"class":522},[513,3939,3940],{"class":515,"line":1122},[513,3941,1101],{"class":522},[513,3943,3944,3946,3948,3950,3952,3954,3956,3959],{"class":515,"line":1311},[513,3945,3098],{"class":751},[513,3947,785],{"class":522},[513,3949,3103],{"class":751},[513,3951,755],{"class":522},[513,3953,3108],{"class":519},[513,3955,523],{"class":522},[513,3957,3958],{"class":519},"embedder_config",[513,3960,534],{"class":522},[513,3962,3963],{"class":515,"line":1319},[513,3964,776],{"emptyLinePlaceholder":775},[513,3966,3967],{"class":515,"line":1338},[513,3968,3969],{"class":1201},"# 创建TreeTextMemory\n",[513,3971,3972,3975,3977,3979,3981,3983,3985,3987,3989,3991],{"class":515,"line":1351},[513,3973,3974],{"class":751},"tree_config ",[513,3976,785],{"class":522},[513,3978,531],{"class":751},[513,3980,755],{"class":522},[513,3982,792],{"class":519},[513,3984,523],{"class":522},[513,3986,797],{"class":522},[513,3988,801],{"class":800},[513,3990,797],{"class":522},[513,3992,534],{"class":522},[513,3994,3995,3998,4000,4002,4004,4007],{"class":515,"line":1371},[513,3996,3997],{"class":751},"my_tree_textual_memory ",[513,3999,785],{"class":522},[513,4001,853],{"class":519},[513,4003,523],{"class":522},[513,4005,4006],{"class":519},"tree_config",[513,4008,534],{"class":522},[513,4010,4011,4014,4016,4019],{"class":515,"line":1388},[513,4012,4013],{"class":751},"my_tree_textual_memory",[513,4015,755],{"class":522},[513,4017,4018],{"class":519},"delete_all",[513,4020,4021],{"class":522},"()\n",[513,4023,4024],{"class":515,"line":1393},[513,4025,776],{"emptyLinePlaceholder":775},[513,4027,4028],{"class":515,"line":1398},[513,4029,4030],{"class":1201},"# 阅读器设置\n",[513,4032,4033,4036,4038,4041,4043,4045],{"class":515,"line":1406},[513,4034,4035],{"class":751},"reader_config ",[513,4037,785],{"class":522},[513,4039,4040],{"class":751}," SimpleStructMemReaderConfig",[513,4042,755],{"class":522},[513,4044,792],{"class":519},[513,4046,1215],{"class":522},[513,4048,4049,4051,4053],{"class":515,"line":1426},[513,4050,2336],{"class":522},[513,4052,922],{"class":800},[513,4054,1298],{"class":522},[513,4056,4057],{"class":515,"line":1439},[513,4058,534],{"class":522},[513,4060,4061,4063,4065,4067,4069,4072],{"class":515,"line":1457},[513,4062,906],{"class":751},[513,4064,785],{"class":522},[513,4066,911],{"class":519},[513,4068,523],{"class":522},[513,4070,4071],{"class":519},"reader_config",[513,4073,534],{"class":522},[513,4075,4076],{"class":515,"line":1472},[513,4077,776],{"emptyLinePlaceholder":775},[513,4079,4080],{"class":515,"line":1477},[513,4081,4082],{"class":1201},"# 从对话中抽取\n",[513,4084,4085,4087,4089],{"class":515,"line":1482},[513,4086,937],{"class":751},[513,4088,785],{"class":522},[513,4090,942],{"class":522},[513,4092,4093],{"class":515,"line":1490},[513,4094,1671],{"class":522},[513,4096,4097,4099,4101,4103,4105,4107,4109,4111],{"class":515,"line":1509},[513,4098,1228],{"class":522},[513,4100,953],{"class":800},[513,4102,797],{"class":522},[513,4104,173],{"class":522},[513,4106,960],{"class":522},[513,4108,963],{"class":800},[513,4110,797],{"class":522},[513,4112,1245],{"class":522},[513,4114,4115,4117,4119,4121,4123,4125,4127],{"class":515,"line":1522},[513,4116,1228],{"class":522},[513,4118,973],{"class":800},[513,4120,797],{"class":522},[513,4122,173],{"class":522},[513,4124,960],{"class":522},[513,4126,982],{"class":800},[513,4128,1298],{"class":522},[513,4130,4131],{"class":515,"line":1541},[513,4132,1308],{"class":522},[513,4134,4135],{"class":515,"line":1558},[513,4136,1671],{"class":522},[513,4138,4139,4141,4143,4145,4147,4149,4151,4153],{"class":515,"line":1563},[513,4140,1228],{"class":522},[513,4142,953],{"class":800},[513,4144,797],{"class":522},[513,4146,173],{"class":522},[513,4148,960],{"class":522},[513,4150,1005],{"class":800},[513,4152,797],{"class":522},[513,4154,1245],{"class":522},[513,4156,4157,4159,4161,4163,4165,4167,4169],{"class":515,"line":1568},[513,4158,1228],{"class":522},[513,4160,973],{"class":800},[513,4162,797],{"class":522},[513,4164,173],{"class":522},[513,4166,960],{"class":522},[513,4168,1022],{"class":800},[513,4170,1298],{"class":522},[513,4172,4173],{"class":515,"line":1574},[513,4174,1308],{"class":522},[513,4176,4177],{"class":515,"line":1602},[513,4178,1033],{"class":522},[513,4180,4181,4183,4185,4187,4189,4191,4193,4195,4197,4199,4201,4203,4205,4207,4209,4211,4213,4215,4217,4219,4221,4223,4225,4227,4229,4231,4233,4235,4237,4239,4242,4244],{"class":515,"line":1607},[513,4182,763],{"class":751},[513,4184,785],{"class":522},[513,4186,1049],{"class":751},[513,4188,755],{"class":522},[513,4190,1054],{"class":519},[513,4192,523],{"class":522},[513,4194,1059],{"class":519},[513,4196,968],{"class":522},[513,4198,1065],{"class":1064},[513,4200,785],{"class":522},[513,4202,797],{"class":522},[513,4204,1072],{"class":800},[513,4206,797],{"class":522},[513,4208,968],{"class":522},[513,4210,1079],{"class":1064},[513,4212,1082],{"class":522},[513,4214,797],{"class":522},[513,4216,1087],{"class":800},[513,4218,797],{"class":522},[513,4220,173],{"class":522},[513,4222,960],{"class":522},[513,4224,1096],{"class":800},[513,4226,797],{"class":522},[513,4228,968],{"class":522},[513,4230,960],{"class":522},[513,4232,1934],{"class":800},[513,4234,797],{"class":522},[513,4236,173],{"class":522},[513,4238,960],{"class":522},[513,4240,4241],{"class":800},"2222",[513,4243,797],{"class":522},[513,4245,1101],{"class":522},[513,4247,4248,4250,4252,4254,4257],{"class":515,"line":1612},[513,4249,1107],{"class":747},[513,4251,1110],{"class":751},[513,4253,1113],{"class":747},[513,4255,4256],{"class":751}," memory",[513,4258,1119],{"class":522},[513,4260,4261,4264,4266,4268,4270,4272],{"class":515,"line":1618},[513,4262,4263],{"class":751},"    my_tree_textual_memory",[513,4265,755],{"class":522},[513,4267,1130],{"class":519},[513,4269,523],{"class":522},[513,4271,1135],{"class":519},[513,4273,534],{"class":522},[513,4275,4276],{"class":515,"line":1636},[513,4277,776],{"emptyLinePlaceholder":775},[513,4279,4280],{"class":515,"line":1641},[513,4281,4282],{"class":1201},"# 搜索\n",[513,4284,4285,4287,4289,4292,4294,4296],{"class":515,"line":1647},[513,4286,2977],{"class":751},[513,4288,785],{"class":522},[513,4290,4291],{"class":751}," my_tree_textual_memory",[513,4293,755],{"class":522},[513,4295,2987],{"class":519},[513,4297,1215],{"class":522},[513,4299,4300,4302,4305,4307],{"class":515,"line":1653},[513,4301,2336],{"class":522},[513,4303,4304],{"class":800},"Talk about the user's childhood story?",[513,4306,797],{"class":522},[513,4308,1245],{"class":522},[513,4310,4311,4314,4316],{"class":515,"line":1658},[513,4312,4313],{"class":1064},"    top_k",[513,4315,785],{"class":522},[513,4317,4318],{"class":1451},"10\n",[513,4320,4321],{"class":515,"line":1668},[513,4322,534],{"class":522},[513,4324,4325,4327,4329,4331,4334,4336,4338,4340,4342],{"class":515,"line":1674},[513,4326,1107],{"class":747},[513,4328,3015],{"class":751},[513,4330,968],{"class":522},[513,4332,4333],{"class":751}," r ",[513,4335,1113],{"class":747},[513,4337,3025],{"class":519},[513,4339,523],{"class":522},[513,4341,3030],{"class":519},[513,4343,3033],{"class":522},[513,4345,4346,4348,4350,4352,4354,4356,4358,4360,4363,4365,4368,4370,4372,4374,4376],{"class":515,"line":1693},[513,4347,3038],{"class":519},[513,4349,523],{"class":522},[513,4351,1992],{"class":1991},[513,4353,797],{"class":800},[513,4355,1998],{"class":1451},[513,4357,3049],{"class":519},[513,4359,2010],{"class":1451},[513,4361,4362],{"class":800},"'th result: ",[513,4364,1998],{"class":1451},[513,4366,4367],{"class":519},"r",[513,4369,755],{"class":522},[513,4371,186],{"class":3064},[513,4373,2010],{"class":1451},[513,4375,797],{"class":800},[513,4377,534],{"class":522},[513,4379,4380],{"class":515,"line":1707},[513,4381,776],{"emptyLinePlaceholder":775},[513,4383,4384],{"class":515,"line":1747},[513,4385,4386],{"class":1201},"# 从文档添加[可选项]\n",[513,4388,4389,4392,4394,4397,4399,4402,4404,4406,4408,4411,4413],{"class":515,"line":1799},[513,4390,4391],{"class":751},"doc_paths ",[513,4393,785],{"class":522},[513,4395,4396],{"class":522}," [",[513,4398,797],{"class":522},[513,4400,4401],{"class":800},".\u002Ftext1.txt",[513,4403,797],{"class":522},[513,4405,968],{"class":522},[513,4407,960],{"class":522},[513,4409,4410],{"class":800},".\u002Ftext2.txt",[513,4412,797],{"class":522},[513,4414,1599],{"class":522},[513,4416,4417,4420,4422,4424,4426,4428],{"class":515,"line":1805},[513,4418,4419],{"class":751},"doc_memory ",[513,4421,785],{"class":522},[513,4423,1049],{"class":751},[513,4425,755],{"class":522},[513,4427,1054],{"class":519},[513,4429,1215],{"class":522},[513,4431,4432,4435,4437,4439,4441,4443,4445,4447],{"class":515,"line":1810},[513,4433,4434],{"class":519},"  doc_paths",[513,4436,968],{"class":522},[513,4438,960],{"class":522},[513,4440,2411],{"class":800},[513,4442,797],{"class":522},[513,4444,968],{"class":522},[513,4446,1079],{"class":1064},[513,4448,1223],{"class":522},[513,4450,4451,4453,4455,4457,4459,4461,4464,4466],{"class":515,"line":1815},[513,4452,3512],{"class":522},[513,4454,1087],{"class":800},[513,4456,797],{"class":522},[513,4458,173],{"class":522},[513,4460,960],{"class":522},[513,4462,4463],{"class":800},"your_user_id",[513,4465,797],{"class":522},[513,4467,1245],{"class":522},[513,4469,4470,4472,4474,4476,4478,4480,4483,4485],{"class":515,"line":1834},[513,4471,3512],{"class":522},[513,4473,1934],{"class":800},[513,4475,797],{"class":522},[513,4477,173],{"class":522},[513,4479,960],{"class":522},[513,4481,4482],{"class":800},"your_session_id",[513,4484,797],{"class":522},[513,4486,1245],{"class":522},[513,4488,4489],{"class":515,"line":1852},[513,4490,3597],{"class":522},[513,4492,4493],{"class":515,"line":1858},[513,4494,534],{"class":522},[513,4496,4497,4499,4501,4503,4506],{"class":515,"line":1863},[513,4498,1107],{"class":747},[513,4500,1110],{"class":751},[513,4502,1113],{"class":747},[513,4504,4505],{"class":751}," doc_memory",[513,4507,1119],{"class":522},[513,4509,4510,4512,4514,4516,4518,4520],{"class":515,"line":1868},[513,4511,4263],{"class":751},[513,4513,755],{"class":522},[513,4515,1130],{"class":519},[513,4517,523],{"class":522},[513,4519,1135],{"class":519},[513,4521,534],{"class":522},[513,4523,4524],{"class":515,"line":1884},[513,4525,776],{"emptyLinePlaceholder":775},[513,4527,4528],{"class":515,"line":1892},[513,4529,4530],{"class":1201},"# 转储和丢弃[可选项]\n",[513,4532,4533,4535,4537,4539,4541,4543,4546,4548],{"class":515,"line":1908},[513,4534,4013],{"class":751},[513,4536,755],{"class":522},[513,4538,3709],{"class":519},[513,4540,523],{"class":522},[513,4542,797],{"class":522},[513,4544,4545],{"class":800},"tmp\u002Fmy_tree_textual_memory",[513,4547,797],{"class":522},[513,4549,534],{"class":522},[513,4551,4552,4554,4556,4559],{"class":515,"line":1950},[513,4553,4013],{"class":751},[513,4555,755],{"class":522},[513,4557,4558],{"class":519},"drop",[513,4560,4021],{"class":522},[11,4562,118],{"id":4563},"为什么选择-treetextmemory",[15,4565,4566,4572,4578,4584],{},[18,4567,4568,4571],{},[140,4569,4570],{},"结构层次:"," 像思维导图一样组织记忆——节点可以有父母、孩子和交叉链接。",[18,4573,4574,4577],{},[140,4575,4576],{},"图风格的链接:"," 超越纯粹的层次结构-建立多跳推理链。",[18,4579,4580,4583],{},[140,4581,4582],{},"语义搜索+图扩展:"," 结合向量和图形的优点。",[18,4585,4586,4589],{},[140,4587,4588],{},"可解释性:"," 追踪记忆是如何连接、合并或随时间演变的.",[444,4591,4592],{},[128,4593,4594,4597,4599],{},[140,4595,4596],{},"尝试一下",[452,4598],{},"从文档或web内容中添加记忆节点。手动链接它们或自动合并类似的节点！",[11,4601,124],{"id":124},[15,4603,4604,4614,4624,4630],{},[18,4605,4606,4613],{},[140,4607,4608,4609,173],{},"了解更多",[21,4610,4612],{"href":4611},"\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fneo4j_graph_db","Neo4j"," treeTextMemory由图数据库后端提供支持。了解Neo4j如何处理节点、边和遍历将帮助您设计更有效的记忆层次结构、多跳推理和上下文链接策略。",[18,4615,4616,4623],{},[140,4617,4618,4619,173],{},"添加 ",[21,4620,4622],{"href":4621},"\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fkv_cache_memory","Activation Memory"," 使用运行时KV-cache来测试会话状态。",[18,4625,4626,4629],{},[140,4627,4628],{},"探索图推理:"," 为多跳检索和答案合成构建工作流。",[18,4631,4632,4635,4636,4640,4641,4644],{},[140,4633,4634],{},"更进一步:"," 为高级应用检查 ",[21,4637,4639],{"href":4638},"\u002Fapi-reference\u002Fsearch-memories","API Reference",", 或者在 ",[166,4642,4643],{},"examples\u002F","运行更多的示例.",[128,4646,4647],{},"现在你的Agent不仅能记住事实，还能记住它们之间的联系！",[4649,4650,4651],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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":509,"searchDepth":772,"depth":772,"links":4653},[4654,4655,4656,4662,4667,4677,4678],{"id":13,"depth":772,"text":13},{"id":24,"depth":772,"text":24},{"id":30,"depth":772,"text":30,"children":4657},[4658,4659,4661],{"id":38,"depth":779,"text":38},{"id":196,"depth":779,"text":4660},"元数据字段 (TreeNodeTextualMemoryMetadata)",{"id":50,"depth":779,"text":50},{"id":499,"depth":772,"text":56,"children":4663},[4664,4665,4666],{"id":502,"depth":779,"text":502},{"id":537,"depth":779,"text":537},{"id":683,"depth":779,"text":683},{"id":717,"depth":772,"text":62,"children":4668},[4669,4670,4671,4672,4673,4674,4675,4676],{"id":723,"depth":779,"text":70},{"id":808,"depth":779,"text":76},{"id":82,"depth":779,"text":82},{"id":88,"depth":779,"text":88},{"id":3073,"depth":779,"text":94},{"id":100,"depth":779,"text":100},{"id":106,"depth":779,"text":106},{"id":112,"depth":779,"text":112},{"id":4563,"depth":772,"text":118},{"id":124,"depth":772,"text":124},"让我们在MemOS中构建你的第一个**基于图的、树形明文记忆**！ \u003Cbr> **TreeTextMemory** 支持以结构化方式组织、关联并检索记忆，同时保留丰富的上下文信息与良好的可解释性。 \u003Cbr> MemOS当前使用[Neo4j](\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fneo4j_graph_db)作为后端，未来计划支持更多图数据库。\n","md",{},"\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Ftree_textual_memory",{"title":5,"description":509},"cn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Ftree_textual_memory","DhPWvdW0zBYQEpYqbShBSGyfLEawirxZ1josjruSNi0",[4687,4695],{"title":4688,"path":4689,"stem":4690,"icon":4691,"framework":6,"module":6,"class":4692,"target":-1,"active":4693,"defaultOpen":4693,"children":-1,"description":4694},"偏好明文记忆","\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fpreference_textual_memory","open_source\u002Fmodules\u002Fmemories\u002Fpreference_textual_memory","i-ri-user-heart-line",[],false,"PreferenceTextMemory 是MemOS中用于存储和管理用户偏好的明文记忆模块。它适用于需要根据用户偏好进行记忆检索的场景。",{"title":4696,"path":4697,"stem":4698,"icon":4699,"framework":6,"module":6,"class":4700,"target":-1,"active":4693,"defaultOpen":4693,"children":-1,"description":4701},"Neo4j 图数据库","\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fneo4j_graph_db","open_source\u002Fmodules\u002Fmemories\u002Fneo4j_graph_db","i-ri-database-line",[],"该模块为记忆增强系统（如RAG、认知代理或个人内存助手）提供基于图结构的记忆存储和查询。 \u003Cbr\u002F>它定义了一个干净的抽象类(BaseGraphDB)，并使用Neo4j实现了一个可用于生产环境的实现。",1774339752158]