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