[{"data":1,"prerenderedAt":1837},["ShallowReactive",2],{"\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_chat":3,"surround-\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_chat":1821},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":1814,"description":265,"extension":1815,"links":6,"meta":1816,"navigation":6,"path":1817,"seo":1818,"stem":1819,"__hash__":1820},"docs\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_chat.md","MemChat",null,{"type":8,"value":9,"toc":1793},"minimark",[10,15,22,25,28,32,37,40,44,47,50,58,61,64,66,70,77,127,129,133,143,147,158,164,167,171,188,190,194,197,246,248,252,255,259,1732,1734,1738,1745,1789],[11,12,14],"h2",{"id":13},"_1-简介","1. 简介",[16,17,18,21],"p",{},[19,20,5],"strong",{}," 是 MemOS 的对话控制中心。",[16,23,24],{},"它不仅仅是一个聊天接口，更是连接“即时对话”与“长时记忆”的桥梁。在与用户交流的过程中，MemChat 负责实时地从 MemCube（记忆立方体）中检索相关背景信息，构建上下文，并将新的对话内容沉淀为新的记忆。通过它，你的 Agent 不再是“金鱼记忆”，而是能够真正理解过往、持续成长的智能伙伴。",[26,27],"hr",{},[11,29,31],{"id":30},"_2-核心能力","2. 核心能力",[33,34,36],"h3",{"id":35},"记忆增强对话-memory-augmented-chat","记忆增强对话 (Memory-Augmented Chat)",[16,38,39],{},"在回答用户问题前，MemChat 会自动从 MemCube 中检索相关的 Textual Memory（文本记忆），将其注入到 Prompt 中。这使得 Agent 能够基于过往的交互历史或知识库来回答问题，而不仅仅依赖于 LLM 的预训练知识。",[33,41,43],{"id":42},"自动记忆沉淀-auto-memorization","自动记忆沉淀 (Auto-Memorization)",[16,45,46],{},"对话后，MemChat 会利用 Extractor LLM 自动从对话流中提取有价值的信息（如用户偏好、事实知识），并存储到 MemCube 中。无需用户手动干预，整个过程完全自动化。",[33,48,49],{"id":49},"上下文管理",[16,51,52,53,57],{},"自动管理对话历史窗口 (",[54,55,56],"code",{},"max_turns_window",")。当对话过长时，它会智能裁剪旧的上下文，同时依赖检索到的长期记忆来保持对话的连贯性，有效解决了 LLM Context Window 的限制问题。",[33,59,60],{"id":60},"灵活配置",[16,62,63],{},"支持通过配置开关不同类型的记忆（文本记忆、激活记忆等），适应不同的应用场景。",[26,65],{},[11,67,69],{"id":68},"_3-代码结构","3. 代码结构",[16,71,72,73,76],{},"核心逻辑位于 ",[54,74,75],{},"memos\u002Fsrc\u002Fmemos\u002Fmem_chat\u002F"," 下。",[78,79,80,93,112],"ul",{},[81,82,83,88,89,92],"li",{},[19,84,85],{},[54,86,87],{},"simple.py",": ",[19,90,91],{},"默认实现 (SimpleMemChat)","。这是一个开箱即用的 REPL（Read-Eval-Print Loop）实现，包含了完整的“检索 -> 生成 -> 存储”闭环逻辑。",[81,94,95,88,100,103,104,107,108,111],{},[19,96,97],{},[54,98,99],{},"base.py",[19,101,102],{},"接口定义 (BaseMemChat)","。定义了 MemChat 的基本行为，如 ",[54,105,106],{},"run()"," 和 ",[54,109,110],{},"mem_cube"," 属性。",[81,113,114,88,119,122,123,126],{},[19,115,116],{},[54,117,118],{},"factory.py",[19,120,121],{},"工厂类","。负责根据配置 (",[54,124,125],{},"MemChatConfig",") 实例化具体的 MemChat 对象。",[26,128],{},[11,130,132],{"id":131},"_4-关键接口","4. 关键接口",[16,134,135,136,138,139,142],{},"主要的交互入口是 ",[54,137,5],{}," 类（通常由 ",[54,140,141],{},"MemChatFactory"," 创建）。",[33,144,146],{"id":145},"_41-初始化","4.1 初始化",[16,148,149,150,153,154,157],{},"你需要先创建一个配置对象，然后通过工厂方法创建实例。创建后，必须将 ",[54,151,152],{},"MemCube"," 实例挂载到 ",[54,155,156],{},"mem_chat.mem_cube"," 上。",[33,159,161,162],{"id":160},"_42-run","4.2 ",[54,163,106],{},[16,165,166],{},"启动一个交互式的命令行对话循环。适合开发调试，它会处理用户输入、调用记忆检索、生成回复并打印。",[33,168,170],{"id":169},"_43-属性","4.3 属性",[78,172,173,180],{},[81,174,175,179],{},[19,176,177],{},[54,178,110],{},": 关联的记忆立方体对象。MemChat 通过它来读写记忆。",[81,181,182,187],{},[19,183,184],{},[54,185,186],{},"chat_llm",": 用于生成回复的 LLM 实例。",[26,189],{},[11,191,193],{"id":192},"_5-工作流程","5. 工作流程",[16,195,196],{},"MemChat 的一轮对话循环通常包含以下步骤：",[198,199,200,206,220,226,235],"ol",{},[81,201,202,205],{},[19,203,204],{},"接收输入 (Input)",": 获取用户的文本输入。",[81,207,208,211,212,215,216,219],{},[19,209,210],{},"记忆检索 (Recall)",": (如果开启 ",[54,213,214],{},"enable_textual_memory",") 使用用户输入作为 Query，从 ",[54,217,218],{},"mem_cube.text_mem"," 中检索 Top-K 条相关记忆。",[81,221,222,225],{},[19,223,224],{},"构建提示词 (Prompt Construction)",": 将系统提示词、检索到的记忆、最近的对话历史 (History) 拼接成完整的 Prompt。",[81,227,228,231,232,234],{},[19,229,230],{},"生成回复 (Generation)",": 调用 ",[54,233,186],{}," 生成回复。",[81,236,237,211,240,242,243,245],{},[19,238,239],{},"记忆提取与存储 (Memorization)",[54,241,214],{},") 将本轮对话 (User + Assistant) 发送给 ",[54,244,110],{}," 的提取器，提取新记忆并存入数据库。",[26,247],{},[11,249,251],{"id":250},"_6-开发示例","6. 开发示例",[16,253,254],{},"下面是一个完整的代码示例，展示了如何配置 MemChat，并挂载一个基于 Qdrant 和 OpenAI 的 MemCube。",[33,256,258],{"id":257},"_61-代码实现","6.1 代码实现",[260,261,266],"pre",{"className":262,"code":263,"language":264,"meta":265,"style":265},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import os\nimport sys\n\n# 确保 src 模块可以被导入\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    \"\"\"生成 MemChat 配置\"\"\"\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, # 开启显式记忆\n            },\n        }\n    )\n\ndef get_mem_cube_config() -> GeneralMemCubeConfig:\n    \"\"\"生成 MemCube 配置\"\"\"\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    # 关键步骤：挂载记忆立方体\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","",[54,267,268,281,289,296,303,385,390,414,435,457,478,483,505,517,533,539,563,578,600,613,634,647,690,708,725,754,783,789,795,811,828,845,851,857,863,868,885,895,908,913,933,954,968,988,1001,1021,1035,1054,1067,1103,1130,1157,1163,1168,1182,1202,1215,1236,1252,1257,1262,1276,1313,1326,1346,1383,1420,1449,1454,1459,1464,1469,1474,1479,1484,1495,1513,1538,1543,1559,1577,1582,1588,1604,1610,1626,1634,1648,1656,1673,1698,1703,1724],{"__ignoreMap":265},[269,270,273,277],"span",{"class":271,"line":272},"line",1,[269,274,276],{"class":275},"s7zQu","import",[269,278,280],{"class":279},"sTEyZ"," os\n",[269,282,284,286],{"class":271,"line":283},2,[269,285,276],{"class":275},[269,287,288],{"class":279}," sys\n",[269,290,292],{"class":271,"line":291},3,[269,293,295],{"emptyLinePlaceholder":294},true,"\n",[269,297,299],{"class":271,"line":298},4,[269,300,302],{"class":301},"sHwdD","# 确保 src 模块可以被导入\n",[269,304,306,309,313,317,319,323,326,329,331,333,335,338,340,342,344,346,348,351,353,355,357,359,361,364,366,369,372,375,379,382],{"class":271,"line":305},5,[269,307,308],{"class":279},"sys",[269,310,312],{"class":311},"sMK4o",".",[269,314,316],{"class":315},"swJcz","path",[269,318,312],{"class":311},[269,320,322],{"class":321},"s2Zo4","append",[269,324,325],{"class":311},"(",[269,327,328],{"class":321},"os",[269,330,312],{"class":311},[269,332,316],{"class":315},[269,334,312],{"class":311},[269,336,337],{"class":321},"abspath",[269,339,325],{"class":311},[269,341,328],{"class":321},[269,343,312],{"class":311},[269,345,316],{"class":315},[269,347,312],{"class":311},[269,349,350],{"class":321},"join",[269,352,325],{"class":311},[269,354,328],{"class":321},[269,356,312],{"class":311},[269,358,316],{"class":315},[269,360,312],{"class":311},[269,362,363],{"class":321},"dirname",[269,365,325],{"class":311},[269,367,368],{"class":279},"__file__",[269,370,371],{"class":311},"),",[269,373,374],{"class":311}," \"",[269,376,378],{"class":377},"sfazB","..\u002F..\u002F..\u002Fsrc",[269,380,381],{"class":311},"\"",[269,383,384],{"class":311},")))\n",[269,386,388],{"class":271,"line":387},6,[269,389,295],{"emptyLinePlaceholder":294},[269,391,393,396,399,401,404,406,409,411],{"class":271,"line":392},7,[269,394,395],{"class":275},"from",[269,397,398],{"class":279}," memos",[269,400,312],{"class":311},[269,402,403],{"class":279},"configs",[269,405,312],{"class":311},[269,407,408],{"class":279},"mem_chat ",[269,410,276],{"class":275},[269,412,413],{"class":279}," MemChatConfigFactory\n",[269,415,417,419,421,423,425,427,430,432],{"class":271,"line":416},8,[269,418,395],{"class":275},[269,420,398],{"class":279},[269,422,312],{"class":311},[269,424,403],{"class":279},[269,426,312],{"class":311},[269,428,429],{"class":279},"mem_cube ",[269,431,276],{"class":275},[269,433,434],{"class":279}," GeneralMemCubeConfig\n",[269,436,438,440,442,444,447,449,452,454],{"class":271,"line":437},9,[269,439,395],{"class":275},[269,441,398],{"class":279},[269,443,312],{"class":311},[269,445,446],{"class":279},"mem_chat",[269,448,312],{"class":311},[269,450,451],{"class":279},"factory ",[269,453,276],{"class":275},[269,455,456],{"class":279}," MemChatFactory\n",[269,458,460,462,464,466,468,470,473,475],{"class":271,"line":459},10,[269,461,395],{"class":275},[269,463,398],{"class":279},[269,465,312],{"class":311},[269,467,110],{"class":279},[269,469,312],{"class":311},[269,471,472],{"class":279},"general ",[269,474,276],{"class":275},[269,476,477],{"class":279}," GeneralMemCube\n",[269,479,481],{"class":271,"line":480},11,[269,482,295],{"emptyLinePlaceholder":294},[269,484,486,490,493,496,499,502],{"class":271,"line":485},12,[269,487,489],{"class":488},"spNyl","def",[269,491,492],{"class":321}," get_mem_chat_config",[269,494,495],{"class":311},"()",[269,497,498],{"class":311}," ->",[269,500,501],{"class":279}," MemChatConfigFactory",[269,503,504],{"class":311},":\n",[269,506,508,511,514],{"class":271,"line":507},13,[269,509,510],{"class":275},"    \"\"\"",[269,512,513],{"class":301},"生成 MemChat 配置",[269,515,516],{"class":275},"\"\"\"\n",[269,518,520,523,525,527,530],{"class":271,"line":519},14,[269,521,522],{"class":275},"    return",[269,524,501],{"class":279},[269,526,312],{"class":311},[269,528,529],{"class":321},"model_validate",[269,531,532],{"class":311},"(\n",[269,534,536],{"class":271,"line":535},15,[269,537,538],{"class":311},"        {\n",[269,540,542,545,548,550,553,555,558,560],{"class":271,"line":541},16,[269,543,544],{"class":311},"            \"",[269,546,547],{"class":377},"backend",[269,549,381],{"class":311},[269,551,552],{"class":311},":",[269,554,374],{"class":311},[269,556,557],{"class":377},"simple",[269,559,381],{"class":311},[269,561,562],{"class":311},",\n",[269,564,566,568,571,573,575],{"class":271,"line":565},17,[269,567,544],{"class":311},[269,569,570],{"class":377},"config",[269,572,381],{"class":311},[269,574,552],{"class":311},[269,576,577],{"class":311}," {\n",[269,579,581,584,587,589,591,593,596,598],{"class":271,"line":580},18,[269,582,583],{"class":311},"                \"",[269,585,586],{"class":377},"user_id",[269,588,381],{"class":311},[269,590,552],{"class":311},[269,592,374],{"class":311},[269,594,595],{"class":377},"user_123",[269,597,381],{"class":311},[269,599,562],{"class":311},[269,601,603,605,607,609,611],{"class":271,"line":602},19,[269,604,583],{"class":311},[269,606,186],{"class":377},[269,608,381],{"class":311},[269,610,552],{"class":311},[269,612,577],{"class":311},[269,614,616,619,621,623,625,627,630,632],{"class":271,"line":615},20,[269,617,618],{"class":311},"                    \"",[269,620,547],{"class":377},[269,622,381],{"class":311},[269,624,552],{"class":311},[269,626,374],{"class":311},[269,628,629],{"class":377},"openai",[269,631,381],{"class":311},[269,633,562],{"class":311},[269,635,637,639,641,643,645],{"class":271,"line":636},21,[269,638,618],{"class":311},[269,640,570],{"class":377},[269,642,381],{"class":311},[269,644,552],{"class":311},[269,646,577],{"class":311},[269,648,650,653,656,658,660,663,665,668,670,672,675,677,680,682,685,687],{"class":271,"line":649},22,[269,651,652],{"class":311},"                        \"",[269,654,655],{"class":377},"model_name_or_path",[269,657,381],{"class":311},[269,659,552],{"class":311},[269,661,662],{"class":321}," os",[269,664,312],{"class":311},[269,666,667],{"class":321},"getenv",[269,669,325],{"class":311},[269,671,381],{"class":311},[269,673,674],{"class":377},"MOS_CHAT_MODEL",[269,676,381],{"class":311},[269,678,679],{"class":311},",",[269,681,374],{"class":311},[269,683,684],{"class":377},"gpt-4o",[269,686,381],{"class":311},[269,688,689],{"class":311},"),\n",[269,691,693,695,698,700,702,706],{"class":271,"line":692},23,[269,694,652],{"class":311},[269,696,697],{"class":377},"temperature",[269,699,381],{"class":311},[269,701,552],{"class":311},[269,703,705],{"class":704},"sbssI"," 0.8",[269,707,562],{"class":311},[269,709,711,713,716,718,720,723],{"class":271,"line":710},24,[269,712,652],{"class":311},[269,714,715],{"class":377},"max_tokens",[269,717,381],{"class":311},[269,719,552],{"class":311},[269,721,722],{"class":704}," 1024",[269,724,562],{"class":311},[269,726,728,730,733,735,737,739,741,743,745,747,750,752],{"class":271,"line":727},25,[269,729,652],{"class":311},[269,731,732],{"class":377},"api_key",[269,734,381],{"class":311},[269,736,552],{"class":311},[269,738,662],{"class":321},[269,740,312],{"class":311},[269,742,667],{"class":321},[269,744,325],{"class":311},[269,746,381],{"class":311},[269,748,749],{"class":377},"OPENAI_API_KEY",[269,751,381],{"class":311},[269,753,689],{"class":311},[269,755,757,759,762,764,766,768,770,772,774,776,779,781],{"class":271,"line":756},26,[269,758,652],{"class":311},[269,760,761],{"class":377},"api_base",[269,763,381],{"class":311},[269,765,552],{"class":311},[269,767,662],{"class":321},[269,769,312],{"class":311},[269,771,667],{"class":321},[269,773,325],{"class":311},[269,775,381],{"class":311},[269,777,778],{"class":377},"OPENAI_API_BASE",[269,780,381],{"class":311},[269,782,689],{"class":311},[269,784,786],{"class":271,"line":785},27,[269,787,788],{"class":311},"                    },\n",[269,790,792],{"class":271,"line":791},28,[269,793,794],{"class":311},"                },\n",[269,796,798,800,802,804,806,809],{"class":271,"line":797},29,[269,799,583],{"class":311},[269,801,56],{"class":377},[269,803,381],{"class":311},[269,805,552],{"class":311},[269,807,808],{"class":704}," 20",[269,810,562],{"class":311},[269,812,814,816,819,821,823,826],{"class":271,"line":813},30,[269,815,583],{"class":311},[269,817,818],{"class":377},"top_k",[269,820,381],{"class":311},[269,822,552],{"class":311},[269,824,825],{"class":704}," 5",[269,827,562],{"class":311},[269,829,831,833,835,837,839,842],{"class":271,"line":830},31,[269,832,583],{"class":311},[269,834,214],{"class":377},[269,836,381],{"class":311},[269,838,552],{"class":311},[269,840,841],{"class":311}," True,",[269,843,844],{"class":301}," # 开启显式记忆\n",[269,846,848],{"class":271,"line":847},32,[269,849,850],{"class":311},"            },\n",[269,852,854],{"class":271,"line":853},33,[269,855,856],{"class":311},"        }\n",[269,858,860],{"class":271,"line":859},34,[269,861,862],{"class":311},"    )\n",[269,864,866],{"class":271,"line":865},35,[269,867,295],{"emptyLinePlaceholder":294},[269,869,871,873,876,878,880,883],{"class":271,"line":870},36,[269,872,489],{"class":488},[269,874,875],{"class":321}," get_mem_cube_config",[269,877,495],{"class":311},[269,879,498],{"class":311},[269,881,882],{"class":279}," GeneralMemCubeConfig",[269,884,504],{"class":311},[269,886,888,890,893],{"class":271,"line":887},37,[269,889,510],{"class":275},[269,891,892],{"class":301},"生成 MemCube 配置",[269,894,516],{"class":275},[269,896,898,900,902,904,906],{"class":271,"line":897},38,[269,899,522],{"class":275},[269,901,882],{"class":279},[269,903,312],{"class":311},[269,905,529],{"class":321},[269,907,532],{"class":311},[269,909,911],{"class":271,"line":910},39,[269,912,538],{"class":311},[269,914,916,918,920,922,924,926,929,931],{"class":271,"line":915},40,[269,917,544],{"class":311},[269,919,586],{"class":377},[269,921,381],{"class":311},[269,923,552],{"class":311},[269,925,374],{"class":311},[269,927,928],{"class":377},"user03alice",[269,930,381],{"class":311},[269,932,562],{"class":311},[269,934,936,938,941,943,945,947,950,952],{"class":271,"line":935},41,[269,937,544],{"class":311},[269,939,940],{"class":377},"cube_id",[269,942,381],{"class":311},[269,944,552],{"class":311},[269,946,374],{"class":311},[269,948,949],{"class":377},"user03alice\u002Fmem_cube_tree",[269,951,381],{"class":311},[269,953,562],{"class":311},[269,955,957,959,962,964,966],{"class":271,"line":956},42,[269,958,544],{"class":311},[269,960,961],{"class":377},"text_mem",[269,963,381],{"class":311},[269,965,552],{"class":311},[269,967,577],{"class":311},[269,969,971,973,975,977,979,981,984,986],{"class":271,"line":970},43,[269,972,583],{"class":311},[269,974,547],{"class":377},[269,976,381],{"class":311},[269,978,552],{"class":311},[269,980,374],{"class":311},[269,982,983],{"class":377},"general_text",[269,985,381],{"class":311},[269,987,562],{"class":311},[269,989,991,993,995,997,999],{"class":271,"line":990},44,[269,992,583],{"class":311},[269,994,570],{"class":377},[269,996,381],{"class":311},[269,998,552],{"class":311},[269,1000,577],{"class":311},[269,1002,1004,1006,1008,1010,1012,1014,1017,1019],{"class":271,"line":1003},45,[269,1005,618],{"class":311},[269,1007,940],{"class":377},[269,1009,381],{"class":311},[269,1011,552],{"class":311},[269,1013,374],{"class":311},[269,1015,1016],{"class":377},"user03alice\u002Fmem_cube_general",[269,1018,381],{"class":311},[269,1020,562],{"class":311},[269,1022,1024,1026,1029,1031,1033],{"class":271,"line":1023},46,[269,1025,618],{"class":311},[269,1027,1028],{"class":377},"extractor_llm",[269,1030,381],{"class":311},[269,1032,552],{"class":311},[269,1034,577],{"class":311},[269,1036,1038,1040,1042,1044,1046,1048,1050,1052],{"class":271,"line":1037},47,[269,1039,652],{"class":311},[269,1041,547],{"class":377},[269,1043,381],{"class":311},[269,1045,552],{"class":311},[269,1047,374],{"class":311},[269,1049,629],{"class":377},[269,1051,381],{"class":311},[269,1053,562],{"class":311},[269,1055,1057,1059,1061,1063,1065],{"class":271,"line":1056},48,[269,1058,652],{"class":311},[269,1060,570],{"class":377},[269,1062,381],{"class":311},[269,1064,552],{"class":311},[269,1066,577],{"class":311},[269,1068,1070,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097,1099,1101],{"class":271,"line":1069},49,[269,1071,1072],{"class":311},"                            \"",[269,1074,655],{"class":377},[269,1076,381],{"class":311},[269,1078,552],{"class":311},[269,1080,662],{"class":321},[269,1082,312],{"class":311},[269,1084,667],{"class":321},[269,1086,325],{"class":311},[269,1088,381],{"class":311},[269,1090,674],{"class":377},[269,1092,381],{"class":311},[269,1094,679],{"class":311},[269,1096,374],{"class":311},[269,1098,684],{"class":377},[269,1100,381],{"class":311},[269,1102,689],{"class":311},[269,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122,1124,1126,1128],{"class":271,"line":1105},50,[269,1107,1072],{"class":311},[269,1109,732],{"class":377},[269,1111,381],{"class":311},[269,1113,552],{"class":311},[269,1115,662],{"class":321},[269,1117,312],{"class":311},[269,1119,667],{"class":321},[269,1121,325],{"class":311},[269,1123,381],{"class":311},[269,1125,749],{"class":377},[269,1127,381],{"class":311},[269,1129,689],{"class":311},[269,1131,1133,1135,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155],{"class":271,"line":1132},51,[269,1134,1072],{"class":311},[269,1136,761],{"class":377},[269,1138,381],{"class":311},[269,1140,552],{"class":311},[269,1142,662],{"class":321},[269,1144,312],{"class":311},[269,1146,667],{"class":321},[269,1148,325],{"class":311},[269,1150,381],{"class":311},[269,1152,778],{"class":377},[269,1154,381],{"class":311},[269,1156,689],{"class":311},[269,1158,1160],{"class":271,"line":1159},52,[269,1161,1162],{"class":311},"                        },\n",[269,1164,1166],{"class":271,"line":1165},53,[269,1167,788],{"class":311},[269,1169,1171,1173,1176,1178,1180],{"class":271,"line":1170},54,[269,1172,618],{"class":311},[269,1174,1175],{"class":377},"vector_db",[269,1177,381],{"class":311},[269,1179,552],{"class":311},[269,1181,577],{"class":311},[269,1183,1185,1187,1189,1191,1193,1195,1198,1200],{"class":271,"line":1184},55,[269,1186,652],{"class":311},[269,1188,547],{"class":377},[269,1190,381],{"class":311},[269,1192,552],{"class":311},[269,1194,374],{"class":311},[269,1196,1197],{"class":377},"qdrant",[269,1199,381],{"class":311},[269,1201,562],{"class":311},[269,1203,1205,1207,1209,1211,1213],{"class":271,"line":1204},56,[269,1206,652],{"class":311},[269,1208,570],{"class":377},[269,1210,381],{"class":311},[269,1212,552],{"class":311},[269,1214,577],{"class":311},[269,1216,1218,1220,1223,1225,1227,1229,1232,1234],{"class":271,"line":1217},57,[269,1219,1072],{"class":311},[269,1221,1222],{"class":377},"collection_name",[269,1224,381],{"class":311},[269,1226,552],{"class":311},[269,1228,374],{"class":311},[269,1230,1231],{"class":377},"user03alice_mem_cube_general",[269,1233,381],{"class":311},[269,1235,562],{"class":311},[269,1237,1239,1241,1244,1246,1248,1250],{"class":271,"line":1238},58,[269,1240,1072],{"class":311},[269,1242,1243],{"class":377},"vector_dimension",[269,1245,381],{"class":311},[269,1247,552],{"class":311},[269,1249,722],{"class":704},[269,1251,562],{"class":311},[269,1253,1255],{"class":271,"line":1254},59,[269,1256,1162],{"class":311},[269,1258,1260],{"class":271,"line":1259},60,[269,1261,788],{"class":311},[269,1263,1265,1267,1270,1272,1274],{"class":271,"line":1264},61,[269,1266,618],{"class":311},[269,1268,1269],{"class":377},"embedder",[269,1271,381],{"class":311},[269,1273,552],{"class":311},[269,1275,577],{"class":311},[269,1277,1279,1281,1283,1285,1287,1289,1291,1293,1295,1297,1300,1302,1304,1306,1309,1311],{"class":271,"line":1278},62,[269,1280,652],{"class":311},[269,1282,547],{"class":377},[269,1284,381],{"class":311},[269,1286,552],{"class":311},[269,1288,662],{"class":321},[269,1290,312],{"class":311},[269,1292,667],{"class":321},[269,1294,325],{"class":311},[269,1296,381],{"class":311},[269,1298,1299],{"class":377},"MOS_EMBEDDER_BACKEND",[269,1301,381],{"class":311},[269,1303,679],{"class":311},[269,1305,374],{"class":311},[269,1307,1308],{"class":377},"universal_api",[269,1310,381],{"class":311},[269,1312,689],{"class":311},[269,1314,1316,1318,1320,1322,1324],{"class":271,"line":1315},63,[269,1317,652],{"class":311},[269,1319,570],{"class":377},[269,1321,381],{"class":311},[269,1323,552],{"class":311},[269,1325,577],{"class":311},[269,1327,1329,1331,1334,1336,1338,1340,1342,1344],{"class":271,"line":1328},64,[269,1330,1072],{"class":311},[269,1332,1333],{"class":377},"provider",[269,1335,381],{"class":311},[269,1337,552],{"class":311},[269,1339,374],{"class":311},[269,1341,629],{"class":377},[269,1343,381],{"class":311},[269,1345,562],{"class":311},[269,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365,1367,1370,1372,1374,1376,1379,1381],{"class":271,"line":1348},65,[269,1350,1072],{"class":311},[269,1352,732],{"class":377},[269,1354,381],{"class":311},[269,1356,552],{"class":311},[269,1358,662],{"class":321},[269,1360,312],{"class":311},[269,1362,667],{"class":321},[269,1364,325],{"class":311},[269,1366,381],{"class":311},[269,1368,1369],{"class":377},"MOS_EMBEDDER_API_KEY",[269,1371,381],{"class":311},[269,1373,679],{"class":311},[269,1375,374],{"class":311},[269,1377,1378],{"class":377},"EMPTY",[269,1380,381],{"class":311},[269,1382,689],{"class":311},[269,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1407,1409,1411,1413,1416,1418],{"class":271,"line":1385},66,[269,1387,1072],{"class":311},[269,1389,655],{"class":377},[269,1391,381],{"class":311},[269,1393,552],{"class":311},[269,1395,662],{"class":321},[269,1397,312],{"class":311},[269,1399,667],{"class":321},[269,1401,325],{"class":311},[269,1403,381],{"class":311},[269,1405,1406],{"class":377},"MOS_EMBEDDER_MODEL",[269,1408,381],{"class":311},[269,1410,679],{"class":311},[269,1412,374],{"class":311},[269,1414,1415],{"class":377},"bge-m3",[269,1417,381],{"class":311},[269,1419,689],{"class":311},[269,1421,1423,1425,1428,1430,1432,1434,1436,1438,1440,1442,1445,1447],{"class":271,"line":1422},67,[269,1424,1072],{"class":311},[269,1426,1427],{"class":377},"base_url",[269,1429,381],{"class":311},[269,1431,552],{"class":311},[269,1433,662],{"class":321},[269,1435,312],{"class":311},[269,1437,667],{"class":321},[269,1439,325],{"class":311},[269,1441,381],{"class":311},[269,1443,1444],{"class":377},"MOS_EMBEDDER_API_BASE",[269,1446,381],{"class":311},[269,1448,689],{"class":311},[269,1450,1452],{"class":271,"line":1451},68,[269,1453,1162],{"class":311},[269,1455,1457],{"class":271,"line":1456},69,[269,1458,788],{"class":311},[269,1460,1462],{"class":271,"line":1461},70,[269,1463,794],{"class":311},[269,1465,1467],{"class":271,"line":1466},71,[269,1468,850],{"class":311},[269,1470,1472],{"class":271,"line":1471},72,[269,1473,856],{"class":311},[269,1475,1477],{"class":271,"line":1476},73,[269,1478,862],{"class":311},[269,1480,1482],{"class":271,"line":1481},74,[269,1483,295],{"emptyLinePlaceholder":294},[269,1485,1487,1489,1492],{"class":271,"line":1486},75,[269,1488,489],{"class":488},[269,1490,1491],{"class":321}," main",[269,1493,1494],{"class":311},"():\n",[269,1496,1498,1501,1503,1505,1508,1510],{"class":271,"line":1497},76,[269,1499,1500],{"class":321},"    print",[269,1502,325],{"class":311},[269,1504,381],{"class":311},[269,1506,1507],{"class":377},"Initializing MemChat...",[269,1509,381],{"class":311},[269,1511,1512],{"class":311},")\n",[269,1514,1516,1519,1522,1525,1527,1530,1532,1535],{"class":271,"line":1515},77,[269,1517,1518],{"class":279},"    mem_chat ",[269,1520,1521],{"class":311},"=",[269,1523,1524],{"class":279}," MemChatFactory",[269,1526,312],{"class":311},[269,1528,1529],{"class":321},"from_config",[269,1531,325],{"class":311},[269,1533,1534],{"class":321},"get_mem_chat_config",[269,1536,1537],{"class":311},"())\n",[269,1539,1541],{"class":271,"line":1540},78,[269,1542,295],{"emptyLinePlaceholder":294},[269,1544,1546,1548,1550,1552,1555,1557],{"class":271,"line":1545},79,[269,1547,1500],{"class":321},[269,1549,325],{"class":311},[269,1551,381],{"class":311},[269,1553,1554],{"class":377},"Initializing MemCube...",[269,1556,381],{"class":311},[269,1558,1512],{"class":311},[269,1560,1562,1565,1567,1570,1572,1575],{"class":271,"line":1561},80,[269,1563,1564],{"class":279},"    mem_cube ",[269,1566,1521],{"class":311},[269,1568,1569],{"class":321}," GeneralMemCube",[269,1571,325],{"class":311},[269,1573,1574],{"class":321},"get_mem_cube_config",[269,1576,1537],{"class":311},[269,1578,1580],{"class":271,"line":1579},81,[269,1581,295],{"emptyLinePlaceholder":294},[269,1583,1585],{"class":271,"line":1584},82,[269,1586,1587],{"class":301},"    # 关键步骤：挂载记忆立方体\n",[269,1589,1591,1594,1596,1598,1601],{"class":271,"line":1590},83,[269,1592,1593],{"class":279},"    mem_chat",[269,1595,312],{"class":311},[269,1597,110],{"class":315},[269,1599,1600],{"class":311}," =",[269,1602,1603],{"class":279}," mem_cube\n",[269,1605,1607],{"class":271,"line":1606},84,[269,1608,1609],{"class":279},"    \n",[269,1611,1613,1615,1617,1619,1622,1624],{"class":271,"line":1612},85,[269,1614,1500],{"class":321},[269,1616,325],{"class":311},[269,1618,381],{"class":311},[269,1620,1621],{"class":377},"Starting Chat Session...",[269,1623,381],{"class":311},[269,1625,1512],{"class":311},[269,1627,1629,1632],{"class":271,"line":1628},86,[269,1630,1631],{"class":275},"    try",[269,1633,504],{"class":311},[269,1635,1637,1640,1642,1645],{"class":271,"line":1636},87,[269,1638,1639],{"class":279},"        mem_chat",[269,1641,312],{"class":311},[269,1643,1644],{"class":321},"run",[269,1646,1647],{"class":311},"()\n",[269,1649,1651,1654],{"class":271,"line":1650},88,[269,1652,1653],{"class":275},"    finally",[269,1655,504],{"class":311},[269,1657,1659,1662,1664,1666,1669,1671],{"class":271,"line":1658},89,[269,1660,1661],{"class":321},"        print",[269,1663,325],{"class":311},[269,1665,381],{"class":311},[269,1667,1668],{"class":377},"Saving memory cube...",[269,1670,381],{"class":311},[269,1672,1512],{"class":311},[269,1674,1676,1678,1680,1682,1684,1687,1689,1691,1694,1696],{"class":271,"line":1675},90,[269,1677,1639],{"class":279},[269,1679,312],{"class":311},[269,1681,110],{"class":315},[269,1683,312],{"class":311},[269,1685,1686],{"class":321},"dump",[269,1688,325],{"class":311},[269,1690,381],{"class":311},[269,1692,1693],{"class":377},"new_cube_path",[269,1695,381],{"class":311},[269,1697,1512],{"class":311},[269,1699,1701],{"class":271,"line":1700},91,[269,1702,295],{"emptyLinePlaceholder":294},[269,1704,1706,1709,1712,1715,1717,1720,1722],{"class":271,"line":1705},92,[269,1707,1708],{"class":275},"if",[269,1710,1711],{"class":279}," __name__ ",[269,1713,1714],{"class":311},"==",[269,1716,374],{"class":311},[269,1718,1719],{"class":377},"__main__",[269,1721,381],{"class":311},[269,1723,504],{"class":311},[269,1725,1727,1730],{"class":271,"line":1726},93,[269,1728,1729],{"class":321},"    main",[269,1731,1647],{"class":311},[26,1733],{},[11,1735,1737],{"id":1736},"_7-配置说明","7. 配置说明",[16,1739,1740,1741,1744],{},"在配置 ",[54,1742,1743],{},"MemChatConfigFactory"," 时，以下参数至关重要：",[78,1746,1747,1754,1761,1775,1782],{},[81,1748,1749,1753],{},[19,1750,1751],{},[54,1752,586],{},": 必填。用于标识当前对话的用户，确保记忆的隔离性。",[81,1755,1756,1760],{},[19,1757,1758],{},[54,1759,186],{},": 对话模型配置。建议使用能力较强的模型（如 GPT-4o），以获得更好的回复质量和指令遵循能力。",[81,1762,1763,88,1767,1770,1771,1774],{},[19,1764,1765],{},[54,1766,214],{},[54,1768,1769],{},"True"," \u002F ",[54,1772,1773],{},"False","。是否开启文本记忆。如果开启，系统会在对话前进行检索，并在对话后进行存储。",[81,1776,1777,1781],{},[19,1778,1779],{},[54,1780,56],{},": 整数。对话历史保留的轮数。超过此限制的历史记录将被截断，从而依赖长期记忆来补充上下文。",[81,1783,1784,1788],{},[19,1785,1786],{},[54,1787,818],{},": 整数。每次从记忆库中检索多少条最相关的记忆片段注入到 Prompt 中。",[1790,1791,1792],"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":265,"searchDepth":283,"depth":283,"links":1794},[1795,1796,1802,1803,1809,1810,1813],{"id":13,"depth":283,"text":14},{"id":30,"depth":283,"text":31,"children":1797},[1798,1799,1800,1801],{"id":35,"depth":291,"text":36},{"id":42,"depth":291,"text":43},{"id":49,"depth":291,"text":49},{"id":60,"depth":291,"text":60},{"id":68,"depth":283,"text":69},{"id":131,"depth":283,"text":132,"children":1804},[1805,1806,1808],{"id":145,"depth":291,"text":146},{"id":160,"depth":291,"text":1807},"4.2 run()",{"id":169,"depth":291,"text":170},{"id":192,"depth":283,"text":193},{"id":250,"depth":283,"text":251,"children":1811},[1812],{"id":257,"depth":291,"text":258},{"id":1736,"depth":283,"text":1737},"MemChat 是你的“记忆外交官”，它协调用户输入、记忆检索与 LLM 生成，打造连贯且具备长期记忆的对话体验。","md",{},"\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_chat",{"title":5,"description":265},"cn\u002Fopen_source\u002Fmodules\u002Fmem_chat","BmKFLQiWsqxt4QAtVStaOU8a5-cQKRmD4NKWddWO-mA",[1822,1830],{"title":1823,"path":1824,"stem":1825,"icon":1826,"framework":6,"module":6,"class":1827,"target":-1,"active":1828,"defaultOpen":1828,"children":-1,"description":1829},"MemScheduler 记忆调度","\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_scheduler","open_source\u002Fmodules\u002Fmem_scheduler","i-ri-calendar-line",[],false,"MemScheduler 是你的“记忆组织调度器”，它在后台异步管理记忆的流转和更新，协调工作记忆、长时记忆和激活记忆之间的交互，让对话系统能够动态地组织和利用记忆。",{"title":1831,"path":1832,"stem":1833,"icon":1834,"framework":6,"module":6,"class":1835,"target":-1,"active":1828,"defaultOpen":1828,"children":-1,"description":1836},"MemFeedback 记忆反馈","\u002Fcn\u002Fopen_source\u002Fmodules\u002Fmem_feedback","open_source\u002Fmodules\u002Fmem_feedback","i-ri-feedback-line",[],"MemFeedback 是你的“记忆错题本”，让你的 Agent 能够听懂“你记错了”，并自动修正记忆库。它是实现记忆自进化的关键组件。",1774339751094]