[{"data":1,"prerenderedAt":1835},["ShallowReactive",2],{"\u002Fopen_source\u002Fmodules\u002Fmem_chat":3,"surround-\u002Fopen_source\u002Fmodules\u002Fmem_chat":1819},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":1812,"description":264,"extension":1813,"links":6,"meta":1814,"navigation":6,"path":1815,"seo":1816,"stem":1817,"__hash__":1818},"docs\u002Fen\u002Fopen_source\u002Fmodules\u002Fmem_chat.md","MemChat",null,{"type":8,"value":9,"toc":1791},"minimark",[10,15,22,25,28,32,37,40,44,47,51,59,63,66,68,72,79,129,131,135,144,148,158,164,167,171,188,190,194,197,245,247,251,254,258,1730,1732,1736,1743,1787],[11,12,14],"h2",{"id":13},"_1-introduction","1. Introduction",[16,17,18,21],"p",{},[19,20,5],"strong",{}," is the conversation control center of MemOS.",[16,23,24],{},"It is not just a chat interface, but a bridge connecting \"instant conversation\" and \"long-term memory\". During interactions with users, MemChat is responsible for real-time retrieval of relevant background information from MemCube (Memory Cube), building context, and crystallizing new conversation content into new memories. With it, your Agent is no longer \"goldfish memory\", but a truly intelligent companion that can understand the past and continuously grow.",[26,27],"hr",{},[11,29,31],{"id":30},"_2-core-capabilities","2. Core Capabilities",[33,34,36],"h3",{"id":35},"memory-augmented-chat","Memory-Augmented Chat",[16,38,39],{},"Before answering user questions, MemChat automatically retrieves relevant Textual Memory from MemCube and injects it into the Prompt. This enables the Agent to answer questions based on past interaction history or knowledge bases, rather than relying solely on the LLM's pre-trained knowledge.",[33,41,43],{"id":42},"auto-memorization","Auto-Memorization",[16,45,46],{},"After conversation, MemChat uses Extractor LLM to automatically extract valuable information from the conversation flow (such as user preferences, factual knowledge) and store it in MemCube. The entire process is fully automated without manual user intervention.",[33,48,50],{"id":49},"context-management","Context Management",[16,52,53,54,58],{},"Automatically manages conversation history window (",[55,56,57],"code",{},"max_turns_window","). When conversations become too long, it intelligently trims old context while relying on retrieved long-term memory to maintain conversation coherence, effectively solving the LLM Context Window limitation problem.",[33,60,62],{"id":61},"flexible-configuration","Flexible Configuration",[16,64,65],{},"Supports configurable toggles for different types of memory (textual memory, activation memory, etc.) to adapt to different application scenarios.",[26,67],{},[11,69,71],{"id":70},"_3-code-structure","3. Code Structure",[16,73,74,75,78],{},"Core logic is located under ",[55,76,77],{},"memos\u002Fsrc\u002Fmemos\u002Fmem_chat\u002F",".",[80,81,82,95,114],"ul",{},[83,84,85,90,91,94],"li",{},[19,86,87],{},[55,88,89],{},"simple.py",": ",[19,92,93],{},"Default implementation (SimpleMemChat)",". This is an out-of-the-box REPL (Read-Eval-Print Loop) implementation containing complete \"retrieve -> generate -> store\" loop logic.",[83,96,97,90,102,105,106,109,110,113],{},[19,98,99],{},[55,100,101],{},"base.py",[19,103,104],{},"Interface definition (BaseMemChat)",". Defines the basic behavior of MemChat, such as ",[55,107,108],{},"run()"," and ",[55,111,112],{},"mem_cube"," properties.",[83,115,116,90,121,124,125,128],{},[19,117,118],{},[55,119,120],{},"factory.py",[19,122,123],{},"Factory class",". Responsible for instantiating concrete MemChat objects based on configuration (",[55,126,127],{},"MemChatConfig",").",[26,130],{},[11,132,134],{"id":133},"_4-key-interface","4. Key Interface",[16,136,137,138,140,141,128],{},"The main interaction entry point is the ",[55,139,5],{}," class (typically created by ",[55,142,143],{},"MemChatFactory",[33,145,147],{"id":146},"_41-initialization","4.1 Initialization",[16,149,150,151,154,155,78],{},"You need to first create a configuration object, then create an instance through the factory method. After creation, you must mount the ",[55,152,153],{},"MemCube"," instance to ",[55,156,157],{},"mem_chat.mem_cube",[33,159,161,162],{"id":160},"_42-run","4.2 ",[55,163,108],{},[16,165,166],{},"Starts an interactive command-line conversation loop. Suitable for development and debugging, it handles user input, calls memory retrieval, generates replies, and prints output.",[33,168,170],{"id":169},"_43-properties","4.3 Properties",[80,172,173,180],{},[83,174,175,179],{},[19,176,177],{},[55,178,112],{},": Associated MemCube object. MemChat reads and writes memories through it.",[83,181,182,187],{},[19,183,184],{},[55,185,186],{},"chat_llm",": LLM instance used to generate replies.",[26,189],{},[11,191,193],{"id":192},"_5-workflow","5. Workflow",[16,195,196],{},"A typical conversation round in MemChat includes the following steps:",[198,199,200,206,219,225,234],"ol",{},[83,201,202,205],{},[19,203,204],{},"Receive Input",": Get user text input.",[83,207,208,211,212,215,216,78],{},[19,209,210],{},"Memory Recall",": (If ",[55,213,214],{},"enable_textual_memory"," is enabled) Use user input as Query to retrieve Top-K relevant memories from ",[55,217,218],{},"mem_cube.text_mem",[83,220,221,224],{},[19,222,223],{},"Prompt Construction",": Concatenate system prompt, retrieved memories, and recent conversation history into a complete Prompt.",[83,226,227,230,231,233],{},[19,228,229],{},"Generate Response",": Call ",[55,232,186],{}," to generate a reply.",[83,235,236,211,239,241,242,244],{},[19,237,238],{},"Memorization",[55,240,214],{}," is enabled) Send this round's conversation (User + Assistant) to ",[55,243,112],{},"'s extractor, extract new memories and store them in the database.",[26,246],{},[11,248,250],{"id":249},"_6-development-example","6. Development Example",[16,252,253],{},"Below is a complete code example showing how to configure MemChat and mount a MemCube based on Qdrant and OpenAI.",[33,255,257],{"id":256},"_61-code-implementation","6.1 Code Implementation",[259,260,265],"pre",{"className":261,"code":262,"language":263,"meta":264,"style":264},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import os\nimport sys\n\n# Ensure src module can be imported\nsys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), \"..\u002F..\u002F..\u002Fsrc\")))\n\nfrom memos.configs.mem_chat import MemChatConfigFactory\nfrom memos.configs.mem_cube import GeneralMemCubeConfig\nfrom memos.mem_chat.factory import MemChatFactory\nfrom memos.mem_cube.general import GeneralMemCube\n\ndef get_mem_chat_config() -> MemChatConfigFactory:\n    \"\"\"Generate MemChat configuration\"\"\"\n    return MemChatConfigFactory.model_validate(\n        {\n            \"backend\": \"simple\",\n            \"config\": {\n                \"user_id\": \"user_123\",\n                \"chat_llm\": {\n                    \"backend\": \"openai\",\n                    \"config\": {\n                        \"model_name_or_path\": os.getenv(\"MOS_CHAT_MODEL\", \"gpt-4o\"),\n                        \"temperature\": 0.8,\n                        \"max_tokens\": 1024,\n                        \"api_key\": os.getenv(\"OPENAI_API_KEY\"),\n                        \"api_base\": os.getenv(\"OPENAI_API_BASE\"),\n                    },\n                },\n                \"max_turns_window\": 20,\n                \"top_k\": 5,\n                \"enable_textual_memory\": True, # Enable explicit memory\n            },\n        }\n    )\n\ndef get_mem_cube_config() -> GeneralMemCubeConfig:\n    \"\"\"Generate MemCube configuration\"\"\"\n    return GeneralMemCubeConfig.model_validate(\n        {\n            \"user_id\": \"user03alice\",\n            \"cube_id\": \"user03alice\u002Fmem_cube_tree\",\n            \"text_mem\": {\n                \"backend\": \"general_text\",\n                \"config\": {\n                    \"cube_id\": \"user03alice\u002Fmem_cube_general\",\n                    \"extractor_llm\": {\n                        \"backend\": \"openai\",\n                        \"config\": {\n                            \"model_name_or_path\": os.getenv(\"MOS_CHAT_MODEL\", \"gpt-4o\"),\n                            \"api_key\": os.getenv(\"OPENAI_API_KEY\"),\n                            \"api_base\": os.getenv(\"OPENAI_API_BASE\"),\n                        },\n                    },\n                    \"vector_db\": {\n                        \"backend\": \"qdrant\",\n                        \"config\": {\n                            \"collection_name\": \"user03alice_mem_cube_general\",\n                            \"vector_dimension\": 1024,\n                        },\n                    },\n                    \"embedder\": {\n                        \"backend\": os.getenv(\"MOS_EMBEDDER_BACKEND\", \"universal_api\"),\n                        \"config\": {\n                            \"provider\": \"openai\",\n                            \"api_key\": os.getenv(\"MOS_EMBEDDER_API_KEY\", \"EMPTY\"),\n                            \"model_name_or_path\": os.getenv(\"MOS_EMBEDDER_MODEL\", \"bge-m3\"),\n                            \"base_url\": os.getenv(\"MOS_EMBEDDER_API_BASE\"),\n                        },\n                    },\n                },\n            },\n        }\n    )\n\ndef main():\n    print(\"Initializing MemChat...\")\n    mem_chat = MemChatFactory.from_config(get_mem_chat_config())\n\n    print(\"Initializing MemCube...\")\n    mem_cube = GeneralMemCube(get_mem_cube_config())\n\n    # Critical step: mount the memory cube\n    mem_chat.mem_cube = mem_cube\n    \n    print(\"Starting Chat Session...\")\n    try:\n        mem_chat.run()\n    finally:\n        print(\"Saving memory cube...\")\n        mem_chat.mem_cube.dump(\"new_cube_path\")\n\nif __name__ == \"__main__\":\n    main()\n","python","",[55,266,267,280,288,295,302,383,388,412,433,455,476,481,503,515,531,537,561,576,598,611,632,645,688,706,723,752,781,787,793,809,826,843,849,855,861,866,883,893,906,911,931,952,966,986,999,1019,1033,1052,1065,1101,1128,1155,1161,1166,1180,1200,1213,1234,1250,1255,1260,1274,1311,1324,1344,1381,1418,1447,1452,1457,1462,1467,1472,1477,1482,1493,1511,1536,1541,1557,1575,1580,1586,1602,1608,1624,1632,1646,1654,1671,1696,1701,1722],{"__ignoreMap":264},[268,269,272,276],"span",{"class":270,"line":271},"line",1,[268,273,275],{"class":274},"s7zQu","import",[268,277,279],{"class":278},"sTEyZ"," os\n",[268,281,283,285],{"class":270,"line":282},2,[268,284,275],{"class":274},[268,286,287],{"class":278}," sys\n",[268,289,291],{"class":270,"line":290},3,[268,292,294],{"emptyLinePlaceholder":293},true,"\n",[268,296,298],{"class":270,"line":297},4,[268,299,301],{"class":300},"sHwdD","# Ensure src module can be imported\n",[268,303,305,308,311,315,317,321,324,327,329,331,333,336,338,340,342,344,346,349,351,353,355,357,359,362,364,367,370,373,377,380],{"class":270,"line":304},5,[268,306,307],{"class":278},"sys",[268,309,78],{"class":310},"sMK4o",[268,312,314],{"class":313},"swJcz","path",[268,316,78],{"class":310},[268,318,320],{"class":319},"s2Zo4","append",[268,322,323],{"class":310},"(",[268,325,326],{"class":319},"os",[268,328,78],{"class":310},[268,330,314],{"class":313},[268,332,78],{"class":310},[268,334,335],{"class":319},"abspath",[268,337,323],{"class":310},[268,339,326],{"class":319},[268,341,78],{"class":310},[268,343,314],{"class":313},[268,345,78],{"class":310},[268,347,348],{"class":319},"join",[268,350,323],{"class":310},[268,352,326],{"class":319},[268,354,78],{"class":310},[268,356,314],{"class":313},[268,358,78],{"class":310},[268,360,361],{"class":319},"dirname",[268,363,323],{"class":310},[268,365,366],{"class":278},"__file__",[268,368,369],{"class":310},"),",[268,371,372],{"class":310}," \"",[268,374,376],{"class":375},"sfazB","..\u002F..\u002F..\u002Fsrc",[268,378,379],{"class":310},"\"",[268,381,382],{"class":310},")))\n",[268,384,386],{"class":270,"line":385},6,[268,387,294],{"emptyLinePlaceholder":293},[268,389,391,394,397,399,402,404,407,409],{"class":270,"line":390},7,[268,392,393],{"class":274},"from",[268,395,396],{"class":278}," memos",[268,398,78],{"class":310},[268,400,401],{"class":278},"configs",[268,403,78],{"class":310},[268,405,406],{"class":278},"mem_chat ",[268,408,275],{"class":274},[268,410,411],{"class":278}," MemChatConfigFactory\n",[268,413,415,417,419,421,423,425,428,430],{"class":270,"line":414},8,[268,416,393],{"class":274},[268,418,396],{"class":278},[268,420,78],{"class":310},[268,422,401],{"class":278},[268,424,78],{"class":310},[268,426,427],{"class":278},"mem_cube ",[268,429,275],{"class":274},[268,431,432],{"class":278}," GeneralMemCubeConfig\n",[268,434,436,438,440,442,445,447,450,452],{"class":270,"line":435},9,[268,437,393],{"class":274},[268,439,396],{"class":278},[268,441,78],{"class":310},[268,443,444],{"class":278},"mem_chat",[268,446,78],{"class":310},[268,448,449],{"class":278},"factory ",[268,451,275],{"class":274},[268,453,454],{"class":278}," MemChatFactory\n",[268,456,458,460,462,464,466,468,471,473],{"class":270,"line":457},10,[268,459,393],{"class":274},[268,461,396],{"class":278},[268,463,78],{"class":310},[268,465,112],{"class":278},[268,467,78],{"class":310},[268,469,470],{"class":278},"general ",[268,472,275],{"class":274},[268,474,475],{"class":278}," GeneralMemCube\n",[268,477,479],{"class":270,"line":478},11,[268,480,294],{"emptyLinePlaceholder":293},[268,482,484,488,491,494,497,500],{"class":270,"line":483},12,[268,485,487],{"class":486},"spNyl","def",[268,489,490],{"class":319}," get_mem_chat_config",[268,492,493],{"class":310},"()",[268,495,496],{"class":310}," ->",[268,498,499],{"class":278}," MemChatConfigFactory",[268,501,502],{"class":310},":\n",[268,504,506,509,512],{"class":270,"line":505},13,[268,507,508],{"class":274},"    \"\"\"",[268,510,511],{"class":300},"Generate MemChat configuration",[268,513,514],{"class":274},"\"\"\"\n",[268,516,518,521,523,525,528],{"class":270,"line":517},14,[268,519,520],{"class":274},"    return",[268,522,499],{"class":278},[268,524,78],{"class":310},[268,526,527],{"class":319},"model_validate",[268,529,530],{"class":310},"(\n",[268,532,534],{"class":270,"line":533},15,[268,535,536],{"class":310},"        {\n",[268,538,540,543,546,548,551,553,556,558],{"class":270,"line":539},16,[268,541,542],{"class":310},"            \"",[268,544,545],{"class":375},"backend",[268,547,379],{"class":310},[268,549,550],{"class":310},":",[268,552,372],{"class":310},[268,554,555],{"class":375},"simple",[268,557,379],{"class":310},[268,559,560],{"class":310},",\n",[268,562,564,566,569,571,573],{"class":270,"line":563},17,[268,565,542],{"class":310},[268,567,568],{"class":375},"config",[268,570,379],{"class":310},[268,572,550],{"class":310},[268,574,575],{"class":310}," {\n",[268,577,579,582,585,587,589,591,594,596],{"class":270,"line":578},18,[268,580,581],{"class":310},"                \"",[268,583,584],{"class":375},"user_id",[268,586,379],{"class":310},[268,588,550],{"class":310},[268,590,372],{"class":310},[268,592,593],{"class":375},"user_123",[268,595,379],{"class":310},[268,597,560],{"class":310},[268,599,601,603,605,607,609],{"class":270,"line":600},19,[268,602,581],{"class":310},[268,604,186],{"class":375},[268,606,379],{"class":310},[268,608,550],{"class":310},[268,610,575],{"class":310},[268,612,614,617,619,621,623,625,628,630],{"class":270,"line":613},20,[268,615,616],{"class":310},"                    \"",[268,618,545],{"class":375},[268,620,379],{"class":310},[268,622,550],{"class":310},[268,624,372],{"class":310},[268,626,627],{"class":375},"openai",[268,629,379],{"class":310},[268,631,560],{"class":310},[268,633,635,637,639,641,643],{"class":270,"line":634},21,[268,636,616],{"class":310},[268,638,568],{"class":375},[268,640,379],{"class":310},[268,642,550],{"class":310},[268,644,575],{"class":310},[268,646,648,651,654,656,658,661,663,666,668,670,673,675,678,680,683,685],{"class":270,"line":647},22,[268,649,650],{"class":310},"                        \"",[268,652,653],{"class":375},"model_name_or_path",[268,655,379],{"class":310},[268,657,550],{"class":310},[268,659,660],{"class":319}," os",[268,662,78],{"class":310},[268,664,665],{"class":319},"getenv",[268,667,323],{"class":310},[268,669,379],{"class":310},[268,671,672],{"class":375},"MOS_CHAT_MODEL",[268,674,379],{"class":310},[268,676,677],{"class":310},",",[268,679,372],{"class":310},[268,681,682],{"class":375},"gpt-4o",[268,684,379],{"class":310},[268,686,687],{"class":310},"),\n",[268,689,691,693,696,698,700,704],{"class":270,"line":690},23,[268,692,650],{"class":310},[268,694,695],{"class":375},"temperature",[268,697,379],{"class":310},[268,699,550],{"class":310},[268,701,703],{"class":702},"sbssI"," 0.8",[268,705,560],{"class":310},[268,707,709,711,714,716,718,721],{"class":270,"line":708},24,[268,710,650],{"class":310},[268,712,713],{"class":375},"max_tokens",[268,715,379],{"class":310},[268,717,550],{"class":310},[268,719,720],{"class":702}," 1024",[268,722,560],{"class":310},[268,724,726,728,731,733,735,737,739,741,743,745,748,750],{"class":270,"line":725},25,[268,727,650],{"class":310},[268,729,730],{"class":375},"api_key",[268,732,379],{"class":310},[268,734,550],{"class":310},[268,736,660],{"class":319},[268,738,78],{"class":310},[268,740,665],{"class":319},[268,742,323],{"class":310},[268,744,379],{"class":310},[268,746,747],{"class":375},"OPENAI_API_KEY",[268,749,379],{"class":310},[268,751,687],{"class":310},[268,753,755,757,760,762,764,766,768,770,772,774,777,779],{"class":270,"line":754},26,[268,756,650],{"class":310},[268,758,759],{"class":375},"api_base",[268,761,379],{"class":310},[268,763,550],{"class":310},[268,765,660],{"class":319},[268,767,78],{"class":310},[268,769,665],{"class":319},[268,771,323],{"class":310},[268,773,379],{"class":310},[268,775,776],{"class":375},"OPENAI_API_BASE",[268,778,379],{"class":310},[268,780,687],{"class":310},[268,782,784],{"class":270,"line":783},27,[268,785,786],{"class":310},"                    },\n",[268,788,790],{"class":270,"line":789},28,[268,791,792],{"class":310},"                },\n",[268,794,796,798,800,802,804,807],{"class":270,"line":795},29,[268,797,581],{"class":310},[268,799,57],{"class":375},[268,801,379],{"class":310},[268,803,550],{"class":310},[268,805,806],{"class":702}," 20",[268,808,560],{"class":310},[268,810,812,814,817,819,821,824],{"class":270,"line":811},30,[268,813,581],{"class":310},[268,815,816],{"class":375},"top_k",[268,818,379],{"class":310},[268,820,550],{"class":310},[268,822,823],{"class":702}," 5",[268,825,560],{"class":310},[268,827,829,831,833,835,837,840],{"class":270,"line":828},31,[268,830,581],{"class":310},[268,832,214],{"class":375},[268,834,379],{"class":310},[268,836,550],{"class":310},[268,838,839],{"class":310}," True,",[268,841,842],{"class":300}," # Enable explicit memory\n",[268,844,846],{"class":270,"line":845},32,[268,847,848],{"class":310},"            },\n",[268,850,852],{"class":270,"line":851},33,[268,853,854],{"class":310},"        }\n",[268,856,858],{"class":270,"line":857},34,[268,859,860],{"class":310},"    )\n",[268,862,864],{"class":270,"line":863},35,[268,865,294],{"emptyLinePlaceholder":293},[268,867,869,871,874,876,878,881],{"class":270,"line":868},36,[268,870,487],{"class":486},[268,872,873],{"class":319}," get_mem_cube_config",[268,875,493],{"class":310},[268,877,496],{"class":310},[268,879,880],{"class":278}," GeneralMemCubeConfig",[268,882,502],{"class":310},[268,884,886,888,891],{"class":270,"line":885},37,[268,887,508],{"class":274},[268,889,890],{"class":300},"Generate MemCube configuration",[268,892,514],{"class":274},[268,894,896,898,900,902,904],{"class":270,"line":895},38,[268,897,520],{"class":274},[268,899,880],{"class":278},[268,901,78],{"class":310},[268,903,527],{"class":319},[268,905,530],{"class":310},[268,907,909],{"class":270,"line":908},39,[268,910,536],{"class":310},[268,912,914,916,918,920,922,924,927,929],{"class":270,"line":913},40,[268,915,542],{"class":310},[268,917,584],{"class":375},[268,919,379],{"class":310},[268,921,550],{"class":310},[268,923,372],{"class":310},[268,925,926],{"class":375},"user03alice",[268,928,379],{"class":310},[268,930,560],{"class":310},[268,932,934,936,939,941,943,945,948,950],{"class":270,"line":933},41,[268,935,542],{"class":310},[268,937,938],{"class":375},"cube_id",[268,940,379],{"class":310},[268,942,550],{"class":310},[268,944,372],{"class":310},[268,946,947],{"class":375},"user03alice\u002Fmem_cube_tree",[268,949,379],{"class":310},[268,951,560],{"class":310},[268,953,955,957,960,962,964],{"class":270,"line":954},42,[268,956,542],{"class":310},[268,958,959],{"class":375},"text_mem",[268,961,379],{"class":310},[268,963,550],{"class":310},[268,965,575],{"class":310},[268,967,969,971,973,975,977,979,982,984],{"class":270,"line":968},43,[268,970,581],{"class":310},[268,972,545],{"class":375},[268,974,379],{"class":310},[268,976,550],{"class":310},[268,978,372],{"class":310},[268,980,981],{"class":375},"general_text",[268,983,379],{"class":310},[268,985,560],{"class":310},[268,987,989,991,993,995,997],{"class":270,"line":988},44,[268,990,581],{"class":310},[268,992,568],{"class":375},[268,994,379],{"class":310},[268,996,550],{"class":310},[268,998,575],{"class":310},[268,1000,1002,1004,1006,1008,1010,1012,1015,1017],{"class":270,"line":1001},45,[268,1003,616],{"class":310},[268,1005,938],{"class":375},[268,1007,379],{"class":310},[268,1009,550],{"class":310},[268,1011,372],{"class":310},[268,1013,1014],{"class":375},"user03alice\u002Fmem_cube_general",[268,1016,379],{"class":310},[268,1018,560],{"class":310},[268,1020,1022,1024,1027,1029,1031],{"class":270,"line":1021},46,[268,1023,616],{"class":310},[268,1025,1026],{"class":375},"extractor_llm",[268,1028,379],{"class":310},[268,1030,550],{"class":310},[268,1032,575],{"class":310},[268,1034,1036,1038,1040,1042,1044,1046,1048,1050],{"class":270,"line":1035},47,[268,1037,650],{"class":310},[268,1039,545],{"class":375},[268,1041,379],{"class":310},[268,1043,550],{"class":310},[268,1045,372],{"class":310},[268,1047,627],{"class":375},[268,1049,379],{"class":310},[268,1051,560],{"class":310},[268,1053,1055,1057,1059,1061,1063],{"class":270,"line":1054},48,[268,1056,650],{"class":310},[268,1058,568],{"class":375},[268,1060,379],{"class":310},[268,1062,550],{"class":310},[268,1064,575],{"class":310},[268,1066,1068,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099],{"class":270,"line":1067},49,[268,1069,1070],{"class":310},"                            \"",[268,1072,653],{"class":375},[268,1074,379],{"class":310},[268,1076,550],{"class":310},[268,1078,660],{"class":319},[268,1080,78],{"class":310},[268,1082,665],{"class":319},[268,1084,323],{"class":310},[268,1086,379],{"class":310},[268,1088,672],{"class":375},[268,1090,379],{"class":310},[268,1092,677],{"class":310},[268,1094,372],{"class":310},[268,1096,682],{"class":375},[268,1098,379],{"class":310},[268,1100,687],{"class":310},[268,1102,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126],{"class":270,"line":1103},50,[268,1105,1070],{"class":310},[268,1107,730],{"class":375},[268,1109,379],{"class":310},[268,1111,550],{"class":310},[268,1113,660],{"class":319},[268,1115,78],{"class":310},[268,1117,665],{"class":319},[268,1119,323],{"class":310},[268,1121,379],{"class":310},[268,1123,747],{"class":375},[268,1125,379],{"class":310},[268,1127,687],{"class":310},[268,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153],{"class":270,"line":1130},51,[268,1132,1070],{"class":310},[268,1134,759],{"class":375},[268,1136,379],{"class":310},[268,1138,550],{"class":310},[268,1140,660],{"class":319},[268,1142,78],{"class":310},[268,1144,665],{"class":319},[268,1146,323],{"class":310},[268,1148,379],{"class":310},[268,1150,776],{"class":375},[268,1152,379],{"class":310},[268,1154,687],{"class":310},[268,1156,1158],{"class":270,"line":1157},52,[268,1159,1160],{"class":310},"                        },\n",[268,1162,1164],{"class":270,"line":1163},53,[268,1165,786],{"class":310},[268,1167,1169,1171,1174,1176,1178],{"class":270,"line":1168},54,[268,1170,616],{"class":310},[268,1172,1173],{"class":375},"vector_db",[268,1175,379],{"class":310},[268,1177,550],{"class":310},[268,1179,575],{"class":310},[268,1181,1183,1185,1187,1189,1191,1193,1196,1198],{"class":270,"line":1182},55,[268,1184,650],{"class":310},[268,1186,545],{"class":375},[268,1188,379],{"class":310},[268,1190,550],{"class":310},[268,1192,372],{"class":310},[268,1194,1195],{"class":375},"qdrant",[268,1197,379],{"class":310},[268,1199,560],{"class":310},[268,1201,1203,1205,1207,1209,1211],{"class":270,"line":1202},56,[268,1204,650],{"class":310},[268,1206,568],{"class":375},[268,1208,379],{"class":310},[268,1210,550],{"class":310},[268,1212,575],{"class":310},[268,1214,1216,1218,1221,1223,1225,1227,1230,1232],{"class":270,"line":1215},57,[268,1217,1070],{"class":310},[268,1219,1220],{"class":375},"collection_name",[268,1222,379],{"class":310},[268,1224,550],{"class":310},[268,1226,372],{"class":310},[268,1228,1229],{"class":375},"user03alice_mem_cube_general",[268,1231,379],{"class":310},[268,1233,560],{"class":310},[268,1235,1237,1239,1242,1244,1246,1248],{"class":270,"line":1236},58,[268,1238,1070],{"class":310},[268,1240,1241],{"class":375},"vector_dimension",[268,1243,379],{"class":310},[268,1245,550],{"class":310},[268,1247,720],{"class":702},[268,1249,560],{"class":310},[268,1251,1253],{"class":270,"line":1252},59,[268,1254,1160],{"class":310},[268,1256,1258],{"class":270,"line":1257},60,[268,1259,786],{"class":310},[268,1261,1263,1265,1268,1270,1272],{"class":270,"line":1262},61,[268,1264,616],{"class":310},[268,1266,1267],{"class":375},"embedder",[268,1269,379],{"class":310},[268,1271,550],{"class":310},[268,1273,575],{"class":310},[268,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1298,1300,1302,1304,1307,1309],{"class":270,"line":1276},62,[268,1278,650],{"class":310},[268,1280,545],{"class":375},[268,1282,379],{"class":310},[268,1284,550],{"class":310},[268,1286,660],{"class":319},[268,1288,78],{"class":310},[268,1290,665],{"class":319},[268,1292,323],{"class":310},[268,1294,379],{"class":310},[268,1296,1297],{"class":375},"MOS_EMBEDDER_BACKEND",[268,1299,379],{"class":310},[268,1301,677],{"class":310},[268,1303,372],{"class":310},[268,1305,1306],{"class":375},"universal_api",[268,1308,379],{"class":310},[268,1310,687],{"class":310},[268,1312,1314,1316,1318,1320,1322],{"class":270,"line":1313},63,[268,1315,650],{"class":310},[268,1317,568],{"class":375},[268,1319,379],{"class":310},[268,1321,550],{"class":310},[268,1323,575],{"class":310},[268,1325,1327,1329,1332,1334,1336,1338,1340,1342],{"class":270,"line":1326},64,[268,1328,1070],{"class":310},[268,1330,1331],{"class":375},"provider",[268,1333,379],{"class":310},[268,1335,550],{"class":310},[268,1337,372],{"class":310},[268,1339,627],{"class":375},[268,1341,379],{"class":310},[268,1343,560],{"class":310},[268,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1368,1370,1372,1374,1377,1379],{"class":270,"line":1346},65,[268,1348,1070],{"class":310},[268,1350,730],{"class":375},[268,1352,379],{"class":310},[268,1354,550],{"class":310},[268,1356,660],{"class":319},[268,1358,78],{"class":310},[268,1360,665],{"class":319},[268,1362,323],{"class":310},[268,1364,379],{"class":310},[268,1366,1367],{"class":375},"MOS_EMBEDDER_API_KEY",[268,1369,379],{"class":310},[268,1371,677],{"class":310},[268,1373,372],{"class":310},[268,1375,1376],{"class":375},"EMPTY",[268,1378,379],{"class":310},[268,1380,687],{"class":310},[268,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1405,1407,1409,1411,1414,1416],{"class":270,"line":1383},66,[268,1385,1070],{"class":310},[268,1387,653],{"class":375},[268,1389,379],{"class":310},[268,1391,550],{"class":310},[268,1393,660],{"class":319},[268,1395,78],{"class":310},[268,1397,665],{"class":319},[268,1399,323],{"class":310},[268,1401,379],{"class":310},[268,1403,1404],{"class":375},"MOS_EMBEDDER_MODEL",[268,1406,379],{"class":310},[268,1408,677],{"class":310},[268,1410,372],{"class":310},[268,1412,1413],{"class":375},"bge-m3",[268,1415,379],{"class":310},[268,1417,687],{"class":310},[268,1419,1421,1423,1426,1428,1430,1432,1434,1436,1438,1440,1443,1445],{"class":270,"line":1420},67,[268,1422,1070],{"class":310},[268,1424,1425],{"class":375},"base_url",[268,1427,379],{"class":310},[268,1429,550],{"class":310},[268,1431,660],{"class":319},[268,1433,78],{"class":310},[268,1435,665],{"class":319},[268,1437,323],{"class":310},[268,1439,379],{"class":310},[268,1441,1442],{"class":375},"MOS_EMBEDDER_API_BASE",[268,1444,379],{"class":310},[268,1446,687],{"class":310},[268,1448,1450],{"class":270,"line":1449},68,[268,1451,1160],{"class":310},[268,1453,1455],{"class":270,"line":1454},69,[268,1456,786],{"class":310},[268,1458,1460],{"class":270,"line":1459},70,[268,1461,792],{"class":310},[268,1463,1465],{"class":270,"line":1464},71,[268,1466,848],{"class":310},[268,1468,1470],{"class":270,"line":1469},72,[268,1471,854],{"class":310},[268,1473,1475],{"class":270,"line":1474},73,[268,1476,860],{"class":310},[268,1478,1480],{"class":270,"line":1479},74,[268,1481,294],{"emptyLinePlaceholder":293},[268,1483,1485,1487,1490],{"class":270,"line":1484},75,[268,1486,487],{"class":486},[268,1488,1489],{"class":319}," main",[268,1491,1492],{"class":310},"():\n",[268,1494,1496,1499,1501,1503,1506,1508],{"class":270,"line":1495},76,[268,1497,1498],{"class":319},"    print",[268,1500,323],{"class":310},[268,1502,379],{"class":310},[268,1504,1505],{"class":375},"Initializing MemChat...",[268,1507,379],{"class":310},[268,1509,1510],{"class":310},")\n",[268,1512,1514,1517,1520,1523,1525,1528,1530,1533],{"class":270,"line":1513},77,[268,1515,1516],{"class":278},"    mem_chat ",[268,1518,1519],{"class":310},"=",[268,1521,1522],{"class":278}," MemChatFactory",[268,1524,78],{"class":310},[268,1526,1527],{"class":319},"from_config",[268,1529,323],{"class":310},[268,1531,1532],{"class":319},"get_mem_chat_config",[268,1534,1535],{"class":310},"())\n",[268,1537,1539],{"class":270,"line":1538},78,[268,1540,294],{"emptyLinePlaceholder":293},[268,1542,1544,1546,1548,1550,1553,1555],{"class":270,"line":1543},79,[268,1545,1498],{"class":319},[268,1547,323],{"class":310},[268,1549,379],{"class":310},[268,1551,1552],{"class":375},"Initializing MemCube...",[268,1554,379],{"class":310},[268,1556,1510],{"class":310},[268,1558,1560,1563,1565,1568,1570,1573],{"class":270,"line":1559},80,[268,1561,1562],{"class":278},"    mem_cube ",[268,1564,1519],{"class":310},[268,1566,1567],{"class":319}," GeneralMemCube",[268,1569,323],{"class":310},[268,1571,1572],{"class":319},"get_mem_cube_config",[268,1574,1535],{"class":310},[268,1576,1578],{"class":270,"line":1577},81,[268,1579,294],{"emptyLinePlaceholder":293},[268,1581,1583],{"class":270,"line":1582},82,[268,1584,1585],{"class":300},"    # Critical step: mount the memory cube\n",[268,1587,1589,1592,1594,1596,1599],{"class":270,"line":1588},83,[268,1590,1591],{"class":278},"    mem_chat",[268,1593,78],{"class":310},[268,1595,112],{"class":313},[268,1597,1598],{"class":310}," =",[268,1600,1601],{"class":278}," mem_cube\n",[268,1603,1605],{"class":270,"line":1604},84,[268,1606,1607],{"class":278},"    \n",[268,1609,1611,1613,1615,1617,1620,1622],{"class":270,"line":1610},85,[268,1612,1498],{"class":319},[268,1614,323],{"class":310},[268,1616,379],{"class":310},[268,1618,1619],{"class":375},"Starting Chat Session...",[268,1621,379],{"class":310},[268,1623,1510],{"class":310},[268,1625,1627,1630],{"class":270,"line":1626},86,[268,1628,1629],{"class":274},"    try",[268,1631,502],{"class":310},[268,1633,1635,1638,1640,1643],{"class":270,"line":1634},87,[268,1636,1637],{"class":278},"        mem_chat",[268,1639,78],{"class":310},[268,1641,1642],{"class":319},"run",[268,1644,1645],{"class":310},"()\n",[268,1647,1649,1652],{"class":270,"line":1648},88,[268,1650,1651],{"class":274},"    finally",[268,1653,502],{"class":310},[268,1655,1657,1660,1662,1664,1667,1669],{"class":270,"line":1656},89,[268,1658,1659],{"class":319},"        print",[268,1661,323],{"class":310},[268,1663,379],{"class":310},[268,1665,1666],{"class":375},"Saving memory cube...",[268,1668,379],{"class":310},[268,1670,1510],{"class":310},[268,1672,1674,1676,1678,1680,1682,1685,1687,1689,1692,1694],{"class":270,"line":1673},90,[268,1675,1637],{"class":278},[268,1677,78],{"class":310},[268,1679,112],{"class":313},[268,1681,78],{"class":310},[268,1683,1684],{"class":319},"dump",[268,1686,323],{"class":310},[268,1688,379],{"class":310},[268,1690,1691],{"class":375},"new_cube_path",[268,1693,379],{"class":310},[268,1695,1510],{"class":310},[268,1697,1699],{"class":270,"line":1698},91,[268,1700,294],{"emptyLinePlaceholder":293},[268,1702,1704,1707,1710,1713,1715,1718,1720],{"class":270,"line":1703},92,[268,1705,1706],{"class":274},"if",[268,1708,1709],{"class":278}," __name__ ",[268,1711,1712],{"class":310},"==",[268,1714,372],{"class":310},[268,1716,1717],{"class":375},"__main__",[268,1719,379],{"class":310},[268,1721,502],{"class":310},[268,1723,1725,1728],{"class":270,"line":1724},93,[268,1726,1727],{"class":319},"    main",[268,1729,1645],{"class":310},[26,1731],{},[11,1733,1735],{"id":1734},"_7-configuration-description","7. Configuration Description",[16,1737,1738,1739,1742],{},"When configuring ",[55,1740,1741],{},"MemChatConfigFactory",", the following parameters are crucial:",[80,1744,1745,1752,1759,1773,1780],{},[83,1746,1747,1751],{},[19,1748,1749],{},[55,1750,584],{},": Required. Used to identify the current user in the conversation, ensuring memory isolation.",[83,1753,1754,1758],{},[19,1755,1756],{},[55,1757,186],{},": Chat model configuration. Recommend using a capable model (such as GPT-4o) for better reply quality and instruction-following ability.",[83,1760,1761,90,1765,1768,1769,1772],{},[19,1762,1763],{},[55,1764,214],{},[55,1766,1767],{},"True"," \u002F ",[55,1770,1771],{},"False",". Whether to enable textual memory. If enabled, the system will perform retrieval before conversation and storage after conversation.",[83,1774,1775,1779],{},[19,1776,1777],{},[55,1778,57],{},": Integer. Number of conversation turns to retain in history. History beyond this limit will be truncated, relying on long-term memory to supplement context.",[83,1781,1782,1786],{},[19,1783,1784],{},[55,1785,816],{},": Integer. How many most relevant memory fragments to retrieve from the memory library and inject into the Prompt each time.",[1788,1789,1790],"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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .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);}",{"title":264,"searchDepth":282,"depth":282,"links":1792},[1793,1794,1800,1801,1807,1808,1811],{"id":13,"depth":282,"text":14},{"id":30,"depth":282,"text":31,"children":1795},[1796,1797,1798,1799],{"id":35,"depth":290,"text":36},{"id":42,"depth":290,"text":43},{"id":49,"depth":290,"text":50},{"id":61,"depth":290,"text":62},{"id":70,"depth":282,"text":71},{"id":133,"depth":282,"text":134,"children":1802},[1803,1804,1806],{"id":146,"depth":290,"text":147},{"id":160,"depth":290,"text":1805},"4.2 run()",{"id":169,"depth":290,"text":170},{"id":192,"depth":282,"text":193},{"id":249,"depth":282,"text":250,"children":1809},[1810],{"id":256,"depth":290,"text":257},{"id":1734,"depth":282,"text":1735},"MemChat is your \"memory diplomat\". It coordinates user input, memory retrieval, and LLM generation to create coherent conversations with long-term memory.","md",{},"\u002Fen\u002Fopen_source\u002Fmodules\u002Fmem_chat",{"title":5,"description":264},"en\u002Fopen_source\u002Fmodules\u002Fmem_chat","aDL97xjyCINMEfasHCGiETOdbLURBRij6mrGmCc2_x4",[1820,1828],{"title":1821,"path":1822,"stem":1823,"icon":1824,"framework":6,"module":6,"class":1825,"target":-1,"active":1826,"defaultOpen":1826,"children":-1,"description":1827},"MemScheduler","\u002Fopen_source\u002Fmodules\u002Fmem_scheduler","open_source\u002Fmodules\u002Fmem_scheduler","i-ri-calendar-line",[],false,"MemScheduler is your \"memory organization scheduler\". It asynchronously manages memory flow and updates in the background, coordinating interactions between working memory, long-term memory, and activation memory, enabling conversational systems to dynamically organize and utilize memories.",{"title":1829,"path":1830,"stem":1831,"icon":1832,"framework":6,"module":6,"class":1833,"target":-1,"active":1826,"defaultOpen":1826,"children":-1,"description":1834},"MemFeedback","\u002Fopen_source\u002Fmodules\u002Fmem_feedback","open_source\u002Fmodules\u002Fmem_feedback","i-ri-feedback-line",[],"MemFeedback is your \"memory error notebook\". It enables your Agent to understand 'You remembered it wrong' and automatically correct the memory database. It is a key component for achieving self-evolving memory.",1774338512552]