[{"data":1,"prerenderedAt":1436},["ShallowReactive",2],{"docs-page-cn-/cn/usecase/shared_knowledge_base":3,"surround-cn-/cn/usecase/shared_knowledge_base":1427},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":1420,"description":13,"extension":1421,"lead":6,"links":6,"meta":1422,"navigation":6,"path":1423,"seo":1424,"stem":1425,"__hash__":1426},"docs/cn/usecase/shared_knowledge_base.md","用 MemOS 为 AI 应用构建共享知识库",null,{"type":8,"value":9,"toc":1406},"minimark",[10,14,17,20,23,27,30,86,96,99,101,105,115,118,120,123,129,136,138,142,152,155,240,247,305,318,339,357,359,362,375,377,382,385,455,461,652,671,673,677,680,824,827,873,876,878,882,885,991,997,999,1003,1009,1155,1158,1168,1170,1173,1176,1198,1201,1203,1206,1216,1222,1399,1402],[11,12,13],"p",{},"产品手册放在云盘，新人指南留在群聊，客服政策存于同事电脑。新人入职的前半周，常常花在寻找最新版本上。",[11,15,16],{},"Memmy 通过基于 MemOS 接口的知识库能力解决这个问题：每个人维护自己的资料库，也可以共享给同事。成员通过同一个检索接口，查询同一份内容。",[11,18,19],{},"实现的关键在于分工。MemOS 没有“共享知识库”或“列出全部知识库”的接口，共享由 Memmy 在应用层实现。本文通过一个可在本地运行的 Demo，展示两层如何配合。",[21,22],"br",{},[24,25,26],"h2",{"id":26},"先明确两层分工",[11,28,29],{},"共享知识库在界面上是一项功能，底层包含两种职责：",[31,32,33,49],"table",{},[34,35,36],"thead",{},[37,38,39,43,46],"tr",{},[40,41,42],"th",{},"负责方",[40,44,45],{},"管理内容",[40,47,48],{},"实现方式",[50,51,52,75],"tbody",{},[37,53,54,58,61],{},[55,56,57],"td",{},"MemOS",[55,59,60],{},"文档原文、解析、分段与可检索记忆片段",[55,62,63,67,68,67,71,74],{},[64,65,66],"code",{},"/create/knowledgebase","、",[64,69,70],{},"/add/knowledgebase-file",[64,72,73],{},"/search/memory"," 等接口",[37,76,77,80,83],{},[55,78,79],{},"应用",[55,81,82],{},"知识库归属、共享对象、当前用户是否有权查看",[55,84,85],{},"应用数据库中的归属与共享关系",[11,87,88,89,92,93,95],{},"MemOS 回答“资料里写了什么”，应用确定“这个人能否读取”。检索时，应用计算当前用户可见的 ",[64,90,91],{},"knowledgebase_ids","，将明确的列表交给 ",[64,94,73],{},"。",[11,97,98],{},"这样的权限模型可以按团队、项目或有效期设计。应用也承担权限检查的责任，因此 Demo 将未授权用户的访问验证作为完整场景。",[21,100],{},[24,102,104],{"id":103},"demo-中的三个角色","Demo 中的三个角色",[106,107,113],"pre",{"className":108,"code":110,"language":111,"meta":112},[109],"language-text","alice · 产品负责人\n创建“产品手册”，上传手册和新人指南，\n并把知识库共享给 bob。\n\nbob · 客户成功\n切换到自己的账号，在“共享知识库”中看到资料，\n可以提问，但不能上传、删除或再次共享。\n\ncara · 新同事\n未加入共享名单，侧边栏不显示该知识库。\n","text","",[64,114,110],{"__ignoreMap":112},[11,116,117],{},"alice 验证写入路径，bob 验证只读访问，cara 验证隔离。",[21,119],{},[24,121,122],{"id":122},"一次回答背后的流程",[106,124,127],{"className":125,"code":126,"language":111,"meta":112},[109],"用户打开知识库页面\n  │\n  ├─ 应用按当前 user_id 加载“我的”与“共享给我”的列表\n  │\n  ├─ 拥有者上传文档\n  │   → /add/knowledgebase-file\n  │   → 轮询 /get/knowledgebase-file，等待 completed\n  │\n  ├─ 拥有者输入对方用户 ID\n  │   → 应用在自己的数据库写入共享关系，此步不调用 MemOS\n  │\n  ├─ 成员提问\n  │   → 应用确认访问权限\n  │   → 调用一次 /search/memory：user_id + knowledgebase_ids\n  │   → 模型基于召回片段回答\n  │\n  └─ 可选：通过 /add/message 将本轮写入当前用户的记忆\n",[64,128,126],{"__ignoreMap":112},[11,130,131,132,135],{},"知识库内容由获准成员共享同一份，个人记忆按 ",[64,133,134],{},"user_id"," 保持各自范围。bob 可以读取 alice 维护的手册，但不会因此取得 alice 的个人偏好；bob 的偏好也不会传回 alice。",[21,137],{},[24,139,141],{"id":140},"先运行-demo","先运行 Demo",[11,143,144,145,95],{},"完整项目：",[146,147,151],"a",{"href":148,"rel":149},"https://github.com/shinetata/MemOS-KnowledgeBase-Practice",[150],"nofollow","共享知识库 Demo",[11,153,154],{},"准备 MemOS API Key 和兼容 OpenAI 的模型服务：",[106,156,160],{"className":157,"code":158,"language":159,"meta":112,"style":112},"language-bash shiki shiki-themes material-theme-lighter github-light-high-contrast github-dark-default","git clone https://github.com/shinetata/MemOS-KnowledgeBase-Practice.git\ncd MemOS-KnowledgeBase-Practice\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -r requirements.txt\ncp .env.example .env\n","bash",[64,161,162,178,188,204,213,228],{"__ignoreMap":112},[163,164,167,171,175],"span",{"class":165,"line":166},"line",1,[163,168,170],{"class":169},"saonL","git",[163,172,174],{"class":173},"sp1uZ"," clone",[163,176,177],{"class":173}," https://github.com/shinetata/MemOS-KnowledgeBase-Practice.git\n",[163,179,181,185],{"class":165,"line":180},2,[163,182,184],{"class":183},"svxCd","cd",[163,186,187],{"class":173}," MemOS-KnowledgeBase-Practice\n",[163,189,191,194,198,201],{"class":165,"line":190},3,[163,192,193],{"class":169},"python3",[163,195,197],{"class":196},"sp2SP"," -m",[163,199,200],{"class":173}," venv",[163,202,203],{"class":173}," .venv\n",[163,205,207,210],{"class":165,"line":206},4,[163,208,209],{"class":183},"source",[163,211,212],{"class":173}," .venv/bin/activate\n",[163,214,216,219,222,225],{"class":165,"line":215},5,[163,217,218],{"class":169},"pip",[163,220,221],{"class":173}," install",[163,223,224],{"class":196}," -r",[163,226,227],{"class":173}," requirements.txt\n",[163,229,231,234,237],{"class":165,"line":230},6,[163,232,233],{"class":169},"cp",[163,235,236],{"class":173}," .env.example",[163,238,239],{"class":173}," .env\n",[11,241,242,243,246],{},"填写 ",[64,244,245],{},".env","：",[106,248,250],{"className":157,"code":249,"language":159,"meta":112,"style":112},"MEMOS_API_KEY=YOUR_MEMOS_API_KEY\nMEMOS_BASE_URL=https://memos.memtensor.cn/api/openmem/v1\nOPENAI_API_KEY=YOUR_OPENAI_API_KEY\nOPENAI_BASE_URL=YOUR_OPENAI_BASE_URL\nOPENAI_MODEL=YOUR_MODEL_NAME\n",[64,251,252,265,275,285,295],{"__ignoreMap":112},[163,253,254,258,262],{"class":165,"line":166},[163,255,257],{"class":256},"s5ojA","MEMOS_API_KEY",[163,259,261],{"class":260},"saN0X","=",[163,263,264],{"class":173},"YOUR_MEMOS_API_KEY\n",[163,266,267,270,272],{"class":165,"line":180},[163,268,269],{"class":256},"MEMOS_BASE_URL",[163,271,261],{"class":260},[163,273,274],{"class":173},"https://memos.memtensor.cn/api/openmem/v1\n",[163,276,277,280,282],{"class":165,"line":190},[163,278,279],{"class":256},"OPENAI_API_KEY",[163,281,261],{"class":260},[163,283,284],{"class":173},"YOUR_OPENAI_API_KEY\n",[163,286,287,290,292],{"class":165,"line":206},[163,288,289],{"class":256},"OPENAI_BASE_URL",[163,291,261],{"class":260},[163,293,294],{"class":173},"YOUR_OPENAI_BASE_URL\n",[163,296,297,300,302],{"class":165,"line":215},[163,298,299],{"class":256},"OPENAI_MODEL",[163,301,261],{"class":260},[163,303,304],{"class":173},"YOUR_MODEL_NAME\n",[106,306,308],{"className":157,"code":307,"language":159,"meta":112,"style":112},"python app.py\n",[64,309,310],{"__ignoreMap":112},[163,311,312,315],{"class":165,"line":166},[163,313,314],{"class":169},"python",[163,316,317],{"class":173}," app.py\n",[11,319,320,321,325,326,67,329,67,332,335,336,338],{},"打开 ",[146,322,323],{"href":323,"rel":324},"http://127.0.0.1:8765",[150],"。Demo 内置 ",[64,327,328],{},"alice",[64,330,331],{},"bob",[64,333,334],{},"cara"," 三个用户，可通过左上角头像切换。共享时输入对方用户 ID，例如 ",[64,337,331],{},"；当前用户 ID 显示在侧边栏。",[11,340,341,342,344,345,347,348,350,351,353,354,356],{},"建议按完整流程体验：用 ",[64,343,328],{}," 建库 → 上传示例文档 → 等待可用 → 共享给 ",[64,346,331],{}," → 切换到 ",[64,349,331],{}," 提问 → 切换到 ",[64,352,334],{}," 验证不可见。",[64,355,334],{}," 仍可进行普通问答，回复会说明没有参考知识库，与 bob 带引用的回答形成对照。",[21,358],{},[24,360,361],{"id":361},"四个关键实现选择",[11,363,364,365,67,368,67,371,374],{},"Demo 的核心位于 ",[64,366,367],{},"memos_client.py",[64,369,370],{},"store.py",[64,372,373],{},"app.py"," 三个文件，下面的代码分别对应其中的实现。",[21,376],{},[378,379,381],"h3",{"id":380},"选择一文档解析交给-memos","选择一：文档解析交给 MemOS",[11,383,384],{},"创建知识库返回的 ID，直接保存在应用中并关联当前用户，成为权限关系的连接依据：",[106,386,389],{"className":387,"code":388,"language":314,"meta":112,"style":112},"language-python shiki shiki-themes material-theme-lighter github-light-high-contrast github-dark-default","kb_id = memos.create_knowledgebase(name, description)\nstore.create_kb(kb_id, owner_id, name, description)\n",[64,390,391,424],{"__ignoreMap":112},[163,392,393,396,398,401,405,409,412,415,418,421],{"class":165,"line":166},[163,394,395],{"class":256},"kb_id ",[163,397,261],{"class":260},[163,399,400],{"class":256}," memos",[163,402,404],{"class":403},"suWxN",".",[163,406,408],{"class":407},"sa-2m","create_knowledgebase",[163,410,411],{"class":403},"(",[163,413,414],{"class":407},"name",[163,416,417],{"class":403},",",[163,419,420],{"class":407}," description",[163,422,423],{"class":403},")\n",[163,425,426,429,431,434,436,439,441,444,446,449,451,453],{"class":165,"line":180},[163,427,428],{"class":256},"store",[163,430,404],{"class":403},[163,432,433],{"class":407},"create_kb",[163,435,411],{"class":403},[163,437,438],{"class":407},"kb_id",[163,440,417],{"class":403},[163,442,443],{"class":407}," owner_id",[163,445,417],{"class":403},[163,447,448],{"class":407}," name",[163,450,417],{"class":403},[163,452,420],{"class":407},[163,454,423],{"class":403},[11,456,457,458,460],{},"文件编码为 Data URI 后，交给 ",[64,459,70],{},"。解析、分段与索引都在 MemOS 完成：",[106,462,464],{"className":387,"code":463,"language":314,"meta":112,"style":112},"encoded = base64.b64encode(content).decode(\"ascii\")\nmemos.post(\"/add/knowledgebase-file\", {\n    \"knowledgebase_id\": kb_id,\n    \"file\": [{\n        \"type\": \"document\",\n        \"name\": filename,\n        \"content\": f\"data:{mime};base64,{encoded}\",\n    }],\n})\n",[64,465,466,505,528,547,561,583,598,640,646],{"__ignoreMap":112},[163,467,468,471,473,476,478,481,483,486,489,492,494,498,501,503],{"class":165,"line":166},[163,469,470],{"class":256},"encoded ",[163,472,261],{"class":260},[163,474,475],{"class":256}," base64",[163,477,404],{"class":403},[163,479,480],{"class":407},"b64encode",[163,482,411],{"class":403},[163,484,485],{"class":407},"content",[163,487,488],{"class":403},").",[163,490,491],{"class":407},"decode",[163,493,411],{"class":403},[163,495,497],{"class":496},"sjUum","\"",[163,499,500],{"class":173},"ascii",[163,502,497],{"class":496},[163,504,423],{"class":403},[163,506,507,510,512,515,517,519,521,523,525],{"class":165,"line":180},[163,508,509],{"class":256},"memos",[163,511,404],{"class":403},[163,513,514],{"class":407},"post",[163,516,411],{"class":403},[163,518,497],{"class":496},[163,520,70],{"class":173},[163,522,497],{"class":496},[163,524,417],{"class":403},[163,526,527],{"class":403}," {\n",[163,529,530,533,536,538,541,544],{"class":165,"line":190},[163,531,532],{"class":496},"    \"",[163,534,535],{"class":173},"knowledgebase_id",[163,537,497],{"class":496},[163,539,540],{"class":403},":",[163,542,543],{"class":407}," kb_id",[163,545,546],{"class":403},",\n",[163,548,549,551,554,556,558],{"class":165,"line":206},[163,550,532],{"class":496},[163,552,553],{"class":173},"file",[163,555,497],{"class":496},[163,557,540],{"class":403},[163,559,560],{"class":403}," [{\n",[163,562,563,566,569,571,573,576,579,581],{"class":165,"line":215},[163,564,565],{"class":496},"        \"",[163,567,568],{"class":173},"type",[163,570,497],{"class":496},[163,572,540],{"class":403},[163,574,575],{"class":496}," \"",[163,577,578],{"class":173},"document",[163,580,497],{"class":496},[163,582,546],{"class":403},[163,584,585,587,589,591,593,596],{"class":165,"line":230},[163,586,565],{"class":496},[163,588,414],{"class":173},[163,590,497],{"class":496},[163,592,540],{"class":403},[163,594,595],{"class":407}," filename",[163,597,546],{"class":403},[163,599,601,603,605,607,609,613,616,620,623,626,629,631,634,636,638],{"class":165,"line":600},7,[163,602,565],{"class":496},[163,604,485],{"class":173},[163,606,497],{"class":496},[163,608,540],{"class":403},[163,610,612],{"class":611},"sZ6T4"," f",[163,614,615],{"class":173},"\"data:",[163,617,619],{"class":618},"scyET","{",[163,621,622],{"class":407},"mime",[163,624,625],{"class":618},"}",[163,627,628],{"class":173},";base64,",[163,630,619],{"class":618},[163,632,633],{"class":407},"encoded",[163,635,625],{"class":618},[163,637,497],{"class":173},[163,639,546],{"class":403},[163,641,643],{"class":165,"line":642},8,[163,644,645],{"class":403},"    }],\n",[163,647,649],{"class":165,"line":648},9,[163,650,651],{"class":403},"})\n",[11,653,654,655,658,659,662,663,666,667,670],{},"新上传文件通常返回 ",[64,656,657],{},"running","，页面轮询 ",[64,660,661],{},"/get/knowledgebase-file","，直到 ",[64,664,665],{},"completed"," 或 ",[64,668,669],{},"failed","。解析完成前，检索无法召回该文档。Demo 在处理期间持续轮询，让用户看到状态变化。",[21,672],{},[378,674,676],{"id":675},"选择二共享是应用数据库中的一条关系","选择二：共享是应用数据库中的一条关系",[11,678,679],{},"拥有者输入对方 ID 后，应用检查权限和账号是否存在，再写入共享关系，此步不调用 MemOS：",[106,681,683],{"className":387,"code":682,"language":314,"meta":112,"style":112},"def share_kb(self, owner_id, kb_id, member_id):\n    if not self.can_manage(owner_id, kb_id):\n        raise PermissionError(\"只有拥有者可以共享\")\n    if not self.get_user(member_id):\n        raise KeyError(\"用户 ID 不存在\")\n    self.insert_share(kb_id, member_id)\n",[64,684,685,717,746,766,786,804],{"__ignoreMap":112},[163,686,687,690,694,696,700,702,705,707,709,711,714],{"class":165,"line":166},[163,688,689],{"class":611},"def",[163,691,693],{"class":692},"sbcIq"," share_kb",[163,695,411],{"class":403},[163,697,699],{"class":698},"sZhmI","self",[163,701,417],{"class":403},[163,703,443],{"class":704},"sM07a",[163,706,417],{"class":403},[163,708,543],{"class":704},[163,710,417],{"class":403},[163,712,713],{"class":704}," member_id",[163,715,716],{"class":403},"):\n",[163,718,719,723,726,730,732,735,737,740,742,744],{"class":165,"line":180},[163,720,722],{"class":721},"sBMTB","    if",[163,724,725],{"class":260}," not",[163,727,729],{"class":728},"sZaqd"," self",[163,731,404],{"class":403},[163,733,734],{"class":407},"can_manage",[163,736,411],{"class":403},[163,738,739],{"class":407},"owner_id",[163,741,417],{"class":403},[163,743,543],{"class":407},[163,745,716],{"class":403},[163,747,748,751,755,757,759,762,764],{"class":165,"line":190},[163,749,750],{"class":721},"        raise",[163,752,754],{"class":753},"skqQ-"," PermissionError",[163,756,411],{"class":403},[163,758,497],{"class":496},[163,760,761],{"class":173},"只有拥有者可以共享",[163,763,497],{"class":496},[163,765,423],{"class":403},[163,767,768,770,772,774,776,779,781,784],{"class":165,"line":206},[163,769,722],{"class":721},[163,771,725],{"class":260},[163,773,729],{"class":728},[163,775,404],{"class":403},[163,777,778],{"class":407},"get_user",[163,780,411],{"class":403},[163,782,783],{"class":407},"member_id",[163,785,716],{"class":403},[163,787,788,790,793,795,797,800,802],{"class":165,"line":215},[163,789,750],{"class":721},[163,791,792],{"class":753}," KeyError",[163,794,411],{"class":403},[163,796,497],{"class":496},[163,798,799],{"class":173},"用户 ID 不存在",[163,801,497],{"class":496},[163,803,423],{"class":403},[163,805,806,809,811,814,816,818,820,822],{"class":165,"line":230},[163,807,808],{"class":728},"    self",[163,810,404],{"class":403},[163,812,813],{"class":407},"insert_share",[163,815,411],{"class":403},[163,817,438],{"class":407},[163,819,417],{"class":403},[163,821,713],{"class":407},[163,823,423],{"class":403},[11,825,826],{},"Demo 通过稳定用户 ID 匹配成员。应用也可以像 Memmy 一样，先把手机号或邮箱解析为账号，再保存对应用户 ID。成员打开页面时，应用读取自己的两类关系：",[106,828,830],{"className":387,"code":829,"language":314,"meta":112,"style":112},"owned = store.list_owned(user_id)\nshared = store.list_shared(user_id)\n",[64,831,832,853],{"__ignoreMap":112},[163,833,834,837,839,842,844,847,849,851],{"class":165,"line":166},[163,835,836],{"class":256},"owned ",[163,838,261],{"class":260},[163,840,841],{"class":256}," store",[163,843,404],{"class":403},[163,845,846],{"class":407},"list_owned",[163,848,411],{"class":403},[163,850,134],{"class":407},[163,852,423],{"class":403},[163,854,855,858,860,862,864,867,869,871],{"class":165,"line":180},[163,856,857],{"class":256},"shared ",[163,859,261],{"class":260},[163,861,841],{"class":256},[163,863,404],{"class":403},[163,865,866],{"class":407},"list_shared",[163,868,411],{"class":403},[163,870,134],{"class":407},[163,872,423],{"class":403},[11,874,875],{},"拥有者可上传、删除与共享，成员只能浏览文件并提问。",[21,877],{},[378,879,881],{"id":880},"选择三通过-knowledgebase_ids-落实权限范围","选择三：通过 knowledgebase_ids 落实权限范围",[11,883,884],{},"生成回答前，应用先验证访问权限，再将 ID 传入检索：",[106,886,888],{"className":387,"code":887,"language":314,"meta":112,"style":112},"kb = require_view(user_id, kb_id)\nretrieved = memos.search_memory(\n    query=query,\n    user_id=user_id,\n    knowledgebase_ids=[kb[\"kb_id\"]],\n    conversation_id=conversation_id,\n)\n",[64,889,890,910,927,940,951,975,987],{"__ignoreMap":112},[163,891,892,895,897,900,902,904,906,908],{"class":165,"line":166},[163,893,894],{"class":256},"kb ",[163,896,261],{"class":260},[163,898,899],{"class":407}," require_view",[163,901,411],{"class":403},[163,903,134],{"class":407},[163,905,417],{"class":403},[163,907,543],{"class":407},[163,909,423],{"class":403},[163,911,912,915,917,919,921,924],{"class":165,"line":180},[163,913,914],{"class":256},"retrieved ",[163,916,261],{"class":260},[163,918,400],{"class":256},[163,920,404],{"class":403},[163,922,923],{"class":407},"search_memory",[163,925,926],{"class":403},"(\n",[163,928,929,933,935,938],{"class":165,"line":190},[163,930,932],{"class":931},"sp4zP","    query",[163,934,261],{"class":260},[163,936,937],{"class":407},"query",[163,939,546],{"class":403},[163,941,942,945,947,949],{"class":165,"line":206},[163,943,944],{"class":931},"    user_id",[163,946,261],{"class":260},[163,948,134],{"class":407},[163,950,546],{"class":403},[163,952,953,956,958,961,964,966,968,970,972],{"class":165,"line":215},[163,954,955],{"class":931},"    knowledgebase_ids",[163,957,261],{"class":260},[163,959,960],{"class":403},"[",[163,962,963],{"class":407},"kb",[163,965,960],{"class":403},[163,967,497],{"class":496},[163,969,438],{"class":173},[163,971,497],{"class":496},[163,973,974],{"class":403},"]],\n",[163,976,977,980,982,985],{"class":165,"line":230},[163,978,979],{"class":931},"    conversation_id",[163,981,261],{"class":260},[163,983,984],{"class":407},"conversation_id",[163,986,546],{"class":403},[163,988,989],{"class":165,"line":600},[163,990,423],{"class":403},[11,992,993,994,996],{},"公开接口默认不检索任何知识库，显式传入的 ID 才会参与。",[64,995,91],{}," 承接服务端权限计算结果，每个 ID 都应属于当前用户的获准范围。Demo 只针对当前打开的知识库提问，因此传一个 ID；需要跨全部可见知识库提问时，则传入当前用户可访问的完整列表。",[21,998],{},[378,1000,1002],{"id":1001},"选择四一次检索两类记忆","选择四：一次检索，两类记忆",[11,1004,1005,1006,1008],{},"一次 ",[64,1007,73],{}," 可以同时返回知识库片段与当前用户的事实、偏好：",[106,1010,1012],{"className":387,"code":1011,"language":314,"meta":112,"style":112},"context_data = {\n    \"query\": query,\n    \"user_id\": user_id,\n    \"conversation_id\": conversation_id,\n    \"knowledgebase_ids\": [kb_id],\n    \"include_memory_view\": [\"detail_factual\", \"preference\"],\n    \"memory_limit_number\": 9,\n    \"relativity\": 0.45,\n}\n",[64,1013,1014,1023,1038,1053,1068,1086,1117,1134,1150],{"__ignoreMap":112},[163,1015,1016,1019,1021],{"class":165,"line":166},[163,1017,1018],{"class":256},"context_data ",[163,1020,261],{"class":260},[163,1022,527],{"class":403},[163,1024,1025,1027,1029,1031,1033,1036],{"class":165,"line":180},[163,1026,532],{"class":496},[163,1028,937],{"class":173},[163,1030,497],{"class":496},[163,1032,540],{"class":403},[163,1034,1035],{"class":256}," query",[163,1037,546],{"class":403},[163,1039,1040,1042,1044,1046,1048,1051],{"class":165,"line":190},[163,1041,532],{"class":496},[163,1043,134],{"class":173},[163,1045,497],{"class":496},[163,1047,540],{"class":403},[163,1049,1050],{"class":256}," user_id",[163,1052,546],{"class":403},[163,1054,1055,1057,1059,1061,1063,1066],{"class":165,"line":206},[163,1056,532],{"class":496},[163,1058,984],{"class":173},[163,1060,497],{"class":496},[163,1062,540],{"class":403},[163,1064,1065],{"class":256}," conversation_id",[163,1067,546],{"class":403},[163,1069,1070,1072,1074,1076,1078,1081,1083],{"class":165,"line":215},[163,1071,532],{"class":496},[163,1073,91],{"class":173},[163,1075,497],{"class":496},[163,1077,540],{"class":403},[163,1079,1080],{"class":403}," [",[163,1082,438],{"class":256},[163,1084,1085],{"class":403},"],\n",[163,1087,1088,1090,1093,1095,1097,1099,1101,1104,1106,1108,1110,1113,1115],{"class":165,"line":230},[163,1089,532],{"class":496},[163,1091,1092],{"class":173},"include_memory_view",[163,1094,497],{"class":496},[163,1096,540],{"class":403},[163,1098,1080],{"class":403},[163,1100,497],{"class":496},[163,1102,1103],{"class":173},"detail_factual",[163,1105,497],{"class":496},[163,1107,417],{"class":403},[163,1109,575],{"class":496},[163,1111,1112],{"class":173},"preference",[163,1114,497],{"class":496},[163,1116,1085],{"class":403},[163,1118,1119,1121,1124,1126,1128,1132],{"class":165,"line":600},[163,1120,532],{"class":496},[163,1122,1123],{"class":173},"memory_limit_number",[163,1125,497],{"class":496},[163,1127,540],{"class":403},[163,1129,1131],{"class":1130},"sJNII"," 9",[163,1133,546],{"class":403},[163,1135,1136,1138,1141,1143,1145,1148],{"class":165,"line":642},[163,1137,532],{"class":496},[163,1139,1140],{"class":173},"relativity",[163,1142,497],{"class":496},[163,1144,540],{"class":403},[163,1146,1147],{"class":1130}," 0.45",[163,1149,546],{"class":403},[163,1151,1152],{"class":165,"line":648},[163,1153,1154],{"class":403},"}\n",[11,1156,1157],{},"提示词应明确两者用途：政策、流程和额度来自知识库；个人偏好可以影响表达，但以文档规则为准。知识库缺乏依据时，助手应说明，而非编造手册中没有的规定。",[11,1159,1160,1161,1164,1165,1167],{},"随后可通过 ",[64,1162,1163],{},"/add/message"," 将本轮写入当前 ",[64,1166,134],{},"。bob 下次提问时，MemOS 会带入 bob 自己的偏好，实现资料共享、个人记忆各自保留。",[21,1169],{},[24,1171,1172],{"id":1172},"验收检查",[11,1174,1175],{},"接入后走完三个角色，确认：",[1177,1178,1179,1188,1193],"ol",{},[1180,1181,1182,1184,1185,1187],"li",{},[64,1183,328],{}," 建库、上传文档、等待可用，再共享给 ",[64,1186,331],{},"，写入路径完整。",[1180,1189,1190,1192],{},[64,1191,331],{}," 在共享列表看到知识库并提问，界面不提供上传、删除入口；直接调用写入接口也会被服务端的拥有者权限检查拒绝。",[1180,1194,1195,1197],{},[64,1196,334],{}," 的侧边栏不显示该知识库，即使猜到 ID 并直接发给 API，也会被应用拒绝。她仍可问一般问题，但检索范围没有知识库，回答没有知识库引用。",[11,1199,1200],{},"第三项往往容易遗漏。服务端需要在每次检索前重新计算可见范围，前端隐藏只负责界面呈现。",[21,1202],{},[24,1204,1205],{"id":1205},"代码位置",[1207,1208,1209],"ul",{},[1180,1210,1211,1212],{},"仓库：",[146,1213,1215],{"href":148,"rel":1214},[150],"MemOS-KnowledgeBase-Practice",[11,1217,1218,1219,1221],{},"页面从左到右为窄导航栏、个人与共享知识库列表、当前库的文件面板，以及针对当前库的大问答区。核心检索逻辑集中在 ",[64,1220,367],{}," 的这个方法中：",[106,1223,1225],{"className":387,"code":1224,"language":314,"meta":112,"style":112},"def search_memory(self, query, user_id, knowledgebase_ids, conversation_id):\n    return self._post(\"/search/memory\", {\n        \"query\": query,\n        \"user_id\": user_id,\n        \"conversation_id\": conversation_id,\n        \"knowledgebase_ids\": knowledgebase_ids,\n        \"include_memory_view\": [\"detail_factual\", \"preference\"],\n        \"memory_limit_number\": 9,\n        \"relativity\": 0.45,\n    })\n",[64,1226,1227,1257,1281,1295,1309,1323,1337,1365,1379,1393],{"__ignoreMap":112},[163,1228,1229,1231,1234,1236,1238,1240,1242,1244,1246,1248,1251,1253,1255],{"class":165,"line":166},[163,1230,689],{"class":611},[163,1232,1233],{"class":692}," search_memory",[163,1235,411],{"class":403},[163,1237,699],{"class":698},[163,1239,417],{"class":403},[163,1241,1035],{"class":704},[163,1243,417],{"class":403},[163,1245,1050],{"class":704},[163,1247,417],{"class":403},[163,1249,1250],{"class":704}," knowledgebase_ids",[163,1252,417],{"class":403},[163,1254,1065],{"class":704},[163,1256,716],{"class":403},[163,1258,1259,1262,1264,1266,1269,1271,1273,1275,1277,1279],{"class":165,"line":180},[163,1260,1261],{"class":721},"    return",[163,1263,729],{"class":728},[163,1265,404],{"class":403},[163,1267,1268],{"class":407},"_post",[163,1270,411],{"class":403},[163,1272,497],{"class":496},[163,1274,73],{"class":173},[163,1276,497],{"class":496},[163,1278,417],{"class":403},[163,1280,527],{"class":403},[163,1282,1283,1285,1287,1289,1291,1293],{"class":165,"line":190},[163,1284,565],{"class":496},[163,1286,937],{"class":173},[163,1288,497],{"class":496},[163,1290,540],{"class":403},[163,1292,1035],{"class":407},[163,1294,546],{"class":403},[163,1296,1297,1299,1301,1303,1305,1307],{"class":165,"line":206},[163,1298,565],{"class":496},[163,1300,134],{"class":173},[163,1302,497],{"class":496},[163,1304,540],{"class":403},[163,1306,1050],{"class":407},[163,1308,546],{"class":403},[163,1310,1311,1313,1315,1317,1319,1321],{"class":165,"line":215},[163,1312,565],{"class":496},[163,1314,984],{"class":173},[163,1316,497],{"class":496},[163,1318,540],{"class":403},[163,1320,1065],{"class":407},[163,1322,546],{"class":403},[163,1324,1325,1327,1329,1331,1333,1335],{"class":165,"line":230},[163,1326,565],{"class":496},[163,1328,91],{"class":173},[163,1330,497],{"class":496},[163,1332,540],{"class":403},[163,1334,1250],{"class":407},[163,1336,546],{"class":403},[163,1338,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363],{"class":165,"line":600},[163,1340,565],{"class":496},[163,1342,1092],{"class":173},[163,1344,497],{"class":496},[163,1346,540],{"class":403},[163,1348,1080],{"class":403},[163,1350,497],{"class":496},[163,1352,1103],{"class":173},[163,1354,497],{"class":496},[163,1356,417],{"class":403},[163,1358,575],{"class":496},[163,1360,1112],{"class":173},[163,1362,497],{"class":496},[163,1364,1085],{"class":403},[163,1366,1367,1369,1371,1373,1375,1377],{"class":165,"line":642},[163,1368,565],{"class":496},[163,1370,1123],{"class":173},[163,1372,497],{"class":496},[163,1374,540],{"class":403},[163,1376,1131],{"class":1130},[163,1378,546],{"class":403},[163,1380,1381,1383,1385,1387,1389,1391],{"class":165,"line":648},[163,1382,565],{"class":496},[163,1384,1140],{"class":173},[163,1386,497],{"class":496},[163,1388,540],{"class":403},[163,1390,1147],{"class":1130},[163,1392,546],{"class":403},[163,1394,1396],{"class":165,"line":1395},10,[163,1397,1398],{"class":403},"    })\n",[11,1400,1401],{},"知识库资料在授权成员之间共享，用户记忆保持个人范围。应用计算可见范围，MemOS 负责文档处理与检索。",[1403,1404,1405],"style",{},"html pre.shiki code .saonL, html code.shiki .saonL{--shiki-light:#E2931D;--shiki-default:#702C00;--shiki-dark:#FFA657}html pre.shiki code .sp1uZ, html code.shiki .sp1uZ{--shiki-light:#91B859;--shiki-default:#032563;--shiki-dark:#A5D6FF}html pre.shiki code .svxCd, html code.shiki .svxCd{--shiki-light:#6182B8;--shiki-default:#023B95;--shiki-dark:#79C0FF}html pre.shiki code .sp2SP, html code.shiki .sp2SP{--shiki-light:#91B859;--shiki-default:#023B95;--shiki-dark:#79C0FF}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 .s5ojA, html code.shiki .s5ojA{--shiki-light:#90A4AE;--shiki-default:#0E1116;--shiki-dark:#E6EDF3}html pre.shiki code .saN0X, html code.shiki .saN0X{--shiki-light:#39ADB5;--shiki-default:#A0111F;--shiki-dark:#FF7B72}html pre.shiki code .suWxN, html code.shiki .suWxN{--shiki-light:#39ADB5;--shiki-default:#0E1116;--shiki-dark:#E6EDF3}html pre.shiki code .sa-2m, html code.shiki .sa-2m{--shiki-light:#6182B8;--shiki-default:#0E1116;--shiki-dark:#E6EDF3}html pre.shiki code .sjUum, html code.shiki .sjUum{--shiki-light:#39ADB5;--shiki-default:#032563;--shiki-dark:#A5D6FF}html pre.shiki code .sZ6T4, html code.shiki .sZ6T4{--shiki-light:#9C3EDA;--shiki-default:#A0111F;--shiki-dark:#FF7B72}html pre.shiki code .scyET, html code.shiki .scyET{--shiki-light:#F76D47;--shiki-default:#A0111F;--shiki-dark:#FF7B72}html pre.shiki code .sbcIq, html code.shiki .sbcIq{--shiki-light:#6182B8;--shiki-default:#622CBC;--shiki-dark:#D2A8FF}html pre.shiki code .sZhmI, html code.shiki .sZhmI{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#0E1116;--shiki-default-font-style:inherit;--shiki-dark:#E6EDF3;--shiki-dark-font-style:inherit}html pre.shiki code .sM07a, html code.shiki .sM07a{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#0E1116;--shiki-default-font-style:inherit;--shiki-dark:#E6EDF3;--shiki-dark-font-style:inherit}html pre.shiki code .sBMTB, html code.shiki .sBMTB{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#A0111F;--shiki-default-font-style:inherit;--shiki-dark:#FF7B72;--shiki-dark-font-style:inherit}html pre.shiki code .sZaqd, html code.shiki .sZaqd{--shiki-light:#90A4AE;--shiki-default:#023B95;--shiki-dark:#79C0FF}html pre.shiki code .skqQ-, html code.shiki .skqQ-{--shiki-light:#E2931D;--shiki-default:#023B95;--shiki-dark:#79C0FF}html pre.shiki code .sp4zP, html code.shiki .sp4zP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#702C00;--shiki-default-font-style:inherit;--shiki-dark:#FFA657;--shiki-dark-font-style:inherit}html pre.shiki code .sJNII, html code.shiki .sJNII{--shiki-light:#F76D47;--shiki-default:#023B95;--shiki-dark:#79C0FF}",{"title":112,"searchDepth":180,"depth":180,"links":1407},[1408,1409,1410,1411,1412,1418,1419],{"id":26,"depth":180,"text":26},{"id":103,"depth":180,"text":104},{"id":122,"depth":180,"text":122},{"id":140,"depth":180,"text":141},{"id":361,"depth":180,"text":361,"children":1413},[1414,1415,1416,1417],{"id":380,"depth":190,"text":381},{"id":675,"depth":190,"text":676},{"id":880,"depth":190,"text":881},{"id":1001,"depth":190,"text":1002},{"id":1172,"depth":180,"text":1172},{"id":1205,"depth":180,"text":1205},"应用负责归属与共享，MemOS 负责文档解析与检索，让有权限的用户围绕同一份知识库提问。","md",{},"/cn/usecase/shared_knowledge_base",{"title":5,"description":13},"cn/usecase/shared_knowledge_base","Jog9TQCrxiy0mXIQuxWb0Ip0fhLLw77dvGzYPEpxBmg",[-1,1428],{"title":1429,"path":1430,"stem":1431,"icon":1432,"framework":6,"module":6,"class":1433,"target":-1,"active":1434,"defaultOpen":1434,"children":-1,"description":1435},"在 Memmy 中集成 MemOS 知识库","/cn/usecase/memmy_knowledge_base","usecase/memmy_knowledge_base","i-ri-book-2-line",[],false,"Memmy 桌面端知识库的接入方式：API Key 只留在服务端，知识库归属、共享与召回范围由应用计算，文档解析与检索交给 MemOS。",1793163786289]