[{"data":1,"prerenderedAt":2893},["ShallowReactive",2],{"\u002Fusecase\u002Fwritting_assistant":3,"surround-\u002Fusecase\u002Fwritting_assistant":2877},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":2870,"description":322,"extension":2871,"links":6,"meta":2872,"navigation":6,"path":2873,"seo":2874,"stem":2875,"__hash__":2876},"docs\u002Fen\u002Fusecase\u002Fwritting_assistant.md","A Writing Assistant with Memory is More Useful",null,{"type":8,"value":9,"toc":2857},"minimark",[10,15,24,61,64,66,71,74,118,120,124,127,147,149,153,156,231,233,237,240,243,254,257,278,281,303,305,309,313,316,343,345,349,2812,2814,2818,2853],[11,12,14],"h2",{"id":13},"_1-overview","1. Overview",[16,17,18,19,23],"p",{},"In writing assistant products, users often hope that the assistant can ",[20,21,22],"strong",{},"remember their writing style and habits"," instead of starting from scratch each time.",[25,26,27,37,45,53],"ul",{},[28,29,30,33,36],"li",{},[20,31,32],{},"Writing Style",[34,35],"br",{},"\n\"When helping me write a summary, keep the tone light.\"",[28,38,39,42,44],{},[20,40,41],{},"Common Information",[34,43],{},"\n\"Remember that I am in charge of the Marketing Department at XX company.\"",[28,46,47,50,52],{},[20,48,49],{},"Writing Preferences",[34,51],{},"\n\"From now on, always start emails with 'Dear Customer.'\"",[28,54,55,58,60],{},[20,56,57],{},"Context Continuity",[34,59],{},"\n\"Please further optimize yesterday’s proposal summary by adding the budget section.\"",[16,62,63],{},"Without memory, this information is lost once the conversation ends. Users must repeatedly remind the assistant, which makes the experience feel fragmented and unprofessional.",[34,65],{},[67,68,70],"h3",{"id":69},"_11-why-not-use-traditional-rag","1.1 Why Not Use Traditional RAG?",[16,72,73],{},"In the writing assistant scenario, RAG is not suitable.",[75,76,77,90],"table",{},[78,79,80],"thead",{},[81,82,83,87],"tr",{},[84,85,86],"th",{},"Traditional RAG",[84,88,89],{},"MemOS",[91,92,93,102,110],"tbody",{},[81,94,95,99],{},[96,97,98],"td",{},"Relies on a static knowledge base, requiring constant manual document maintenance",[96,100,101],{},"Information generated in the conversation can be directly written in, no extra maintenance required",[81,103,104,107],{},[96,105,106],{},"Retrieval results are usually generic knowledge fragments",[96,108,109],{},"Can store and retrieve personalized style, tone, and commonly used expressions",[81,111,112,115],{},[96,113,114],{},"More suitable for “company documents\u002Fencyclopedia knowledge”",[96,116,117],{},"More suitable for “continuous iteration and personalization” in writing assistants",[34,119],{},[67,121,123],{"id":122},"_12-why-not-build-it-yourself","1.2 Why Not Build It Yourself?",[16,125,126],{},"Of course, you could try to save user preferences and context in a database, but this brings several challenges:",[25,128,129,135,141],{},[28,130,131,134],{},[20,132,133],{},"Complex storage and retrieval logic",": You need to distinguish main text, preferences, and user profiles, and design retrieval strategies.",[28,136,137,140],{},[20,138,139],{},"Troublesome integration with large models",": Storing is only the first step; before calling the large model, you still need to “insert” the relevant information into the prompt.",[28,142,143,146],{},[20,144,145],{},"Poor scalability",": As user needs increase (writing style, common phrases, contextual links), the code will quickly become bloated.",[34,148],{},[67,150,152],{"id":151},"_13-why-use-memos","1.3 Why Use MemOS?",[16,154,155],{},"When making a choice, you can directly compare the three approaches:",[75,157,158,174],{},[78,159,160],{},[81,161,162,165,168,171],{},[84,163,164],{},"Approach",[84,166,167],{},"Features",[84,169,170],{},"Limitations",[84,172,173],{},"Advantages of MemOS",[91,175,176,191,207],{},[81,177,178,182,185,188],{},[96,179,180],{},[20,181,86],{},[96,183,184],{},"Retrieves documents from a vector knowledge base and inserts into the prompt",[96,186,187],{},"Requires manual maintenance of static documents; unsuitable for personalized writing habits",[96,189,190],{},"Automatically captures styles and preferences revealed by users during conversations",[81,192,193,198,201,204],{},[96,194,195],{},[20,196,197],{},"Self-built Storage Solution",[96,199,200],{},"Build your own tables\u002Fcaches to save preferences and content",[96,202,203],{},"Complex logic: must distinguish main text\u002Fpreferences\u002Fprofiles; manual prompt insertion needed; difficult to scale",[96,205,206],{},"MemOS encapsulates storage + retrieval + prompt injection, reducing development burden",[81,208,209,213,225,228],{},[96,210,211],{},[20,212,89],{},[96,214,215,216,220,221,224],{},"Just two APIs: ",[217,218,219],"code",{},"addMessage"," for writing, ",[217,222,223],{},"searchMemory"," for retrieval",[96,226,227],{},"——",[96,229,230],{},"Supports long-term tracking of writing styles and reuse of common information; out-of-the-box and easy to expand",[34,232],{},[67,234,236],{"id":235},"_14-what-will-this-case-show","1.4 What Will This Case Show?",[16,238,239],{},"This case demonstrates how to use the MemOS cloud service to quickly implement a writing assistant that “remembers the user.”",[16,241,242],{},"In this demo, the user may:",[25,244,245,248,251],{},[28,246,247],{},"Set preferences: “When helping me write a summary, keep the tone light.”",[28,249,250],{},"Reuse background: “Remember that I am in charge of the Marketing Department at XX company.”",[28,252,253],{},"Iterate tasks: “Please further optimize yesterday’s proposal summary by adding the budget section.”",[16,255,256],{},"With MemOS, the writing assistant can:",[258,259,260,266,272],"ol",{},[28,261,262,265],{},[20,263,264],{},"Maintain Style",": Keep consistent tone and formatting as required by the user.",[28,267,268,271],{},[20,269,270],{},"Reuse Information",": Automatically include the user’s common background information.",[28,273,274,277],{},[20,275,276],{},"Iterate Quickly",": Modify based on existing content instead of starting over.",[16,279,280],{},"When running this case script, developers will see in the console:",[25,282,283,292,295],{},[28,284,285,286,288,289,291],{},"Each ",[217,287,219],{}," and ",[217,290,223],{}," request\u002Fresponse",[28,293,294],{},"Retrieved memories such as writing style and background information",[28,296,297,298,302],{},"The final model-generated answer (if no large model is connected, it will display ",[299,300,301],"span",{},"No model connected",")",[34,304],{},[11,306,308],{"id":307},"_2-example","2. Example",[67,310,312],{"id":311},"_21-environment-setup","2.1 Environment Setup",[16,314,315],{},"Install the required dependencies via pip:",[317,318,323],"pre",{"className":319,"code":320,"language":321,"meta":322,"style":322},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pip install MemoryOS -U\n","shell","",[217,324,325],{"__ignoreMap":322},[299,326,329,333,337,340],{"class":327,"line":328},"line",1,[299,330,332],{"class":331},"sBMFI","pip",[299,334,336],{"class":335},"sfazB"," install",[299,338,339],{"class":335}," MemoryOS",[299,341,342],{"class":335}," -U\n",[34,344],{},[67,346,348],{"id":347},"_22-complete-code","2.2 Complete Code",[317,350,354],{"className":351,"code":352,"language":353,"meta":322,"style":322},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import os\nimport uuid\nfrom openai import OpenAI\nfrom memos.api.client import MemOSClient\n\nos.environ[\"MEMOS_API_KEY\"] = \"mpg-xx\" # Get MemOS_API_KEY from cloud service console\nos.environ[\"OPENAI_API_KEY\"] = \"sk-xx\" # Replace with your own API_KEY\n\nconversation_counter = 0\n\ndef generate_conversation_id():\n    global conversation_counter\n    conversation_counter += 1\n    return f\"conversation_{conversation_counter:03d}\"\n\nclass WritingAssistant:\n    \"\"\"AI Writing Assistant, helps users write with memory capability\"\"\"\n    \n    def __init__(self):\n        self.memos_client = MemOSClient(api_key=os.getenv(\"MEMOS_API_KEY\"))\n        self.openai_client = OpenAI(api_key=os.getenv(\"OPENAI_API_KEY\"))\n    \n    def search_memory(self, query, user_id, conversation_id):\n        \"\"\"Search relevant memories based on query\"\"\"\n        response = self.memos_client.search_memory(query, user_id, conversation_id)\n        return [memory_detail.memory_value for memory_detail in response.data.memory_detail_list]\n\n    def build_system_prompt(self, memories):\n        \"\"\"Build a system prompt that includes formatted memories\"\"\"\n        base_prompt = \"\"\"\n          You are a professional writing assistant who can remember the user’s writing style and preferences.\n          You can call conversation memories to provide more personalized replies.\n          Please use these memories to understand the user’s background, preferences, and past interactions.\n          If memories are provided, naturally reference them where relevant, but do not explicitly mention having memory capabilities.\n        \"\"\"\n\n        if memories:\n            # Format memories as a numbered list\n            formatted_memories = \"## Memories:\\n\"\n            for i, memory in enumerate(memories, 1):\n                formatted_memories += f\"{i}. {memory}\\n\"\n            \n            return f\"{base_prompt}\\n\\n{formatted_memories}\"\n        else:\n            return base_prompt\n        \n\n    def add_message(self, messages, user_id, conversation_id):\n        \"\"\"Add messages to MemOS so they can be processed into memories\"\"\"\n        self.memos_client.add_message(messages, user_id, conversation_id)\n\n    def get_message(self, user_id, conversation_id):\n        \"\"\"Retrieve the raw messages stored in MemOS (for debugging\u002Finspection)\"\"\"\n        response = self.memos_client.get_message(user_id, conversation_id)\n        return response.data.message_detail_list\n\n    def chat(self, query, user_id, conversation_id):\n        \"\"\"Main chat function to handle dialogue with memory integration\"\"\"\n        # 1. Search relevant memories\n        memories = self.search_memory(query, user_id, conversation_id)\n        \n        # Build system prompt with memories\n        system_prompt = self.build_system_prompt(memories)\n        \n        # 2. Use OpenAI to generate an answer\n        response = self.openai_client.chat.completions.create(\n            model=\"gpt-4o\",\n            messages=[\n                {\"role\": \"system\", \"content\": system_prompt},\n                {\"role\": \"user\", \"content\": query}\n            ]\n        )\n        answer = response.choices[0].message.content\n\n        # 3. Save the conversation into memories\n        messages = [\n            {\"role\": \"user\", \"content\": query},\n            {\"role\": \"assistant\", \"content\": answer}\n        ]\n        self.memos_client.add_message(messages, user_id, conversation_id)\n        \n        return answer\n\nai_assistant = WritingAssistant()\nuser_id = \"memos_writing_user_123\"\n\ndef demo_questions():\n    return [\n      \"Help me write a notification email for a team dinner\",\n      \"Help me write a client email summarizing the new features of our upcoming finance app\",\n    ]\n\ndef pre_configured_conversations():\n    \"\"\"Return pre-configured dialogue pairs\"\"\"\n    return [\n        {\n            \"user\": \"I work in the marketing department at an internet company. Keep the tone light when writing emails, and start with 'Dear XX'.\"\n        },\n        {\n            \"user\": \"When writing summaries, I prefer to list three bullet points first.\"\n        }\n    ]\n\ndef execute_pre_conversations():\n    \"\"\"Execute pre-configured dialogues\"\"\"\n    conversations = pre_configured_conversations()\n    conversation_id = generate_conversation_id()\n    \n    print(f\"\\n🔄 Executing pre-configured dialogues（conversation_id={conversation_id}）...\")\n    print(\"=\" * 60)\n    \n    for i, conv in enumerate(conversations, 1):\n        print(f\"\\n💬 Dialogue {i}\")\n        print(f\"👤 User: {conv['user']}\")\n        \n        # Execute dialogue\n        answer = ai_assistant.chat(conv['user'], user_id, conversation_id)\n        print(f\"🤖 Assistant: {answer}\")\n        print(\"-\" * 40)\n    \n    print(\"\\n✅ Pre-configured dialogues completed!\")\n    print(\"=\" * 60)\n\ndef main():\n    print(\"📝 Welcome to the MemOS writing assistant example!\")\n    print(\"💡 With MemOS, your writing assistant better understands your style and preferences! ✍️ \\n\")\n    \n    # Ask whether to execute pre-configured dialogues first\n    while True:\n        pre_chat = input(\"🤔 Do you want to execute the pre-configured dialogues first? This will consume 2 add and 2 search calls. Execute? (y\u002Fn): \").strip().lower()\n        \n        if pre_chat in ['y', 'yes', 'Y']:\n            execute_pre_conversations()\n            break\n        elif pre_chat in ['n', 'no', 'N']:\n            print(\"📝 Starting a brand-new writing assistant dialogue...\")\n            break\n        else:\n            print(\"⚠️ Please enter 'y' for yes or 'n' for no\")\n\n    print(\"\\n⚡️ Each question you enter next will take place in a brand-new conversation (with a new conversation ID). MemOS will automatically recall your historical behavioral memories across conversations to provide you with continuous and personalized service.\")    \n    print(\"\\n🎯 Here are some example questions. You can continue chatting with the writing assistant:\")\n    for i, question in enumerate(demo_questions(), 1):\n        print(f\"  {i}. {question}\")\n\n    while True:\n        user_query = input(\"\\n🤔 Please enter your writing request (or type 'exit' to quit): \").strip()\n        \n        if user_query.lower() in ['quit', 'exit', 'q']:\n            print(\"👋 Thank you for using the writing assistant. Happy writing!\")\n            break\n        \n        if not user_query:\n            continue\n        \n        print(\"🤖 Creating...\")\n        conversation_id = generate_conversation_id()\n        answer = ai_assistant.chat(user_query, user_id, conversation_id)\n        print(f\"\\n💬 conversation_id: {conversation_id}\\n💡 [Assistant]: {answer}\\n\")\n        print(\"-\" * 60)\n\n\nif __name__ == \"__main__\":\n    main()\n","python",[217,355,356,366,374,388,413,420,461,493,498,511,516,530,539,551,578,583,595,607,613,632,674,711,716,746,757,793,835,840,859,869,880,886,892,898,904,910,915,925,931,949,980,1013,1019,1048,1056,1064,1070,1075,1102,1112,1141,1146,1168,1178,1207,1223,1228,1254,1264,1270,1298,1303,1309,1330,1335,1341,1372,1390,1399,1439,1474,1480,1486,1517,1522,1528,1539,1573,1608,1614,1641,1646,1654,1659,1672,1687,1692,1702,1709,1722,1734,1740,1745,1755,1765,1772,1778,1797,1803,1808,1826,1832,1837,1842,1852,1862,1874,1886,1891,1921,1942,1947,1975,2002,2036,2041,2047,2084,2107,2128,2133,2151,2170,2175,2185,2201,2219,2224,2230,2239,2273,2278,2319,2327,2333,2372,2389,2394,2401,2417,2422,2442,2460,2488,2519,2524,2531,2558,2563,2610,2626,2631,2636,2648,2654,2659,2675,2687,2715,2754,2773,2778,2783,2804],{"__ignoreMap":322},[299,357,358,362],{"class":327,"line":328},[299,359,361],{"class":360},"s7zQu","import",[299,363,365],{"class":364},"sTEyZ"," os\n",[299,367,369,371],{"class":327,"line":368},2,[299,370,361],{"class":360},[299,372,373],{"class":364}," uuid\n",[299,375,377,380,383,385],{"class":327,"line":376},3,[299,378,379],{"class":360},"from",[299,381,382],{"class":364}," openai ",[299,384,361],{"class":360},[299,386,387],{"class":364}," OpenAI\n",[299,389,391,393,396,400,403,405,408,410],{"class":327,"line":390},4,[299,392,379],{"class":360},[299,394,395],{"class":364}," memos",[299,397,399],{"class":398},"sMK4o",".",[299,401,402],{"class":364},"api",[299,404,399],{"class":398},[299,406,407],{"class":364},"client ",[299,409,361],{"class":360},[299,411,412],{"class":364}," MemOSClient\n",[299,414,416],{"class":327,"line":415},5,[299,417,419],{"emptyLinePlaceholder":418},true,"\n",[299,421,423,426,428,432,435,438,441,443,446,449,452,455,457],{"class":327,"line":422},6,[299,424,425],{"class":364},"os",[299,427,399],{"class":398},[299,429,431],{"class":430},"swJcz","environ",[299,433,434],{"class":398},"[",[299,436,437],{"class":398},"\"",[299,439,440],{"class":335},"MEMOS_API_KEY",[299,442,437],{"class":398},[299,444,445],{"class":398},"]",[299,447,448],{"class":398}," =",[299,450,451],{"class":398}," \"",[299,453,454],{"class":335},"mpg-xx",[299,456,437],{"class":398},[299,458,460],{"class":459},"sHwdD"," # Get MemOS_API_KEY from cloud service console\n",[299,462,464,466,468,470,472,474,477,479,481,483,485,488,490],{"class":327,"line":463},7,[299,465,425],{"class":364},[299,467,399],{"class":398},[299,469,431],{"class":430},[299,471,434],{"class":398},[299,473,437],{"class":398},[299,475,476],{"class":335},"OPENAI_API_KEY",[299,478,437],{"class":398},[299,480,445],{"class":398},[299,482,448],{"class":398},[299,484,451],{"class":398},[299,486,487],{"class":335},"sk-xx",[299,489,437],{"class":398},[299,491,492],{"class":459}," # Replace with your own API_KEY\n",[299,494,496],{"class":327,"line":495},8,[299,497,419],{"emptyLinePlaceholder":418},[299,499,501,504,507],{"class":327,"line":500},9,[299,502,503],{"class":364},"conversation_counter ",[299,505,506],{"class":398},"=",[299,508,510],{"class":509},"sbssI"," 0\n",[299,512,514],{"class":327,"line":513},10,[299,515,419],{"emptyLinePlaceholder":418},[299,517,519,523,527],{"class":327,"line":518},11,[299,520,522],{"class":521},"spNyl","def",[299,524,526],{"class":525},"s2Zo4"," generate_conversation_id",[299,528,529],{"class":398},"():\n",[299,531,533,536],{"class":327,"line":532},12,[299,534,535],{"class":521},"    global",[299,537,538],{"class":364}," conversation_counter\n",[299,540,542,545,548],{"class":327,"line":541},13,[299,543,544],{"class":364},"    conversation_counter ",[299,546,547],{"class":398},"+=",[299,549,550],{"class":509}," 1\n",[299,552,554,557,560,563,566,569,572,575],{"class":327,"line":553},14,[299,555,556],{"class":360},"    return",[299,558,559],{"class":521}," f",[299,561,562],{"class":335},"\"conversation_",[299,564,565],{"class":509},"{",[299,567,568],{"class":364},"conversation_counter",[299,570,571],{"class":521},":03d",[299,573,574],{"class":509},"}",[299,576,577],{"class":335},"\"\n",[299,579,581],{"class":327,"line":580},15,[299,582,419],{"emptyLinePlaceholder":418},[299,584,586,589,592],{"class":327,"line":585},16,[299,587,588],{"class":521},"class",[299,590,591],{"class":331}," WritingAssistant",[299,593,594],{"class":398},":\n",[299,596,598,601,604],{"class":327,"line":597},17,[299,599,600],{"class":360},"    \"\"\"",[299,602,603],{"class":459},"AI Writing Assistant, helps users write with memory capability",[299,605,606],{"class":360},"\"\"\"\n",[299,608,610],{"class":327,"line":609},18,[299,611,612],{"class":364},"    \n",[299,614,616,619,622,625,629],{"class":327,"line":615},19,[299,617,618],{"class":521},"    def",[299,620,621],{"class":525}," __init__",[299,623,624],{"class":398},"(",[299,626,628],{"class":627},"s5tWE","self",[299,630,631],{"class":398},"):\n",[299,633,635,638,640,643,645,648,650,654,656,658,660,663,665,667,669,671],{"class":327,"line":634},20,[299,636,637],{"class":364},"        self",[299,639,399],{"class":398},[299,641,642],{"class":430},"memos_client",[299,644,448],{"class":398},[299,646,647],{"class":525}," MemOSClient",[299,649,624],{"class":398},[299,651,653],{"class":652},"sHdIc","api_key",[299,655,506],{"class":398},[299,657,425],{"class":525},[299,659,399],{"class":398},[299,661,662],{"class":525},"getenv",[299,664,624],{"class":398},[299,666,437],{"class":398},[299,668,440],{"class":335},[299,670,437],{"class":398},[299,672,673],{"class":398},"))\n",[299,675,677,679,681,684,686,689,691,693,695,697,699,701,703,705,707,709],{"class":327,"line":676},21,[299,678,637],{"class":364},[299,680,399],{"class":398},[299,682,683],{"class":430},"openai_client",[299,685,448],{"class":398},[299,687,688],{"class":525}," OpenAI",[299,690,624],{"class":398},[299,692,653],{"class":652},[299,694,506],{"class":398},[299,696,425],{"class":525},[299,698,399],{"class":398},[299,700,662],{"class":525},[299,702,624],{"class":398},[299,704,437],{"class":398},[299,706,476],{"class":335},[299,708,437],{"class":398},[299,710,673],{"class":398},[299,712,714],{"class":327,"line":713},22,[299,715,612],{"class":364},[299,717,719,721,724,726,728,731,734,736,739,741,744],{"class":327,"line":718},23,[299,720,618],{"class":521},[299,722,723],{"class":525}," search_memory",[299,725,624],{"class":398},[299,727,628],{"class":627},[299,729,730],{"class":398},",",[299,732,733],{"class":652}," query",[299,735,730],{"class":398},[299,737,738],{"class":652}," user_id",[299,740,730],{"class":398},[299,742,743],{"class":652}," conversation_id",[299,745,631],{"class":398},[299,747,749,752,755],{"class":327,"line":748},24,[299,750,751],{"class":360},"        \"\"\"",[299,753,754],{"class":459},"Search relevant memories based on query",[299,756,606],{"class":360},[299,758,760,763,765,768,770,772,774,777,779,782,784,786,788,790],{"class":327,"line":759},25,[299,761,762],{"class":364},"        response ",[299,764,506],{"class":398},[299,766,767],{"class":364}," self",[299,769,399],{"class":398},[299,771,642],{"class":430},[299,773,399],{"class":398},[299,775,776],{"class":525},"search_memory",[299,778,624],{"class":398},[299,780,781],{"class":525},"query",[299,783,730],{"class":398},[299,785,738],{"class":525},[299,787,730],{"class":398},[299,789,743],{"class":525},[299,791,792],{"class":398},")\n",[299,794,796,799,802,805,807,810,813,816,819,822,824,827,829,832],{"class":327,"line":795},26,[299,797,798],{"class":360},"        return",[299,800,801],{"class":398}," [",[299,803,804],{"class":364},"memory_detail",[299,806,399],{"class":398},[299,808,809],{"class":430},"memory_value",[299,811,812],{"class":360}," for",[299,814,815],{"class":364}," memory_detail ",[299,817,818],{"class":360},"in",[299,820,821],{"class":364}," response",[299,823,399],{"class":398},[299,825,826],{"class":430},"data",[299,828,399],{"class":398},[299,830,831],{"class":430},"memory_detail_list",[299,833,834],{"class":398},"]\n",[299,836,838],{"class":327,"line":837},27,[299,839,419],{"emptyLinePlaceholder":418},[299,841,843,845,848,850,852,854,857],{"class":327,"line":842},28,[299,844,618],{"class":521},[299,846,847],{"class":525}," build_system_prompt",[299,849,624],{"class":398},[299,851,628],{"class":627},[299,853,730],{"class":398},[299,855,856],{"class":652}," memories",[299,858,631],{"class":398},[299,860,862,864,867],{"class":327,"line":861},29,[299,863,751],{"class":360},[299,865,866],{"class":459},"Build a system prompt that includes formatted memories",[299,868,606],{"class":360},[299,870,872,875,877],{"class":327,"line":871},30,[299,873,874],{"class":364},"        base_prompt ",[299,876,506],{"class":398},[299,878,879],{"class":398}," \"\"\"\n",[299,881,883],{"class":327,"line":882},31,[299,884,885],{"class":335},"          You are a professional writing assistant who can remember the user’s writing style and preferences.\n",[299,887,889],{"class":327,"line":888},32,[299,890,891],{"class":335},"          You can call conversation memories to provide more personalized replies.\n",[299,893,895],{"class":327,"line":894},33,[299,896,897],{"class":335},"          Please use these memories to understand the user’s background, preferences, and past interactions.\n",[299,899,901],{"class":327,"line":900},34,[299,902,903],{"class":335},"          If memories are provided, naturally reference them where relevant, but do not explicitly mention having memory capabilities.\n",[299,905,907],{"class":327,"line":906},35,[299,908,909],{"class":398},"        \"\"\"\n",[299,911,913],{"class":327,"line":912},36,[299,914,419],{"emptyLinePlaceholder":418},[299,916,918,921,923],{"class":327,"line":917},37,[299,919,920],{"class":360},"        if",[299,922,856],{"class":364},[299,924,594],{"class":398},[299,926,928],{"class":327,"line":927},38,[299,929,930],{"class":459},"            # Format memories as a numbered list\n",[299,932,934,937,939,941,944,947],{"class":327,"line":933},39,[299,935,936],{"class":364},"            formatted_memories ",[299,938,506],{"class":398},[299,940,451],{"class":398},[299,942,943],{"class":335},"## Memories:",[299,945,946],{"class":364},"\\n",[299,948,577],{"class":398},[299,950,952,955,958,960,963,965,968,970,973,975,978],{"class":327,"line":951},40,[299,953,954],{"class":360},"            for",[299,956,957],{"class":364}," i",[299,959,730],{"class":398},[299,961,962],{"class":364}," memory ",[299,964,818],{"class":360},[299,966,967],{"class":525}," enumerate",[299,969,624],{"class":398},[299,971,972],{"class":525},"memories",[299,974,730],{"class":398},[299,976,977],{"class":509}," 1",[299,979,631],{"class":398},[299,981,983,986,988,990,992,994,997,999,1002,1004,1007,1009,1011],{"class":327,"line":982},41,[299,984,985],{"class":364},"                formatted_memories ",[299,987,547],{"class":398},[299,989,559],{"class":521},[299,991,437],{"class":335},[299,993,565],{"class":509},[299,995,996],{"class":364},"i",[299,998,574],{"class":509},[299,1000,1001],{"class":335},". ",[299,1003,565],{"class":509},[299,1005,1006],{"class":364},"memory",[299,1008,574],{"class":509},[299,1010,946],{"class":364},[299,1012,577],{"class":335},[299,1014,1016],{"class":327,"line":1015},42,[299,1017,1018],{"class":364},"            \n",[299,1020,1022,1025,1027,1029,1031,1034,1036,1039,1041,1044,1046],{"class":327,"line":1021},43,[299,1023,1024],{"class":360},"            return",[299,1026,559],{"class":521},[299,1028,437],{"class":335},[299,1030,565],{"class":509},[299,1032,1033],{"class":364},"base_prompt",[299,1035,574],{"class":509},[299,1037,1038],{"class":364},"\\n\\n",[299,1040,565],{"class":509},[299,1042,1043],{"class":364},"formatted_memories",[299,1045,574],{"class":509},[299,1047,577],{"class":335},[299,1049,1051,1054],{"class":327,"line":1050},44,[299,1052,1053],{"class":360},"        else",[299,1055,594],{"class":398},[299,1057,1059,1061],{"class":327,"line":1058},45,[299,1060,1024],{"class":360},[299,1062,1063],{"class":364}," base_prompt\n",[299,1065,1067],{"class":327,"line":1066},46,[299,1068,1069],{"class":364},"        \n",[299,1071,1073],{"class":327,"line":1072},47,[299,1074,419],{"emptyLinePlaceholder":418},[299,1076,1078,1080,1083,1085,1087,1089,1092,1094,1096,1098,1100],{"class":327,"line":1077},48,[299,1079,618],{"class":521},[299,1081,1082],{"class":525}," add_message",[299,1084,624],{"class":398},[299,1086,628],{"class":627},[299,1088,730],{"class":398},[299,1090,1091],{"class":652}," messages",[299,1093,730],{"class":398},[299,1095,738],{"class":652},[299,1097,730],{"class":398},[299,1099,743],{"class":652},[299,1101,631],{"class":398},[299,1103,1105,1107,1110],{"class":327,"line":1104},49,[299,1106,751],{"class":360},[299,1108,1109],{"class":459},"Add messages to MemOS so they can be processed into memories",[299,1111,606],{"class":360},[299,1113,1115,1117,1119,1121,1123,1126,1128,1131,1133,1135,1137,1139],{"class":327,"line":1114},50,[299,1116,637],{"class":364},[299,1118,399],{"class":398},[299,1120,642],{"class":430},[299,1122,399],{"class":398},[299,1124,1125],{"class":525},"add_message",[299,1127,624],{"class":398},[299,1129,1130],{"class":525},"messages",[299,1132,730],{"class":398},[299,1134,738],{"class":525},[299,1136,730],{"class":398},[299,1138,743],{"class":525},[299,1140,792],{"class":398},[299,1142,1144],{"class":327,"line":1143},51,[299,1145,419],{"emptyLinePlaceholder":418},[299,1147,1149,1151,1154,1156,1158,1160,1162,1164,1166],{"class":327,"line":1148},52,[299,1150,618],{"class":521},[299,1152,1153],{"class":525}," get_message",[299,1155,624],{"class":398},[299,1157,628],{"class":627},[299,1159,730],{"class":398},[299,1161,738],{"class":652},[299,1163,730],{"class":398},[299,1165,743],{"class":652},[299,1167,631],{"class":398},[299,1169,1171,1173,1176],{"class":327,"line":1170},53,[299,1172,751],{"class":360},[299,1174,1175],{"class":459},"Retrieve the raw messages stored in MemOS (for debugging\u002Finspection)",[299,1177,606],{"class":360},[299,1179,1181,1183,1185,1187,1189,1191,1193,1196,1198,1201,1203,1205],{"class":327,"line":1180},54,[299,1182,762],{"class":364},[299,1184,506],{"class":398},[299,1186,767],{"class":364},[299,1188,399],{"class":398},[299,1190,642],{"class":430},[299,1192,399],{"class":398},[299,1194,1195],{"class":525},"get_message",[299,1197,624],{"class":398},[299,1199,1200],{"class":525},"user_id",[299,1202,730],{"class":398},[299,1204,743],{"class":525},[299,1206,792],{"class":398},[299,1208,1210,1212,1214,1216,1218,1220],{"class":327,"line":1209},55,[299,1211,798],{"class":360},[299,1213,821],{"class":364},[299,1215,399],{"class":398},[299,1217,826],{"class":430},[299,1219,399],{"class":398},[299,1221,1222],{"class":430},"message_detail_list\n",[299,1224,1226],{"class":327,"line":1225},56,[299,1227,419],{"emptyLinePlaceholder":418},[299,1229,1231,1233,1236,1238,1240,1242,1244,1246,1248,1250,1252],{"class":327,"line":1230},57,[299,1232,618],{"class":521},[299,1234,1235],{"class":525}," chat",[299,1237,624],{"class":398},[299,1239,628],{"class":627},[299,1241,730],{"class":398},[299,1243,733],{"class":652},[299,1245,730],{"class":398},[299,1247,738],{"class":652},[299,1249,730],{"class":398},[299,1251,743],{"class":652},[299,1253,631],{"class":398},[299,1255,1257,1259,1262],{"class":327,"line":1256},58,[299,1258,751],{"class":360},[299,1260,1261],{"class":459},"Main chat function to handle dialogue with memory integration",[299,1263,606],{"class":360},[299,1265,1267],{"class":327,"line":1266},59,[299,1268,1269],{"class":459},"        # 1. Search relevant memories\n",[299,1271,1273,1276,1278,1280,1282,1284,1286,1288,1290,1292,1294,1296],{"class":327,"line":1272},60,[299,1274,1275],{"class":364},"        memories ",[299,1277,506],{"class":398},[299,1279,767],{"class":364},[299,1281,399],{"class":398},[299,1283,776],{"class":525},[299,1285,624],{"class":398},[299,1287,781],{"class":525},[299,1289,730],{"class":398},[299,1291,738],{"class":525},[299,1293,730],{"class":398},[299,1295,743],{"class":525},[299,1297,792],{"class":398},[299,1299,1301],{"class":327,"line":1300},61,[299,1302,1069],{"class":364},[299,1304,1306],{"class":327,"line":1305},62,[299,1307,1308],{"class":459},"        # Build system prompt with memories\n",[299,1310,1312,1315,1317,1319,1321,1324,1326,1328],{"class":327,"line":1311},63,[299,1313,1314],{"class":364},"        system_prompt ",[299,1316,506],{"class":398},[299,1318,767],{"class":364},[299,1320,399],{"class":398},[299,1322,1323],{"class":525},"build_system_prompt",[299,1325,624],{"class":398},[299,1327,972],{"class":525},[299,1329,792],{"class":398},[299,1331,1333],{"class":327,"line":1332},64,[299,1334,1069],{"class":364},[299,1336,1338],{"class":327,"line":1337},65,[299,1339,1340],{"class":459},"        # 2. Use OpenAI to generate an answer\n",[299,1342,1344,1346,1348,1350,1352,1354,1356,1359,1361,1364,1366,1369],{"class":327,"line":1343},66,[299,1345,762],{"class":364},[299,1347,506],{"class":398},[299,1349,767],{"class":364},[299,1351,399],{"class":398},[299,1353,683],{"class":430},[299,1355,399],{"class":398},[299,1357,1358],{"class":430},"chat",[299,1360,399],{"class":398},[299,1362,1363],{"class":430},"completions",[299,1365,399],{"class":398},[299,1367,1368],{"class":525},"create",[299,1370,1371],{"class":398},"(\n",[299,1373,1375,1378,1380,1382,1385,1387],{"class":327,"line":1374},67,[299,1376,1377],{"class":652},"            model",[299,1379,506],{"class":398},[299,1381,437],{"class":398},[299,1383,1384],{"class":335},"gpt-4o",[299,1386,437],{"class":398},[299,1388,1389],{"class":398},",\n",[299,1391,1393,1396],{"class":327,"line":1392},68,[299,1394,1395],{"class":652},"            messages",[299,1397,1398],{"class":398},"=[\n",[299,1400,1402,1405,1407,1410,1412,1415,1417,1420,1422,1424,1426,1429,1431,1433,1436],{"class":327,"line":1401},69,[299,1403,1404],{"class":398},"                {",[299,1406,437],{"class":398},[299,1408,1409],{"class":335},"role",[299,1411,437],{"class":398},[299,1413,1414],{"class":398},":",[299,1416,451],{"class":398},[299,1418,1419],{"class":335},"system",[299,1421,437],{"class":398},[299,1423,730],{"class":398},[299,1425,451],{"class":398},[299,1427,1428],{"class":335},"content",[299,1430,437],{"class":398},[299,1432,1414],{"class":398},[299,1434,1435],{"class":525}," system_prompt",[299,1437,1438],{"class":398},"},\n",[299,1440,1442,1444,1446,1448,1450,1452,1454,1457,1459,1461,1463,1465,1467,1469,1471],{"class":327,"line":1441},70,[299,1443,1404],{"class":398},[299,1445,437],{"class":398},[299,1447,1409],{"class":335},[299,1449,437],{"class":398},[299,1451,1414],{"class":398},[299,1453,451],{"class":398},[299,1455,1456],{"class":335},"user",[299,1458,437],{"class":398},[299,1460,730],{"class":398},[299,1462,451],{"class":398},[299,1464,1428],{"class":335},[299,1466,437],{"class":398},[299,1468,1414],{"class":398},[299,1470,733],{"class":525},[299,1472,1473],{"class":398},"}\n",[299,1475,1477],{"class":327,"line":1476},71,[299,1478,1479],{"class":398},"            ]\n",[299,1481,1483],{"class":327,"line":1482},72,[299,1484,1485],{"class":398},"        )\n",[299,1487,1489,1492,1494,1496,1498,1501,1503,1506,1509,1512,1514],{"class":327,"line":1488},73,[299,1490,1491],{"class":364},"        answer ",[299,1493,506],{"class":398},[299,1495,821],{"class":364},[299,1497,399],{"class":398},[299,1499,1500],{"class":430},"choices",[299,1502,434],{"class":398},[299,1504,1505],{"class":509},"0",[299,1507,1508],{"class":398},"].",[299,1510,1511],{"class":430},"message",[299,1513,399],{"class":398},[299,1515,1516],{"class":430},"content\n",[299,1518,1520],{"class":327,"line":1519},74,[299,1521,419],{"emptyLinePlaceholder":418},[299,1523,1525],{"class":327,"line":1524},75,[299,1526,1527],{"class":459},"        # 3. Save the conversation into memories\n",[299,1529,1531,1534,1536],{"class":327,"line":1530},76,[299,1532,1533],{"class":364},"        messages ",[299,1535,506],{"class":398},[299,1537,1538],{"class":398}," [\n",[299,1540,1542,1545,1547,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1569,1571],{"class":327,"line":1541},77,[299,1543,1544],{"class":398},"            {",[299,1546,437],{"class":398},[299,1548,1409],{"class":335},[299,1550,437],{"class":398},[299,1552,1414],{"class":398},[299,1554,451],{"class":398},[299,1556,1456],{"class":335},[299,1558,437],{"class":398},[299,1560,730],{"class":398},[299,1562,451],{"class":398},[299,1564,1428],{"class":335},[299,1566,437],{"class":398},[299,1568,1414],{"class":398},[299,1570,733],{"class":364},[299,1572,1438],{"class":398},[299,1574,1576,1578,1580,1582,1584,1586,1588,1591,1593,1595,1597,1599,1601,1603,1606],{"class":327,"line":1575},78,[299,1577,1544],{"class":398},[299,1579,437],{"class":398},[299,1581,1409],{"class":335},[299,1583,437],{"class":398},[299,1585,1414],{"class":398},[299,1587,451],{"class":398},[299,1589,1590],{"class":335},"assistant",[299,1592,437],{"class":398},[299,1594,730],{"class":398},[299,1596,451],{"class":398},[299,1598,1428],{"class":335},[299,1600,437],{"class":398},[299,1602,1414],{"class":398},[299,1604,1605],{"class":364}," answer",[299,1607,1473],{"class":398},[299,1609,1611],{"class":327,"line":1610},79,[299,1612,1613],{"class":398},"        ]\n",[299,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1639],{"class":327,"line":1616},80,[299,1618,637],{"class":364},[299,1620,399],{"class":398},[299,1622,642],{"class":430},[299,1624,399],{"class":398},[299,1626,1125],{"class":525},[299,1628,624],{"class":398},[299,1630,1130],{"class":525},[299,1632,730],{"class":398},[299,1634,738],{"class":525},[299,1636,730],{"class":398},[299,1638,743],{"class":525},[299,1640,792],{"class":398},[299,1642,1644],{"class":327,"line":1643},81,[299,1645,1069],{"class":364},[299,1647,1649,1651],{"class":327,"line":1648},82,[299,1650,798],{"class":360},[299,1652,1653],{"class":364}," answer\n",[299,1655,1657],{"class":327,"line":1656},83,[299,1658,419],{"emptyLinePlaceholder":418},[299,1660,1662,1665,1667,1669],{"class":327,"line":1661},84,[299,1663,1664],{"class":364},"ai_assistant ",[299,1666,506],{"class":398},[299,1668,591],{"class":525},[299,1670,1671],{"class":398},"()\n",[299,1673,1675,1678,1680,1682,1685],{"class":327,"line":1674},85,[299,1676,1677],{"class":364},"user_id ",[299,1679,506],{"class":398},[299,1681,451],{"class":398},[299,1683,1684],{"class":335},"memos_writing_user_123",[299,1686,577],{"class":398},[299,1688,1690],{"class":327,"line":1689},86,[299,1691,419],{"emptyLinePlaceholder":418},[299,1693,1695,1697,1700],{"class":327,"line":1694},87,[299,1696,522],{"class":521},[299,1698,1699],{"class":525}," demo_questions",[299,1701,529],{"class":398},[299,1703,1705,1707],{"class":327,"line":1704},88,[299,1706,556],{"class":360},[299,1708,1538],{"class":398},[299,1710,1712,1715,1718,1720],{"class":327,"line":1711},89,[299,1713,1714],{"class":398},"      \"",[299,1716,1717],{"class":335},"Help me write a notification email for a team dinner",[299,1719,437],{"class":398},[299,1721,1389],{"class":398},[299,1723,1725,1727,1730,1732],{"class":327,"line":1724},90,[299,1726,1714],{"class":398},[299,1728,1729],{"class":335},"Help me write a client email summarizing the new features of our upcoming finance app",[299,1731,437],{"class":398},[299,1733,1389],{"class":398},[299,1735,1737],{"class":327,"line":1736},91,[299,1738,1739],{"class":398},"    ]\n",[299,1741,1743],{"class":327,"line":1742},92,[299,1744,419],{"emptyLinePlaceholder":418},[299,1746,1748,1750,1753],{"class":327,"line":1747},93,[299,1749,522],{"class":521},[299,1751,1752],{"class":525}," pre_configured_conversations",[299,1754,529],{"class":398},[299,1756,1758,1760,1763],{"class":327,"line":1757},94,[299,1759,600],{"class":360},[299,1761,1762],{"class":459},"Return pre-configured dialogue pairs",[299,1764,606],{"class":360},[299,1766,1768,1770],{"class":327,"line":1767},95,[299,1769,556],{"class":360},[299,1771,1538],{"class":398},[299,1773,1775],{"class":327,"line":1774},96,[299,1776,1777],{"class":398},"        {\n",[299,1779,1781,1784,1786,1788,1790,1792,1795],{"class":327,"line":1780},97,[299,1782,1783],{"class":398},"            \"",[299,1785,1456],{"class":335},[299,1787,437],{"class":398},[299,1789,1414],{"class":398},[299,1791,451],{"class":398},[299,1793,1794],{"class":335},"I work in the marketing department at an internet company. Keep the tone light when writing emails, and start with 'Dear XX'.",[299,1796,577],{"class":398},[299,1798,1800],{"class":327,"line":1799},98,[299,1801,1802],{"class":398},"        },\n",[299,1804,1806],{"class":327,"line":1805},99,[299,1807,1777],{"class":398},[299,1809,1811,1813,1815,1817,1819,1821,1824],{"class":327,"line":1810},100,[299,1812,1783],{"class":398},[299,1814,1456],{"class":335},[299,1816,437],{"class":398},[299,1818,1414],{"class":398},[299,1820,451],{"class":398},[299,1822,1823],{"class":335},"When writing summaries, I prefer to list three bullet points first.",[299,1825,577],{"class":398},[299,1827,1829],{"class":327,"line":1828},101,[299,1830,1831],{"class":398},"        }\n",[299,1833,1835],{"class":327,"line":1834},102,[299,1836,1739],{"class":398},[299,1838,1840],{"class":327,"line":1839},103,[299,1841,419],{"emptyLinePlaceholder":418},[299,1843,1845,1847,1850],{"class":327,"line":1844},104,[299,1846,522],{"class":521},[299,1848,1849],{"class":525}," execute_pre_conversations",[299,1851,529],{"class":398},[299,1853,1855,1857,1860],{"class":327,"line":1854},105,[299,1856,600],{"class":360},[299,1858,1859],{"class":459},"Execute pre-configured dialogues",[299,1861,606],{"class":360},[299,1863,1865,1868,1870,1872],{"class":327,"line":1864},106,[299,1866,1867],{"class":364},"    conversations ",[299,1869,506],{"class":398},[299,1871,1752],{"class":525},[299,1873,1671],{"class":398},[299,1875,1877,1880,1882,1884],{"class":327,"line":1876},107,[299,1878,1879],{"class":364},"    conversation_id ",[299,1881,506],{"class":398},[299,1883,526],{"class":525},[299,1885,1671],{"class":398},[299,1887,1889],{"class":327,"line":1888},108,[299,1890,612],{"class":364},[299,1892,1894,1897,1899,1902,1904,1906,1909,1911,1914,1916,1919],{"class":327,"line":1893},109,[299,1895,1896],{"class":525},"    print",[299,1898,624],{"class":398},[299,1900,1901],{"class":521},"f",[299,1903,437],{"class":335},[299,1905,946],{"class":364},[299,1907,1908],{"class":335},"🔄 Executing pre-configured dialogues（conversation_id=",[299,1910,565],{"class":509},[299,1912,1913],{"class":525},"conversation_id",[299,1915,574],{"class":509},[299,1917,1918],{"class":335},"）...\"",[299,1920,792],{"class":398},[299,1922,1924,1926,1928,1930,1932,1934,1937,1940],{"class":327,"line":1923},110,[299,1925,1896],{"class":525},[299,1927,624],{"class":398},[299,1929,437],{"class":398},[299,1931,506],{"class":335},[299,1933,437],{"class":398},[299,1935,1936],{"class":398}," *",[299,1938,1939],{"class":509}," 60",[299,1941,792],{"class":398},[299,1943,1945],{"class":327,"line":1944},111,[299,1946,612],{"class":364},[299,1948,1950,1953,1955,1957,1960,1962,1964,1966,1969,1971,1973],{"class":327,"line":1949},112,[299,1951,1952],{"class":360},"    for",[299,1954,957],{"class":364},[299,1956,730],{"class":398},[299,1958,1959],{"class":364}," conv ",[299,1961,818],{"class":360},[299,1963,967],{"class":525},[299,1965,624],{"class":398},[299,1967,1968],{"class":525},"conversations",[299,1970,730],{"class":398},[299,1972,977],{"class":509},[299,1974,631],{"class":398},[299,1976,1978,1981,1983,1985,1987,1989,1992,1994,1996,1998,2000],{"class":327,"line":1977},113,[299,1979,1980],{"class":525},"        print",[299,1982,624],{"class":398},[299,1984,1901],{"class":521},[299,1986,437],{"class":335},[299,1988,946],{"class":364},[299,1990,1991],{"class":335},"💬 Dialogue ",[299,1993,565],{"class":509},[299,1995,996],{"class":525},[299,1997,574],{"class":509},[299,1999,437],{"class":335},[299,2001,792],{"class":398},[299,2003,2005,2007,2009,2011,2014,2016,2019,2021,2024,2026,2028,2030,2032,2034],{"class":327,"line":2004},114,[299,2006,1980],{"class":525},[299,2008,624],{"class":398},[299,2010,1901],{"class":521},[299,2012,2013],{"class":335},"\"👤 User: ",[299,2015,565],{"class":509},[299,2017,2018],{"class":525},"conv",[299,2020,434],{"class":398},[299,2022,2023],{"class":398},"'",[299,2025,1456],{"class":335},[299,2027,2023],{"class":398},[299,2029,445],{"class":398},[299,2031,574],{"class":509},[299,2033,437],{"class":335},[299,2035,792],{"class":398},[299,2037,2039],{"class":327,"line":2038},115,[299,2040,1069],{"class":364},[299,2042,2044],{"class":327,"line":2043},116,[299,2045,2046],{"class":459},"        # Execute dialogue\n",[299,2048,2050,2052,2054,2057,2059,2061,2063,2065,2067,2069,2071,2073,2076,2078,2080,2082],{"class":327,"line":2049},117,[299,2051,1491],{"class":364},[299,2053,506],{"class":398},[299,2055,2056],{"class":364}," ai_assistant",[299,2058,399],{"class":398},[299,2060,1358],{"class":525},[299,2062,624],{"class":398},[299,2064,2018],{"class":525},[299,2066,434],{"class":398},[299,2068,2023],{"class":398},[299,2070,1456],{"class":335},[299,2072,2023],{"class":398},[299,2074,2075],{"class":398},"],",[299,2077,738],{"class":525},[299,2079,730],{"class":398},[299,2081,743],{"class":525},[299,2083,792],{"class":398},[299,2085,2087,2089,2091,2093,2096,2098,2101,2103,2105],{"class":327,"line":2086},118,[299,2088,1980],{"class":525},[299,2090,624],{"class":398},[299,2092,1901],{"class":521},[299,2094,2095],{"class":335},"\"🤖 Assistant: ",[299,2097,565],{"class":509},[299,2099,2100],{"class":525},"answer",[299,2102,574],{"class":509},[299,2104,437],{"class":335},[299,2106,792],{"class":398},[299,2108,2110,2112,2114,2116,2119,2121,2123,2126],{"class":327,"line":2109},119,[299,2111,1980],{"class":525},[299,2113,624],{"class":398},[299,2115,437],{"class":398},[299,2117,2118],{"class":335},"-",[299,2120,437],{"class":398},[299,2122,1936],{"class":398},[299,2124,2125],{"class":509}," 40",[299,2127,792],{"class":398},[299,2129,2131],{"class":327,"line":2130},120,[299,2132,612],{"class":364},[299,2134,2136,2138,2140,2142,2144,2147,2149],{"class":327,"line":2135},121,[299,2137,1896],{"class":525},[299,2139,624],{"class":398},[299,2141,437],{"class":398},[299,2143,946],{"class":364},[299,2145,2146],{"class":335},"✅ Pre-configured dialogues completed!",[299,2148,437],{"class":398},[299,2150,792],{"class":398},[299,2152,2154,2156,2158,2160,2162,2164,2166,2168],{"class":327,"line":2153},122,[299,2155,1896],{"class":525},[299,2157,624],{"class":398},[299,2159,437],{"class":398},[299,2161,506],{"class":335},[299,2163,437],{"class":398},[299,2165,1936],{"class":398},[299,2167,1939],{"class":509},[299,2169,792],{"class":398},[299,2171,2173],{"class":327,"line":2172},123,[299,2174,419],{"emptyLinePlaceholder":418},[299,2176,2178,2180,2183],{"class":327,"line":2177},124,[299,2179,522],{"class":521},[299,2181,2182],{"class":525}," main",[299,2184,529],{"class":398},[299,2186,2188,2190,2192,2194,2197,2199],{"class":327,"line":2187},125,[299,2189,1896],{"class":525},[299,2191,624],{"class":398},[299,2193,437],{"class":398},[299,2195,2196],{"class":335},"📝 Welcome to the MemOS writing assistant example!",[299,2198,437],{"class":398},[299,2200,792],{"class":398},[299,2202,2204,2206,2208,2210,2213,2215,2217],{"class":327,"line":2203},126,[299,2205,1896],{"class":525},[299,2207,624],{"class":398},[299,2209,437],{"class":398},[299,2211,2212],{"class":335},"💡 With MemOS, your writing assistant better understands your style and preferences! ✍️ ",[299,2214,946],{"class":364},[299,2216,437],{"class":398},[299,2218,792],{"class":398},[299,2220,2222],{"class":327,"line":2221},127,[299,2223,612],{"class":364},[299,2225,2227],{"class":327,"line":2226},128,[299,2228,2229],{"class":459},"    # Ask whether to execute pre-configured dialogues first\n",[299,2231,2233,2236],{"class":327,"line":2232},129,[299,2234,2235],{"class":360},"    while",[299,2237,2238],{"class":398}," True:\n",[299,2240,2242,2245,2247,2250,2252,2254,2257,2259,2262,2265,2268,2271],{"class":327,"line":2241},130,[299,2243,2244],{"class":364},"        pre_chat ",[299,2246,506],{"class":398},[299,2248,2249],{"class":525}," input",[299,2251,624],{"class":398},[299,2253,437],{"class":398},[299,2255,2256],{"class":335},"🤔 Do you want to execute the pre-configured dialogues first? This will consume 2 add and 2 search calls. Execute? (y\u002Fn): ",[299,2258,437],{"class":398},[299,2260,2261],{"class":398},").",[299,2263,2264],{"class":525},"strip",[299,2266,2267],{"class":398},"().",[299,2269,2270],{"class":525},"lower",[299,2272,1671],{"class":398},[299,2274,2276],{"class":327,"line":2275},131,[299,2277,1069],{"class":364},[299,2279,2281,2283,2286,2288,2290,2292,2295,2297,2299,2302,2305,2307,2309,2311,2314,2316],{"class":327,"line":2280},132,[299,2282,920],{"class":360},[299,2284,2285],{"class":364}," pre_chat ",[299,2287,818],{"class":398},[299,2289,801],{"class":398},[299,2291,2023],{"class":398},[299,2293,2294],{"class":335},"y",[299,2296,2023],{"class":398},[299,2298,730],{"class":398},[299,2300,2301],{"class":398}," '",[299,2303,2304],{"class":335},"yes",[299,2306,2023],{"class":398},[299,2308,730],{"class":398},[299,2310,2301],{"class":398},[299,2312,2313],{"class":335},"Y",[299,2315,2023],{"class":398},[299,2317,2318],{"class":398},"]:\n",[299,2320,2322,2325],{"class":327,"line":2321},133,[299,2323,2324],{"class":525},"            execute_pre_conversations",[299,2326,1671],{"class":398},[299,2328,2330],{"class":327,"line":2329},134,[299,2331,2332],{"class":360},"            break\n",[299,2334,2336,2339,2341,2343,2345,2347,2350,2352,2354,2356,2359,2361,2363,2365,2368,2370],{"class":327,"line":2335},135,[299,2337,2338],{"class":360},"        elif",[299,2340,2285],{"class":364},[299,2342,818],{"class":398},[299,2344,801],{"class":398},[299,2346,2023],{"class":398},[299,2348,2349],{"class":335},"n",[299,2351,2023],{"class":398},[299,2353,730],{"class":398},[299,2355,2301],{"class":398},[299,2357,2358],{"class":335},"no",[299,2360,2023],{"class":398},[299,2362,730],{"class":398},[299,2364,2301],{"class":398},[299,2366,2367],{"class":335},"N",[299,2369,2023],{"class":398},[299,2371,2318],{"class":398},[299,2373,2375,2378,2380,2382,2385,2387],{"class":327,"line":2374},136,[299,2376,2377],{"class":525},"            print",[299,2379,624],{"class":398},[299,2381,437],{"class":398},[299,2383,2384],{"class":335},"📝 Starting a brand-new writing assistant dialogue...",[299,2386,437],{"class":398},[299,2388,792],{"class":398},[299,2390,2392],{"class":327,"line":2391},137,[299,2393,2332],{"class":360},[299,2395,2397,2399],{"class":327,"line":2396},138,[299,2398,1053],{"class":360},[299,2400,594],{"class":398},[299,2402,2404,2406,2408,2410,2413,2415],{"class":327,"line":2403},139,[299,2405,2377],{"class":525},[299,2407,624],{"class":398},[299,2409,437],{"class":398},[299,2411,2412],{"class":335},"⚠️ Please enter 'y' for yes or 'n' for no",[299,2414,437],{"class":398},[299,2416,792],{"class":398},[299,2418,2420],{"class":327,"line":2419},140,[299,2421,419],{"emptyLinePlaceholder":418},[299,2423,2425,2427,2429,2431,2433,2436,2438,2440],{"class":327,"line":2424},141,[299,2426,1896],{"class":525},[299,2428,624],{"class":398},[299,2430,437],{"class":398},[299,2432,946],{"class":364},[299,2434,2435],{"class":335},"⚡️ Each question you enter next will take place in a brand-new conversation (with a new conversation ID). MemOS will automatically recall your historical behavioral memories across conversations to provide you with continuous and personalized service.",[299,2437,437],{"class":398},[299,2439,302],{"class":398},[299,2441,612],{"class":364},[299,2443,2445,2447,2449,2451,2453,2456,2458],{"class":327,"line":2444},142,[299,2446,1896],{"class":525},[299,2448,624],{"class":398},[299,2450,437],{"class":398},[299,2452,946],{"class":364},[299,2454,2455],{"class":335},"🎯 Here are some example questions. You can continue chatting with the writing assistant:",[299,2457,437],{"class":398},[299,2459,792],{"class":398},[299,2461,2463,2465,2467,2469,2472,2474,2476,2478,2481,2484,2486],{"class":327,"line":2462},143,[299,2464,1952],{"class":360},[299,2466,957],{"class":364},[299,2468,730],{"class":398},[299,2470,2471],{"class":364}," question ",[299,2473,818],{"class":360},[299,2475,967],{"class":525},[299,2477,624],{"class":398},[299,2479,2480],{"class":525},"demo_questions",[299,2482,2483],{"class":398},"(),",[299,2485,977],{"class":509},[299,2487,631],{"class":398},[299,2489,2491,2493,2495,2497,2500,2502,2504,2506,2508,2510,2513,2515,2517],{"class":327,"line":2490},144,[299,2492,1980],{"class":525},[299,2494,624],{"class":398},[299,2496,1901],{"class":521},[299,2498,2499],{"class":335},"\"  ",[299,2501,565],{"class":509},[299,2503,996],{"class":525},[299,2505,574],{"class":509},[299,2507,1001],{"class":335},[299,2509,565],{"class":509},[299,2511,2512],{"class":525},"question",[299,2514,574],{"class":509},[299,2516,437],{"class":335},[299,2518,792],{"class":398},[299,2520,2522],{"class":327,"line":2521},145,[299,2523,419],{"emptyLinePlaceholder":418},[299,2525,2527,2529],{"class":327,"line":2526},146,[299,2528,2235],{"class":360},[299,2530,2238],{"class":398},[299,2532,2534,2537,2539,2541,2543,2545,2547,2550,2552,2554,2556],{"class":327,"line":2533},147,[299,2535,2536],{"class":364},"        user_query ",[299,2538,506],{"class":398},[299,2540,2249],{"class":525},[299,2542,624],{"class":398},[299,2544,437],{"class":398},[299,2546,946],{"class":364},[299,2548,2549],{"class":335},"🤔 Please enter your writing request (or type 'exit' to quit): ",[299,2551,437],{"class":398},[299,2553,2261],{"class":398},[299,2555,2264],{"class":525},[299,2557,1671],{"class":398},[299,2559,2561],{"class":327,"line":2560},148,[299,2562,1069],{"class":364},[299,2564,2566,2568,2571,2573,2575,2578,2581,2583,2585,2588,2590,2592,2594,2597,2599,2601,2603,2606,2608],{"class":327,"line":2565},149,[299,2567,920],{"class":360},[299,2569,2570],{"class":364}," user_query",[299,2572,399],{"class":398},[299,2574,2270],{"class":525},[299,2576,2577],{"class":398},"()",[299,2579,2580],{"class":398}," in",[299,2582,801],{"class":398},[299,2584,2023],{"class":398},[299,2586,2587],{"class":335},"quit",[299,2589,2023],{"class":398},[299,2591,730],{"class":398},[299,2593,2301],{"class":398},[299,2595,2596],{"class":335},"exit",[299,2598,2023],{"class":398},[299,2600,730],{"class":398},[299,2602,2301],{"class":398},[299,2604,2605],{"class":335},"q",[299,2607,2023],{"class":398},[299,2609,2318],{"class":398},[299,2611,2613,2615,2617,2619,2622,2624],{"class":327,"line":2612},150,[299,2614,2377],{"class":525},[299,2616,624],{"class":398},[299,2618,437],{"class":398},[299,2620,2621],{"class":335},"👋 Thank you for using the writing assistant. Happy writing!",[299,2623,437],{"class":398},[299,2625,792],{"class":398},[299,2627,2629],{"class":327,"line":2628},151,[299,2630,2332],{"class":360},[299,2632,2634],{"class":327,"line":2633},152,[299,2635,1069],{"class":364},[299,2637,2639,2641,2644,2646],{"class":327,"line":2638},153,[299,2640,920],{"class":360},[299,2642,2643],{"class":398}," not",[299,2645,2570],{"class":364},[299,2647,594],{"class":398},[299,2649,2651],{"class":327,"line":2650},154,[299,2652,2653],{"class":360},"            continue\n",[299,2655,2657],{"class":327,"line":2656},155,[299,2658,1069],{"class":364},[299,2660,2662,2664,2666,2668,2671,2673],{"class":327,"line":2661},156,[299,2663,1980],{"class":525},[299,2665,624],{"class":398},[299,2667,437],{"class":398},[299,2669,2670],{"class":335},"🤖 Creating...",[299,2672,437],{"class":398},[299,2674,792],{"class":398},[299,2676,2678,2681,2683,2685],{"class":327,"line":2677},157,[299,2679,2680],{"class":364},"        conversation_id ",[299,2682,506],{"class":398},[299,2684,526],{"class":525},[299,2686,1671],{"class":398},[299,2688,2690,2692,2694,2696,2698,2700,2702,2705,2707,2709,2711,2713],{"class":327,"line":2689},158,[299,2691,1491],{"class":364},[299,2693,506],{"class":398},[299,2695,2056],{"class":364},[299,2697,399],{"class":398},[299,2699,1358],{"class":525},[299,2701,624],{"class":398},[299,2703,2704],{"class":525},"user_query",[299,2706,730],{"class":398},[299,2708,738],{"class":525},[299,2710,730],{"class":398},[299,2712,743],{"class":525},[299,2714,792],{"class":398},[299,2716,2718,2720,2722,2724,2726,2728,2731,2733,2735,2737,2739,2742,2744,2746,2748,2750,2752],{"class":327,"line":2717},159,[299,2719,1980],{"class":525},[299,2721,624],{"class":398},[299,2723,1901],{"class":521},[299,2725,437],{"class":335},[299,2727,946],{"class":364},[299,2729,2730],{"class":335},"💬 conversation_id: ",[299,2732,565],{"class":509},[299,2734,1913],{"class":525},[299,2736,574],{"class":509},[299,2738,946],{"class":364},[299,2740,2741],{"class":335},"💡 [Assistant]: ",[299,2743,565],{"class":509},[299,2745,2100],{"class":525},[299,2747,574],{"class":509},[299,2749,946],{"class":364},[299,2751,437],{"class":335},[299,2753,792],{"class":398},[299,2755,2757,2759,2761,2763,2765,2767,2769,2771],{"class":327,"line":2756},160,[299,2758,1980],{"class":525},[299,2760,624],{"class":398},[299,2762,437],{"class":398},[299,2764,2118],{"class":335},[299,2766,437],{"class":398},[299,2768,1936],{"class":398},[299,2770,1939],{"class":509},[299,2772,792],{"class":398},[299,2774,2776],{"class":327,"line":2775},161,[299,2777,419],{"emptyLinePlaceholder":418},[299,2779,2781],{"class":327,"line":2780},162,[299,2782,419],{"emptyLinePlaceholder":418},[299,2784,2786,2789,2792,2795,2797,2800,2802],{"class":327,"line":2785},163,[299,2787,2788],{"class":360},"if",[299,2790,2791],{"class":364}," __name__ ",[299,2793,2794],{"class":398},"==",[299,2796,451],{"class":398},[299,2798,2799],{"class":335},"__main__",[299,2801,437],{"class":398},[299,2803,594],{"class":398},[299,2805,2807,2810],{"class":327,"line":2806},164,[299,2808,2809],{"class":525},"    main",[299,2811,1671],{"class":398},[34,2813],{},[67,2815,2817],{"id":2816},"_23-code-explanation","2.3 Code Explanation",[258,2819,2820,2823,2829,2832,2839],{},[28,2821,2822],{},"Set your MemOS API key and OpenAI key in environment variables.",[28,2824,2825,2826,399],{},"Instantiate ",[217,2827,2828],{},"WritingAssistant",[28,2830,2831],{},"Choose whether to run pre-configured dialogues, which will consume 2 add and 2 search calls.",[28,2833,2834,2835,2838],{},"Use the ",[217,2836,2837],{},"main()"," function to interact with the assistant through a dialogue loop.",[28,2840,2841,2842,2844,2845,2848,2849,2852],{},"The assistant will call ",[217,2843,1358],{},": first execute ",[217,2846,2847],{},"search"," to retrieve memories, then call OpenAI for dialogue, and finally execute ",[217,2850,2851],{},"add"," to store memories.",[2854,2855,2856],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s5tWE, html code.shiki .s5tWE{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#F07178;--shiki-default-font-style:italic;--shiki-dark:#F07178;--shiki-dark-font-style:italic}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}",{"title":322,"searchDepth":368,"depth":368,"links":2858},[2859,2865],{"id":13,"depth":368,"text":14,"children":2860},[2861,2862,2863,2864],{"id":69,"depth":376,"text":70},{"id":122,"depth":376,"text":123},{"id":151,"depth":376,"text":152},{"id":235,"depth":376,"text":236},{"id":307,"depth":368,"text":308,"children":2866},[2867,2868,2869],{"id":311,"depth":376,"text":312},{"id":347,"depth":376,"text":348},{"id":2816,"depth":376,"text":2817},"With MemOS, your product will automatically remember the user's writing habits and context, making the creative process more coherent and effortless.","md",{},"\u002Fen\u002Fusecase\u002Fwritting_assistant",{"title":5,"description":322},"en\u002Fusecase\u002Fwritting_assistant","NGFqzB4Gh_qYDHvmgT4ALUSwgEtZOs--q6-sOTiiBMI",[2878,2886],{"title":2879,"path":2880,"stem":2881,"icon":2882,"framework":6,"module":6,"class":2883,"target":-1,"active":2884,"defaultOpen":2884,"children":-1,"description":2885},"Financial Assistant","\u002Fusecase\u002Ffinancial_assistant","usecase\u002Ffinancial_assistant","i-ri-money-dollar-circle-line",[],false,"With MemOS, user operations and conversational behaviors are abstracted into \"memories,\" enabling the identification and extraction of underlying investment preferences to deliver more personalized services.",{"title":2887,"path":2888,"stem":2889,"icon":2890,"framework":6,"module":6,"class":2891,"target":-1,"active":2884,"defaultOpen":2884,"children":-1,"description":2892},"Life Assistant","\u002Fusecase\u002Fhome_assistant","usecase\u002Fhome_assistant","i-ri-heart-line",[],"With the support of MemOS, a home assistant can connect daily chores and long-term plans, quickly understanding and responding to the user’s real needs.",1775811151920]