[{"data":1,"prerenderedAt":4034},["ShallowReactive",2],{"\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fnaive_textual_memory":3,"surround-\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fnaive_textual_memory":4018},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":4011,"description":546,"extension":4012,"links":6,"meta":4013,"navigation":6,"path":4014,"seo":4015,"stem":4016,"__hash__":4017},"docs\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fnaive_textual_memory.md","NaiveTextMemory: 简单明文记忆",null,{"type":8,"value":9,"toc":3974},"minimark",[10,14,133,135,139,156,159,163,206,209,229,246,248,250,258,336,343,346,535,538,540,641,643,865,867,877,909,937,939,944,1002,1007,1247,1249,1251,1254,1693,1695,1698,2688,2704,2706,2712,2720,2726,2731,2924,2930,2944,2946,2949,2989,2992,3027,3051,3053,3056,3247,3281,3283,3286,3896,3898,3901,3960,3970],[11,12,13],"h2",{"id":13},"目录",[15,16,17,25,31,57,83,109,115,121,127],"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],{},[21,28,30],{"href":29},"#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9-naivetextmemory","为什么选择 NaiveTextMemory",[18,32,33,37],{},[21,34,36],{"href":35},"#%E6%A0%B8%E5%BF%83%E6%A6%82%E5%BF%B5","核心概念",[15,38,39,45,51],{},[18,40,41],{},[21,42,44],{"href":43},"#%E8%AE%B0%E5%BF%86%E7%BB%93%E6%9E%84","记忆结构",[18,46,47],{},[21,48,50],{"href":49},"#%E5%85%83%E6%95%B0%E6%8D%AE%E5%AD%97%E6%AE%B5-textualmemorymetadata","元数据字段",[18,52,53],{},[21,54,56],{"href":55},"#%E6%90%9C%E7%B4%A2%E6%9C%BA%E5%88%B6","搜索机制",[18,58,59,63],{},[21,60,62],{"href":61},"#api-%E5%8F%82%E8%80%83","API 参考",[15,64,65,71,77],{},[18,66,67],{},[21,68,70],{"href":69},"#%E5%88%9D%E5%A7%8B%E5%8C%96","初始化",[18,72,73],{},[21,74,76],{"href":75},"#%E6%A0%B8%E5%BF%83%E6%96%B9%E6%B3%95","核心方法",[18,78,79],{},[21,80,82],{"href":81},"#%E9%85%8D%E7%BD%AE%E5%8F%82%E6%95%B0","配置参数",[18,84,85,89],{},[21,86,88],{"href":87},"#%E5%8A%A8%E6%89%8B%E5%AE%9E%E8%B7%B5","动手实践",[15,90,91,97,103],{},[18,92,93],{},[21,94,96],{"href":95},"#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B","快速开始",[18,98,99],{},[21,100,102],{"href":101},"#%E5%AE%8C%E6%95%B4%E7%A4%BA%E4%BE%8B","完整示例",[18,104,105],{},[21,106,108],{"href":107},"#%E6%96%87%E4%BB%B6%E5%AD%98%E5%82%A8","文件存储",[18,110,111],{},[21,112,114],{"href":113},"#%E4%BD%BF%E7%94%A8%E5%9C%BA%E6%99%AF%E6%8C%87%E5%8D%97","使用场景指南",[18,116,117],{},[21,118,120],{"href":119},"#%E4%B8%8E%E5%85%B6%E4%BB%96%E8%AE%B0%E5%BF%86%E6%A8%A1%E5%9D%97%E5%AF%B9%E6%AF%94","与其他记忆模块对比",[18,122,123],{},[21,124,126],{"href":125},"#%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5","最佳实践",[18,128,129],{},[21,130,132],{"href":131},"#%E4%B8%8B%E4%B8%80%E6%AD%A5","下一步",[11,134,24],{"id":24},[136,137,138],"p",{},"在本指南的最后，你将能够：",[15,140,141,144,147,150,153],{},[18,142,143],{},"使用 LLM 从对话中自动提取结构化记忆",[18,145,146],{},"在内存中存储和管理记忆（无需数据库）",[18,148,149],{},"使用关键词匹配搜索记忆",[18,151,152],{},"持久化和恢复记忆数据",[18,154,155],{},"理解何时使用 NaiveTextMemory，何时升级到其他模块",[11,157,30],{"id":158},"为什么选择-naivetextmemory",[160,161,162],"h3",{"id":162},"优势特性",[164,165,167],"list",{"icon":166},"ph:check-circle-duotone",[15,168,169,176,182,188,194,200],{},[18,170,171,175],{},[172,173,174],"strong",{},"零依赖","：无需向量数据库或嵌入模型",[18,177,178,181],{},[172,179,180],{},"快速启动","：几行代码即可运行",[18,183,184,187],{},[172,185,186],{},"轻量高效","：低资源占用，执行速度快",[18,189,190,193],{},[172,191,192],{},"简单直观","：关键词匹配，结果可预测",[18,195,196,199],{},[172,197,198],{},"易于调试","：所有记忆都在内存中，方便查看",[18,201,202,205],{},[172,203,204],{},"完美起点","：学习 MemOS 的最佳入门选择",[160,207,208],{"id":208},"适用场景",[164,210,212],{"icon":211},"ph:lightbulb-duotone",[15,213,214,217,220,223,226],{},[18,215,216],{},"快速原型开发和概念验证",[18,218,219],{},"简单对话代理（记忆数量 \u003C 1000 条）",[18,221,222],{},"测试和演示场景",[18,224,225],{},"资源受限环境（无法运行嵌入模型）",[18,227,228],{},"关键词搜索场景（查询与记忆直接匹配）",[230,231,232],"note",{},[136,233,234,237,240,241,245],{},[172,235,236],{},"性能提示",[238,239],"br",{},"\n当记忆数量超过 1000 条时，建议升级到 ",[21,242,244],{"href":243},"\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fgeneral_textual_memory","GeneralTextMemory","，它使用向量搜索，性能更优。",[11,247,36],{"id":36},[160,249,44],{"id":44},[136,251,252,253,257],{},"每个记忆表示为一个 ",[254,255,256],"code",{},"TextualMemoryItem"," 对象，包含以下字段：",[259,260,261,280],"table",{},[262,263,264],"thead",{},[265,266,267,271,274,277],"tr",{},[268,269,270],"th",{},"字段",[268,272,273],{},"类型",[268,275,276],{},"必填",[268,278,279],{},"描述",[281,282,283,302,319],"tbody",{},[265,284,285,291,296,299],{},[286,287,288],"td",{},[254,289,290],{},"id",[286,292,293],{},[254,294,295],{},"str",[286,297,298],{},"✗",[286,300,301],{},"唯一标识符（自动生成 UUID）",[265,303,304,309,313,316],{},[286,305,306],{},[254,307,308],{},"memory",[286,310,311],{},[254,312,295],{},[286,314,315],{},"✓",[286,317,318],{},"记忆的主要文本内容",[265,320,321,326,331,333],{},[286,322,323],{},[254,324,325],{},"metadata",[286,327,328],{},[254,329,330],{},"TextualMemoryMetadata",[286,332,298],{},[286,334,335],{},"元数据（用于分类、过滤和检索）",[160,337,339,340,342],{"id":338},"元数据字段-textualmemorymetadata","元数据字段 (",[254,341,330],{},")",[136,344,345],{},"元数据提供了丰富的上下文信息，用于分类、过滤和组织记忆：",[259,347,348,361],{},[262,349,350],{},[265,351,352,354,356,359],{},[268,353,270],{},[268,355,273],{},[268,357,358],{},"默认值",[268,360,279],{},[281,362,363,392,410,437,455,475,493,518],{},[265,364,365,370,385,389],{},[286,366,367],{},[254,368,369],{},"type",[286,371,372,375,376,375,379,375,382],{},[254,373,374],{},"\"procedure\""," \u002F ",[254,377,378],{},"\"fact\"",[254,380,381],{},"\"event\"",[254,383,384],{},"\"opinion\"",[286,386,387],{},[254,388,378],{},[286,390,391],{},"记忆类型分类",[265,393,394,399,404,407],{},[286,395,396],{},[254,397,398],{},"memory_time",[286,400,401],{},[254,402,403],{},"str (YYYY-MM-DD)",[286,405,406],{},"当前日期",[286,408,409],{},"记忆关联的时间",[265,411,412,417,431,434],{},[286,413,414],{},[254,415,416],{},"source",[286,418,419,375,422,375,425,375,428],{},[254,420,421],{},"\"conversation\"",[254,423,424],{},"\"retrieved\"",[254,426,427],{},"\"web\"",[254,429,430],{},"\"file\"",[286,432,433],{},"-",[286,435,436],{},"记忆来源",[265,438,439,444,449,452],{},[286,440,441],{},[254,442,443],{},"confidence",[286,445,446],{},[254,447,448],{},"float (0-100)",[286,450,451],{},"80.0",[286,453,454],{},"确定性\u002F可信度评分",[265,456,457,462,467,472],{},[286,458,459],{},[254,460,461],{},"entities",[286,463,464],{},[254,465,466],{},"list[str]",[286,468,469],{},[254,470,471],{},"[]",[286,473,474],{},"提及的实体或概念",[265,476,477,482,486,490],{},[286,478,479],{},[254,480,481],{},"tags",[286,483,484],{},[254,485,466],{},[286,487,488],{},[254,489,471],{},[286,491,492],{},"主题标签",[265,494,495,500,511,515],{},[286,496,497],{},[254,498,499],{},"visibility",[286,501,502,375,505,375,508],{},[254,503,504],{},"\"private\"",[254,506,507],{},"\"public\"",[254,509,510],{},"\"session\"",[286,512,513],{},[254,514,504],{},[286,516,517],{},"访问控制范围",[265,519,520,525,529,532],{},[286,521,522],{},[254,523,524],{},"updated_at",[286,526,527],{},[254,528,295],{},[286,530,531],{},"自动生成",[286,533,534],{},"最近更新时间戳（ISO 8601）",[11,536,62],{"id":537},"api-参考",[160,539,70],{"id":70},[541,542,547],"pre",{"className":543,"code":544,"language":545,"meta":546,"style":546},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from memos.memories.textual.naive import NaiveTextMemory\nfrom memos.configs.memory import NaiveTextMemoryConfig\n\nmemory = NaiveTextMemory(config: NaiveTextMemoryConfig)\n","python","",[254,548,549,585,607,614],{"__ignoreMap":546},[550,551,554,558,562,566,569,571,574,576,579,582],"span",{"class":552,"line":553},"line",1,[550,555,557],{"class":556},"s7zQu","from",[550,559,561],{"class":560},"sTEyZ"," memos",[550,563,565],{"class":564},"sMK4o",".",[550,567,568],{"class":560},"memories",[550,570,565],{"class":564},[550,572,573],{"class":560},"textual",[550,575,565],{"class":564},[550,577,578],{"class":560},"naive ",[550,580,581],{"class":556},"import",[550,583,584],{"class":560}," NaiveTextMemory\n",[550,586,588,590,592,594,597,599,602,604],{"class":552,"line":587},2,[550,589,557],{"class":556},[550,591,561],{"class":560},[550,593,565],{"class":564},[550,595,596],{"class":560},"configs",[550,598,565],{"class":564},[550,600,601],{"class":560},"memory ",[550,603,581],{"class":556},[550,605,606],{"class":560}," NaiveTextMemoryConfig\n",[550,608,610],{"class":552,"line":609},3,[550,611,613],{"emptyLinePlaceholder":612},true,"\n",[550,615,617,619,622,626,629,632,635,638],{"class":552,"line":616},4,[550,618,601],{"class":560},[550,620,621],{"class":564},"=",[550,623,625],{"class":624},"s2Zo4"," NaiveTextMemory",[550,627,628],{"class":564},"(",[550,630,631],{"class":624},"config",[550,633,634],{"class":564},":",[550,636,637],{"class":624}," NaiveTextMemoryConfig",[550,639,640],{"class":564},")\n",[160,642,76],{"id":76},[259,644,645,660],{},[262,646,647],{},[265,648,649,652,655,658],{},[268,650,651],{},"方法",[268,653,654],{},"参数",[268,656,657],{},"返回值",[268,659,279],{},[281,661,662,682,702,721,740,759,775,794,812,828,847],{},[265,663,664,669,674,679],{},[286,665,666],{},[254,667,668],{},"extract(messages)",[286,670,671],{},[254,672,673],{},"messages: list[dict]",[286,675,676],{},[254,677,678],{},"list[TextualMemoryItem]",[286,680,681],{},"使用 LLM 从对话中提取结构化记忆",[265,683,684,689,694,699],{},[286,685,686],{},[254,687,688],{},"add(memories)",[286,690,691],{},[254,692,693],{},"memories: list \u002F dict \u002F Item",[286,695,696],{},[254,697,698],{},"None",[286,700,701],{},"添加一个或多个记忆",[265,703,704,709,714,718],{},[286,705,706],{},[254,707,708],{},"search(query, top_k)",[286,710,711],{},[254,712,713],{},"query: str, top_k: int",[286,715,716],{},[254,717,678],{},[286,719,720],{},"关键词匹配检索 top-k 记忆",[265,722,723,728,733,737],{},[286,724,725],{},[254,726,727],{},"get(memory_id)",[286,729,730],{},[254,731,732],{},"memory_id: str",[286,734,735],{},[254,736,256],{},[286,738,739],{},"通过 ID 获取单个记忆",[265,741,742,747,752,756],{},[286,743,744],{},[254,745,746],{},"get_by_ids(ids)",[286,748,749],{},[254,750,751],{},"ids: list[str]",[286,753,754],{},[254,755,678],{},[286,757,758],{},"通过 ID 列表批量获取记忆",[265,760,761,766,768,772],{},[286,762,763],{},[254,764,765],{},"get_all()",[286,767,433],{},[286,769,770],{},[254,771,678],{},[286,773,774],{},"返回所有记忆",[265,776,777,782,787,791],{},[286,778,779],{},[254,780,781],{},"update(memory_id, new)",[286,783,784],{},[254,785,786],{},"memory_id: str, new: dict",[286,788,789],{},[254,790,698],{},[286,792,793],{},"更新指定记忆的内容或元数据",[265,795,796,801,805,809],{},[286,797,798],{},[254,799,800],{},"delete(ids)",[286,802,803],{},[254,804,751],{},[286,806,807],{},[254,808,698],{},[286,810,811],{},"删除一个或多个记忆",[265,813,814,819,821,825],{},[286,815,816],{},[254,817,818],{},"delete_all()",[286,820,433],{},[286,822,823],{},[254,824,698],{},[286,826,827],{},"清空所有记忆",[265,829,830,835,840,844],{},[286,831,832],{},[254,833,834],{},"dump(dir)",[286,836,837],{},[254,838,839],{},"dir: str",[286,841,842],{},[254,843,698],{},[286,845,846],{},"将记忆序列化为 JSON 文件保存",[265,848,849,854,858,862],{},[286,850,851],{},[254,852,853],{},"load(dir)",[286,855,856],{},[254,857,839],{},[286,859,860],{},[254,861,698],{},[286,863,864],{},"从 JSON 文件加载记忆",[160,866,56],{"id":56},[136,868,869,872,873,876],{},[254,870,871],{},"NaiveTextMemory"," 使用",[172,874,875],{},"关键词匹配算法","：",[878,879,880,885,888,892,895,899,902,906],"steps",{},[881,882,884],"h4",{"id":883},"步骤-1-分词","步骤 1: 分词",[136,886,887],{},"将查询和每条记忆内容分解为词汇列表",[881,889,891],{"id":890},"步骤-2-计算匹配度","步骤 2: 计算匹配度",[136,893,894],{},"统计查询词汇与记忆词汇的交集数量",[881,896,898],{"id":897},"步骤-3-排序","步骤 3: 排序",[136,900,901],{},"按匹配词数降序排列所有记忆",[881,903,905],{"id":904},"步骤-4-返回结果","步骤 4: 返回结果",[136,907,908],{},"取前 top-k 条记忆作为搜索结果",[230,910,911,921],{},[136,912,913,916,918,919],{},[172,914,915],{},"示例对比",[238,917],{},"\n查询：\"猫咪\" ",[238,920],{},[15,922,923,931],{},[18,924,925,928,929],{},[172,926,927],{},"关键词匹配","：只匹配包含\"猫\"、\"猫咪\"的记忆",[238,930],{},[18,932,933,936],{},[172,934,935],{},"语义搜索","：还能匹配\"宠物\"、\"小猫\"、\"喵星人\"等相关记忆（稍后我们将在“通用明文记忆”文章中学习）",[160,938,82],{"id":82},[136,940,941],{},[172,942,943],{},"NaiveTextMemoryConfig",[259,945,946,960],{},[262,947,948],{},[265,949,950,952,954,956,958],{},[268,951,654],{},[268,953,273],{},[268,955,276],{},[268,957,358],{},[268,959,279],{},[281,961,962,981],{},[265,963,964,969,974,976,978],{},[286,965,966],{},[254,967,968],{},"extractor_llm",[286,970,971],{},[254,972,973],{},"LLMConfigFactory",[286,975,315],{},[286,977,433],{},[286,979,980],{},"用于从对话中提取记忆的 LLM 配置",[265,982,983,988,992,994,999],{},[286,984,985],{},[254,986,987],{},"memory_filename",[286,989,990],{},[254,991,295],{},[286,993,298],{},[286,995,996],{},[254,997,998],{},"textual_memory.json",[286,1000,1001],{},"持久化存储的文件名",[136,1003,1004],{},[172,1005,1006],{},"配置示例",[541,1008,1012],{"className":1009,"code":1010,"language":1011,"meta":546,"style":546},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"backend\": \"naive_text\",\n  \"config\": {\n    \"extractor_llm\": {\n      \"backend\": \"openai\",\n      \"config\": {\n        \"model_name_or_path\": \"gpt-4o-mini\",\n        \"temperature\": 0.8,\n        \"max_tokens\": 1024,\n        \"api_base\": \"xxx\",\n        \"api_key\": \"sk-xxx\"\n      }\n    },\n    \"memory_filename\": \"my_memories.json\"\n  }\n}\n","json",[254,1013,1014,1019,1045,1058,1072,1094,1107,1130,1147,1164,1185,1205,1211,1217,1235,1241],{"__ignoreMap":546},[550,1015,1016],{"class":552,"line":553},[550,1017,1018],{"class":564},"{\n",[550,1020,1021,1024,1028,1031,1033,1036,1040,1042],{"class":552,"line":587},[550,1022,1023],{"class":564},"  \"",[550,1025,1027],{"class":1026},"spNyl","backend",[550,1029,1030],{"class":564},"\"",[550,1032,634],{"class":564},[550,1034,1035],{"class":564}," \"",[550,1037,1039],{"class":1038},"sfazB","naive_text",[550,1041,1030],{"class":564},[550,1043,1044],{"class":564},",\n",[550,1046,1047,1049,1051,1053,1055],{"class":552,"line":609},[550,1048,1023],{"class":564},[550,1050,631],{"class":1026},[550,1052,1030],{"class":564},[550,1054,634],{"class":564},[550,1056,1057],{"class":564}," {\n",[550,1059,1060,1063,1066,1068,1070],{"class":552,"line":616},[550,1061,1062],{"class":564},"    \"",[550,1064,968],{"class":1065},"sBMFI",[550,1067,1030],{"class":564},[550,1069,634],{"class":564},[550,1071,1057],{"class":564},[550,1073,1075,1078,1081,1083,1085,1087,1090,1092],{"class":552,"line":1074},5,[550,1076,1077],{"class":564},"      \"",[550,1079,1027],{"class":1080},"sbssI",[550,1082,1030],{"class":564},[550,1084,634],{"class":564},[550,1086,1035],{"class":564},[550,1088,1089],{"class":1038},"openai",[550,1091,1030],{"class":564},[550,1093,1044],{"class":564},[550,1095,1097,1099,1101,1103,1105],{"class":552,"line":1096},6,[550,1098,1077],{"class":564},[550,1100,631],{"class":1080},[550,1102,1030],{"class":564},[550,1104,634],{"class":564},[550,1106,1057],{"class":564},[550,1108,1110,1113,1117,1119,1121,1123,1126,1128],{"class":552,"line":1109},7,[550,1111,1112],{"class":564},"        \"",[550,1114,1116],{"class":1115},"swJcz","model_name_or_path",[550,1118,1030],{"class":564},[550,1120,634],{"class":564},[550,1122,1035],{"class":564},[550,1124,1125],{"class":1038},"gpt-4o-mini",[550,1127,1030],{"class":564},[550,1129,1044],{"class":564},[550,1131,1133,1135,1138,1140,1142,1145],{"class":552,"line":1132},8,[550,1134,1112],{"class":564},[550,1136,1137],{"class":1115},"temperature",[550,1139,1030],{"class":564},[550,1141,634],{"class":564},[550,1143,1144],{"class":1080}," 0.8",[550,1146,1044],{"class":564},[550,1148,1150,1152,1155,1157,1159,1162],{"class":552,"line":1149},9,[550,1151,1112],{"class":564},[550,1153,1154],{"class":1115},"max_tokens",[550,1156,1030],{"class":564},[550,1158,634],{"class":564},[550,1160,1161],{"class":1080}," 1024",[550,1163,1044],{"class":564},[550,1165,1167,1169,1172,1174,1176,1178,1181,1183],{"class":552,"line":1166},10,[550,1168,1112],{"class":564},[550,1170,1171],{"class":1115},"api_base",[550,1173,1030],{"class":564},[550,1175,634],{"class":564},[550,1177,1035],{"class":564},[550,1179,1180],{"class":1038},"xxx",[550,1182,1030],{"class":564},[550,1184,1044],{"class":564},[550,1186,1188,1190,1193,1195,1197,1199,1202],{"class":552,"line":1187},11,[550,1189,1112],{"class":564},[550,1191,1192],{"class":1115},"api_key",[550,1194,1030],{"class":564},[550,1196,634],{"class":564},[550,1198,1035],{"class":564},[550,1200,1201],{"class":1038},"sk-xxx",[550,1203,1204],{"class":564},"\"\n",[550,1206,1208],{"class":552,"line":1207},12,[550,1209,1210],{"class":564},"      }\n",[550,1212,1214],{"class":552,"line":1213},13,[550,1215,1216],{"class":564},"    },\n",[550,1218,1220,1222,1224,1226,1228,1230,1233],{"class":552,"line":1219},14,[550,1221,1062],{"class":564},[550,1223,987],{"class":1065},[550,1225,1030],{"class":564},[550,1227,634],{"class":564},[550,1229,1035],{"class":564},[550,1231,1232],{"class":1038},"my_memories.json",[550,1234,1204],{"class":564},[550,1236,1238],{"class":552,"line":1237},15,[550,1239,1240],{"class":564},"  }\n",[550,1242,1244],{"class":552,"line":1243},16,[550,1245,1246],{"class":564},"}\n",[11,1248,88],{"id":88},[160,1250,96],{"id":96},[136,1252,1253],{},"只需 3 步即可开始使用 NaiveTextMemory：",[878,1255,1256,1260,1441,1445,1494,1498,1670],{},[881,1257,1259],{"id":1258},"步骤-1-创建配置","步骤 1: 创建配置",[541,1261,1263],{"className":543,"code":1262,"language":545,"meta":546,"style":546},"from memos.configs.memory import MemoryConfigFactory\n\nconfig = MemoryConfigFactory(\n    backend=\"naive_text\",\n    config={\n        \"extractor_llm\": {\n            \"backend\": \"openai\",\n            \"config\": {\n                \"model_name_or_path\": \"gpt-4o-mini\",\n                \"api_key\": \"your-api-key\",\n                \"api_base\": \"your-api-base\"\n            },\n        },\n    },\n)\n",[254,1264,1265,1284,1288,1301,1317,1325,1337,1356,1368,1387,1406,1423,1428,1433,1437],{"__ignoreMap":546},[550,1266,1267,1269,1271,1273,1275,1277,1279,1281],{"class":552,"line":553},[550,1268,557],{"class":556},[550,1270,561],{"class":560},[550,1272,565],{"class":564},[550,1274,596],{"class":560},[550,1276,565],{"class":564},[550,1278,601],{"class":560},[550,1280,581],{"class":556},[550,1282,1283],{"class":560}," MemoryConfigFactory\n",[550,1285,1286],{"class":552,"line":587},[550,1287,613],{"emptyLinePlaceholder":612},[550,1289,1290,1293,1295,1298],{"class":552,"line":609},[550,1291,1292],{"class":560},"config ",[550,1294,621],{"class":564},[550,1296,1297],{"class":624}," MemoryConfigFactory",[550,1299,1300],{"class":564},"(\n",[550,1302,1303,1307,1309,1311,1313,1315],{"class":552,"line":616},[550,1304,1306],{"class":1305},"sHdIc","    backend",[550,1308,621],{"class":564},[550,1310,1030],{"class":564},[550,1312,1039],{"class":1038},[550,1314,1030],{"class":564},[550,1316,1044],{"class":564},[550,1318,1319,1322],{"class":552,"line":1074},[550,1320,1321],{"class":1305},"    config",[550,1323,1324],{"class":564},"={\n",[550,1326,1327,1329,1331,1333,1335],{"class":552,"line":1096},[550,1328,1112],{"class":564},[550,1330,968],{"class":1038},[550,1332,1030],{"class":564},[550,1334,634],{"class":564},[550,1336,1057],{"class":564},[550,1338,1339,1342,1344,1346,1348,1350,1352,1354],{"class":552,"line":1109},[550,1340,1341],{"class":564},"            \"",[550,1343,1027],{"class":1038},[550,1345,1030],{"class":564},[550,1347,634],{"class":564},[550,1349,1035],{"class":564},[550,1351,1089],{"class":1038},[550,1353,1030],{"class":564},[550,1355,1044],{"class":564},[550,1357,1358,1360,1362,1364,1366],{"class":552,"line":1132},[550,1359,1341],{"class":564},[550,1361,631],{"class":1038},[550,1363,1030],{"class":564},[550,1365,634],{"class":564},[550,1367,1057],{"class":564},[550,1369,1370,1373,1375,1377,1379,1381,1383,1385],{"class":552,"line":1149},[550,1371,1372],{"class":564},"                \"",[550,1374,1116],{"class":1038},[550,1376,1030],{"class":564},[550,1378,634],{"class":564},[550,1380,1035],{"class":564},[550,1382,1125],{"class":1038},[550,1384,1030],{"class":564},[550,1386,1044],{"class":564},[550,1388,1389,1391,1393,1395,1397,1399,1402,1404],{"class":552,"line":1166},[550,1390,1372],{"class":564},[550,1392,1192],{"class":1038},[550,1394,1030],{"class":564},[550,1396,634],{"class":564},[550,1398,1035],{"class":564},[550,1400,1401],{"class":1038},"your-api-key",[550,1403,1030],{"class":564},[550,1405,1044],{"class":564},[550,1407,1408,1410,1412,1414,1416,1418,1421],{"class":552,"line":1187},[550,1409,1372],{"class":564},[550,1411,1171],{"class":1038},[550,1413,1030],{"class":564},[550,1415,634],{"class":564},[550,1417,1035],{"class":564},[550,1419,1420],{"class":1038},"your-api-base",[550,1422,1204],{"class":564},[550,1424,1425],{"class":552,"line":1207},[550,1426,1427],{"class":564},"            },\n",[550,1429,1430],{"class":552,"line":1213},[550,1431,1432],{"class":564},"        },\n",[550,1434,1435],{"class":552,"line":1219},[550,1436,1216],{"class":564},[550,1438,1439],{"class":552,"line":1237},[550,1440,640],{"class":564},[881,1442,1444],{"id":1443},"步骤-2-初始化记忆模块","步骤 2: 初始化记忆模块",[541,1446,1448],{"className":543,"code":1447,"language":545,"meta":546,"style":546},"from memos.memories.factory import MemoryFactory\n\nmemory = MemoryFactory.from_config(config)\n",[254,1449,1450,1470,1474],{"__ignoreMap":546},[550,1451,1452,1454,1456,1458,1460,1462,1465,1467],{"class":552,"line":553},[550,1453,557],{"class":556},[550,1455,561],{"class":560},[550,1457,565],{"class":564},[550,1459,568],{"class":560},[550,1461,565],{"class":564},[550,1463,1464],{"class":560},"factory ",[550,1466,581],{"class":556},[550,1468,1469],{"class":560}," MemoryFactory\n",[550,1471,1472],{"class":552,"line":587},[550,1473,613],{"emptyLinePlaceholder":612},[550,1475,1476,1478,1480,1483,1485,1488,1490,1492],{"class":552,"line":609},[550,1477,601],{"class":560},[550,1479,621],{"class":564},[550,1481,1482],{"class":560}," MemoryFactory",[550,1484,565],{"class":564},[550,1486,1487],{"class":624},"from_config",[550,1489,628],{"class":564},[550,1491,631],{"class":624},[550,1493,640],{"class":564},[881,1495,1497],{"id":1496},"步骤-3-提取并添加记忆","步骤 3: 提取并添加记忆",[541,1499,1501],{"className":543,"code":1500,"language":545,"meta":546,"style":546},"# 从对话中自动提取记忆\nmemories = memory.extract([\n    {\"role\": \"user\", \"content\": \"I love tomatoes.\"},\n    {\"role\": \"assistant\", \"content\": \"Great! Tomatoes are delicious.\"},\n])\n\n# 添加到记忆库\nmemory.add(memories)\nprint(f\"✓ 已添加 {len(memories)} 条记忆\")\n",[254,1502,1503,1509,1527,1570,1608,1613,1617,1622,1637],{"__ignoreMap":546},[550,1504,1505],{"class":552,"line":553},[550,1506,1508],{"class":1507},"sHwdD","# 从对话中自动提取记忆\n",[550,1510,1511,1514,1516,1519,1521,1524],{"class":552,"line":587},[550,1512,1513],{"class":560},"memories ",[550,1515,621],{"class":564},[550,1517,1518],{"class":560}," memory",[550,1520,565],{"class":564},[550,1522,1523],{"class":624},"extract",[550,1525,1526],{"class":564},"([\n",[550,1528,1529,1532,1534,1537,1539,1541,1543,1546,1548,1551,1553,1556,1558,1560,1562,1565,1567],{"class":552,"line":609},[550,1530,1531],{"class":564},"    {",[550,1533,1030],{"class":564},[550,1535,1536],{"class":1038},"role",[550,1538,1030],{"class":564},[550,1540,634],{"class":564},[550,1542,1035],{"class":564},[550,1544,1545],{"class":1038},"user",[550,1547,1030],{"class":564},[550,1549,1550],{"class":564},",",[550,1552,1035],{"class":564},[550,1554,1555],{"class":1038},"content",[550,1557,1030],{"class":564},[550,1559,634],{"class":564},[550,1561,1035],{"class":564},[550,1563,1564],{"class":1038},"I love tomatoes.",[550,1566,1030],{"class":564},[550,1568,1569],{"class":564},"},\n",[550,1571,1572,1574,1576,1578,1580,1582,1584,1587,1589,1591,1593,1595,1597,1599,1601,1604,1606],{"class":552,"line":616},[550,1573,1531],{"class":564},[550,1575,1030],{"class":564},[550,1577,1536],{"class":1038},[550,1579,1030],{"class":564},[550,1581,634],{"class":564},[550,1583,1035],{"class":564},[550,1585,1586],{"class":1038},"assistant",[550,1588,1030],{"class":564},[550,1590,1550],{"class":564},[550,1592,1035],{"class":564},[550,1594,1555],{"class":1038},[550,1596,1030],{"class":564},[550,1598,634],{"class":564},[550,1600,1035],{"class":564},[550,1602,1603],{"class":1038},"Great! Tomatoes are delicious.",[550,1605,1030],{"class":564},[550,1607,1569],{"class":564},[550,1609,1610],{"class":552,"line":1074},[550,1611,1612],{"class":564},"])\n",[550,1614,1615],{"class":552,"line":1096},[550,1616,613],{"emptyLinePlaceholder":612},[550,1618,1619],{"class":552,"line":1109},[550,1620,1621],{"class":1507},"# 添加到记忆库\n",[550,1623,1624,1626,1628,1631,1633,1635],{"class":552,"line":1132},[550,1625,308],{"class":560},[550,1627,565],{"class":564},[550,1629,1630],{"class":624},"add",[550,1632,628],{"class":564},[550,1634,568],{"class":624},[550,1636,640],{"class":564},[550,1638,1639,1642,1644,1647,1650,1653,1656,1658,1660,1662,1665,1668],{"class":552,"line":1149},[550,1640,1641],{"class":624},"print",[550,1643,628],{"class":564},[550,1645,1646],{"class":1026},"f",[550,1648,1649],{"class":1038},"\"✓ 已添加 ",[550,1651,1652],{"class":1080},"{",[550,1654,1655],{"class":624},"len",[550,1657,628],{"class":564},[550,1659,568],{"class":624},[550,1661,342],{"class":564},[550,1663,1664],{"class":1080},"}",[550,1666,1667],{"class":1038}," 条记忆\"",[550,1669,640],{"class":564},[1671,1672,1674],"alert",{"type":1673},"info",[136,1675,1676,1679,1681,1682,1685,1686,1688,1689],{},[172,1677,1678],{},"进阶：使用 MultiModal Reader",[238,1680],{},"\n如果需要处理图片、URL、文件等多模态内容，可以使用 ",[254,1683,1684],{},"MultiModalStructMemReader","。",[238,1687],{},"\n查看完整示例：",[21,1690,1692],{"href":1691},".\u002Ftree_textual_memory#%E4%BD%BF%E7%94%A8-multimodalstructmemreader%E9%AB%98%E7%BA%A7","使用 MultiModalStructMemReader",[160,1694,102],{"id":102},[136,1696,1697],{},"以下是一个完整的端到端示例，展示所有核心功能：",[541,1699,1701],{"className":543,"code":1700,"language":545,"meta":546,"style":546},"from memos.configs.memory import MemoryConfigFactory\nfrom memos.memories.factory import MemoryFactory\n\n# ========================================\n# 1. 初始化\n# ========================================\nconfig = MemoryConfigFactory(\n    backend=\"naive_text\",\n    config={\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    },\n)\nmemory = MemoryFactory.from_config(config)\n\n# ========================================\n# 2. 提取并添加记忆\n# ========================================\nmemories = memory.extract([\n    {\"role\": \"user\", \"content\": \"I love tomatoes.\"},\n    {\"role\": \"assistant\", \"content\": \"Great! Tomatoes are delicious.\"},\n])\nmemory.add(memories)\nprint(f\"✓ 已添加 {len(memories)} 条记忆\")\n\n# ========================================\n# 3. 搜索记忆\n# ========================================\nresults = memory.search(\"tomatoes\", top_k=2)\nprint(f\"\\n🔍 找到 {len(results)} 条相关记忆:\")\nfor i, item in enumerate(results, 1):\n    print(f\"  {i}. {item.memory}\")\n\n# ========================================\n# 4. 获取所有记忆\n# ========================================\nall_memories = memory.get_all()\nprint(f\"\\n📊 总共 {len(all_memories)} 条记忆\")\n\n# ========================================\n# 5. 更新记忆\n# ========================================\nif memories:\n    memory_id = memories[0].id\n    memory.update(\n        memory_id, \n        {\n            \"memory\": \"User loves tomatoes.\",\n            \"metadata\": {\"type\": \"opinion\", \"confidence\": 95.0}\n        }\n    )\n    print(f\"\\n✓ 已更新记忆: {memory_id}\")\n\n# ========================================\n# 6. 持久化存储\n# ========================================\nmemory.dump(\"tmp\u002Fmem\")\nprint(\"\\n💾 记忆已保存到 tmp\u002Fmem\u002Ftextual_memory.json\")\n\n# ========================================\n# 7. 加载记忆\n# ========================================\nmemory.load(\"tmp\u002Fmem\")\nprint(\"✓ 记忆已从文件加载\")\n\n# ========================================\n# 8. 删除记忆\n# ========================================\nif memories:\n    memory.delete([memories[0].id])\n    print(f\"\\n🗑️ 已删除 1 条记忆\")\n\n# 删除所有记忆\n# memory.delete_all()\n",[254,1702,1703,1721,1739,1743,1748,1753,1757,1767,1781,1787,1799,1817,1829,1847,1865,1869,1873,1878,1883,1902,1907,1912,1918,1923,1938,1975,2012,2017,2032,2059,2064,2069,2075,2080,2116,2151,2183,2221,2226,2231,2237,2242,2260,2293,2298,2303,2309,2314,2326,2348,2361,2372,2378,2398,2442,2448,2454,2481,2486,2491,2497,2502,2523,2541,2546,2551,2557,2562,2582,2598,2603,2608,2614,2619,2628,2653,2671,2676,2682],{"__ignoreMap":546},[550,1704,1705,1707,1709,1711,1713,1715,1717,1719],{"class":552,"line":553},[550,1706,557],{"class":556},[550,1708,561],{"class":560},[550,1710,565],{"class":564},[550,1712,596],{"class":560},[550,1714,565],{"class":564},[550,1716,601],{"class":560},[550,1718,581],{"class":556},[550,1720,1283],{"class":560},[550,1722,1723,1725,1727,1729,1731,1733,1735,1737],{"class":552,"line":587},[550,1724,557],{"class":556},[550,1726,561],{"class":560},[550,1728,565],{"class":564},[550,1730,568],{"class":560},[550,1732,565],{"class":564},[550,1734,1464],{"class":560},[550,1736,581],{"class":556},[550,1738,1469],{"class":560},[550,1740,1741],{"class":552,"line":609},[550,1742,613],{"emptyLinePlaceholder":612},[550,1744,1745],{"class":552,"line":616},[550,1746,1747],{"class":1507},"# ========================================\n",[550,1749,1750],{"class":552,"line":1074},[550,1751,1752],{"class":1507},"# 1. 初始化\n",[550,1754,1755],{"class":552,"line":1096},[550,1756,1747],{"class":1507},[550,1758,1759,1761,1763,1765],{"class":552,"line":1109},[550,1760,1292],{"class":560},[550,1762,621],{"class":564},[550,1764,1297],{"class":624},[550,1766,1300],{"class":564},[550,1768,1769,1771,1773,1775,1777,1779],{"class":552,"line":1132},[550,1770,1306],{"class":1305},[550,1772,621],{"class":564},[550,1774,1030],{"class":564},[550,1776,1039],{"class":1038},[550,1778,1030],{"class":564},[550,1780,1044],{"class":564},[550,1782,1783,1785],{"class":552,"line":1149},[550,1784,1321],{"class":1305},[550,1786,1324],{"class":564},[550,1788,1789,1791,1793,1795,1797],{"class":552,"line":1166},[550,1790,1112],{"class":564},[550,1792,968],{"class":1038},[550,1794,1030],{"class":564},[550,1796,634],{"class":564},[550,1798,1057],{"class":564},[550,1800,1801,1803,1805,1807,1809,1811,1813,1815],{"class":552,"line":1187},[550,1802,1341],{"class":564},[550,1804,1027],{"class":1038},[550,1806,1030],{"class":564},[550,1808,634],{"class":564},[550,1810,1035],{"class":564},[550,1812,1089],{"class":1038},[550,1814,1030],{"class":564},[550,1816,1044],{"class":564},[550,1818,1819,1821,1823,1825,1827],{"class":552,"line":1207},[550,1820,1341],{"class":564},[550,1822,631],{"class":1038},[550,1824,1030],{"class":564},[550,1826,634],{"class":564},[550,1828,1057],{"class":564},[550,1830,1831,1833,1835,1837,1839,1841,1843,1845],{"class":552,"line":1213},[550,1832,1372],{"class":564},[550,1834,1116],{"class":1038},[550,1836,1030],{"class":564},[550,1838,634],{"class":564},[550,1840,1035],{"class":564},[550,1842,1125],{"class":1038},[550,1844,1030],{"class":564},[550,1846,1044],{"class":564},[550,1848,1849,1851,1853,1855,1857,1859,1861,1863],{"class":552,"line":1219},[550,1850,1372],{"class":564},[550,1852,1192],{"class":1038},[550,1854,1030],{"class":564},[550,1856,634],{"class":564},[550,1858,1035],{"class":564},[550,1860,1401],{"class":1038},[550,1862,1030],{"class":564},[550,1864,1044],{"class":564},[550,1866,1867],{"class":552,"line":1237},[550,1868,1427],{"class":564},[550,1870,1871],{"class":552,"line":1243},[550,1872,1432],{"class":564},[550,1874,1876],{"class":552,"line":1875},17,[550,1877,1216],{"class":564},[550,1879,1881],{"class":552,"line":1880},18,[550,1882,640],{"class":564},[550,1884,1886,1888,1890,1892,1894,1896,1898,1900],{"class":552,"line":1885},19,[550,1887,601],{"class":560},[550,1889,621],{"class":564},[550,1891,1482],{"class":560},[550,1893,565],{"class":564},[550,1895,1487],{"class":624},[550,1897,628],{"class":564},[550,1899,631],{"class":624},[550,1901,640],{"class":564},[550,1903,1905],{"class":552,"line":1904},20,[550,1906,613],{"emptyLinePlaceholder":612},[550,1908,1910],{"class":552,"line":1909},21,[550,1911,1747],{"class":1507},[550,1913,1915],{"class":552,"line":1914},22,[550,1916,1917],{"class":1507},"# 2. 提取并添加记忆\n",[550,1919,1921],{"class":552,"line":1920},23,[550,1922,1747],{"class":1507},[550,1924,1926,1928,1930,1932,1934,1936],{"class":552,"line":1925},24,[550,1927,1513],{"class":560},[550,1929,621],{"class":564},[550,1931,1518],{"class":560},[550,1933,565],{"class":564},[550,1935,1523],{"class":624},[550,1937,1526],{"class":564},[550,1939,1941,1943,1945,1947,1949,1951,1953,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973],{"class":552,"line":1940},25,[550,1942,1531],{"class":564},[550,1944,1030],{"class":564},[550,1946,1536],{"class":1038},[550,1948,1030],{"class":564},[550,1950,634],{"class":564},[550,1952,1035],{"class":564},[550,1954,1545],{"class":1038},[550,1956,1030],{"class":564},[550,1958,1550],{"class":564},[550,1960,1035],{"class":564},[550,1962,1555],{"class":1038},[550,1964,1030],{"class":564},[550,1966,634],{"class":564},[550,1968,1035],{"class":564},[550,1970,1564],{"class":1038},[550,1972,1030],{"class":564},[550,1974,1569],{"class":564},[550,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000,2002,2004,2006,2008,2010],{"class":552,"line":1977},26,[550,1979,1531],{"class":564},[550,1981,1030],{"class":564},[550,1983,1536],{"class":1038},[550,1985,1030],{"class":564},[550,1987,634],{"class":564},[550,1989,1035],{"class":564},[550,1991,1586],{"class":1038},[550,1993,1030],{"class":564},[550,1995,1550],{"class":564},[550,1997,1035],{"class":564},[550,1999,1555],{"class":1038},[550,2001,1030],{"class":564},[550,2003,634],{"class":564},[550,2005,1035],{"class":564},[550,2007,1603],{"class":1038},[550,2009,1030],{"class":564},[550,2011,1569],{"class":564},[550,2013,2015],{"class":552,"line":2014},27,[550,2016,1612],{"class":564},[550,2018,2020,2022,2024,2026,2028,2030],{"class":552,"line":2019},28,[550,2021,308],{"class":560},[550,2023,565],{"class":564},[550,2025,1630],{"class":624},[550,2027,628],{"class":564},[550,2029,568],{"class":624},[550,2031,640],{"class":564},[550,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055,2057],{"class":552,"line":2034},29,[550,2036,1641],{"class":624},[550,2038,628],{"class":564},[550,2040,1646],{"class":1026},[550,2042,1649],{"class":1038},[550,2044,1652],{"class":1080},[550,2046,1655],{"class":624},[550,2048,628],{"class":564},[550,2050,568],{"class":624},[550,2052,342],{"class":564},[550,2054,1664],{"class":1080},[550,2056,1667],{"class":1038},[550,2058,640],{"class":564},[550,2060,2062],{"class":552,"line":2061},30,[550,2063,613],{"emptyLinePlaceholder":612},[550,2065,2067],{"class":552,"line":2066},31,[550,2068,1747],{"class":1507},[550,2070,2072],{"class":552,"line":2071},32,[550,2073,2074],{"class":1507},"# 3. 搜索记忆\n",[550,2076,2078],{"class":552,"line":2077},33,[550,2079,1747],{"class":1507},[550,2081,2083,2086,2088,2090,2092,2095,2097,2099,2102,2104,2106,2109,2111,2114],{"class":552,"line":2082},34,[550,2084,2085],{"class":560},"results ",[550,2087,621],{"class":564},[550,2089,1518],{"class":560},[550,2091,565],{"class":564},[550,2093,2094],{"class":624},"search",[550,2096,628],{"class":564},[550,2098,1030],{"class":564},[550,2100,2101],{"class":1038},"tomatoes",[550,2103,1030],{"class":564},[550,2105,1550],{"class":564},[550,2107,2108],{"class":1305}," top_k",[550,2110,621],{"class":564},[550,2112,2113],{"class":1080},"2",[550,2115,640],{"class":564},[550,2117,2119,2121,2123,2125,2127,2130,2133,2135,2137,2139,2142,2144,2146,2149],{"class":552,"line":2118},35,[550,2120,1641],{"class":624},[550,2122,628],{"class":564},[550,2124,1646],{"class":1026},[550,2126,1030],{"class":1038},[550,2128,2129],{"class":560},"\\n",[550,2131,2132],{"class":1038},"🔍 找到 ",[550,2134,1652],{"class":1080},[550,2136,1655],{"class":624},[550,2138,628],{"class":564},[550,2140,2141],{"class":624},"results",[550,2143,342],{"class":564},[550,2145,1664],{"class":1080},[550,2147,2148],{"class":1038}," 条相关记忆:\"",[550,2150,640],{"class":564},[550,2152,2154,2157,2160,2162,2165,2168,2171,2173,2175,2177,2180],{"class":552,"line":2153},36,[550,2155,2156],{"class":556},"for",[550,2158,2159],{"class":560}," i",[550,2161,1550],{"class":564},[550,2163,2164],{"class":560}," item ",[550,2166,2167],{"class":556},"in",[550,2169,2170],{"class":624}," enumerate",[550,2172,628],{"class":564},[550,2174,2141],{"class":624},[550,2176,1550],{"class":564},[550,2178,2179],{"class":1080}," 1",[550,2181,2182],{"class":564},"):\n",[550,2184,2186,2189,2191,2193,2196,2198,2201,2203,2206,2208,2211,2213,2215,2217,2219],{"class":552,"line":2185},37,[550,2187,2188],{"class":624},"    print",[550,2190,628],{"class":564},[550,2192,1646],{"class":1026},[550,2194,2195],{"class":1038},"\"  ",[550,2197,1652],{"class":1080},[550,2199,2200],{"class":624},"i",[550,2202,1664],{"class":1080},[550,2204,2205],{"class":1038},". ",[550,2207,1652],{"class":1080},[550,2209,2210],{"class":624},"item",[550,2212,565],{"class":564},[550,2214,308],{"class":1115},[550,2216,1664],{"class":1080},[550,2218,1030],{"class":1038},[550,2220,640],{"class":564},[550,2222,2224],{"class":552,"line":2223},38,[550,2225,613],{"emptyLinePlaceholder":612},[550,2227,2229],{"class":552,"line":2228},39,[550,2230,1747],{"class":1507},[550,2232,2234],{"class":552,"line":2233},40,[550,2235,2236],{"class":1507},"# 4. 获取所有记忆\n",[550,2238,2240],{"class":552,"line":2239},41,[550,2241,1747],{"class":1507},[550,2243,2245,2248,2250,2252,2254,2257],{"class":552,"line":2244},42,[550,2246,2247],{"class":560},"all_memories ",[550,2249,621],{"class":564},[550,2251,1518],{"class":560},[550,2253,565],{"class":564},[550,2255,2256],{"class":624},"get_all",[550,2258,2259],{"class":564},"()\n",[550,2261,2263,2265,2267,2269,2271,2273,2276,2278,2280,2282,2285,2287,2289,2291],{"class":552,"line":2262},43,[550,2264,1641],{"class":624},[550,2266,628],{"class":564},[550,2268,1646],{"class":1026},[550,2270,1030],{"class":1038},[550,2272,2129],{"class":560},[550,2274,2275],{"class":1038},"📊 总共 ",[550,2277,1652],{"class":1080},[550,2279,1655],{"class":624},[550,2281,628],{"class":564},[550,2283,2284],{"class":624},"all_memories",[550,2286,342],{"class":564},[550,2288,1664],{"class":1080},[550,2290,1667],{"class":1038},[550,2292,640],{"class":564},[550,2294,2296],{"class":552,"line":2295},44,[550,2297,613],{"emptyLinePlaceholder":612},[550,2299,2301],{"class":552,"line":2300},45,[550,2302,1747],{"class":1507},[550,2304,2306],{"class":552,"line":2305},46,[550,2307,2308],{"class":1507},"# 5. 更新记忆\n",[550,2310,2312],{"class":552,"line":2311},47,[550,2313,1747],{"class":1507},[550,2315,2317,2320,2323],{"class":552,"line":2316},48,[550,2318,2319],{"class":556},"if",[550,2321,2322],{"class":560}," memories",[550,2324,2325],{"class":564},":\n",[550,2327,2329,2332,2334,2336,2339,2342,2345],{"class":552,"line":2328},49,[550,2330,2331],{"class":560},"    memory_id ",[550,2333,621],{"class":564},[550,2335,2322],{"class":560},[550,2337,2338],{"class":564},"[",[550,2340,2341],{"class":1080},"0",[550,2343,2344],{"class":564},"].",[550,2346,2347],{"class":1115},"id\n",[550,2349,2351,2354,2356,2359],{"class":552,"line":2350},50,[550,2352,2353],{"class":560},"    memory",[550,2355,565],{"class":564},[550,2357,2358],{"class":624},"update",[550,2360,1300],{"class":564},[550,2362,2364,2367,2369],{"class":552,"line":2363},51,[550,2365,2366],{"class":624},"        memory_id",[550,2368,1550],{"class":564},[550,2370,2371],{"class":624}," \n",[550,2373,2375],{"class":552,"line":2374},52,[550,2376,2377],{"class":564},"        {\n",[550,2379,2381,2383,2385,2387,2389,2391,2394,2396],{"class":552,"line":2380},53,[550,2382,1341],{"class":564},[550,2384,308],{"class":1038},[550,2386,1030],{"class":564},[550,2388,634],{"class":564},[550,2390,1035],{"class":564},[550,2392,2393],{"class":1038},"User loves tomatoes.",[550,2395,1030],{"class":564},[550,2397,1044],{"class":564},[550,2399,2401,2403,2405,2407,2409,2412,2414,2416,2418,2420,2422,2425,2427,2429,2431,2433,2435,2437,2440],{"class":552,"line":2400},54,[550,2402,1341],{"class":564},[550,2404,325],{"class":1038},[550,2406,1030],{"class":564},[550,2408,634],{"class":564},[550,2410,2411],{"class":564}," {",[550,2413,1030],{"class":564},[550,2415,369],{"class":1038},[550,2417,1030],{"class":564},[550,2419,634],{"class":564},[550,2421,1035],{"class":564},[550,2423,2424],{"class":1038},"opinion",[550,2426,1030],{"class":564},[550,2428,1550],{"class":564},[550,2430,1035],{"class":564},[550,2432,443],{"class":1038},[550,2434,1030],{"class":564},[550,2436,634],{"class":564},[550,2438,2439],{"class":1080}," 95.0",[550,2441,1246],{"class":564},[550,2443,2445],{"class":552,"line":2444},55,[550,2446,2447],{"class":564},"        }\n",[550,2449,2451],{"class":552,"line":2450},56,[550,2452,2453],{"class":564},"    )\n",[550,2455,2457,2459,2461,2463,2465,2467,2470,2472,2475,2477,2479],{"class":552,"line":2456},57,[550,2458,2188],{"class":624},[550,2460,628],{"class":564},[550,2462,1646],{"class":1026},[550,2464,1030],{"class":1038},[550,2466,2129],{"class":560},[550,2468,2469],{"class":1038},"✓ 已更新记忆: ",[550,2471,1652],{"class":1080},[550,2473,2474],{"class":624},"memory_id",[550,2476,1664],{"class":1080},[550,2478,1030],{"class":1038},[550,2480,640],{"class":564},[550,2482,2484],{"class":552,"line":2483},58,[550,2485,613],{"emptyLinePlaceholder":612},[550,2487,2489],{"class":552,"line":2488},59,[550,2490,1747],{"class":1507},[550,2492,2494],{"class":552,"line":2493},60,[550,2495,2496],{"class":1507},"# 6. 持久化存储\n",[550,2498,2500],{"class":552,"line":2499},61,[550,2501,1747],{"class":1507},[550,2503,2505,2507,2509,2512,2514,2516,2519,2521],{"class":552,"line":2504},62,[550,2506,308],{"class":560},[550,2508,565],{"class":564},[550,2510,2511],{"class":624},"dump",[550,2513,628],{"class":564},[550,2515,1030],{"class":564},[550,2517,2518],{"class":1038},"tmp\u002Fmem",[550,2520,1030],{"class":564},[550,2522,640],{"class":564},[550,2524,2526,2528,2530,2532,2534,2537,2539],{"class":552,"line":2525},63,[550,2527,1641],{"class":624},[550,2529,628],{"class":564},[550,2531,1030],{"class":564},[550,2533,2129],{"class":560},[550,2535,2536],{"class":1038},"💾 记忆已保存到 tmp\u002Fmem\u002Ftextual_memory.json",[550,2538,1030],{"class":564},[550,2540,640],{"class":564},[550,2542,2544],{"class":552,"line":2543},64,[550,2545,613],{"emptyLinePlaceholder":612},[550,2547,2549],{"class":552,"line":2548},65,[550,2550,1747],{"class":1507},[550,2552,2554],{"class":552,"line":2553},66,[550,2555,2556],{"class":1507},"# 7. 加载记忆\n",[550,2558,2560],{"class":552,"line":2559},67,[550,2561,1747],{"class":1507},[550,2563,2565,2567,2569,2572,2574,2576,2578,2580],{"class":552,"line":2564},68,[550,2566,308],{"class":560},[550,2568,565],{"class":564},[550,2570,2571],{"class":624},"load",[550,2573,628],{"class":564},[550,2575,1030],{"class":564},[550,2577,2518],{"class":1038},[550,2579,1030],{"class":564},[550,2581,640],{"class":564},[550,2583,2585,2587,2589,2591,2594,2596],{"class":552,"line":2584},69,[550,2586,1641],{"class":624},[550,2588,628],{"class":564},[550,2590,1030],{"class":564},[550,2592,2593],{"class":1038},"✓ 记忆已从文件加载",[550,2595,1030],{"class":564},[550,2597,640],{"class":564},[550,2599,2601],{"class":552,"line":2600},70,[550,2602,613],{"emptyLinePlaceholder":612},[550,2604,2606],{"class":552,"line":2605},71,[550,2607,1747],{"class":1507},[550,2609,2611],{"class":552,"line":2610},72,[550,2612,2613],{"class":1507},"# 8. 删除记忆\n",[550,2615,2617],{"class":552,"line":2616},73,[550,2618,1747],{"class":1507},[550,2620,2622,2624,2626],{"class":552,"line":2621},74,[550,2623,2319],{"class":556},[550,2625,2322],{"class":560},[550,2627,2325],{"class":564},[550,2629,2631,2633,2635,2638,2641,2643,2645,2647,2649,2651],{"class":552,"line":2630},75,[550,2632,2353],{"class":560},[550,2634,565],{"class":564},[550,2636,2637],{"class":624},"delete",[550,2639,2640],{"class":564},"([",[550,2642,568],{"class":624},[550,2644,2338],{"class":564},[550,2646,2341],{"class":1080},[550,2648,2344],{"class":564},[550,2650,290],{"class":1115},[550,2652,1612],{"class":564},[550,2654,2656,2658,2660,2662,2664,2666,2669],{"class":552,"line":2655},76,[550,2657,2188],{"class":624},[550,2659,628],{"class":564},[550,2661,1646],{"class":1026},[550,2663,1030],{"class":1038},[550,2665,2129],{"class":560},[550,2667,2668],{"class":1038},"🗑️ 已删除 1 条记忆\"",[550,2670,640],{"class":564},[550,2672,2674],{"class":552,"line":2673},77,[550,2675,613],{"emptyLinePlaceholder":612},[550,2677,2679],{"class":552,"line":2678},78,[550,2680,2681],{"class":1507},"# 删除所有记忆\n",[550,2683,2685],{"class":552,"line":2684},79,[550,2686,2687],{"class":1507},"# memory.delete_all()\n",[230,2689,2690],{},[136,2691,2692,2695,2697,2698,2700],{},[172,2693,2694],{},"扩展：互联网检索",[238,2696],{},"\nNaiveTextMemory 专注于本地记忆管理。如需从互联网检索信息并添加到记忆库，请查看：",[238,2699],{},[21,2701,2703],{"href":2702},".\u002Ftree_textual_memory#%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","从互联网检索记忆",[160,2705,108],{"id":108},[136,2707,2708,2709,2711],{},"调用 ",[254,2710,834],{}," 时，系统会将记忆保存到：",[541,2713,2718],{"className":2714,"code":2716,"language":2717},[2715],"language-text","\u003Cdir>\u002F\u003Cconfig.memory_filename>\n","text",[254,2719,2716],{"__ignoreMap":546},[136,2721,2722,2723,2725],{},"该文件包含所有记忆条目的JSON列表，可以使用",[254,2724,853],{},"重新加载.",[136,2727,2728],{},[172,2729,2730],{},"默认文件结构",[541,2732,2734],{"className":1009,"code":2733,"language":1011,"meta":546,"style":546},"[\n  {\n    \"id\": \"550e8400-e29b-41d4-a716-446655440000\",\n    \"memory\": \"User loves tomatoes.\",\n    \"metadata\": {\n      \"type\": \"opinion\",\n      \"confidence\": 95.0,\n      \"entities\": [\"user\", \"tomatoes\"],\n      \"tags\": [\"food\", \"preference\"],\n      \"updated_at\": \"2026-01-14T10:30:00Z\"\n    }\n  },\n  ...\n]\n",[254,2735,2736,2741,2746,2765,2783,2795,2813,2827,2857,2887,2904,2909,2914,2919],{"__ignoreMap":546},[550,2737,2738],{"class":552,"line":553},[550,2739,2740],{"class":564},"[\n",[550,2742,2743],{"class":552,"line":587},[550,2744,2745],{"class":564},"  {\n",[550,2747,2748,2750,2752,2754,2756,2758,2761,2763],{"class":552,"line":609},[550,2749,1062],{"class":564},[550,2751,290],{"class":1026},[550,2753,1030],{"class":564},[550,2755,634],{"class":564},[550,2757,1035],{"class":564},[550,2759,2760],{"class":1038},"550e8400-e29b-41d4-a716-446655440000",[550,2762,1030],{"class":564},[550,2764,1044],{"class":564},[550,2766,2767,2769,2771,2773,2775,2777,2779,2781],{"class":552,"line":616},[550,2768,1062],{"class":564},[550,2770,308],{"class":1026},[550,2772,1030],{"class":564},[550,2774,634],{"class":564},[550,2776,1035],{"class":564},[550,2778,2393],{"class":1038},[550,2780,1030],{"class":564},[550,2782,1044],{"class":564},[550,2784,2785,2787,2789,2791,2793],{"class":552,"line":1074},[550,2786,1062],{"class":564},[550,2788,325],{"class":1026},[550,2790,1030],{"class":564},[550,2792,634],{"class":564},[550,2794,1057],{"class":564},[550,2796,2797,2799,2801,2803,2805,2807,2809,2811],{"class":552,"line":1096},[550,2798,1077],{"class":564},[550,2800,369],{"class":1065},[550,2802,1030],{"class":564},[550,2804,634],{"class":564},[550,2806,1035],{"class":564},[550,2808,2424],{"class":1038},[550,2810,1030],{"class":564},[550,2812,1044],{"class":564},[550,2814,2815,2817,2819,2821,2823,2825],{"class":552,"line":1109},[550,2816,1077],{"class":564},[550,2818,443],{"class":1065},[550,2820,1030],{"class":564},[550,2822,634],{"class":564},[550,2824,2439],{"class":1080},[550,2826,1044],{"class":564},[550,2828,2829,2831,2833,2835,2837,2840,2842,2844,2846,2848,2850,2852,2854],{"class":552,"line":1132},[550,2830,1077],{"class":564},[550,2832,461],{"class":1065},[550,2834,1030],{"class":564},[550,2836,634],{"class":564},[550,2838,2839],{"class":564}," [",[550,2841,1030],{"class":564},[550,2843,1545],{"class":1038},[550,2845,1030],{"class":564},[550,2847,1550],{"class":564},[550,2849,1035],{"class":564},[550,2851,2101],{"class":1038},[550,2853,1030],{"class":564},[550,2855,2856],{"class":564},"],\n",[550,2858,2859,2861,2863,2865,2867,2869,2871,2874,2876,2878,2880,2883,2885],{"class":552,"line":1149},[550,2860,1077],{"class":564},[550,2862,481],{"class":1065},[550,2864,1030],{"class":564},[550,2866,634],{"class":564},[550,2868,2839],{"class":564},[550,2870,1030],{"class":564},[550,2872,2873],{"class":1038},"food",[550,2875,1030],{"class":564},[550,2877,1550],{"class":564},[550,2879,1035],{"class":564},[550,2881,2882],{"class":1038},"preference",[550,2884,1030],{"class":564},[550,2886,2856],{"class":564},[550,2888,2889,2891,2893,2895,2897,2899,2902],{"class":552,"line":1166},[550,2890,1077],{"class":564},[550,2892,524],{"class":1065},[550,2894,1030],{"class":564},[550,2896,634],{"class":564},[550,2898,1035],{"class":564},[550,2900,2901],{"class":1038},"2026-01-14T10:30:00Z",[550,2903,1204],{"class":564},[550,2905,2906],{"class":552,"line":1187},[550,2907,2908],{"class":564},"    }\n",[550,2910,2911],{"class":552,"line":1207},[550,2912,2913],{"class":564},"  },\n",[550,2915,2916],{"class":552,"line":1213},[550,2917,2918],{"class":560},"  ...\n",[550,2920,2921],{"class":552,"line":1219},[550,2922,2923],{"class":564},"]\n",[136,2925,2926,2927,2929],{},"使用 ",[254,2928,853],{}," 可以完整恢复所有记忆数据。",[230,2931,2932],{},[136,2933,2934,2937,2939,2940,2943],{},[172,2935,2936],{},"重要提示",[238,2938],{},"\n记忆存储在内存中，进程重启后会丢失。请定期调用 ",[254,2941,2942],{},"dump()"," 保存数据！",[11,2945,114],{"id":114},[160,2947,2948],{"id":2948},"最适合的场景",[164,2950,2951],{"icon":166},[15,2952,2953,2959,2965,2971,2977,2983],{},[18,2954,2955,2958],{},[172,2956,2957],{},"快速原型开发","：无需配置向量数据库，几分钟即可启动",[18,2960,2961,2964],{},[172,2962,2963],{},"简单对话代理","：记忆数量 \u003C 1000 条的小规模应用",[18,2966,2967,2970],{},[172,2968,2969],{},"测试和演示","：快速验证记忆提取和检索逻辑",[18,2972,2973,2976],{},[172,2974,2975],{},"资源受限环境","：无法运行嵌入模型或向量数据库的场景",[18,2978,2979,2982],{},[172,2980,2981],{},"关键词搜索","：查询内容与记忆文本直接匹配的场景",[18,2984,2985,2988],{},[172,2986,2987],{},"学习和教学","：了解 MemOS 记忆系统的最佳起点",[160,2990,2991],{"id":2991},"不推荐的场景",[164,2993,2995],{"icon":2994},"ph:x-circle-duotone",[15,2996,2997,3003,3009,3015,3021],{},[18,2998,2999,3002],{},[172,3000,3001],{},"大规模应用","：超过 10,000 条记忆（搜索性能退化）",[18,3004,3005,3008],{},[172,3006,3007],{},"语义搜索需求","：需要理解同义词（如\"猫\"和\"宠物\"）",[18,3010,3011,3014],{},[172,3012,3013],{},"生产环境","：对性能和准确性有严格要求",[18,3016,3017,3020],{},[172,3018,3019],{},"多语言场景","：需要跨语言语义理解",[18,3022,3023,3026],{},[172,3024,3025],{},"复杂关系推理","：需要理解记忆之间的关联关系",[1671,3028,3029,3037],{"type":1673},[136,3030,3031,3034,3036],{},[172,3032,3033],{},"升级路径",[238,3035],{},"\n对于上述不推荐的场景，建议升级到：",[15,3038,3039,3044],{},[18,3040,3041,3043],{},[21,3042,244],{"href":243}," - 向量语义搜索，适合 10K-100K 条记忆",[18,3045,3046,3050],{},[21,3047,3049],{"href":3048},"\u002Fopen_source\u002Fmodules\u002Fmemories\u002Ftree_textual_memory","TreeTextMemory"," - 图结构存储，支持关系推理和多跳查询",[11,3052,120],{"id":120},[136,3054,3055],{},"选择合适的记忆模块对于项目成功至关重要。以下对比帮助你做出决策：",[259,3057,3058,3077],{},[262,3059,3060],{},[265,3061,3062,3065,3069,3073],{},[268,3063,3064],{},"特性",[268,3066,3067],{},[172,3068,871],{},[268,3070,3071],{},[172,3072,244],{},[268,3074,3075],{},[172,3076,3049],{},[281,3078,3079,3094,3110,3126,3142,3157,3170,3183,3199,3215,3231],{},[265,3080,3081,3086,3088,3091],{},[286,3082,3083],{},[172,3084,3085],{},"搜索方式",[286,3087,927],{},[286,3089,3090],{},"向量语义搜索",[286,3092,3093],{},"图结构 + 向量搜索",[265,3095,3096,3101,3104,3107],{},[286,3097,3098],{},[172,3099,3100],{},"依赖组件",[286,3102,3103],{},"仅 LLM",[286,3105,3106],{},"LLM + 嵌入器 + 向量数据库",[286,3108,3109],{},"LLM + 嵌入器 + 图数据库",[265,3111,3112,3117,3120,3123],{},[286,3113,3114],{},[172,3115,3116],{},"适用规模",[286,3118,3119],{},"\u003C 1K 条",[286,3121,3122],{},"1K - 100K 条",[286,3124,3125],{},"10K - 1M 条",[265,3127,3128,3133,3136,3139],{},[286,3129,3130],{},[172,3131,3132],{},"查询复杂度",[286,3134,3135],{},"O(n) 线性扫描",[286,3137,3138],{},"O(log n) 近似最近邻",[286,3140,3141],{},"O(log n) + 图遍历",[265,3143,3144,3149,3152,3155],{},[286,3145,3146],{},[172,3147,3148],{},"语义理解",[286,3150,3151],{},"❌",[286,3153,3154],{},"✅",[286,3156,3154],{},[265,3158,3159,3164,3166,3168],{},[286,3160,3161],{},[172,3162,3163],{},"关系推理",[286,3165,3151],{},[286,3167,3151],{},[286,3169,3154],{},[265,3171,3172,3177,3179,3181],{},[286,3173,3174],{},[172,3175,3176],{},"多跳查询",[286,3178,3151],{},[286,3180,3151],{},[286,3182,3154],{},[265,3184,3185,3190,3193,3196],{},[286,3186,3187],{},[172,3188,3189],{},"存储后端",[286,3191,3192],{},"内存列表",[286,3194,3195],{},"向量数据库（Qdrant 等）",[286,3197,3198],{},"图数据库（Neo4j\u002FPolarDB）",[265,3200,3201,3206,3209,3212],{},[286,3202,3203],{},[172,3204,3205],{},"配置复杂度",[286,3207,3208],{},"低 ⭐",[286,3210,3211],{},"中 ⭐⭐",[286,3213,3214],{},"高 ⭐⭐⭐",[265,3216,3217,3222,3225,3228],{},[286,3218,3219],{},[172,3220,3221],{},"学习曲线",[286,3223,3224],{},"极简",[286,3226,3227],{},"中等",[286,3229,3230],{},"较陡",[265,3232,3233,3238,3241,3244],{},[286,3234,3235],{},[172,3236,3237],{},"生产就绪",[286,3239,3240],{},"❌ 仅原型\u002F演示",[286,3242,3243],{},"✅ 适合大多数场景",[286,3245,3246],{},"✅ 适合复杂应用",[1671,3248,3250,3257],{"type":3249},"success",[136,3251,3252,3255],{},[172,3253,3254],{},"选择建议",[238,3256],{},[15,3258,3259,3267,3275],{},[18,3260,3261,3264,3265],{},[172,3262,3263],{},"刚开始学习？"," → 从 NaiveTextMemory 开始",[238,3266],{},[18,3268,3269,3272,3273],{},[172,3270,3271],{},"需要语义搜索？"," → 使用 GeneralTextMemory",[238,3274],{},[18,3276,3277,3280],{},[172,3278,3279],{},"需要关系推理？"," → 选择 TreeTextMemory",[11,3282,126],{"id":126},[136,3284,3285],{},"遵循以下建议，充分发挥 NaiveTextMemory 的优势：",[878,3287,3288,3292,3404,3408,3557,3561,3643,3647,3812,3816],{},[160,3289,3291],{"id":3290},"_1-定期持久化数据","1. 定期持久化数据",[541,3293,3295],{"className":543,"code":3294,"language":545,"meta":546,"style":546},"# 在关键操作后立即保存\nmemory.add(new_memories)\nmemory.dump(\"tmp\u002Fmem\")  # ✓ 立即持久化\n\n# 定期自动备份\nimport schedule\nschedule.every(10).minutes.do(lambda: memory.dump(\"tmp\u002Fmem\"))\n",[254,3296,3297,3302,3317,3338,3342,3347,3354],{"__ignoreMap":546},[550,3298,3299],{"class":552,"line":553},[550,3300,3301],{"class":1507},"# 在关键操作后立即保存\n",[550,3303,3304,3306,3308,3310,3312,3315],{"class":552,"line":587},[550,3305,308],{"class":560},[550,3307,565],{"class":564},[550,3309,1630],{"class":624},[550,3311,628],{"class":564},[550,3313,3314],{"class":624},"new_memories",[550,3316,640],{"class":564},[550,3318,3319,3321,3323,3325,3327,3329,3331,3333,3335],{"class":552,"line":609},[550,3320,308],{"class":560},[550,3322,565],{"class":564},[550,3324,2511],{"class":624},[550,3326,628],{"class":564},[550,3328,1030],{"class":564},[550,3330,2518],{"class":1038},[550,3332,1030],{"class":564},[550,3334,342],{"class":564},[550,3336,3337],{"class":1507},"  # ✓ 立即持久化\n",[550,3339,3340],{"class":552,"line":616},[550,3341,613],{"emptyLinePlaceholder":612},[550,3343,3344],{"class":552,"line":1074},[550,3345,3346],{"class":1507},"# 定期自动备份\n",[550,3348,3349,3351],{"class":552,"line":1096},[550,3350,581],{"class":556},[550,3352,3353],{"class":560}," schedule\n",[550,3355,3356,3359,3361,3364,3366,3369,3372,3375,3377,3380,3382,3385,3387,3389,3391,3393,3395,3397,3399,3401],{"class":552,"line":1109},[550,3357,3358],{"class":560},"schedule",[550,3360,565],{"class":564},[550,3362,3363],{"class":624},"every",[550,3365,628],{"class":564},[550,3367,3368],{"class":1080},"10",[550,3370,3371],{"class":564},").",[550,3373,3374],{"class":1115},"minutes",[550,3376,565],{"class":564},[550,3378,3379],{"class":624},"do",[550,3381,628],{"class":564},[550,3383,3384],{"class":1026},"lambda",[550,3386,634],{"class":564},[550,3388,1518],{"class":624},[550,3390,565],{"class":564},[550,3392,2511],{"class":624},[550,3394,628],{"class":564},[550,3396,1030],{"class":564},[550,3398,2518],{"class":1038},[550,3400,1030],{"class":564},[550,3402,3403],{"class":564},"))\n",[160,3405,3407],{"id":3406},"_2-控制记忆规模","2. 控制记忆规模",[541,3409,3411],{"className":543,"code":3410,"language":545,"meta":546,"style":546},"# 定期清理旧记忆\nif len(memory.get_all()) > 1000:\n    old_memories = sorted(\n        memory.get_all(),\n        key=lambda m: m.metadata.updated_at\n    )[:100]  # 最旧的 100 条\n    \n    memory.delete([m.id for m in old_memories])\n    print(\"✓ 已清理 100 条旧记忆\")\n",[254,3412,3413,3418,3444,3456,3468,3493,3507,3512,3542],{"__ignoreMap":546},[550,3414,3415],{"class":552,"line":553},[550,3416,3417],{"class":1507},"# 定期清理旧记忆\n",[550,3419,3420,3422,3425,3427,3429,3431,3433,3436,3439,3442],{"class":552,"line":587},[550,3421,2319],{"class":556},[550,3423,3424],{"class":624}," len",[550,3426,628],{"class":564},[550,3428,308],{"class":624},[550,3430,565],{"class":564},[550,3432,2256],{"class":624},[550,3434,3435],{"class":564},"())",[550,3437,3438],{"class":564}," >",[550,3440,3441],{"class":1080}," 1000",[550,3443,2325],{"class":564},[550,3445,3446,3449,3451,3454],{"class":552,"line":609},[550,3447,3448],{"class":560},"    old_memories ",[550,3450,621],{"class":564},[550,3452,3453],{"class":624}," sorted",[550,3455,1300],{"class":564},[550,3457,3458,3461,3463,3465],{"class":552,"line":616},[550,3459,3460],{"class":624},"        memory",[550,3462,565],{"class":564},[550,3464,2256],{"class":624},[550,3466,3467],{"class":564},"(),\n",[550,3469,3470,3473,3475,3477,3480,3482,3484,3486,3488,3490],{"class":552,"line":1074},[550,3471,3472],{"class":1305},"        key",[550,3474,621],{"class":564},[550,3476,3384],{"class":1026},[550,3478,3479],{"class":1305}," m",[550,3481,634],{"class":564},[550,3483,3479],{"class":624},[550,3485,565],{"class":564},[550,3487,325],{"class":1115},[550,3489,565],{"class":564},[550,3491,3492],{"class":1115},"updated_at\n",[550,3494,3495,3498,3501,3504],{"class":552,"line":1096},[550,3496,3497],{"class":564},"    )[:",[550,3499,3500],{"class":1080},"100",[550,3502,3503],{"class":564},"]",[550,3505,3506],{"class":1507},"  # 最旧的 100 条\n",[550,3508,3509],{"class":552,"line":1109},[550,3510,3511],{"class":560},"    \n",[550,3513,3514,3516,3518,3520,3522,3525,3527,3529,3532,3535,3537,3540],{"class":552,"line":1132},[550,3515,2353],{"class":560},[550,3517,565],{"class":564},[550,3519,2637],{"class":624},[550,3521,2640],{"class":564},[550,3523,3524],{"class":624},"m",[550,3526,565],{"class":564},[550,3528,290],{"class":1115},[550,3530,3531],{"class":556}," for",[550,3533,3534],{"class":624}," m ",[550,3536,2167],{"class":556},[550,3538,3539],{"class":624}," old_memories",[550,3541,1612],{"class":564},[550,3543,3544,3546,3548,3550,3553,3555],{"class":552,"line":1149},[550,3545,2188],{"class":624},[550,3547,628],{"class":564},[550,3549,1030],{"class":564},[550,3551,3552],{"class":1038},"✓ 已清理 100 条旧记忆",[550,3554,1030],{"class":564},[550,3556,640],{"class":564},[160,3558,3560],{"id":3559},"_3-优化搜索查询","3. 优化搜索查询",[541,3562,3564],{"className":543,"code":3563,"language":545,"meta":546,"style":546},"# ❌ 不好：模糊查询\nresults = memory.search(\"东西\", top_k=5)\n\n# ✅ 好：使用具体关键词\nresults = memory.search(\"番茄 西红柿\", top_k=5)\n",[254,3565,3566,3571,3603,3607,3612],{"__ignoreMap":546},[550,3567,3568],{"class":552,"line":553},[550,3569,3570],{"class":1507},"# ❌ 不好：模糊查询\n",[550,3572,3573,3575,3577,3579,3581,3583,3585,3587,3590,3592,3594,3596,3598,3601],{"class":552,"line":587},[550,3574,2085],{"class":560},[550,3576,621],{"class":564},[550,3578,1518],{"class":560},[550,3580,565],{"class":564},[550,3582,2094],{"class":624},[550,3584,628],{"class":564},[550,3586,1030],{"class":564},[550,3588,3589],{"class":1038},"东西",[550,3591,1030],{"class":564},[550,3593,1550],{"class":564},[550,3595,2108],{"class":1305},[550,3597,621],{"class":564},[550,3599,3600],{"class":1080},"5",[550,3602,640],{"class":564},[550,3604,3605],{"class":552,"line":609},[550,3606,613],{"emptyLinePlaceholder":612},[550,3608,3609],{"class":552,"line":616},[550,3610,3611],{"class":1507},"# ✅ 好：使用具体关键词\n",[550,3613,3614,3616,3618,3620,3622,3624,3626,3628,3631,3633,3635,3637,3639,3641],{"class":552,"line":1074},[550,3615,2085],{"class":560},[550,3617,621],{"class":564},[550,3619,1518],{"class":560},[550,3621,565],{"class":564},[550,3623,2094],{"class":624},[550,3625,628],{"class":564},[550,3627,1030],{"class":564},[550,3629,3630],{"class":1038},"番茄 西红柿",[550,3632,1030],{"class":564},[550,3634,1550],{"class":564},[550,3636,2108],{"class":1305},[550,3638,621],{"class":564},[550,3640,3600],{"class":1080},[550,3642,640],{"class":564},[160,3644,3646],{"id":3645},"_4-合理使用元数据","4. 合理使用元数据",[541,3648,3650],{"className":543,"code":3649,"language":545,"meta":546,"style":546},"# 添加记忆时设置清晰的元数据\nmemory.add({\n    \"memory\": \"User prefers dark mode\",\n    \"metadata\": {\n        \"type\": \"opinion\",          # ✓ 明确分类\n        \"tags\": [\"UI\", \"preference\"],  # ✓ 便于过滤\n        \"confidence\": 90.0,         # ✓ 标注可信度\n        \"entities\": [\"user\", \"dark mode\"]  # ✓ 实体标注\n    }\n})\n",[254,3651,3652,3657,3668,3687,3699,3720,3753,3771,3803,3807],{"__ignoreMap":546},[550,3653,3654],{"class":552,"line":553},[550,3655,3656],{"class":1507},"# 添加记忆时设置清晰的元数据\n",[550,3658,3659,3661,3663,3665],{"class":552,"line":587},[550,3660,308],{"class":560},[550,3662,565],{"class":564},[550,3664,1630],{"class":624},[550,3666,3667],{"class":564},"({\n",[550,3669,3670,3672,3674,3676,3678,3680,3683,3685],{"class":552,"line":609},[550,3671,1062],{"class":564},[550,3673,308],{"class":1038},[550,3675,1030],{"class":564},[550,3677,634],{"class":564},[550,3679,1035],{"class":564},[550,3681,3682],{"class":1038},"User prefers dark mode",[550,3684,1030],{"class":564},[550,3686,1044],{"class":564},[550,3688,3689,3691,3693,3695,3697],{"class":552,"line":616},[550,3690,1062],{"class":564},[550,3692,325],{"class":1038},[550,3694,1030],{"class":564},[550,3696,634],{"class":564},[550,3698,1057],{"class":564},[550,3700,3701,3703,3705,3707,3709,3711,3713,3715,3717],{"class":552,"line":1074},[550,3702,1112],{"class":564},[550,3704,369],{"class":1038},[550,3706,1030],{"class":564},[550,3708,634],{"class":564},[550,3710,1035],{"class":564},[550,3712,2424],{"class":1038},[550,3714,1030],{"class":564},[550,3716,1550],{"class":564},[550,3718,3719],{"class":1507},"          # ✓ 明确分类\n",[550,3721,3722,3724,3726,3728,3730,3732,3734,3737,3739,3741,3743,3745,3747,3750],{"class":552,"line":1096},[550,3723,1112],{"class":564},[550,3725,481],{"class":1038},[550,3727,1030],{"class":564},[550,3729,634],{"class":564},[550,3731,2839],{"class":564},[550,3733,1030],{"class":564},[550,3735,3736],{"class":1038},"UI",[550,3738,1030],{"class":564},[550,3740,1550],{"class":564},[550,3742,1035],{"class":564},[550,3744,2882],{"class":1038},[550,3746,1030],{"class":564},[550,3748,3749],{"class":564},"],",[550,3751,3752],{"class":1507},"  # ✓ 便于过滤\n",[550,3754,3755,3757,3759,3761,3763,3766,3768],{"class":552,"line":1109},[550,3756,1112],{"class":564},[550,3758,443],{"class":1038},[550,3760,1030],{"class":564},[550,3762,634],{"class":564},[550,3764,3765],{"class":1080}," 90.0",[550,3767,1550],{"class":564},[550,3769,3770],{"class":1507},"         # ✓ 标注可信度\n",[550,3772,3773,3775,3777,3779,3781,3783,3785,3787,3789,3791,3793,3796,3798,3800],{"class":552,"line":1132},[550,3774,1112],{"class":564},[550,3776,461],{"class":1038},[550,3778,1030],{"class":564},[550,3780,634],{"class":564},[550,3782,2839],{"class":564},[550,3784,1030],{"class":564},[550,3786,1545],{"class":1038},[550,3788,1030],{"class":564},[550,3790,1550],{"class":564},[550,3792,1035],{"class":564},[550,3794,3795],{"class":1038},"dark mode",[550,3797,1030],{"class":564},[550,3799,3503],{"class":564},[550,3801,3802],{"class":1507},"  # ✓ 实体标注\n",[550,3804,3805],{"class":552,"line":1149},[550,3806,2908],{"class":564},[550,3808,3809],{"class":552,"line":1166},[550,3810,3811],{"class":564},"})\n",[160,3813,3815],{"id":3814},"_5-规划升级路径","5. 规划升级路径",[541,3817,3819],{"className":543,"code":3818,"language":545,"meta":546,"style":546},"# 监控记忆数量，及时升级\nmemory_count = len(memory.get_all())\nif memory_count > 800:\n    print(\"⚠️ 记忆数量接近上限，建议升级到 GeneralTextMemory\")\n    # 迁移代码参考：\n    # 1. 导出现有记忆：memory.dump(\"backup\")\n    # 2. 创建 GeneralTextMemory 配置\n    # 3. 导入记忆到新模块\n",[254,3820,3821,3826,3846,3861,3876,3881,3886,3891],{"__ignoreMap":546},[550,3822,3823],{"class":552,"line":553},[550,3824,3825],{"class":1507},"# 监控记忆数量，及时升级\n",[550,3827,3828,3831,3833,3835,3837,3839,3841,3843],{"class":552,"line":587},[550,3829,3830],{"class":560},"memory_count ",[550,3832,621],{"class":564},[550,3834,3424],{"class":624},[550,3836,628],{"class":564},[550,3838,308],{"class":624},[550,3840,565],{"class":564},[550,3842,2256],{"class":624},[550,3844,3845],{"class":564},"())\n",[550,3847,3848,3850,3853,3856,3859],{"class":552,"line":609},[550,3849,2319],{"class":556},[550,3851,3852],{"class":560}," memory_count ",[550,3854,3855],{"class":564},">",[550,3857,3858],{"class":1080}," 800",[550,3860,2325],{"class":564},[550,3862,3863,3865,3867,3869,3872,3874],{"class":552,"line":616},[550,3864,2188],{"class":624},[550,3866,628],{"class":564},[550,3868,1030],{"class":564},[550,3870,3871],{"class":1038},"⚠️ 记忆数量接近上限，建议升级到 GeneralTextMemory",[550,3873,1030],{"class":564},[550,3875,640],{"class":564},[550,3877,3878],{"class":552,"line":1074},[550,3879,3880],{"class":1507},"    # 迁移代码参考：\n",[550,3882,3883],{"class":552,"line":1096},[550,3884,3885],{"class":1507},"    # 1. 导出现有记忆：memory.dump(\"backup\")\n",[550,3887,3888],{"class":552,"line":1109},[550,3889,3890],{"class":1507},"    # 2. 创建 GeneralTextMemory 配置\n",[550,3892,3893],{"class":552,"line":1132},[550,3894,3895],{"class":1507},"    # 3. 导入记忆到新模块\n",[11,3897,132],{"id":132},[136,3899,3900],{},"恭喜！你已经掌握了 NaiveTextMemory 的核心用法。接下来可以：",[164,3902,3904],{"icon":3903},"ph:arrow-right-duotone",[15,3905,3906,3915,3924,3935,3945],{},[18,3907,3908,3911,3912,3914],{},[172,3909,3910],{},"升级到向量搜索","：学习 ",[21,3913,244],{"href":243}," 的语义检索能力",[18,3916,3917,3920,3921,3923],{},[172,3918,3919],{},"探索图结构","：了解 ",[21,3922,3049],{"href":3048}," 的关系推理功能",[18,3925,3926,3929,3930,3934],{},[172,3927,3928],{},"集成到应用","：查看 ",[21,3931,3933],{"href":3932},"\u002Fapi-reference\u002Fsearch-memories","完整 API 文档"," 构建生产级应用",[18,3936,3937,3940,3941,3944],{},[172,3938,3939],{},"运行示例代码","：浏览 ",[254,3942,3943],{},"\u002Fexamples\u002F"," 目录获取更多实战案例",[18,3946,3947,3950,3951,3955,3956],{},[172,3948,3949],{},"了解图数据库","：如果需要高级功能，可以学习 ",[21,3952,3954],{"href":3953},"\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fneo4j_graph_db","Neo4j"," 或 ",[21,3957,3959],{"href":3958},"\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fpolardb_graph_db","PolarDB",[1671,3961,3962],{"type":3249},[136,3963,3964,3967,3969],{},[172,3965,3966],{},"提示",[238,3968],{},"\nNaiveTextMemory 是学习 MemOS 的完美起点。当你的应用需要更强大的功能时，可以无缝迁移到其他记忆模块！",[3971,3972,3973],"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 .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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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}",{"title":546,"searchDepth":587,"depth":587,"links":3975},[3976,3977,3978,3982,3987,3993,3998,4002,4003,4010],{"id":13,"depth":587,"text":13},{"id":24,"depth":587,"text":24},{"id":158,"depth":587,"text":30,"children":3979},[3980,3981],{"id":162,"depth":609,"text":162},{"id":208,"depth":609,"text":208},{"id":36,"depth":587,"text":36,"children":3983},[3984,3985],{"id":44,"depth":609,"text":44},{"id":338,"depth":609,"text":3986},"元数据字段 (TextualMemoryMetadata)",{"id":537,"depth":587,"text":62,"children":3988},[3989,3990,3991,3992],{"id":70,"depth":609,"text":70},{"id":76,"depth":609,"text":76},{"id":56,"depth":609,"text":56},{"id":82,"depth":609,"text":82},{"id":88,"depth":587,"text":88,"children":3994},[3995,3996,3997],{"id":96,"depth":609,"text":96},{"id":102,"depth":609,"text":102},{"id":108,"depth":609,"text":108},{"id":114,"depth":587,"text":114,"children":3999},[4000,4001],{"id":2948,"depth":609,"text":2948},{"id":2991,"depth":609,"text":2991},{"id":120,"depth":587,"text":120},{"id":126,"depth":587,"text":126,"children":4004},[4005,4006,4007,4008,4009],{"id":3290,"depth":609,"text":3291},{"id":3406,"depth":609,"text":3407},{"id":3559,"depth":609,"text":3560},{"id":3645,"depth":609,"text":3646},{"id":3814,"depth":609,"text":3815},{"id":132,"depth":587,"text":132},"MemOS 中最轻量级的记忆模块，专为快速原型开发和简单场景设计。无需向量数据库，使用关键词匹配即可快速检索。让我们用最简单的方式开始使用 MemOS 记忆系统","md",{"`NaiveTextMemory` 是一个基于内存的明文记忆模块，将记忆存储在内存列表中，使用关键词匹配进行检索。它是学习 MemOS 的最佳起点，也适用于演示、测试和小规模应用。\"":6},"\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fnaive_textual_memory",{"title":5,"description":546},"cn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fnaive_textual_memory","4isOzOPI5wNaR20lJKdiOVhimJb11q8su1lPSbNinDA",[4019,4027],{"title":4020,"path":4021,"stem":4022,"icon":4023,"framework":6,"module":6,"class":4024,"target":-1,"active":4025,"defaultOpen":4025,"children":-1,"description":4026},"记忆模块总览","\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Foverview","open_source\u002Fmodules\u002Fmemories\u002Foverview","i-ri-database-2-line",[],false,"MemOS 记忆系统完整指南 - MemOS 提供了丰富的记忆模块，满足从轻量级文本记忆到高级图结构的各种需求。本指南帮助你快速找到最适合的记忆解决方案。",{"title":4028,"path":4029,"stem":4030,"icon":4031,"framework":6,"module":6,"class":4032,"target":-1,"active":4025,"defaultOpen":4025,"children":-1,"description":4033},"通用明文记忆","\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmemories\u002Fgeneral_textual_memory","open_source\u002Fmodules\u002Fmemories\u002Fgeneral_textual_memory","i-ri-file-text-line",[],"GeneralTextMemory 是MemOS中一个灵活的、基于向量的明文记忆模块，用于存储、搜索和管理非结构化知识。如果说 Naive 模块是‘关键词匹配’，那么 GeneralTextMemory 就是‘理解意思’的智能索引，它适用于会话代理、个人助理和任何需要语义记忆检索的系统。",1774339751286]