[{"data":1,"prerenderedAt":6596},["ShallowReactive",2],{"docs-page-cn-/cn/usecase/customer_service_assistant":3,"surround-cn-/cn/usecase/customer_service_assistant":6580},{"id":4,"title":5,"avatar":6,"banner":6,"body":7,"category":6,"desc":6573,"description":163,"extension":6574,"lead":6,"links":6,"meta":6575,"navigation":6,"path":6576,"seo":6577,"stem":6578,"__hash__":6579},"docs/cn/usecase/customer_service_assistant.md","构建记忆增强型的智能客服助手",null,{"type":8,"value":9,"toc":6553},"minimark",[10,15,19,22,25,28,33,36,65,67,71,74,141,147,149,153,156,167,170,176,179,185,188,190,194,228,230,234,237,239,243,246,252,308,321,324,326,330,333,335,340,6288,6290,6294,6312,6314,6318,6326,6376,6378,6382,6394,6396,6400,6403,6409,6412,6414,6418,6467,6469,6473,6477,6492,6494,6498,6509,6511,6515,6529,6531,6535,6549],[11,12,14],"h2",{"id":13},"_1-概述","1. 概述",[16,17,18],"p",{},"客服是 AI Agent 落地最密集的场景之一，也是「失忆」代价最高的场景。消费者在线上报了商品故障，三天后换个渠道追问进度，客服 Agent 却让他把订单号和问题再描述一遍。这类体验直接拉低满意度与一次解决率。",[16,20,21],{},"问题不在于模型能力。主流大模型的上下文窗口足以装下整场对话，但多数客服架构里，每个渠道、每个会话各自为政。对话记录分散在各自的工单系统中，Agent 生成回复时面对的仍是空白上下文。这是一个记忆架构问题，需要一层独立的记忆基础设施来解决。",[16,23,24],{},"MemOS 为客服 Agent 提供这层记忆能力。它跨渠道、跨会话记住消费者的交互历史、未完成事项与偏好，并与知识库中的售后政策联合检索。每一次回复都建立在完整背景之上。",[26,27],"br",{},[29,30,32],"h3",{"id":31},"_11-客服场景的四个断点","1.1 客服场景的四个断点",[16,34,35],{},"渠道各自为政的客服架构，会在四个环节集中爆发问题：",[37,38,39,47,53,59],"ol",{},[40,41,42,46],"li",{},[43,44,45],"strong",{},"重复询问","：消费者换渠道或隔几天再来，被要求重复订单号、故障描述等已提供的信息。",[40,48,49,52],{},[43,50,51],{},"进度断裂","：换货、补发、投诉等未完成事项跨周期无人衔接，消费者追问时 Agent 无从查起。",[40,54,55,58],{},[43,56,57],{},"政策不一致","：售后政策存在多个版本，不同时间、不同坐席给出的答复互相矛盾。",[40,60,61,64],{},[43,62,63],{},"经验流失","：资深客服的处理经验留在个人脑子里，新坐席与新 Agent 无法复用。",[26,66],{},[29,68,70],{"id":69},"_12-知识与记忆的边界","1.2 知识与记忆的边界",[16,72,73],{},"落地的第一步是划清边界：什么进知识库，什么进记忆系统。两者在 MemOS 中统一管理、联合检索，但承载的内容不同。",[75,76,77,93],"table",{},[78,79,80],"thead",{},[81,82,83,87,90],"tr",{},[84,85,86],"th",{},"维度",[84,88,89],{},"知识库",[84,91,92],{},"记忆系统",[94,95,96,108,119,130],"tbody",{},[81,97,98,102,105],{},[99,100,101],"td",{},"内容性质",[99,103,104],{},"稳定、全员共享",[99,106,107],{},"动态、按消费者隔离",[81,109,110,113,116],{},[99,111,112],{},"典型内容",[99,114,115],{},"售后政策、保修条款、物流规则",[99,117,118],{},"交互历史、未完成事项进度、偏好、处理经验",[81,120,121,124,127],{},[99,122,123],{},"更新方式",[99,125,126],{},"业务方版本化维护",[99,128,129],{},"对话中自动沉淀、持续演化",[81,131,132,135,138],{},[99,133,134],{},"错误代价",[99,136,137],{},"回答口径不一致",[99,139,140],{},"张冠李戴、误用他人信息",[16,142,143,144],{},"一句话概括：",[43,145,146],{},"知识库回答「按规定该怎么办」，记忆系统回答「这位消费者现在到哪一步了」。",[26,148],{},[29,150,152],{"id":151},"_13-真实场景对比跨渠道售后","1.3 真实场景对比：跨渠道售后",[16,154,155],{},"以一次典型的换货售后为例，直观感受有无记忆层的差异：",[157,158,164],"pre",{"className":159,"code":161,"language":162,"meta":163},[160],"language-text","DAY 1 · 在线客服\n消费者：我 8 月 20 日签收的订单 20260820-88，降噪耳机左耳有电流声，想换货。\n消费者：换的耳机最好这周五前寄到公司地址，进度发短信就行。\n\nDAY 4 · 邮件工单（同一消费者，新会话）\n消费者：我之前反馈的耳机换货，现在进行到哪一步了？\n","text","",[165,166,161],"code",{"__ignoreMap":163},[16,168,169],{},"无记忆层的客服 Agent：",[157,171,174],{"className":172,"code":173,"language":162,"meta":163},[160],"# 只能看到当前这封邮件，订单号、故障、地址、偏好全部丢失\n❌ 客服助手：您好，请提供您的订单号，并描述一下遇到的问题，我来为您查询。\n",[165,175,173],{"__ignoreMap":163},[16,177,178],{},"接入 MemOS 的客服 Agent：",[157,180,183],{"className":181,"code":182,"language":162,"meta":163},[160],"# 生成回复前，先检索到该消费者的跨渠道记忆与售后政策\n检索到记忆：\n1. 订单 20260820-88 的耳机换货工单处理中（DAY 1 在线客服渠道登记）\n2. 消费者反馈降噪耳机左耳有明显电流声\n3. 知识库：商品性能故障 15 天内支持换货，换货双向免运费\n4. 偏好：换货件本周五前寄至公司地址，短信同步进度\n\n✅ 客服助手：您好，您反馈的订单 20260820-88 耳机换货工单正在处理中。\n换货件将于本周五前寄往您的公司地址，发出后会短信通知物流单号，请留意查收。\n",[165,184,182],{"__ignoreMap":163},[16,186,187],{},"差异的本质：DAY 4 的 Agent 没有「重新接待」，而是「接着办理」。",[26,189],{},[29,191,193],{"id":192},"_14-为什么使用-memos","1.4 为什么使用 MemOS？",[37,195,196,204,212,220],{},[40,197,198,201,203],{},[43,199,200],{},"一个 user_id 贯通多渠道",[26,202],{},"渠道身份是路由问题，记忆身份是统一的。在线客服、邮件、电话都向同一个 user_id 读写记忆，消费者换渠道无需重启上下文。渠道本身记入 tags 与 info，用于审计与归因分析。",[40,205,206,209,211],{},[43,207,208],{},"知识与记忆联合检索",[26,210],{},"一次 searchMemory 调用同时召回个人记忆、偏好与知识库政策。Agent 既知道「这位消费者的换货单到哪了」，也知道「按规定该怎么办」。",[40,213,214,217,219],{},[43,215,216],{},"客服经验沉淀为 Skill",[26,218],{},"处理某类问题的标准流程可以沉淀为 Skill，由 MemOS 统一管理其沉淀、更新、召回与失效。新坐席、新 Agent 上线即可复用。",[40,221,222,225,227],{},[43,223,224],{},"权限隔离与审计",[26,226],{},"记忆默认按 user_id 严格隔离，脱敏后的客服经验可写入公共记忆库供全员检索。每次调用带渠道标签，调用日志可审计。",[26,229],{},[11,231,233],{"id":232},"_2-搭建教程","2. 搭建教程",[16,235,236],{},"本教程搭建一个跨渠道的消费者售后客服助手，覆盖 DAY 1 在线客服受理、DAY 4 邮件追问进度的完整链路，约 10 分钟跑通。",[26,238],{},[29,240,242],{"id":241},"_21-知识库与-skill-准备5min","2.1 知识库与 Skill 准备（5min）",[16,244,245],{},"售后政策等稳定内容上传至知识库，换货处理流程作为 Skill 上传。两种方式任选其一：",[247,248,249],"ul",{},[40,250,251],{},"方式一（推荐）：运行 Demo 自带的初始化命令，自动创建知识库并上传示例政策文档与 Skill：",[157,253,257],{"className":254,"code":255,"language":256,"meta":163,"style":163},"language-bash shiki shiki-themes material-theme-lighter github-light-high-contrast github-dark-default","python customer_service_demo.py --setup\n# 命令输出知识库 ID 后配置：\nexport MEMOS_KB_ID=\"base****-****-****-****\"\n","bash",[165,258,259,276,283],{"__ignoreMap":163},[260,261,264,268,272],"span",{"class":262,"line":263},"line",1,[260,265,267],{"class":266},"saonL","python",[260,269,271],{"class":270},"sp1uZ"," customer_service_demo.py",[260,273,275],{"class":274},"sp2SP"," --setup\n",[260,277,279],{"class":262,"line":278},2,[260,280,282],{"class":281},"sfVK4","# 命令输出知识库 ID 后配置：\n",[260,284,286,290,294,298,302,305],{"class":262,"line":285},3,[260,287,289],{"class":288},"sZ6T4","export",[260,291,293],{"class":292},"s5ojA"," MEMOS_KB_ID",[260,295,297],{"class":296},"saN0X","=",[260,299,301],{"class":300},"sjUum","\"",[260,303,304],{"class":270},"base****-****-****-****",[260,306,307],{"class":300},"\"\n",[247,309,310],{},[40,311,312,313,320],{},"方式二：通过",[314,315,319],"a",{"href":316,"rel":317},"https://memos-dashboard.openmem.net/cn/knowledgeBase/",[318],"nofollow","控制台","手动创建知识库，上传时选择对应文件类型（文档 / 技能文件）。",[16,322,323],{},"上传后等待文件状态变为「可用」即可，存储、解析、分段、生成记忆全部由 MemOS 完成。",[26,325],{},[29,327,329],{"id":328},"_22-运行代码5min","2.2 运行代码（5min）",[16,331,332],{},"以下代码示例基于 Python 运行环境进行展示。",[26,334],{},[336,337,339],"h4",{"id":338},"_221-拷贝完整运行代码","2.2.1 拷贝完整运行代码",[157,341,344],{"className":342,"code":343,"language":267,"meta":163,"style":163},"language-python shiki shiki-themes material-theme-lighter github-light-high-contrast github-dark-default","# -*- coding: utf-8 -*-\n\"\"\"\nMemOS 客服场景最佳实践 Demo：跨渠道记忆增强的消费者客服助手\n\n场景：某智能硬件品牌的消费者售后客服。消费者通过「在线客服」「邮件工单」两个\n渠道咨询售后问题，MemOS 作为记忆基础设施，为客服 Agent 提供三项能力：\n\n1. 跨渠道、跨会话的用户记忆：未完成事项（换货工单）、消费者偏好自动延续\n2. 知识库联合检索：售后政策等稳定内容归入知识库，与个人记忆一起召回\n3. 客服 Skill 沉淀与召回：质量问题换货 SOP 作为 Skill 上传，指导 Agent 按标准流程处理\n\"\"\"\n\nimport argparse\nimport base64\nimport os\nimport sys\nimport time\nfrom datetime import datetime\n\nimport requests\n\ntry:\n    from openai import OpenAI\nexcept ImportError:  # 允许仅做 --setup 时不安装 openai\n    OpenAI = None\n\n# ---------------------------------------------------------------------------\n# 环境配置\n# ---------------------------------------------------------------------------\n\nos.environ.setdefault(\"MEMOS_API_KEY\", \"mpg-xxx\")   # 替换为你的 MemOS API Key\nos.environ.setdefault(\"OPENAI_API_KEY\", \"sk-xxx\")   # 替换为你的大模型 Key\n\nMEMOS_BASE_URL = os.environ.get(\n    \"MEMOS_BASE_URL\", \"https://memos.memtensor.cn/api/openmem/v1\"\n)\nOPENAI_MODEL = os.environ.get(\"OPENAI_MODEL\", \"gpt-4o\")\nOPENAI_BASE_URL = os.environ.get(\"OPENAI_BASE_URL\")  # 兼容接口时填写\nKNOWLEDGE_BASE_ID = os.environ.get(\"MEMOS_KB_ID\", \"\")\n\n# 相关性阈值：低于该值的记忆不进入 prompt，防止噪音干扰客服判断\nRELATIVITY_THRESHOLD = 0.5\n\n# ---------------------------------------------------------------------------\n# 示例知识：售后政策文档（稳定内容，归入知识库）与换货 Skill（可复用流程）\n# ---------------------------------------------------------------------------\n\nPOLICY_DOC_MD = \"\"\"# 消费者售后政策（示例）\n\n## 退换货\n- 自签收次日起，未拆封且不影响二次销售的商品支持 7 天无理由退货。\n- 商品出现性能故障，15 天内支持换货，换货双向免运费。\n- 定制类商品不支持无理由退换。\n\n## 保修\n- 整机保修 12 个月，随机配件保修 6 个月。\n- 保修期内非人为损坏免费维修，人为损坏收取成本费。\n\n## 物流\n- 默认顺丰速运，换货件发出后系统自动短信推送物流单号。\n- 支持修改一次收货地址，需在换货件发出前完成。\n\n## 发票\n- 默认开具电子普通发票，订单完成后可在订单页自助申请。\n\"\"\"\n\nEXCHANGE_SKILL_MD = \"\"\"---\nname: 质量问题换货处理\ndescription: 消费者反馈商品性能故障、要求换货时的标准处理流程，覆盖核实、建单、取件与进度同步\n---\n\n## Procedure\n1. 核对消费者身份与订单号，确认故障商品与故障现象\n2. 引导消费者做一次简单排查（如重启、重置连接），排除使用问题\n3. 确认属于质量问题后创建换货工单，记录期望收货时间与收货地址\n4. 安排上门取件或引导寄回，告知换货双向免运费\n5. 换货件发出后，按消费者偏好的渠道同步物流单号\n\n## Experience\n- 耳机类「杂音、电流声」问题，先引导重置蓝牙配对再判定故障\n- 消费者提出明确时间要求时，在工单中标注并优先处理\n\"\"\"\n\n\n# ---------------------------------------------------------------------------\n# 客服助手：记忆检索 -> 组装 prompt -> 生成回复 -> 写回记忆\n# ---------------------------------------------------------------------------\n\nclass CustomerServiceAssistant:\n    def __init__(self):\n        if OpenAI is None:\n            raise RuntimeError(\"请先安装 openai：pip install openai\")\n        self.openai_client = OpenAI(\n            api_key=os.environ[\"OPENAI_API_KEY\"],\n            base_url=OPENAI_BASE_URL or None,\n        )\n        self.headers = {\n            \"Content-Type\": \"application/json\",\n            \"Authorization\": f\"Token {os.environ['MEMOS_API_KEY']}\",\n        }\n        self.knowledgebase_ids = [KNOWLEDGE_BASE_ID] if KNOWLEDGE_BASE_ID else []\n\n    # ---- MemOS 读写 ----\n\n    def search_memory(self, query, user_id, conversation_id):\n        \"\"\"检索个人记忆、偏好、知识库与 Skill，按相关性阈值过滤\"\"\"\n        data = {\n            \"query\": query,\n            \"user_id\": user_id,\n            \"conversation_id\": conversation_id,\n            \"knowledgebase_ids\": self.knowledgebase_ids,\n            \"include_skill\": True,\n            \"memory_limit_number\": 9,\n        }\n        res = requests.post(\n            f\"{MEMOS_BASE_URL}/search/memory\", headers=self.headers, json=data\n        )\n        body = res.json()\n        if body.get(\"code\") != 0:\n            print(f\"  [MemOS] 检索记忆失败：{body.get('message')}，本轮按无记忆处理\")\n            return [], [], []\n\n        result = body.get(\"data\", {})\n        memories = [\n            m for m in result.get(\"memory_detail_list\", [])\n            if m.get(\"relativity\", 0) >= RELATIVITY_THRESHOLD\n        ]\n        preferences = result.get(\"preference_detail_list\", [])\n        skills = result.get(\"skill_detail_list\", [])\n        return memories, preferences, skills\n\n    def add_message(self, messages, user_id, conversation_id, channel):\n        \"\"\"写回一轮对话。渠道记入 tags 与 info，便于审计与按渠道分析\"\"\"\n        data = {\n            \"user_id\": user_id,\n            \"conversation_id\": conversation_id,\n            \"tags\": [channel],\n            \"info\": {\"channel\": channel, \"scene\": \"consumer_support\"},\n            \"messages\": messages,\n        }\n        res = requests.post(\n            f\"{MEMOS_BASE_URL}/add/message\", headers=self.headers, json=data\n        )\n        if res.json().get(\"code\") != 0:\n            # 写回失败不阻塞本轮回复\n            print(f\"  [MemOS] 写入记忆失败：{res.json().get('message')}\")\n\n    def get_message(self, user_id, conversation_id):\n        \"\"\"获取当前会话的近期消息\"\"\"\n        data = {\n            \"user_id\": user_id,\n            \"conversation_id\": conversation_id,\n            \"message_limit_number\": 10,\n        }\n        res = requests.post(\n            f\"{MEMOS_BASE_URL}/get/message\", headers=self.headers, json=data\n        )\n        if res.json().get(\"code\") == 0:\n            return res.json().get(\"data\", {}).get(\"message_detail_list\", [])\n        return []\n\n    # ---- prompt 与生成 ----\n\n    def build_system_prompt(self, channel, memories, preferences, skills):\n        channel_name = {\"webchat\": \"在线客服\", \"email\": \"邮件工单\"}.get(channel, channel)\n\n        memory_text = \"\\n\".join(\n            f\"{i}. {m.get('memory_value')}\" for i, m in enumerate(memories, 1)\n        ) or \"（暂无相关记忆）\"\n        preference_text = \"\\n\".join(\n            f\"{i}. {p.get('preference')}\" for i, p in enumerate(preferences, 1)\n        ) or \"（暂无偏好记录）\"\n        # 仅注入有结构化内容的 Skill；匹配成功但内容未下发的 Skill 不进入 prompt\n        valid_skills = [\n            s for s in skills\n            if isinstance(s.get(\"skill_value\"), dict) and s[\"skill_value\"].get(\"name\")\n        ]\n        skill_text = \"\\n\".join(\n            f\"{i}. {s['skill_value']}\" for i, s in enumerate(valid_skills, 1)\n        ) or \"（暂无匹配 Skill）\"\n\n        return f\"\"\"# Role\n你是品牌官方客服助手，正在通过「{channel_name}」渠道服务消费者。\n你的目标是结合检索到的记忆、偏好、售后政策与处理 Skill，给出准确、个性化、可执行的回答。\n\n# 当前时间\n{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n# 检索到的信息\n\u003Cmemories>\n{memory_text}\n\u003C/memories>\n\n\u003Cpreferences>\n{preference_text}\n\u003C/preferences>\n\n\u003Cskills>\n{skill_text}\n\u003C/skills>\n\n# 记忆使用规则\n1. 区分「消费者原话」与「系统推测」，推测类信息仅作参考，权重低于消费者的直接陈述。\n2. 确认记忆描述的主体是当前消费者，而非其他用户或历史案例，禁止张冠李戴。\n3. 只使用与当前问题直接相关的记忆，关键词偶合但语境不同的记忆必须忽略。\n4. 记忆与消费者当前输入冲突时，以当前输入为准。\n5. 涉及政策、时效、金额的内容，以知识库内容为准。\n\n# 输出要求\n1. 直接回答问题，不向消费者提及「记忆」「检索」「知识库」等内部实现。\n2. 存在未完成事项时主动衔接进度，不要让消费者重复描述已反馈过的信息。\n3. 回答语言与消费者的输入语言一致。\"\"\"\n\n    def generate_reply(self, system_prompt, history, query):\n        messages = [{\"role\": \"system\", \"content\": system_prompt}, *history,\n                    {\"role\": \"user\", \"content\": query}]\n        response = self.openai_client.chat.completions.create(\n            model=OPENAI_MODEL, messages=messages, temperature=0.3, top_p=0.9\n        )\n        return response.choices[0].message.content\n\n    # ---- 主流程 ----\n\n    def chat(self, query, user_id, conversation_id, channel):\n        # 1. 拉取当前会话近期消息\n        history = self.get_message(user_id, conversation_id)\n\n        # 2. 检索跨渠道记忆、偏好、知识库与 Skill\n        memories, preferences, skills = self.search_memory(\n            query, user_id, conversation_id\n        )\n        self._print_retrieved(memories, preferences, skills)\n\n        # 3. 组装 prompt 并生成回复\n        system_prompt = self.build_system_prompt(channel, memories, preferences, skills)\n        reply = self.generate_reply(system_prompt, history, query)\n\n        # 4. 写回本轮对话，沉淀为长期记忆\n        self.add_message(\n            [{\"role\": \"user\", \"content\": query},\n             {\"role\": \"assistant\", \"content\": reply}],\n            user_id, conversation_id, channel,\n        )\n        return reply\n\n    @staticmethod\n    def _print_retrieved(memories, preferences, skills):\n        print(\"  ---- MemOS 召回内容 ----\")\n        for m in memories:\n            value = str(m.get(\"memory_value\", \"\")).replace(\"\\n\", \" \")\n            print(f\"  [记忆 {m.get('relativity', 0):.2f}] {value[:80]}\")\n        for p in preferences:\n            print(f\"  [偏好] {p.get('preference')}\")\n        for s in skills:\n            value = s.get(\"skill_value\") or {}\n            label = value.get(\"name\") or f\"id={s.get('id')}\"\n            print(f\"  [Skill {s.get('relativity', 0):.2f}] {label}\")\n        print(\"  ------------------------\")\n\n\n# ---------------------------------------------------------------------------\n# 知识库初始化：创建知识库，上传政策文档与 Skill，等待处理完成\n# ---------------------------------------------------------------------------\n\ndef _b64_md(text):\n    encoded = base64.b64encode(text.encode(\"utf-8\")).decode(\"utf-8\")\n    return f\"data:text/markdown;base64,{encoded}\"\n\n\ndef setup_knowledge_base():\n    headers = {\n        \"Content-Type\": \"application/json\",\n        \"Authorization\": f\"Token {os.environ['MEMOS_API_KEY']}\",\n    }\n\n    res = requests.post(\n        f\"{MEMOS_BASE_URL}/create/knowledgebase\",\n        headers=headers,\n        json={\n            \"knowledgebase_name\": \"消费者售后政策知识库\",\n            \"knowledgebase_description\": \"消费者退换货、保修、物流与发票政策，以及客服处理 Skill\",\n        },\n    )\n    body = res.json()\n    if body.get(\"code\") != 0:\n        sys.exit(f\"创建知识库失败：{body.get('message')}\")\n    kb_id = body.get(\"data\", {}).get(\"id\") or body.get(\"data\", {}).get(\"knowledgebase_id\")\n    print(f\"知识库已创建：{kb_id}\")\n\n    res = requests.post(\n        f\"{MEMOS_BASE_URL}/add/knowledgebase-file\",\n        headers=headers,\n        json={\n            \"knowledgebase_id\": kb_id,\n            \"file\": [\n                {\"type\": \"document\", \"name\": \"consumer-after-sale-policy.md\",\n                 \"content\": _b64_md(POLICY_DOC_MD)},\n                {\"type\": \"skill\", \"name\": \"quality-exchange-sop.md\",\n                 \"content\": _b64_md(EXCHANGE_SKILL_MD)},\n            ],\n        },\n    )\n    if res.json().get(\"code\") != 0:\n        sys.exit(f\"上传文件失败：{res.json().get('message')}\")\n    print(\"政策文档与 Skill 已上传，等待解析...\")\n\n    for _ in range(40):  # 最长等待约 2 分钟\n        time.sleep(3)\n        res = requests.post(\n            f\"{MEMOS_BASE_URL}/get/knowledgebase-file\",\n            headers=headers,\n            json={\"knowledgebase_id\": kb_id, \"page\": 1, \"page_size\": 20},\n        )\n        files = res.json().get(\"data\", {}).get(\"file_detail_list\", [])\n        statuses = {str(f.get(\"status\", \"\")).lower() for f in files}\n        if files and statuses \u003C= {\"completed\", \"available\", \"failed\"}:\n            if \"failed\" in statuses:\n                sys.exit(\"有文件解析失败，请在控制台查看详情\")\n            break\n    else:\n        sys.exit(\"等待文件解析超时，请稍后在控制台确认状态\")\n\n    print(f\"知识库已就绪。请执行：export MEMOS_KB_ID=\\\"{kb_id}\\\"，然后运行演示。\")\n\n\n# ---------------------------------------------------------------------------\n# 演示场景：同一消费者，跨「在线客服」与「邮件工单」两个渠道\n# ---------------------------------------------------------------------------\n\nCUSTOMER_ID = \"customer_001\"  # 生产环境中应来自登录态的稳定用户 ID\n\n\ndef run_demo():\n    assistant = CustomerServiceAssistant()\n\n    print(\"=\" * 64)\n    print(\"DAY 1 · 在线客服渠道：消费者反馈耳机杂音要求换货，并说明时间与通知偏好\")\n    print(\"=\" * 64)\n    chat_conv = \"conv_chat_0821\"\n\n    q1 = (\"你好，我 8 月 20 日签收的订单 20260820-88，里面的降噪耳机左耳一直有\"\n          \"电流声，杂音很明显，我想换货。\")\n    print(f\"\\n[消费者] {q1}\")\n    print(f\"[客服助手] {assistant.chat(q1, CUSTOMER_ID, chat_conv, 'webchat')}\")\n\n    q2 = (\"对了，我下周要出差，换的耳机最好这周五前寄到我公司地址：\"\n          \"上海市浦东新区世纪大道 100 号。进度发短信告诉我就行。\")\n    print(f\"\\n[消费者] {q2}\")\n    print(f\"[客服助手] {assistant.chat(q2, CUSTOMER_ID, chat_conv, 'webchat')}\")\n\n    print()\n    print(\"=\" * 64)\n    print(\"DAY 4 · 邮件工单渠道：同一消费者追问进度（新会话、不同渠道）\")\n    print(\"=\" * 64)\n    mail_conv = \"conv_mail_0824\"\n\n    q3 = \"你好，我之前反馈的耳机换货，现在进行到哪一步了？\"\n    print(f\"\\n[消费者] {q3}\")\n    print(f\"[客服助手] {assistant.chat(q3, CUSTOMER_ID, mail_conv, 'email')}\")\n\n    print()\n    print(\"演示结束：DAY 4 的回复应自动关联 DAY 1 的订单、故障商品、收货时间要求\")\n    print(\"与通知偏好，无需消费者重复描述。这就是跨渠道记忆带来的体验差异。\")\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"MemOS 客服场景最佳实践 Demo\")\n    parser.add_argument(\"--setup\", action=\"store_true\",\n                        help=\"创建知识库并上传示例政策文档与 Skill\")\n    args = parser.parse_args()\n\n    if os.environ[\"MEMOS_API_KEY\"] == \"mpg-xxx\":\n        sys.exit(\"请先配置 MEMOS_API_KEY\")\n\n    if args.setup:\n        setup_knowledge_base()\n    else:\n        if os.environ[\"OPENAI_API_KEY\"] == \"sk-xxx\":\n            sys.exit(\"请先配置 OPENAI_API_KEY\")\n        if not KNOWLEDGE_BASE_ID:\n            sys.exit(\"请先运行 python customer_service_demo.py --setup 并配置 MEMOS_KB_ID\")\n        run_demo()\n",[165,345,346,351,357,363,370,376,382,387,393,399,405,410,415,425,433,441,449,457,471,476,484,489,499,513,529,541,546,552,558,563,568,614,650,655,680,699,705,742,773,807,812,818,830,835,840,846,851,856,870,875,881,887,893,899,904,910,916,922,927,933,939,945,950,956,962,967,972,985,991,997,1002,1007,1013,1019,1025,1031,1037,1043,1048,1054,1060,1066,1071,1076,1081,1086,1092,1097,1102,1113,1132,1149,1169,1187,1214,1232,1238,1253,1275,1322,1328,1359,1364,1370,1375,1406,1417,1427,1443,1459,1475,1495,1512,1529,1534,1552,1592,1597,1616,1646,1687,1700,1705,1733,1744,1780,1814,1820,1847,1874,1893,1898,1930,1940,1949,1964,1979,1998,2044,2060,2065,2080,2116,2121,2153,2159,2200,2205,2227,2237,2246,2261,2276,2293,2298,2313,2349,2354,2386,2429,2436,2441,2447,2452,2483,2542,2547,2570,2638,2653,2673,2735,2749,2755,2765,2780,2844,2849,2869,2925,2939,2944,2954,2970,2976,2981,2987,3025,3030,3036,3042,3052,3058,3063,3069,3079,3085,3090,3096,3106,3112,3117,3123,3129,3135,3141,3147,3153,3158,3164,3170,3176,3182,3187,3215,3266,3302,3333,3371,3376,3403,3408,3414,3419,3449,3455,3480,3485,3491,3517,3532,3537,3561,3566,3572,3605,3635,3640,3646,3658,3692,3729,3745,3750,3758,3763,3773,3795,3812,3826,3879,3940,3953,3989,4002,4030,4085,4136,4152,4157,4162,4167,4173,4178,4183,4198,4247,4267,4272,4277,4288,4298,4318,4357,4363,4368,4384,4403,4415,4426,4447,4468,4474,4480,4496,4524,4566,4637,4661,4666,4681,4699,4710,4719,4735,4749,4790,4811,4850,4869,4875,4880,4885,4916,4960,4976,4981,5006,5024,5039,5057,5069,5118,5123,5168,5222,5269,5288,5309,5315,5323,5343,5348,5376,5381,5386,5391,5397,5402,5407,5425,5430,5435,5445,5457,5462,5482,5498,5517,5532,5537,5555,5568,5595,5646,5651,5668,5680,5706,5753,5758,5765,5784,5800,5819,5834,5839,5854,5880,5928,5933,5940,5956,5972,5977,5982,6002,6034,6070,6087,6105,6110,6141,6161,6166,6181,6189,6196,6227,6248,6260,6280],{"__ignoreMap":163},[260,347,348],{"class":262,"line":263},[260,349,350],{"class":281},"# -*- coding: utf-8 -*-\n",[260,352,353],{"class":262,"line":278},[260,354,356],{"class":355},"s9tbJ","\"\"\"\n",[260,358,359],{"class":262,"line":285},[260,360,362],{"class":361},"soLfw","MemOS 客服场景最佳实践 Demo：跨渠道记忆增强的消费者客服助手\n",[260,364,366],{"class":262,"line":365},4,[260,367,369],{"emptyLinePlaceholder":368},true,"\n",[260,371,373],{"class":262,"line":372},5,[260,374,375],{"class":361},"场景：某智能硬件品牌的消费者售后客服。消费者通过「在线客服」「邮件工单」两个\n",[260,377,379],{"class":262,"line":378},6,[260,380,381],{"class":361},"渠道咨询售后问题，MemOS 作为记忆基础设施，为客服 Agent 提供三项能力：\n",[260,383,385],{"class":262,"line":384},7,[260,386,369],{"emptyLinePlaceholder":368},[260,388,390],{"class":262,"line":389},8,[260,391,392],{"class":361},"1. 跨渠道、跨会话的用户记忆：未完成事项（换货工单）、消费者偏好自动延续\n",[260,394,396],{"class":262,"line":395},9,[260,397,398],{"class":361},"2. 知识库联合检索：售后政策等稳定内容归入知识库，与个人记忆一起召回\n",[260,400,402],{"class":262,"line":401},10,[260,403,404],{"class":361},"3. 客服 Skill 沉淀与召回：质量问题换货 SOP 作为 Skill 上传，指导 Agent 按标准流程处理\n",[260,406,408],{"class":262,"line":407},11,[260,409,356],{"class":355},[260,411,413],{"class":262,"line":412},12,[260,414,369],{"emptyLinePlaceholder":368},[260,416,418,422],{"class":262,"line":417},13,[260,419,421],{"class":420},"sBMTB","import",[260,423,424],{"class":292}," argparse\n",[260,426,428,430],{"class":262,"line":427},14,[260,429,421],{"class":420},[260,431,432],{"class":292}," base64\n",[260,434,436,438],{"class":262,"line":435},15,[260,437,421],{"class":420},[260,439,440],{"class":292}," os\n",[260,442,444,446],{"class":262,"line":443},16,[260,445,421],{"class":420},[260,447,448],{"class":292}," sys\n",[260,450,452,454],{"class":262,"line":451},17,[260,453,421],{"class":420},[260,455,456],{"class":292}," time\n",[260,458,460,463,466,468],{"class":262,"line":459},18,[260,461,462],{"class":420},"from",[260,464,465],{"class":292}," datetime ",[260,467,421],{"class":420},[260,469,470],{"class":292}," datetime\n",[260,472,474],{"class":262,"line":473},19,[260,475,369],{"emptyLinePlaceholder":368},[260,477,479,481],{"class":262,"line":478},20,[260,480,421],{"class":420},[260,482,483],{"class":292}," requests\n",[260,485,487],{"class":262,"line":486},21,[260,488,369],{"emptyLinePlaceholder":368},[260,490,492,495],{"class":262,"line":491},22,[260,493,494],{"class":420},"try",[260,496,498],{"class":497},"suWxN",":\n",[260,500,502,505,508,510],{"class":262,"line":501},23,[260,503,504],{"class":420},"    from",[260,506,507],{"class":292}," openai ",[260,509,421],{"class":420},[260,511,512],{"class":292}," OpenAI\n",[260,514,516,519,523,526],{"class":262,"line":515},24,[260,517,518],{"class":420},"except",[260,520,522],{"class":521},"skqQ-"," ImportError",[260,524,525],{"class":497},":",[260,527,528],{"class":281},"  # 允许仅做 --setup 时不安装 openai\n",[260,530,532,535,537],{"class":262,"line":531},25,[260,533,534],{"class":292},"    OpenAI ",[260,536,297],{"class":296},[260,538,540],{"class":539},"smHB8"," None\n",[260,542,544],{"class":262,"line":543},26,[260,545,369],{"emptyLinePlaceholder":368},[260,547,549],{"class":262,"line":548},27,[260,550,551],{"class":281},"# ---------------------------------------------------------------------------\n",[260,553,555],{"class":262,"line":554},28,[260,556,557],{"class":281},"# 环境配置\n",[260,559,561],{"class":262,"line":560},29,[260,562,551],{"class":281},[260,564,566],{"class":262,"line":565},30,[260,567,369],{"emptyLinePlaceholder":368},[260,569,571,574,577,581,583,587,590,592,595,597,600,603,606,608,611],{"class":262,"line":570},31,[260,572,573],{"class":292},"os",[260,575,576],{"class":497},".",[260,578,580],{"class":579},"s5qkx","environ",[260,582,576],{"class":497},[260,584,586],{"class":585},"sa-2m","setdefault",[260,588,589],{"class":497},"(",[260,591,301],{"class":300},[260,593,594],{"class":270},"MEMOS_API_KEY",[260,596,301],{"class":300},[260,598,599],{"class":497},",",[260,601,602],{"class":300}," \"",[260,604,605],{"class":270},"mpg-xxx",[260,607,301],{"class":300},[260,609,610],{"class":497},")",[260,612,613],{"class":281},"   # 替换为你的 MemOS API Key\n",[260,615,617,619,621,623,625,627,629,631,634,636,638,640,643,645,647],{"class":262,"line":616},32,[260,618,573],{"class":292},[260,620,576],{"class":497},[260,622,580],{"class":579},[260,624,576],{"class":497},[260,626,586],{"class":585},[260,628,589],{"class":497},[260,630,301],{"class":300},[260,632,633],{"class":270},"OPENAI_API_KEY",[260,635,301],{"class":300},[260,637,599],{"class":497},[260,639,602],{"class":300},[260,641,642],{"class":270},"sk-xxx",[260,644,301],{"class":300},[260,646,610],{"class":497},[260,648,649],{"class":281},"   # 替换为你的大模型 Key\n",[260,651,653],{"class":262,"line":652},33,[260,654,369],{"emptyLinePlaceholder":368},[260,656,658,662,665,668,670,672,674,677],{"class":262,"line":657},34,[260,659,661],{"class":660},"sZaqd","MEMOS_BASE_URL",[260,663,664],{"class":296}," =",[260,666,667],{"class":292}," os",[260,669,576],{"class":497},[260,671,580],{"class":579},[260,673,576],{"class":497},[260,675,676],{"class":585},"get",[260,678,679],{"class":497},"(\n",[260,681,683,686,688,690,692,694,697],{"class":262,"line":682},35,[260,684,685],{"class":300},"    \"",[260,687,661],{"class":270},[260,689,301],{"class":300},[260,691,599],{"class":497},[260,693,602],{"class":300},[260,695,696],{"class":270},"https://memos.memtensor.cn/api/openmem/v1",[260,698,307],{"class":300},[260,700,702],{"class":262,"line":701},36,[260,703,704],{"class":497},")\n",[260,706,708,711,713,715,717,719,721,723,725,727,729,731,733,735,738,740],{"class":262,"line":707},37,[260,709,710],{"class":660},"OPENAI_MODEL",[260,712,664],{"class":296},[260,714,667],{"class":292},[260,716,576],{"class":497},[260,718,580],{"class":579},[260,720,576],{"class":497},[260,722,676],{"class":585},[260,724,589],{"class":497},[260,726,301],{"class":300},[260,728,710],{"class":270},[260,730,301],{"class":300},[260,732,599],{"class":497},[260,734,602],{"class":300},[260,736,737],{"class":270},"gpt-4o",[260,739,301],{"class":300},[260,741,704],{"class":497},[260,743,745,748,750,752,754,756,758,760,762,764,766,768,770],{"class":262,"line":744},38,[260,746,747],{"class":660},"OPENAI_BASE_URL",[260,749,664],{"class":296},[260,751,667],{"class":292},[260,753,576],{"class":497},[260,755,580],{"class":579},[260,757,576],{"class":497},[260,759,676],{"class":585},[260,761,589],{"class":497},[260,763,301],{"class":300},[260,765,747],{"class":270},[260,767,301],{"class":300},[260,769,610],{"class":497},[260,771,772],{"class":281},"  # 兼容接口时填写\n",[260,774,776,779,781,783,785,787,789,791,793,795,798,800,802,805],{"class":262,"line":775},39,[260,777,778],{"class":660},"KNOWLEDGE_BASE_ID",[260,780,664],{"class":296},[260,782,667],{"class":292},[260,784,576],{"class":497},[260,786,580],{"class":579},[260,788,576],{"class":497},[260,790,676],{"class":585},[260,792,589],{"class":497},[260,794,301],{"class":300},[260,796,797],{"class":270},"MEMOS_KB_ID",[260,799,301],{"class":300},[260,801,599],{"class":497},[260,803,804],{"class":300}," \"\"",[260,806,704],{"class":497},[260,808,810],{"class":262,"line":809},40,[260,811,369],{"emptyLinePlaceholder":368},[260,813,815],{"class":262,"line":814},41,[260,816,817],{"class":281},"# 相关性阈值：低于该值的记忆不进入 prompt，防止噪音干扰客服判断\n",[260,819,821,824,826],{"class":262,"line":820},42,[260,822,823],{"class":660},"RELATIVITY_THRESHOLD",[260,825,664],{"class":296},[260,827,829],{"class":828},"sJNII"," 0.5\n",[260,831,833],{"class":262,"line":832},43,[260,834,369],{"emptyLinePlaceholder":368},[260,836,838],{"class":262,"line":837},44,[260,839,551],{"class":281},[260,841,843],{"class":262,"line":842},45,[260,844,845],{"class":281},"# 示例知识：售后政策文档（稳定内容，归入知识库）与换货 Skill（可复用流程）\n",[260,847,849],{"class":262,"line":848},46,[260,850,551],{"class":281},[260,852,854],{"class":262,"line":853},47,[260,855,369],{"emptyLinePlaceholder":368},[260,857,859,862,864,867],{"class":262,"line":858},48,[260,860,861],{"class":660},"POLICY_DOC_MD",[260,863,664],{"class":296},[260,865,866],{"class":300}," \"\"\"",[260,868,869],{"class":270},"# 消费者售后政策（示例）\n",[260,871,873],{"class":262,"line":872},49,[260,874,369],{"emptyLinePlaceholder":368},[260,876,878],{"class":262,"line":877},50,[260,879,880],{"class":270},"## 退换货\n",[260,882,884],{"class":262,"line":883},51,[260,885,886],{"class":270},"- 自签收次日起，未拆封且不影响二次销售的商品支持 7 天无理由退货。\n",[260,888,890],{"class":262,"line":889},52,[260,891,892],{"class":270},"- 商品出现性能故障，15 天内支持换货，换货双向免运费。\n",[260,894,896],{"class":262,"line":895},53,[260,897,898],{"class":270},"- 定制类商品不支持无理由退换。\n",[260,900,902],{"class":262,"line":901},54,[260,903,369],{"emptyLinePlaceholder":368},[260,905,907],{"class":262,"line":906},55,[260,908,909],{"class":270},"## 保修\n",[260,911,913],{"class":262,"line":912},56,[260,914,915],{"class":270},"- 整机保修 12 个月，随机配件保修 6 个月。\n",[260,917,919],{"class":262,"line":918},57,[260,920,921],{"class":270},"- 保修期内非人为损坏免费维修，人为损坏收取成本费。\n",[260,923,925],{"class":262,"line":924},58,[260,926,369],{"emptyLinePlaceholder":368},[260,928,930],{"class":262,"line":929},59,[260,931,932],{"class":270},"## 物流\n",[260,934,936],{"class":262,"line":935},60,[260,937,938],{"class":270},"- 默认顺丰速运，换货件发出后系统自动短信推送物流单号。\n",[260,940,942],{"class":262,"line":941},61,[260,943,944],{"class":270},"- 支持修改一次收货地址，需在换货件发出前完成。\n",[260,946,948],{"class":262,"line":947},62,[260,949,369],{"emptyLinePlaceholder":368},[260,951,953],{"class":262,"line":952},63,[260,954,955],{"class":270},"## 发票\n",[260,957,959],{"class":262,"line":958},64,[260,960,961],{"class":270},"- 默认开具电子普通发票，订单完成后可在订单页自助申请。\n",[260,963,965],{"class":262,"line":964},65,[260,966,356],{"class":300},[260,968,970],{"class":262,"line":969},66,[260,971,369],{"emptyLinePlaceholder":368},[260,973,975,978,980,982],{"class":262,"line":974},67,[260,976,977],{"class":660},"EXCHANGE_SKILL_MD",[260,979,664],{"class":296},[260,981,866],{"class":300},[260,983,984],{"class":270},"---\n",[260,986,988],{"class":262,"line":987},68,[260,989,990],{"class":270},"name: 质量问题换货处理\n",[260,992,994],{"class":262,"line":993},69,[260,995,996],{"class":270},"description: 消费者反馈商品性能故障、要求换货时的标准处理流程，覆盖核实、建单、取件与进度同步\n",[260,998,1000],{"class":262,"line":999},70,[260,1001,984],{"class":270},[260,1003,1005],{"class":262,"line":1004},71,[260,1006,369],{"emptyLinePlaceholder":368},[260,1008,1010],{"class":262,"line":1009},72,[260,1011,1012],{"class":270},"## Procedure\n",[260,1014,1016],{"class":262,"line":1015},73,[260,1017,1018],{"class":270},"1. 核对消费者身份与订单号，确认故障商品与故障现象\n",[260,1020,1022],{"class":262,"line":1021},74,[260,1023,1024],{"class":270},"2. 引导消费者做一次简单排查（如重启、重置连接），排除使用问题\n",[260,1026,1028],{"class":262,"line":1027},75,[260,1029,1030],{"class":270},"3. 确认属于质量问题后创建换货工单，记录期望收货时间与收货地址\n",[260,1032,1034],{"class":262,"line":1033},76,[260,1035,1036],{"class":270},"4. 安排上门取件或引导寄回，告知换货双向免运费\n",[260,1038,1040],{"class":262,"line":1039},77,[260,1041,1042],{"class":270},"5. 换货件发出后，按消费者偏好的渠道同步物流单号\n",[260,1044,1046],{"class":262,"line":1045},78,[260,1047,369],{"emptyLinePlaceholder":368},[260,1049,1051],{"class":262,"line":1050},79,[260,1052,1053],{"class":270},"## Experience\n",[260,1055,1057],{"class":262,"line":1056},80,[260,1058,1059],{"class":270},"- 耳机类「杂音、电流声」问题，先引导重置蓝牙配对再判定故障\n",[260,1061,1063],{"class":262,"line":1062},81,[260,1064,1065],{"class":270},"- 消费者提出明确时间要求时，在工单中标注并优先处理\n",[260,1067,1069],{"class":262,"line":1068},82,[260,1070,356],{"class":300},[260,1072,1074],{"class":262,"line":1073},83,[260,1075,369],{"emptyLinePlaceholder":368},[260,1077,1079],{"class":262,"line":1078},84,[260,1080,369],{"emptyLinePlaceholder":368},[260,1082,1084],{"class":262,"line":1083},85,[260,1085,551],{"class":281},[260,1087,1089],{"class":262,"line":1088},86,[260,1090,1091],{"class":281},"# 客服助手：记忆检索 -> 组装 prompt -> 生成回复 -> 写回记忆\n",[260,1093,1095],{"class":262,"line":1094},87,[260,1096,551],{"class":281},[260,1098,1100],{"class":262,"line":1099},88,[260,1101,369],{"emptyLinePlaceholder":368},[260,1103,1105,1108,1111],{"class":262,"line":1104},89,[260,1106,1107],{"class":288},"class",[260,1109,1110],{"class":266}," CustomerServiceAssistant",[260,1112,498],{"class":497},[260,1114,1116,1119,1123,1125,1129],{"class":262,"line":1115},90,[260,1117,1118],{"class":288},"    def",[260,1120,1122],{"class":1121},"svxCd"," __init__",[260,1124,589],{"class":497},[260,1126,1128],{"class":1127},"sZhmI","self",[260,1130,1131],{"class":497},"):\n",[260,1133,1135,1138,1141,1144,1147],{"class":262,"line":1134},91,[260,1136,1137],{"class":420},"        if",[260,1139,1140],{"class":292}," OpenAI ",[260,1142,1143],{"class":296},"is",[260,1145,1146],{"class":539}," None",[260,1148,498],{"class":497},[260,1150,1152,1155,1158,1160,1162,1165,1167],{"class":262,"line":1151},92,[260,1153,1154],{"class":420},"            raise",[260,1156,1157],{"class":521}," RuntimeError",[260,1159,589],{"class":497},[260,1161,301],{"class":300},[260,1163,1164],{"class":270},"请先安装 openai：pip install openai",[260,1166,301],{"class":300},[260,1168,704],{"class":497},[260,1170,1172,1175,1177,1180,1182,1185],{"class":262,"line":1171},93,[260,1173,1174],{"class":660},"        self",[260,1176,576],{"class":497},[260,1178,1179],{"class":579},"openai_client",[260,1181,664],{"class":296},[260,1183,1184],{"class":585}," OpenAI",[260,1186,679],{"class":497},[260,1188,1190,1194,1196,1198,1200,1202,1205,1207,1209,1211],{"class":262,"line":1189},94,[260,1191,1193],{"class":1192},"sp4zP","            api_key",[260,1195,297],{"class":296},[260,1197,573],{"class":585},[260,1199,576],{"class":497},[260,1201,580],{"class":579},[260,1203,1204],{"class":497},"[",[260,1206,301],{"class":300},[260,1208,633],{"class":270},[260,1210,301],{"class":300},[260,1212,1213],{"class":497},"],\n",[260,1215,1217,1220,1222,1224,1227,1229],{"class":262,"line":1216},95,[260,1218,1219],{"class":1192},"            base_url",[260,1221,297],{"class":296},[260,1223,747],{"class":1121},[260,1225,1226],{"class":420}," or",[260,1228,1146],{"class":539},[260,1230,1231],{"class":497},",\n",[260,1233,1235],{"class":262,"line":1234},96,[260,1236,1237],{"class":497},"        )\n",[260,1239,1241,1243,1245,1248,1250],{"class":262,"line":1240},97,[260,1242,1174],{"class":660},[260,1244,576],{"class":497},[260,1246,1247],{"class":579},"headers",[260,1249,664],{"class":296},[260,1251,1252],{"class":497}," {\n",[260,1254,1256,1259,1262,1264,1266,1268,1271,1273],{"class":262,"line":1255},98,[260,1257,1258],{"class":300},"            \"",[260,1260,1261],{"class":270},"Content-Type",[260,1263,301],{"class":300},[260,1265,525],{"class":497},[260,1267,602],{"class":300},[260,1269,1270],{"class":270},"application/json",[260,1272,301],{"class":300},[260,1274,1231],{"class":497},[260,1276,1278,1280,1283,1285,1287,1290,1293,1297,1299,1301,1303,1305,1308,1310,1312,1315,1318,1320],{"class":262,"line":1277},99,[260,1279,1258],{"class":300},[260,1281,1282],{"class":270},"Authorization",[260,1284,301],{"class":300},[260,1286,525],{"class":497},[260,1288,1289],{"class":288}," f",[260,1291,1292],{"class":270},"\"Token ",[260,1294,1296],{"class":1295},"scyET","{",[260,1298,573],{"class":292},[260,1300,576],{"class":497},[260,1302,580],{"class":579},[260,1304,1204],{"class":497},[260,1306,1307],{"class":300},"'",[260,1309,594],{"class":270},[260,1311,1307],{"class":300},[260,1313,1314],{"class":497},"]",[260,1316,1317],{"class":1295},"}",[260,1319,301],{"class":270},[260,1321,1231],{"class":497},[260,1323,1325],{"class":262,"line":1324},100,[260,1326,1327],{"class":497},"        }\n",[260,1329,1331,1333,1335,1338,1340,1343,1345,1347,1350,1353,1356],{"class":262,"line":1330},101,[260,1332,1174],{"class":660},[260,1334,576],{"class":497},[260,1336,1337],{"class":579},"knowledgebase_ids",[260,1339,664],{"class":296},[260,1341,1342],{"class":497}," [",[260,1344,778],{"class":660},[260,1346,1314],{"class":497},[260,1348,1349],{"class":420}," if",[260,1351,1352],{"class":660}," KNOWLEDGE_BASE_ID",[260,1354,1355],{"class":420}," else",[260,1357,1358],{"class":497}," []\n",[260,1360,1362],{"class":262,"line":1361},102,[260,1363,369],{"emptyLinePlaceholder":368},[260,1365,1367],{"class":262,"line":1366},103,[260,1368,1369],{"class":281},"    # ---- MemOS 读写 ----\n",[260,1371,1373],{"class":262,"line":1372},104,[260,1374,369],{"emptyLinePlaceholder":368},[260,1376,1378,1380,1384,1386,1388,1390,1394,1396,1399,1401,1404],{"class":262,"line":1377},105,[260,1379,1118],{"class":288},[260,1381,1383],{"class":1382},"sbcIq"," search_memory",[260,1385,589],{"class":497},[260,1387,1128],{"class":1127},[260,1389,599],{"class":497},[260,1391,1393],{"class":1392},"sM07a"," query",[260,1395,599],{"class":497},[260,1397,1398],{"class":1392}," user_id",[260,1400,599],{"class":497},[260,1402,1403],{"class":1392}," conversation_id",[260,1405,1131],{"class":497},[260,1407,1409,1412,1415],{"class":262,"line":1408},106,[260,1410,1411],{"class":355},"        \"\"\"",[260,1413,1414],{"class":361},"检索个人记忆、偏好、知识库与 Skill，按相关性阈值过滤",[260,1416,356],{"class":355},[260,1418,1420,1423,1425],{"class":262,"line":1419},107,[260,1421,1422],{"class":292},"        data ",[260,1424,297],{"class":296},[260,1426,1252],{"class":497},[260,1428,1430,1432,1435,1437,1439,1441],{"class":262,"line":1429},108,[260,1431,1258],{"class":300},[260,1433,1434],{"class":270},"query",[260,1436,301],{"class":300},[260,1438,525],{"class":497},[260,1440,1393],{"class":292},[260,1442,1231],{"class":497},[260,1444,1446,1448,1451,1453,1455,1457],{"class":262,"line":1445},109,[260,1447,1258],{"class":300},[260,1449,1450],{"class":270},"user_id",[260,1452,301],{"class":300},[260,1454,525],{"class":497},[260,1456,1398],{"class":292},[260,1458,1231],{"class":497},[260,1460,1462,1464,1467,1469,1471,1473],{"class":262,"line":1461},110,[260,1463,1258],{"class":300},[260,1465,1466],{"class":270},"conversation_id",[260,1468,301],{"class":300},[260,1470,525],{"class":497},[260,1472,1403],{"class":292},[260,1474,1231],{"class":497},[260,1476,1478,1480,1482,1484,1486,1489,1491,1493],{"class":262,"line":1477},111,[260,1479,1258],{"class":300},[260,1481,1337],{"class":270},[260,1483,301],{"class":300},[260,1485,525],{"class":497},[260,1487,1488],{"class":660}," self",[260,1490,576],{"class":497},[260,1492,1337],{"class":579},[260,1494,1231],{"class":497},[260,1496,1498,1500,1503,1505,1507,1510],{"class":262,"line":1497},112,[260,1499,1258],{"class":300},[260,1501,1502],{"class":270},"include_skill",[260,1504,301],{"class":300},[260,1506,525],{"class":497},[260,1508,1509],{"class":539}," True",[260,1511,1231],{"class":497},[260,1513,1515,1517,1520,1522,1524,1527],{"class":262,"line":1514},113,[260,1516,1258],{"class":300},[260,1518,1519],{"class":270},"memory_limit_number",[260,1521,301],{"class":300},[260,1523,525],{"class":497},[260,1525,1526],{"class":828}," 9",[260,1528,1231],{"class":497},[260,1530,1532],{"class":262,"line":1531},114,[260,1533,1327],{"class":497},[260,1535,1537,1540,1542,1545,1547,1550],{"class":262,"line":1536},115,[260,1538,1539],{"class":292},"        res ",[260,1541,297],{"class":296},[260,1543,1544],{"class":292}," requests",[260,1546,576],{"class":497},[260,1548,1549],{"class":585},"post",[260,1551,679],{"class":497},[260,1553,1555,1558,1560,1562,1564,1566,1569,1571,1574,1576,1578,1580,1582,1584,1587,1589],{"class":262,"line":1554},116,[260,1556,1557],{"class":288},"            f",[260,1559,301],{"class":270},[260,1561,1296],{"class":1295},[260,1563,661],{"class":1121},[260,1565,1317],{"class":1295},[260,1567,1568],{"class":270},"/search/memory\"",[260,1570,599],{"class":497},[260,1572,1573],{"class":1192}," headers",[260,1575,297],{"class":296},[260,1577,1128],{"class":660},[260,1579,576],{"class":497},[260,1581,1247],{"class":579},[260,1583,599],{"class":497},[260,1585,1586],{"class":1192}," json",[260,1588,297],{"class":296},[260,1590,1591],{"class":585},"data\n",[260,1593,1595],{"class":262,"line":1594},117,[260,1596,1237],{"class":497},[260,1598,1600,1603,1605,1608,1610,1613],{"class":262,"line":1599},118,[260,1601,1602],{"class":292},"        body ",[260,1604,297],{"class":296},[260,1606,1607],{"class":292}," res",[260,1609,576],{"class":497},[260,1611,1612],{"class":585},"json",[260,1614,1615],{"class":497},"()\n",[260,1617,1619,1621,1624,1626,1628,1630,1632,1634,1636,1638,1641,1644],{"class":262,"line":1618},119,[260,1620,1137],{"class":420},[260,1622,1623],{"class":292}," body",[260,1625,576],{"class":497},[260,1627,676],{"class":585},[260,1629,589],{"class":497},[260,1631,301],{"class":300},[260,1633,165],{"class":270},[260,1635,301],{"class":300},[260,1637,610],{"class":497},[260,1639,1640],{"class":296}," !=",[260,1642,1643],{"class":828}," 0",[260,1645,498],{"class":497},[260,1647,1649,1652,1654,1657,1660,1662,1665,1667,1669,1671,1673,1676,1678,1680,1682,1685],{"class":262,"line":1648},120,[260,1650,1651],{"class":1121},"            print",[260,1653,589],{"class":497},[260,1655,1656],{"class":288},"f",[260,1658,1659],{"class":270},"\"  [MemOS] 检索记忆失败：",[260,1661,1296],{"class":1295},[260,1663,1664],{"class":585},"body",[260,1666,576],{"class":497},[260,1668,676],{"class":585},[260,1670,589],{"class":497},[260,1672,1307],{"class":300},[260,1674,1675],{"class":270},"message",[260,1677,1307],{"class":300},[260,1679,610],{"class":497},[260,1681,1317],{"class":1295},[260,1683,1684],{"class":270},"，本轮按无记忆处理\"",[260,1686,704],{"class":497},[260,1688,1690,1693,1696,1698],{"class":262,"line":1689},121,[260,1691,1692],{"class":420},"            return",[260,1694,1695],{"class":497}," [],",[260,1697,1695],{"class":497},[260,1699,1358],{"class":497},[260,1701,1703],{"class":262,"line":1702},122,[260,1704,369],{"emptyLinePlaceholder":368},[260,1706,1708,1711,1713,1715,1717,1719,1721,1723,1726,1728,1730],{"class":262,"line":1707},123,[260,1709,1710],{"class":292},"        result ",[260,1712,297],{"class":296},[260,1714,1623],{"class":292},[260,1716,576],{"class":497},[260,1718,676],{"class":585},[260,1720,589],{"class":497},[260,1722,301],{"class":300},[260,1724,1725],{"class":270},"data",[260,1727,301],{"class":300},[260,1729,599],{"class":497},[260,1731,1732],{"class":497}," {})\n",[260,1734,1736,1739,1741],{"class":262,"line":1735},124,[260,1737,1738],{"class":292},"        memories ",[260,1740,297],{"class":296},[260,1742,1743],{"class":497}," [\n",[260,1745,1747,1750,1753,1756,1759,1762,1764,1766,1768,1770,1773,1775,1777],{"class":262,"line":1746},125,[260,1748,1749],{"class":292},"            m ",[260,1751,1752],{"class":420},"for",[260,1754,1755],{"class":292}," m ",[260,1757,1758],{"class":420},"in",[260,1760,1761],{"class":292}," result",[260,1763,576],{"class":497},[260,1765,676],{"class":585},[260,1767,589],{"class":497},[260,1769,301],{"class":300},[260,1771,1772],{"class":270},"memory_detail_list",[260,1774,301],{"class":300},[260,1776,599],{"class":497},[260,1778,1779],{"class":497}," [])\n",[260,1781,1783,1786,1789,1791,1793,1795,1797,1800,1802,1804,1806,1808,1811],{"class":262,"line":1782},126,[260,1784,1785],{"class":420},"            if",[260,1787,1788],{"class":292}," m",[260,1790,576],{"class":497},[260,1792,676],{"class":585},[260,1794,589],{"class":497},[260,1796,301],{"class":300},[260,1798,1799],{"class":270},"relativity",[260,1801,301],{"class":300},[260,1803,599],{"class":497},[260,1805,1643],{"class":828},[260,1807,610],{"class":497},[260,1809,1810],{"class":296}," >=",[260,1812,1813],{"class":660}," RELATIVITY_THRESHOLD\n",[260,1815,1817],{"class":262,"line":1816},127,[260,1818,1819],{"class":497},"        ]\n",[260,1821,1823,1826,1828,1830,1832,1834,1836,1838,1841,1843,1845],{"class":262,"line":1822},128,[260,1824,1825],{"class":292},"        preferences ",[260,1827,297],{"class":296},[260,1829,1761],{"class":292},[260,1831,576],{"class":497},[260,1833,676],{"class":585},[260,1835,589],{"class":497},[260,1837,301],{"class":300},[260,1839,1840],{"class":270},"preference_detail_list",[260,1842,301],{"class":300},[260,1844,599],{"class":497},[260,1846,1779],{"class":497},[260,1848,1850,1853,1855,1857,1859,1861,1863,1865,1868,1870,1872],{"class":262,"line":1849},129,[260,1851,1852],{"class":292},"        skills ",[260,1854,297],{"class":296},[260,1856,1761],{"class":292},[260,1858,576],{"class":497},[260,1860,676],{"class":585},[260,1862,589],{"class":497},[260,1864,301],{"class":300},[260,1866,1867],{"class":270},"skill_detail_list",[260,1869,301],{"class":300},[260,1871,599],{"class":497},[260,1873,1779],{"class":497},[260,1875,1877,1880,1883,1885,1888,1890],{"class":262,"line":1876},130,[260,1878,1879],{"class":420},"        return",[260,1881,1882],{"class":292}," memories",[260,1884,599],{"class":497},[260,1886,1887],{"class":292}," preferences",[260,1889,599],{"class":497},[260,1891,1892],{"class":292}," skills\n",[260,1894,1896],{"class":262,"line":1895},131,[260,1897,369],{"emptyLinePlaceholder":368},[260,1899,1901,1903,1906,1908,1910,1912,1915,1917,1919,1921,1923,1925,1928],{"class":262,"line":1900},132,[260,1902,1118],{"class":288},[260,1904,1905],{"class":1382}," add_message",[260,1907,589],{"class":497},[260,1909,1128],{"class":1127},[260,1911,599],{"class":497},[260,1913,1914],{"class":1392}," messages",[260,1916,599],{"class":497},[260,1918,1398],{"class":1392},[260,1920,599],{"class":497},[260,1922,1403],{"class":1392},[260,1924,599],{"class":497},[260,1926,1927],{"class":1392}," channel",[260,1929,1131],{"class":497},[260,1931,1933,1935,1938],{"class":262,"line":1932},133,[260,1934,1411],{"class":355},[260,1936,1937],{"class":361},"写回一轮对话。渠道记入 tags 与 info，便于审计与按渠道分析",[260,1939,356],{"class":355},[260,1941,1943,1945,1947],{"class":262,"line":1942},134,[260,1944,1422],{"class":292},[260,1946,297],{"class":296},[260,1948,1252],{"class":497},[260,1950,1952,1954,1956,1958,1960,1962],{"class":262,"line":1951},135,[260,1953,1258],{"class":300},[260,1955,1450],{"class":270},[260,1957,301],{"class":300},[260,1959,525],{"class":497},[260,1961,1398],{"class":292},[260,1963,1231],{"class":497},[260,1965,1967,1969,1971,1973,1975,1977],{"class":262,"line":1966},136,[260,1968,1258],{"class":300},[260,1970,1466],{"class":270},[260,1972,301],{"class":300},[260,1974,525],{"class":497},[260,1976,1403],{"class":292},[260,1978,1231],{"class":497},[260,1980,1982,1984,1987,1989,1991,1993,1996],{"class":262,"line":1981},137,[260,1983,1258],{"class":300},[260,1985,1986],{"class":270},"tags",[260,1988,301],{"class":300},[260,1990,525],{"class":497},[260,1992,1342],{"class":497},[260,1994,1995],{"class":292},"channel",[260,1997,1213],{"class":497},[260,1999,2001,2003,2006,2008,2010,2013,2015,2017,2019,2021,2023,2025,2027,2030,2032,2034,2036,2039,2041],{"class":262,"line":2000},138,[260,2002,1258],{"class":300},[260,2004,2005],{"class":270},"info",[260,2007,301],{"class":300},[260,2009,525],{"class":497},[260,2011,2012],{"class":497}," {",[260,2014,301],{"class":300},[260,2016,1995],{"class":270},[260,2018,301],{"class":300},[260,2020,525],{"class":497},[260,2022,1927],{"class":292},[260,2024,599],{"class":497},[260,2026,602],{"class":300},[260,2028,2029],{"class":270},"scene",[260,2031,301],{"class":300},[260,2033,525],{"class":497},[260,2035,602],{"class":300},[260,2037,2038],{"class":270},"consumer_support",[260,2040,301],{"class":300},[260,2042,2043],{"class":497},"},\n",[260,2045,2047,2049,2052,2054,2056,2058],{"class":262,"line":2046},139,[260,2048,1258],{"class":300},[260,2050,2051],{"class":270},"messages",[260,2053,301],{"class":300},[260,2055,525],{"class":497},[260,2057,1914],{"class":292},[260,2059,1231],{"class":497},[260,2061,2063],{"class":262,"line":2062},140,[260,2064,1327],{"class":497},[260,2066,2068,2070,2072,2074,2076,2078],{"class":262,"line":2067},141,[260,2069,1539],{"class":292},[260,2071,297],{"class":296},[260,2073,1544],{"class":292},[260,2075,576],{"class":497},[260,2077,1549],{"class":585},[260,2079,679],{"class":497},[260,2081,2083,2085,2087,2089,2091,2093,2096,2098,2100,2102,2104,2106,2108,2110,2112,2114],{"class":262,"line":2082},142,[260,2084,1557],{"class":288},[260,2086,301],{"class":270},[260,2088,1296],{"class":1295},[260,2090,661],{"class":1121},[260,2092,1317],{"class":1295},[260,2094,2095],{"class":270},"/add/message\"",[260,2097,599],{"class":497},[260,2099,1573],{"class":1192},[260,2101,297],{"class":296},[260,2103,1128],{"class":660},[260,2105,576],{"class":497},[260,2107,1247],{"class":579},[260,2109,599],{"class":497},[260,2111,1586],{"class":1192},[260,2113,297],{"class":296},[260,2115,1591],{"class":585},[260,2117,2119],{"class":262,"line":2118},143,[260,2120,1237],{"class":497},[260,2122,2124,2126,2128,2130,2132,2135,2137,2139,2141,2143,2145,2147,2149,2151],{"class":262,"line":2123},144,[260,2125,1137],{"class":420},[260,2127,1607],{"class":292},[260,2129,576],{"class":497},[260,2131,1612],{"class":585},[260,2133,2134],{"class":497},"().",[260,2136,676],{"class":585},[260,2138,589],{"class":497},[260,2140,301],{"class":300},[260,2142,165],{"class":270},[260,2144,301],{"class":300},[260,2146,610],{"class":497},[260,2148,1640],{"class":296},[260,2150,1643],{"class":828},[260,2152,498],{"class":497},[260,2154,2156],{"class":262,"line":2155},145,[260,2157,2158],{"class":281},"            # 写回失败不阻塞本轮回复\n",[260,2160,2162,2164,2166,2168,2171,2173,2176,2178,2180,2182,2184,2186,2188,2190,2192,2194,2196,2198],{"class":262,"line":2161},146,[260,2163,1651],{"class":1121},[260,2165,589],{"class":497},[260,2167,1656],{"class":288},[260,2169,2170],{"class":270},"\"  [MemOS] 写入记忆失败：",[260,2172,1296],{"class":1295},[260,2174,2175],{"class":585},"res",[260,2177,576],{"class":497},[260,2179,1612],{"class":585},[260,2181,2134],{"class":497},[260,2183,676],{"class":585},[260,2185,589],{"class":497},[260,2187,1307],{"class":300},[260,2189,1675],{"class":270},[260,2191,1307],{"class":300},[260,2193,610],{"class":497},[260,2195,1317],{"class":1295},[260,2197,301],{"class":270},[260,2199,704],{"class":497},[260,2201,2203],{"class":262,"line":2202},147,[260,2204,369],{"emptyLinePlaceholder":368},[260,2206,2208,2210,2213,2215,2217,2219,2221,2223,2225],{"class":262,"line":2207},148,[260,2209,1118],{"class":288},[260,2211,2212],{"class":1382}," get_message",[260,2214,589],{"class":497},[260,2216,1128],{"class":1127},[260,2218,599],{"class":497},[260,2220,1398],{"class":1392},[260,2222,599],{"class":497},[260,2224,1403],{"class":1392},[260,2226,1131],{"class":497},[260,2228,2230,2232,2235],{"class":262,"line":2229},149,[260,2231,1411],{"class":355},[260,2233,2234],{"class":361},"获取当前会话的近期消息",[260,2236,356],{"class":355},[260,2238,2240,2242,2244],{"class":262,"line":2239},150,[260,2241,1422],{"class":292},[260,2243,297],{"class":296},[260,2245,1252],{"class":497},[260,2247,2249,2251,2253,2255,2257,2259],{"class":262,"line":2248},151,[260,2250,1258],{"class":300},[260,2252,1450],{"class":270},[260,2254,301],{"class":300},[260,2256,525],{"class":497},[260,2258,1398],{"class":292},[260,2260,1231],{"class":497},[260,2262,2264,2266,2268,2270,2272,2274],{"class":262,"line":2263},152,[260,2265,1258],{"class":300},[260,2267,1466],{"class":270},[260,2269,301],{"class":300},[260,2271,525],{"class":497},[260,2273,1403],{"class":292},[260,2275,1231],{"class":497},[260,2277,2279,2281,2284,2286,2288,2291],{"class":262,"line":2278},153,[260,2280,1258],{"class":300},[260,2282,2283],{"class":270},"message_limit_number",[260,2285,301],{"class":300},[260,2287,525],{"class":497},[260,2289,2290],{"class":828}," 10",[260,2292,1231],{"class":497},[260,2294,2296],{"class":262,"line":2295},154,[260,2297,1327],{"class":497},[260,2299,2301,2303,2305,2307,2309,2311],{"class":262,"line":2300},155,[260,2302,1539],{"class":292},[260,2304,297],{"class":296},[260,2306,1544],{"class":292},[260,2308,576],{"class":497},[260,2310,1549],{"class":585},[260,2312,679],{"class":497},[260,2314,2316,2318,2320,2322,2324,2326,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347],{"class":262,"line":2315},156,[260,2317,1557],{"class":288},[260,2319,301],{"class":270},[260,2321,1296],{"class":1295},[260,2323,661],{"class":1121},[260,2325,1317],{"class":1295},[260,2327,2328],{"class":270},"/get/message\"",[260,2330,599],{"class":497},[260,2332,1573],{"class":1192},[260,2334,297],{"class":296},[260,2336,1128],{"class":660},[260,2338,576],{"class":497},[260,2340,1247],{"class":579},[260,2342,599],{"class":497},[260,2344,1586],{"class":1192},[260,2346,297],{"class":296},[260,2348,1591],{"class":585},[260,2350,2352],{"class":262,"line":2351},157,[260,2353,1237],{"class":497},[260,2355,2357,2359,2361,2363,2365,2367,2369,2371,2373,2375,2377,2379,2382,2384],{"class":262,"line":2356},158,[260,2358,1137],{"class":420},[260,2360,1607],{"class":292},[260,2362,576],{"class":497},[260,2364,1612],{"class":585},[260,2366,2134],{"class":497},[260,2368,676],{"class":585},[260,2370,589],{"class":497},[260,2372,301],{"class":300},[260,2374,165],{"class":270},[260,2376,301],{"class":300},[260,2378,610],{"class":497},[260,2380,2381],{"class":296}," ==",[260,2383,1643],{"class":828},[260,2385,498],{"class":497},[260,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2407,2409,2411,2414,2416,2418,2420,2423,2425,2427],{"class":262,"line":2388},159,[260,2390,1692],{"class":420},[260,2392,1607],{"class":292},[260,2394,576],{"class":497},[260,2396,1612],{"class":585},[260,2398,2134],{"class":497},[260,2400,676],{"class":585},[260,2402,589],{"class":497},[260,2404,301],{"class":300},[260,2406,1725],{"class":270},[260,2408,301],{"class":300},[260,2410,599],{"class":497},[260,2412,2413],{"class":497}," {}).",[260,2415,676],{"class":585},[260,2417,589],{"class":497},[260,2419,301],{"class":300},[260,2421,2422],{"class":270},"message_detail_list",[260,2424,301],{"class":300},[260,2426,599],{"class":497},[260,2428,1779],{"class":497},[260,2430,2432,2434],{"class":262,"line":2431},160,[260,2433,1879],{"class":420},[260,2435,1358],{"class":497},[260,2437,2439],{"class":262,"line":2438},161,[260,2440,369],{"emptyLinePlaceholder":368},[260,2442,2444],{"class":262,"line":2443},162,[260,2445,2446],{"class":281},"    # ---- prompt 与生成 ----\n",[260,2448,2450],{"class":262,"line":2449},163,[260,2451,369],{"emptyLinePlaceholder":368},[260,2453,2455,2457,2460,2462,2464,2466,2468,2470,2472,2474,2476,2478,2481],{"class":262,"line":2454},164,[260,2456,1118],{"class":288},[260,2458,2459],{"class":1382}," build_system_prompt",[260,2461,589],{"class":497},[260,2463,1128],{"class":1127},[260,2465,599],{"class":497},[260,2467,1927],{"class":1392},[260,2469,599],{"class":497},[260,2471,1882],{"class":1392},[260,2473,599],{"class":497},[260,2475,1887],{"class":1392},[260,2477,599],{"class":497},[260,2479,2480],{"class":1392}," skills",[260,2482,1131],{"class":497},[260,2484,2486,2489,2491,2493,2495,2498,2500,2502,2504,2507,2509,2511,2513,2516,2518,2520,2522,2525,2527,2530,2532,2534,2536,2538,2540],{"class":262,"line":2485},165,[260,2487,2488],{"class":292},"        channel_name ",[260,2490,297],{"class":296},[260,2492,2012],{"class":497},[260,2494,301],{"class":300},[260,2496,2497],{"class":270},"webchat",[260,2499,301],{"class":300},[260,2501,525],{"class":497},[260,2503,602],{"class":300},[260,2505,2506],{"class":270},"在线客服",[260,2508,301],{"class":300},[260,2510,599],{"class":497},[260,2512,602],{"class":300},[260,2514,2515],{"class":270},"email",[260,2517,301],{"class":300},[260,2519,525],{"class":497},[260,2521,602],{"class":300},[260,2523,2524],{"class":270},"邮件工单",[260,2526,301],{"class":300},[260,2528,2529],{"class":497},"}.",[260,2531,676],{"class":585},[260,2533,589],{"class":497},[260,2535,1995],{"class":585},[260,2537,599],{"class":497},[260,2539,1927],{"class":585},[260,2541,704],{"class":497},[260,2543,2545],{"class":262,"line":2544},166,[260,2546,369],{"emptyLinePlaceholder":368},[260,2548,2550,2553,2555,2557,2561,2563,2565,2568],{"class":262,"line":2549},167,[260,2551,2552],{"class":292},"        memory_text ",[260,2554,297],{"class":296},[260,2556,602],{"class":300},[260,2558,2560],{"class":2559},"seOsA","\\n",[260,2562,301],{"class":300},[260,2564,576],{"class":497},[260,2566,2567],{"class":585},"join",[260,2569,679],{"class":497},[260,2571,2573,2575,2577,2579,2582,2584,2587,2589,2592,2594,2596,2598,2600,2603,2605,2607,2609,2611,2614,2617,2619,2621,2623,2626,2628,2631,2633,2636],{"class":262,"line":2572},168,[260,2574,1557],{"class":288},[260,2576,301],{"class":270},[260,2578,1296],{"class":1295},[260,2580,2581],{"class":585},"i",[260,2583,1317],{"class":1295},[260,2585,2586],{"class":270},". ",[260,2588,1296],{"class":1295},[260,2590,2591],{"class":585},"m",[260,2593,576],{"class":497},[260,2595,676],{"class":585},[260,2597,589],{"class":497},[260,2599,1307],{"class":300},[260,2601,2602],{"class":270},"memory_value",[260,2604,1307],{"class":300},[260,2606,610],{"class":497},[260,2608,1317],{"class":1295},[260,2610,301],{"class":270},[260,2612,2613],{"class":420}," for",[260,2615,2616],{"class":585}," i",[260,2618,599],{"class":497},[260,2620,1755],{"class":585},[260,2622,1758],{"class":420},[260,2624,2625],{"class":1121}," enumerate",[260,2627,589],{"class":497},[260,2629,2630],{"class":585},"memories",[260,2632,599],{"class":497},[260,2634,2635],{"class":828}," 1",[260,2637,704],{"class":497},[260,2639,2641,2644,2646,2648,2651],{"class":262,"line":2640},169,[260,2642,2643],{"class":497},"        )",[260,2645,1226],{"class":296},[260,2647,602],{"class":300},[260,2649,2650],{"class":270},"（暂无相关记忆）",[260,2652,307],{"class":300},[260,2654,2656,2659,2661,2663,2665,2667,2669,2671],{"class":262,"line":2655},170,[260,2657,2658],{"class":292},"        preference_text ",[260,2660,297],{"class":296},[260,2662,602],{"class":300},[260,2664,2560],{"class":2559},[260,2666,301],{"class":300},[260,2668,576],{"class":497},[260,2670,2567],{"class":585},[260,2672,679],{"class":497},[260,2674,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698,2700,2703,2705,2707,2709,2711,2713,2715,2717,2720,2722,2724,2726,2729,2731,2733],{"class":262,"line":2675},171,[260,2677,1557],{"class":288},[260,2679,301],{"class":270},[260,2681,1296],{"class":1295},[260,2683,2581],{"class":585},[260,2685,1317],{"class":1295},[260,2687,2586],{"class":270},[260,2689,1296],{"class":1295},[260,2691,16],{"class":585},[260,2693,576],{"class":497},[260,2695,676],{"class":585},[260,2697,589],{"class":497},[260,2699,1307],{"class":300},[260,2701,2702],{"class":270},"preference",[260,2704,1307],{"class":300},[260,2706,610],{"class":497},[260,2708,1317],{"class":1295},[260,2710,301],{"class":270},[260,2712,2613],{"class":420},[260,2714,2616],{"class":585},[260,2716,599],{"class":497},[260,2718,2719],{"class":585}," p ",[260,2721,1758],{"class":420},[260,2723,2625],{"class":1121},[260,2725,589],{"class":497},[260,2727,2728],{"class":585},"preferences",[260,2730,599],{"class":497},[260,2732,2635],{"class":828},[260,2734,704],{"class":497},[260,2736,2738,2740,2742,2744,2747],{"class":262,"line":2737},172,[260,2739,2643],{"class":497},[260,2741,1226],{"class":296},[260,2743,602],{"class":300},[260,2745,2746],{"class":270},"（暂无偏好记录）",[260,2748,307],{"class":300},[260,2750,2752],{"class":262,"line":2751},173,[260,2753,2754],{"class":281},"        # 仅注入有结构化内容的 Skill；匹配成功但内容未下发的 Skill 不进入 prompt\n",[260,2756,2758,2761,2763],{"class":262,"line":2757},174,[260,2759,2760],{"class":292},"        valid_skills ",[260,2762,297],{"class":296},[260,2764,1743],{"class":497},[260,2766,2768,2771,2773,2776,2778],{"class":262,"line":2767},175,[260,2769,2770],{"class":292},"            s ",[260,2772,1752],{"class":420},[260,2774,2775],{"class":292}," s ",[260,2777,1758],{"class":420},[260,2779,1892],{"class":292},[260,2781,2783,2785,2788,2790,2793,2795,2797,2799,2801,2804,2806,2809,2812,2814,2817,2820,2822,2824,2826,2828,2831,2833,2835,2837,2840,2842],{"class":262,"line":2782},176,[260,2784,1785],{"class":420},[260,2786,2787],{"class":1121}," isinstance",[260,2789,589],{"class":497},[260,2791,2792],{"class":585},"s",[260,2794,576],{"class":497},[260,2796,676],{"class":585},[260,2798,589],{"class":497},[260,2800,301],{"class":300},[260,2802,2803],{"class":270},"skill_value",[260,2805,301],{"class":300},[260,2807,2808],{"class":497},"),",[260,2810,2811],{"class":521}," dict",[260,2813,610],{"class":497},[260,2815,2816],{"class":296}," and",[260,2818,2819],{"class":292}," s",[260,2821,1204],{"class":497},[260,2823,301],{"class":300},[260,2825,2803],{"class":270},[260,2827,301],{"class":300},[260,2829,2830],{"class":497},"].",[260,2832,676],{"class":585},[260,2834,589],{"class":497},[260,2836,301],{"class":300},[260,2838,2839],{"class":270},"name",[260,2841,301],{"class":300},[260,2843,704],{"class":497},[260,2845,2847],{"class":262,"line":2846},177,[260,2848,1819],{"class":497},[260,2850,2852,2855,2857,2859,2861,2863,2865,2867],{"class":262,"line":2851},178,[260,2853,2854],{"class":292},"        skill_text ",[260,2856,297],{"class":296},[260,2858,602],{"class":300},[260,2860,2560],{"class":2559},[260,2862,301],{"class":300},[260,2864,576],{"class":497},[260,2866,2567],{"class":585},[260,2868,679],{"class":497},[260,2870,2872,2874,2876,2878,2880,2882,2884,2886,2888,2890,2892,2894,2896,2898,2900,2902,2904,2906,2908,2910,2912,2914,2916,2919,2921,2923],{"class":262,"line":2871},179,[260,2873,1557],{"class":288},[260,2875,301],{"class":270},[260,2877,1296],{"class":1295},[260,2879,2581],{"class":585},[260,2881,1317],{"class":1295},[260,2883,2586],{"class":270},[260,2885,1296],{"class":1295},[260,2887,2792],{"class":585},[260,2889,1204],{"class":497},[260,2891,1307],{"class":300},[260,2893,2803],{"class":270},[260,2895,1307],{"class":300},[260,2897,1314],{"class":497},[260,2899,1317],{"class":1295},[260,2901,301],{"class":270},[260,2903,2613],{"class":420},[260,2905,2616],{"class":585},[260,2907,599],{"class":497},[260,2909,2775],{"class":585},[260,2911,1758],{"class":420},[260,2913,2625],{"class":1121},[260,2915,589],{"class":497},[260,2917,2918],{"class":585},"valid_skills",[260,2920,599],{"class":497},[260,2922,2635],{"class":828},[260,2924,704],{"class":497},[260,2926,2928,2930,2932,2934,2937],{"class":262,"line":2927},180,[260,2929,2643],{"class":497},[260,2931,1226],{"class":296},[260,2933,602],{"class":300},[260,2935,2936],{"class":270},"（暂无匹配 Skill）",[260,2938,307],{"class":300},[260,2940,2942],{"class":262,"line":2941},181,[260,2943,369],{"emptyLinePlaceholder":368},[260,2945,2947,2949,2951],{"class":262,"line":2946},182,[260,2948,1879],{"class":420},[260,2950,1289],{"class":288},[260,2952,2953],{"class":270},"\"\"\"# Role\n",[260,2955,2957,2960,2962,2965,2967],{"class":262,"line":2956},183,[260,2958,2959],{"class":270},"你是品牌官方客服助手，正在通过「",[260,2961,1296],{"class":1295},[260,2963,2964],{"class":292},"channel_name",[260,2966,1317],{"class":1295},[260,2968,2969],{"class":270},"」渠道服务消费者。\n",[260,2971,2973],{"class":262,"line":2972},184,[260,2974,2975],{"class":270},"你的目标是结合检索到的记忆、偏好、售后政策与处理 Skill，给出准确、个性化、可执行的回答。\n",[260,2977,2979],{"class":262,"line":2978},185,[260,2980,369],{"emptyLinePlaceholder":368},[260,2982,2984],{"class":262,"line":2983},186,[260,2985,2986],{"class":270},"# 当前时间\n",[260,2988,2990,2992,2995,2997,3000,3002,3005,3007,3009,3012,3015,3018,3020,3022],{"class":262,"line":2989},187,[260,2991,1296],{"class":1295},[260,2993,2994],{"class":292},"datetime",[260,2996,576],{"class":497},[260,2998,2999],{"class":585},"now",[260,3001,2134],{"class":497},[260,3003,3004],{"class":585},"strftime",[260,3006,589],{"class":497},[260,3008,1307],{"class":300},[260,3010,3011],{"class":270},"%Y-%m-",[260,3013,3014],{"class":1295},"%d",[260,3016,3017],{"class":270}," %H:%M:%S",[260,3019,1307],{"class":300},[260,3021,610],{"class":497},[260,3023,3024],{"class":1295},"}\n",[260,3026,3028],{"class":262,"line":3027},188,[260,3029,369],{"emptyLinePlaceholder":368},[260,3031,3033],{"class":262,"line":3032},189,[260,3034,3035],{"class":270},"# 检索到的信息\n",[260,3037,3039],{"class":262,"line":3038},190,[260,3040,3041],{"class":270},"\u003Cmemories>\n",[260,3043,3045,3047,3050],{"class":262,"line":3044},191,[260,3046,1296],{"class":1295},[260,3048,3049],{"class":292},"memory_text",[260,3051,3024],{"class":1295},[260,3053,3055],{"class":262,"line":3054},192,[260,3056,3057],{"class":270},"\u003C/memories>\n",[260,3059,3061],{"class":262,"line":3060},193,[260,3062,369],{"emptyLinePlaceholder":368},[260,3064,3066],{"class":262,"line":3065},194,[260,3067,3068],{"class":270},"\u003Cpreferences>\n",[260,3070,3072,3074,3077],{"class":262,"line":3071},195,[260,3073,1296],{"class":1295},[260,3075,3076],{"class":292},"preference_text",[260,3078,3024],{"class":1295},[260,3080,3082],{"class":262,"line":3081},196,[260,3083,3084],{"class":270},"\u003C/preferences>\n",[260,3086,3088],{"class":262,"line":3087},197,[260,3089,369],{"emptyLinePlaceholder":368},[260,3091,3093],{"class":262,"line":3092},198,[260,3094,3095],{"class":270},"\u003Cskills>\n",[260,3097,3099,3101,3104],{"class":262,"line":3098},199,[260,3100,1296],{"class":1295},[260,3102,3103],{"class":292},"skill_text",[260,3105,3024],{"class":1295},[260,3107,3109],{"class":262,"line":3108},200,[260,3110,3111],{"class":270},"\u003C/skills>\n",[260,3113,3115],{"class":262,"line":3114},201,[260,3116,369],{"emptyLinePlaceholder":368},[260,3118,3120],{"class":262,"line":3119},202,[260,3121,3122],{"class":270},"# 记忆使用规则\n",[260,3124,3126],{"class":262,"line":3125},203,[260,3127,3128],{"class":270},"1. 区分「消费者原话」与「系统推测」，推测类信息仅作参考，权重低于消费者的直接陈述。\n",[260,3130,3132],{"class":262,"line":3131},204,[260,3133,3134],{"class":270},"2. 确认记忆描述的主体是当前消费者，而非其他用户或历史案例，禁止张冠李戴。\n",[260,3136,3138],{"class":262,"line":3137},205,[260,3139,3140],{"class":270},"3. 只使用与当前问题直接相关的记忆，关键词偶合但语境不同的记忆必须忽略。\n",[260,3142,3144],{"class":262,"line":3143},206,[260,3145,3146],{"class":270},"4. 记忆与消费者当前输入冲突时，以当前输入为准。\n",[260,3148,3150],{"class":262,"line":3149},207,[260,3151,3152],{"class":270},"5. 涉及政策、时效、金额的内容，以知识库内容为准。\n",[260,3154,3156],{"class":262,"line":3155},208,[260,3157,369],{"emptyLinePlaceholder":368},[260,3159,3161],{"class":262,"line":3160},209,[260,3162,3163],{"class":270},"# 输出要求\n",[260,3165,3167],{"class":262,"line":3166},210,[260,3168,3169],{"class":270},"1. 直接回答问题，不向消费者提及「记忆」「检索」「知识库」等内部实现。\n",[260,3171,3173],{"class":262,"line":3172},211,[260,3174,3175],{"class":270},"2. 存在未完成事项时主动衔接进度，不要让消费者重复描述已反馈过的信息。\n",[260,3177,3179],{"class":262,"line":3178},212,[260,3180,3181],{"class":270},"3. 回答语言与消费者的输入语言一致。\"\"\"\n",[260,3183,3185],{"class":262,"line":3184},213,[260,3186,369],{"emptyLinePlaceholder":368},[260,3188,3190,3192,3195,3197,3199,3201,3204,3206,3209,3211,3213],{"class":262,"line":3189},214,[260,3191,1118],{"class":288},[260,3193,3194],{"class":1382}," generate_reply",[260,3196,589],{"class":497},[260,3198,1128],{"class":1127},[260,3200,599],{"class":497},[260,3202,3203],{"class":1392}," system_prompt",[260,3205,599],{"class":497},[260,3207,3208],{"class":1392}," history",[260,3210,599],{"class":497},[260,3212,1393],{"class":1392},[260,3214,1131],{"class":497},[260,3216,3218,3221,3223,3226,3228,3231,3233,3235,3237,3240,3242,3244,3246,3249,3251,3253,3255,3258,3261,3264],{"class":262,"line":3217},215,[260,3219,3220],{"class":292},"        messages ",[260,3222,297],{"class":296},[260,3224,3225],{"class":497}," [{",[260,3227,301],{"class":300},[260,3229,3230],{"class":270},"role",[260,3232,301],{"class":300},[260,3234,525],{"class":497},[260,3236,602],{"class":300},[260,3238,3239],{"class":270},"system",[260,3241,301],{"class":300},[260,3243,599],{"class":497},[260,3245,602],{"class":300},[260,3247,3248],{"class":270},"content",[260,3250,301],{"class":300},[260,3252,525],{"class":497},[260,3254,3203],{"class":292},[260,3256,3257],{"class":497},"},",[260,3259,3260],{"class":296}," *",[260,3262,3263],{"class":292},"history",[260,3265,1231],{"class":497},[260,3267,3269,3272,3274,3276,3278,3280,3282,3285,3287,3289,3291,3293,3295,3297,3299],{"class":262,"line":3268},216,[260,3270,3271],{"class":497},"                    {",[260,3273,301],{"class":300},[260,3275,3230],{"class":270},[260,3277,301],{"class":300},[260,3279,525],{"class":497},[260,3281,602],{"class":300},[260,3283,3284],{"class":270},"user",[260,3286,301],{"class":300},[260,3288,599],{"class":497},[260,3290,602],{"class":300},[260,3292,3248],{"class":270},[260,3294,301],{"class":300},[260,3296,525],{"class":497},[260,3298,1393],{"class":292},[260,3300,3301],{"class":497},"}]\n",[260,3303,3305,3308,3310,3312,3314,3316,3318,3321,3323,3326,3328,3331],{"class":262,"line":3304},217,[260,3306,3307],{"class":292},"        response ",[260,3309,297],{"class":296},[260,3311,1488],{"class":660},[260,3313,576],{"class":497},[260,3315,1179],{"class":579},[260,3317,576],{"class":497},[260,3319,3320],{"class":579},"chat",[260,3322,576],{"class":497},[260,3324,3325],{"class":579},"completions",[260,3327,576],{"class":497},[260,3329,3330],{"class":585},"create",[260,3332,679],{"class":497},[260,3334,3336,3339,3341,3343,3345,3347,3349,3351,3353,3356,3358,3361,3363,3366,3368],{"class":262,"line":3335},218,[260,3337,3338],{"class":1192},"            model",[260,3340,297],{"class":296},[260,3342,710],{"class":1121},[260,3344,599],{"class":497},[260,3346,1914],{"class":1192},[260,3348,297],{"class":296},[260,3350,2051],{"class":585},[260,3352,599],{"class":497},[260,3354,3355],{"class":1192}," temperature",[260,3357,297],{"class":296},[260,3359,3360],{"class":828},"0.3",[260,3362,599],{"class":497},[260,3364,3365],{"class":1192}," top_p",[260,3367,297],{"class":296},[260,3369,3370],{"class":828},"0.9\n",[260,3372,3374],{"class":262,"line":3373},219,[260,3375,1237],{"class":497},[260,3377,3379,3381,3384,3386,3389,3391,3394,3396,3398,3400],{"class":262,"line":3378},220,[260,3380,1879],{"class":420},[260,3382,3383],{"class":292}," response",[260,3385,576],{"class":497},[260,3387,3388],{"class":579},"choices",[260,3390,1204],{"class":497},[260,3392,3393],{"class":828},"0",[260,3395,2830],{"class":497},[260,3397,1675],{"class":579},[260,3399,576],{"class":497},[260,3401,3402],{"class":579},"content\n",[260,3404,3406],{"class":262,"line":3405},221,[260,3407,369],{"emptyLinePlaceholder":368},[260,3409,3411],{"class":262,"line":3410},222,[260,3412,3413],{"class":281},"    # ---- 主流程 ----\n",[260,3415,3417],{"class":262,"line":3416},223,[260,3418,369],{"emptyLinePlaceholder":368},[260,3420,3422,3424,3427,3429,3431,3433,3435,3437,3439,3441,3443,3445,3447],{"class":262,"line":3421},224,[260,3423,1118],{"class":288},[260,3425,3426],{"class":1382}," chat",[260,3428,589],{"class":497},[260,3430,1128],{"class":1127},[260,3432,599],{"class":497},[260,3434,1393],{"class":1392},[260,3436,599],{"class":497},[260,3438,1398],{"class":1392},[260,3440,599],{"class":497},[260,3442,1403],{"class":1392},[260,3444,599],{"class":497},[260,3446,1927],{"class":1392},[260,3448,1131],{"class":497},[260,3450,3452],{"class":262,"line":3451},225,[260,3453,3454],{"class":281},"        # 1. 拉取当前会话近期消息\n",[260,3456,3458,3461,3463,3465,3467,3470,3472,3474,3476,3478],{"class":262,"line":3457},226,[260,3459,3460],{"class":292},"        history ",[260,3462,297],{"class":296},[260,3464,1488],{"class":660},[260,3466,576],{"class":497},[260,3468,3469],{"class":585},"get_message",[260,3471,589],{"class":497},[260,3473,1450],{"class":585},[260,3475,599],{"class":497},[260,3477,1403],{"class":585},[260,3479,704],{"class":497},[260,3481,3483],{"class":262,"line":3482},227,[260,3484,369],{"emptyLinePlaceholder":368},[260,3486,3488],{"class":262,"line":3487},228,[260,3489,3490],{"class":281},"        # 2. 检索跨渠道记忆、偏好、知识库与 Skill\n",[260,3492,3494,3497,3499,3501,3503,3506,3508,3510,3512,3515],{"class":262,"line":3493},229,[260,3495,3496],{"class":292},"        memories",[260,3498,599],{"class":497},[260,3500,1887],{"class":292},[260,3502,599],{"class":497},[260,3504,3505],{"class":292}," skills ",[260,3507,297],{"class":296},[260,3509,1488],{"class":660},[260,3511,576],{"class":497},[260,3513,3514],{"class":585},"search_memory",[260,3516,679],{"class":497},[260,3518,3520,3523,3525,3527,3529],{"class":262,"line":3519},230,[260,3521,3522],{"class":585},"            query",[260,3524,599],{"class":497},[260,3526,1398],{"class":585},[260,3528,599],{"class":497},[260,3530,3531],{"class":585}," conversation_id\n",[260,3533,3535],{"class":262,"line":3534},231,[260,3536,1237],{"class":497},[260,3538,3540,3542,3544,3547,3549,3551,3553,3555,3557,3559],{"class":262,"line":3539},232,[260,3541,1174],{"class":660},[260,3543,576],{"class":497},[260,3545,3546],{"class":585},"_print_retrieved",[260,3548,589],{"class":497},[260,3550,2630],{"class":585},[260,3552,599],{"class":497},[260,3554,1887],{"class":585},[260,3556,599],{"class":497},[260,3558,2480],{"class":585},[260,3560,704],{"class":497},[260,3562,3564],{"class":262,"line":3563},233,[260,3565,369],{"emptyLinePlaceholder":368},[260,3567,3569],{"class":262,"line":3568},234,[260,3570,3571],{"class":281},"        # 3. 组装 prompt 并生成回复\n",[260,3573,3575,3578,3580,3582,3584,3587,3589,3591,3593,3595,3597,3599,3601,3603],{"class":262,"line":3574},235,[260,3576,3577],{"class":292},"        system_prompt ",[260,3579,297],{"class":296},[260,3581,1488],{"class":660},[260,3583,576],{"class":497},[260,3585,3586],{"class":585},"build_system_prompt",[260,3588,589],{"class":497},[260,3590,1995],{"class":585},[260,3592,599],{"class":497},[260,3594,1882],{"class":585},[260,3596,599],{"class":497},[260,3598,1887],{"class":585},[260,3600,599],{"class":497},[260,3602,2480],{"class":585},[260,3604,704],{"class":497},[260,3606,3608,3611,3613,3615,3617,3620,3622,3625,3627,3629,3631,3633],{"class":262,"line":3607},236,[260,3609,3610],{"class":292},"        reply ",[260,3612,297],{"class":296},[260,3614,1488],{"class":660},[260,3616,576],{"class":497},[260,3618,3619],{"class":585},"generate_reply",[260,3621,589],{"class":497},[260,3623,3624],{"class":585},"system_prompt",[260,3626,599],{"class":497},[260,3628,3208],{"class":585},[260,3630,599],{"class":497},[260,3632,1393],{"class":585},[260,3634,704],{"class":497},[260,3636,3638],{"class":262,"line":3637},237,[260,3639,369],{"emptyLinePlaceholder":368},[260,3641,3643],{"class":262,"line":3642},238,[260,3644,3645],{"class":281},"        # 4. 写回本轮对话，沉淀为长期记忆\n",[260,3647,3649,3651,3653,3656],{"class":262,"line":3648},239,[260,3650,1174],{"class":660},[260,3652,576],{"class":497},[260,3654,3655],{"class":585},"add_message",[260,3657,679],{"class":497},[260,3659,3661,3664,3666,3668,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690],{"class":262,"line":3660},240,[260,3662,3663],{"class":497},"            [{",[260,3665,301],{"class":300},[260,3667,3230],{"class":270},[260,3669,301],{"class":300},[260,3671,525],{"class":497},[260,3673,602],{"class":300},[260,3675,3284],{"class":270},[260,3677,301],{"class":300},[260,3679,599],{"class":497},[260,3681,602],{"class":300},[260,3683,3248],{"class":270},[260,3685,301],{"class":300},[260,3687,525],{"class":497},[260,3689,1393],{"class":585},[260,3691,2043],{"class":497},[260,3693,3695,3698,3700,3702,3704,3706,3708,3711,3713,3715,3717,3719,3721,3723,3726],{"class":262,"line":3694},241,[260,3696,3697],{"class":497},"             {",[260,3699,301],{"class":300},[260,3701,3230],{"class":270},[260,3703,301],{"class":300},[260,3705,525],{"class":497},[260,3707,602],{"class":300},[260,3709,3710],{"class":270},"assistant",[260,3712,301],{"class":300},[260,3714,599],{"class":497},[260,3716,602],{"class":300},[260,3718,3248],{"class":270},[260,3720,301],{"class":300},[260,3722,525],{"class":497},[260,3724,3725],{"class":585}," reply",[260,3727,3728],{"class":497},"}],\n",[260,3730,3732,3735,3737,3739,3741,3743],{"class":262,"line":3731},242,[260,3733,3734],{"class":585},"            user_id",[260,3736,599],{"class":497},[260,3738,1403],{"class":585},[260,3740,599],{"class":497},[260,3742,1927],{"class":585},[260,3744,1231],{"class":497},[260,3746,3748],{"class":262,"line":3747},243,[260,3749,1237],{"class":497},[260,3751,3753,3755],{"class":262,"line":3752},244,[260,3754,1879],{"class":420},[260,3756,3757],{"class":292}," reply\n",[260,3759,3761],{"class":262,"line":3760},245,[260,3762,369],{"emptyLinePlaceholder":368},[260,3764,3766,3770],{"class":262,"line":3765},246,[260,3767,3769],{"class":3768},"skqL1","    @",[260,3771,3772],{"class":521},"staticmethod\n",[260,3774,3776,3778,3781,3783,3785,3787,3789,3791,3793],{"class":262,"line":3775},247,[260,3777,1118],{"class":288},[260,3779,3780],{"class":1382}," _print_retrieved",[260,3782,589],{"class":497},[260,3784,2630],{"class":1392},[260,3786,599],{"class":497},[260,3788,1887],{"class":1392},[260,3790,599],{"class":497},[260,3792,2480],{"class":1392},[260,3794,1131],{"class":497},[260,3796,3798,3801,3803,3805,3808,3810],{"class":262,"line":3797},248,[260,3799,3800],{"class":1121},"        print",[260,3802,589],{"class":497},[260,3804,301],{"class":300},[260,3806,3807],{"class":270},"  ---- MemOS 召回内容 ----",[260,3809,301],{"class":300},[260,3811,704],{"class":497},[260,3813,3815,3818,3820,3822,3824],{"class":262,"line":3814},249,[260,3816,3817],{"class":420},"        for",[260,3819,1755],{"class":292},[260,3821,1758],{"class":420},[260,3823,1882],{"class":292},[260,3825,498],{"class":497},[260,3827,3829,3832,3834,3837,3839,3841,3843,3845,3847,3849,3851,3853,3855,3857,3860,3863,3865,3867,3869,3871,3873,3875,3877],{"class":262,"line":3828},250,[260,3830,3831],{"class":292},"            value ",[260,3833,297],{"class":296},[260,3835,3836],{"class":521}," str",[260,3838,589],{"class":497},[260,3840,2591],{"class":585},[260,3842,576],{"class":497},[260,3844,676],{"class":585},[260,3846,589],{"class":497},[260,3848,301],{"class":300},[260,3850,2602],{"class":270},[260,3852,301],{"class":300},[260,3854,599],{"class":497},[260,3856,804],{"class":300},[260,3858,3859],{"class":497},")).",[260,3861,3862],{"class":585},"replace",[260,3864,589],{"class":497},[260,3866,301],{"class":300},[260,3868,2560],{"class":2559},[260,3870,301],{"class":300},[260,3872,599],{"class":497},[260,3874,602],{"class":300},[260,3876,602],{"class":300},[260,3878,704],{"class":497},[260,3880,3882,3884,3886,3888,3891,3893,3895,3897,3899,3901,3903,3905,3907,3909,3911,3913,3916,3918,3921,3923,3926,3929,3932,3934,3936,3938],{"class":262,"line":3881},251,[260,3883,1651],{"class":1121},[260,3885,589],{"class":497},[260,3887,1656],{"class":288},[260,3889,3890],{"class":270},"\"  [记忆 ",[260,3892,1296],{"class":1295},[260,3894,2591],{"class":585},[260,3896,576],{"class":497},[260,3898,676],{"class":585},[260,3900,589],{"class":497},[260,3902,1307],{"class":300},[260,3904,1799],{"class":270},[260,3906,1307],{"class":300},[260,3908,599],{"class":497},[260,3910,1643],{"class":828},[260,3912,610],{"class":497},[260,3914,3915],{"class":288},":.2f",[260,3917,1317],{"class":1295},[260,3919,3920],{"class":270},"] ",[260,3922,1296],{"class":1295},[260,3924,3925],{"class":585},"value",[260,3927,3928],{"class":497},"[:",[260,3930,3931],{"class":828},"80",[260,3933,1314],{"class":497},[260,3935,1317],{"class":1295},[260,3937,301],{"class":270},[260,3939,704],{"class":497},[260,3941,3943,3945,3947,3949,3951],{"class":262,"line":3942},252,[260,3944,3817],{"class":420},[260,3946,2719],{"class":292},[260,3948,1758],{"class":420},[260,3950,1887],{"class":292},[260,3952,498],{"class":497},[260,3954,3956,3958,3960,3962,3965,3967,3969,3971,3973,3975,3977,3979,3981,3983,3985,3987],{"class":262,"line":3955},253,[260,3957,1651],{"class":1121},[260,3959,589],{"class":497},[260,3961,1656],{"class":288},[260,3963,3964],{"class":270},"\"  [偏好] ",[260,3966,1296],{"class":1295},[260,3968,16],{"class":585},[260,3970,576],{"class":497},[260,3972,676],{"class":585},[260,3974,589],{"class":497},[260,3976,1307],{"class":300},[260,3978,2702],{"class":270},[260,3980,1307],{"class":300},[260,3982,610],{"class":497},[260,3984,1317],{"class":1295},[260,3986,301],{"class":270},[260,3988,704],{"class":497},[260,3990,3992,3994,3996,3998,4000],{"class":262,"line":3991},254,[260,3993,3817],{"class":420},[260,3995,2775],{"class":292},[260,3997,1758],{"class":420},[260,3999,2480],{"class":292},[260,4001,498],{"class":497},[260,4003,4005,4007,4009,4011,4013,4015,4017,4019,4021,4023,4025,4027],{"class":262,"line":4004},255,[260,4006,3831],{"class":292},[260,4008,297],{"class":296},[260,4010,2819],{"class":292},[260,4012,576],{"class":497},[260,4014,676],{"class":585},[260,4016,589],{"class":497},[260,4018,301],{"class":300},[260,4020,2803],{"class":270},[260,4022,301],{"class":300},[260,4024,610],{"class":497},[260,4026,1226],{"class":296},[260,4028,4029],{"class":497}," {}\n",[260,4031,4033,4036,4038,4041,4043,4045,4047,4049,4051,4053,4055,4057,4059,4062,4064,4066,4068,4070,4072,4074,4077,4079,4081,4083],{"class":262,"line":4032},256,[260,4034,4035],{"class":292},"            label ",[260,4037,297],{"class":296},[260,4039,4040],{"class":292}," value",[260,4042,576],{"class":497},[260,4044,676],{"class":585},[260,4046,589],{"class":497},[260,4048,301],{"class":300},[260,4050,2839],{"class":270},[260,4052,301],{"class":300},[260,4054,610],{"class":497},[260,4056,1226],{"class":296},[260,4058,1289],{"class":288},[260,4060,4061],{"class":270},"\"id=",[260,4063,1296],{"class":1295},[260,4065,2792],{"class":292},[260,4067,576],{"class":497},[260,4069,676],{"class":585},[260,4071,589],{"class":497},[260,4073,1307],{"class":300},[260,4075,4076],{"class":270},"id",[260,4078,1307],{"class":300},[260,4080,610],{"class":497},[260,4082,1317],{"class":1295},[260,4084,307],{"class":270},[260,4086,4088,4090,4092,4094,4097,4099,4101,4103,4105,4107,4109,4111,4113,4115,4117,4119,4121,4123,4125,4127,4130,4132,4134],{"class":262,"line":4087},257,[260,4089,1651],{"class":1121},[260,4091,589],{"class":497},[260,4093,1656],{"class":288},[260,4095,4096],{"class":270},"\"  [Skill ",[260,4098,1296],{"class":1295},[260,4100,2792],{"class":585},[260,4102,576],{"class":497},[260,4104,676],{"class":585},[260,4106,589],{"class":497},[260,4108,1307],{"class":300},[260,4110,1799],{"class":270},[260,4112,1307],{"class":300},[260,4114,599],{"class":497},[260,4116,1643],{"class":828},[260,4118,610],{"class":497},[260,4120,3915],{"class":288},[260,4122,1317],{"class":1295},[260,4124,3920],{"class":270},[260,4126,1296],{"class":1295},[260,4128,4129],{"class":585},"label",[260,4131,1317],{"class":1295},[260,4133,301],{"class":270},[260,4135,704],{"class":497},[260,4137,4139,4141,4143,4145,4148,4150],{"class":262,"line":4138},258,[260,4140,3800],{"class":1121},[260,4142,589],{"class":497},[260,4144,301],{"class":300},[260,4146,4147],{"class":270},"  ------------------------",[260,4149,301],{"class":300},[260,4151,704],{"class":497},[260,4153,4155],{"class":262,"line":4154},259,[260,4156,369],{"emptyLinePlaceholder":368},[260,4158,4160],{"class":262,"line":4159},260,[260,4161,369],{"emptyLinePlaceholder":368},[260,4163,4165],{"class":262,"line":4164},261,[260,4166,551],{"class":281},[260,4168,4170],{"class":262,"line":4169},262,[260,4171,4172],{"class":281},"# 知识库初始化：创建知识库，上传政策文档与 Skill，等待处理完成\n",[260,4174,4176],{"class":262,"line":4175},263,[260,4177,551],{"class":281},[260,4179,4181],{"class":262,"line":4180},264,[260,4182,369],{"emptyLinePlaceholder":368},[260,4184,4186,4189,4192,4194,4196],{"class":262,"line":4185},265,[260,4187,4188],{"class":288},"def",[260,4190,4191],{"class":1382}," _b64_md",[260,4193,589],{"class":497},[260,4195,162],{"class":1392},[260,4197,1131],{"class":497},[260,4199,4201,4204,4206,4209,4211,4214,4216,4218,4220,4223,4225,4227,4230,4232,4234,4237,4239,4241,4243,4245],{"class":262,"line":4200},266,[260,4202,4203],{"class":292},"    encoded ",[260,4205,297],{"class":296},[260,4207,4208],{"class":292}," base64",[260,4210,576],{"class":497},[260,4212,4213],{"class":585},"b64encode",[260,4215,589],{"class":497},[260,4217,162],{"class":585},[260,4219,576],{"class":497},[260,4221,4222],{"class":585},"encode",[260,4224,589],{"class":497},[260,4226,301],{"class":300},[260,4228,4229],{"class":270},"utf-8",[260,4231,301],{"class":300},[260,4233,3859],{"class":497},[260,4235,4236],{"class":585},"decode",[260,4238,589],{"class":497},[260,4240,301],{"class":300},[260,4242,4229],{"class":270},[260,4244,301],{"class":300},[260,4246,704],{"class":497},[260,4248,4250,4253,4255,4258,4260,4263,4265],{"class":262,"line":4249},267,[260,4251,4252],{"class":420},"    return",[260,4254,1289],{"class":288},[260,4256,4257],{"class":270},"\"data:text/markdown;base64,",[260,4259,1296],{"class":1295},[260,4261,4262],{"class":292},"encoded",[260,4264,1317],{"class":1295},[260,4266,307],{"class":270},[260,4268,4270],{"class":262,"line":4269},268,[260,4271,369],{"emptyLinePlaceholder":368},[260,4273,4275],{"class":262,"line":4274},269,[260,4276,369],{"emptyLinePlaceholder":368},[260,4278,4280,4282,4285],{"class":262,"line":4279},270,[260,4281,4188],{"class":288},[260,4283,4284],{"class":1382}," setup_knowledge_base",[260,4286,4287],{"class":497},"():\n",[260,4289,4291,4294,4296],{"class":262,"line":4290},271,[260,4292,4293],{"class":292},"    headers ",[260,4295,297],{"class":296},[260,4297,1252],{"class":497},[260,4299,4301,4304,4306,4308,4310,4312,4314,4316],{"class":262,"line":4300},272,[260,4302,4303],{"class":300},"        \"",[260,4305,1261],{"class":270},[260,4307,301],{"class":300},[260,4309,525],{"class":497},[260,4311,602],{"class":300},[260,4313,1270],{"class":270},[260,4315,301],{"class":300},[260,4317,1231],{"class":497},[260,4319,4321,4323,4325,4327,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4355],{"class":262,"line":4320},273,[260,4322,4303],{"class":300},[260,4324,1282],{"class":270},[260,4326,301],{"class":300},[260,4328,525],{"class":497},[260,4330,1289],{"class":288},[260,4332,1292],{"class":270},[260,4334,1296],{"class":1295},[260,4336,573],{"class":292},[260,4338,576],{"class":497},[260,4340,580],{"class":579},[260,4342,1204],{"class":497},[260,4344,1307],{"class":300},[260,4346,594],{"class":270},[260,4348,1307],{"class":300},[260,4350,1314],{"class":497},[260,4352,1317],{"class":1295},[260,4354,301],{"class":270},[260,4356,1231],{"class":497},[260,4358,4360],{"class":262,"line":4359},274,[260,4361,4362],{"class":497},"    }\n",[260,4364,4366],{"class":262,"line":4365},275,[260,4367,369],{"emptyLinePlaceholder":368},[260,4369,4371,4374,4376,4378,4380,4382],{"class":262,"line":4370},276,[260,4372,4373],{"class":292},"    res ",[260,4375,297],{"class":296},[260,4377,1544],{"class":292},[260,4379,576],{"class":497},[260,4381,1549],{"class":585},[260,4383,679],{"class":497},[260,4385,4387,4390,4392,4394,4396,4398,4401],{"class":262,"line":4386},277,[260,4388,4389],{"class":288},"        f",[260,4391,301],{"class":270},[260,4393,1296],{"class":1295},[260,4395,661],{"class":1121},[260,4397,1317],{"class":1295},[260,4399,4400],{"class":270},"/create/knowledgebase\"",[260,4402,1231],{"class":497},[260,4404,4406,4409,4411,4413],{"class":262,"line":4405},278,[260,4407,4408],{"class":1192},"        headers",[260,4410,297],{"class":296},[260,4412,1247],{"class":585},[260,4414,1231],{"class":497},[260,4416,4418,4421,4423],{"class":262,"line":4417},279,[260,4419,4420],{"class":1192},"        json",[260,4422,297],{"class":296},[260,4424,4425],{"class":497},"{\n",[260,4427,4429,4431,4434,4436,4438,4440,4443,4445],{"class":262,"line":4428},280,[260,4430,1258],{"class":300},[260,4432,4433],{"class":270},"knowledgebase_name",[260,4435,301],{"class":300},[260,4437,525],{"class":497},[260,4439,602],{"class":300},[260,4441,4442],{"class":270},"消费者售后政策知识库",[260,4444,301],{"class":300},[260,4446,1231],{"class":497},[260,4448,4450,4452,4455,4457,4459,4461,4464,4466],{"class":262,"line":4449},281,[260,4451,1258],{"class":300},[260,4453,4454],{"class":270},"knowledgebase_description",[260,4456,301],{"class":300},[260,4458,525],{"class":497},[260,4460,602],{"class":300},[260,4462,4463],{"class":270},"消费者退换货、保修、物流与发票政策，以及客服处理 Skill",[260,4465,301],{"class":300},[260,4467,1231],{"class":497},[260,4469,4471],{"class":262,"line":4470},282,[260,4472,4473],{"class":497},"        },\n",[260,4475,4477],{"class":262,"line":4476},283,[260,4478,4479],{"class":497},"    )\n",[260,4481,4483,4486,4488,4490,4492,4494],{"class":262,"line":4482},284,[260,4484,4485],{"class":292},"    body ",[260,4487,297],{"class":296},[260,4489,1607],{"class":292},[260,4491,576],{"class":497},[260,4493,1612],{"class":585},[260,4495,1615],{"class":497},[260,4497,4499,4502,4504,4506,4508,4510,4512,4514,4516,4518,4520,4522],{"class":262,"line":4498},285,[260,4500,4501],{"class":420},"    if",[260,4503,1623],{"class":292},[260,4505,576],{"class":497},[260,4507,676],{"class":585},[260,4509,589],{"class":497},[260,4511,301],{"class":300},[260,4513,165],{"class":270},[260,4515,301],{"class":300},[260,4517,610],{"class":497},[260,4519,1640],{"class":296},[260,4521,1643],{"class":828},[260,4523,498],{"class":497},[260,4525,4527,4530,4532,4535,4537,4539,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562,4564],{"class":262,"line":4526},286,[260,4528,4529],{"class":292},"        sys",[260,4531,576],{"class":497},[260,4533,4534],{"class":585},"exit",[260,4536,589],{"class":497},[260,4538,1656],{"class":288},[260,4540,4541],{"class":270},"\"创建知识库失败：",[260,4543,1296],{"class":1295},[260,4545,1664],{"class":585},[260,4547,576],{"class":497},[260,4549,676],{"class":585},[260,4551,589],{"class":497},[260,4553,1307],{"class":300},[260,4555,1675],{"class":270},[260,4557,1307],{"class":300},[260,4559,610],{"class":497},[260,4561,1317],{"class":1295},[260,4563,301],{"class":270},[260,4565,704],{"class":497},[260,4567,4569,4572,4574,4576,4578,4580,4582,4584,4586,4588,4590,4592,4594,4596,4598,4600,4602,4604,4606,4608,4610,4612,4614,4616,4618,4620,4622,4624,4626,4628,4630,4633,4635],{"class":262,"line":4568},287,[260,4570,4571],{"class":292},"    kb_id ",[260,4573,297],{"class":296},[260,4575,1623],{"class":292},[260,4577,576],{"class":497},[260,4579,676],{"class":585},[260,4581,589],{"class":497},[260,4583,301],{"class":300},[260,4585,1725],{"class":270},[260,4587,301],{"class":300},[260,4589,599],{"class":497},[260,4591,2413],{"class":497},[260,4593,676],{"class":585},[260,4595,589],{"class":497},[260,4597,301],{"class":300},[260,4599,4076],{"class":270},[260,4601,301],{"class":300},[260,4603,610],{"class":497},[260,4605,1226],{"class":296},[260,4607,1623],{"class":292},[260,4609,576],{"class":497},[260,4611,676],{"class":585},[260,4613,589],{"class":497},[260,4615,301],{"class":300},[260,4617,1725],{"class":270},[260,4619,301],{"class":300},[260,4621,599],{"class":497},[260,4623,2413],{"class":497},[260,4625,676],{"class":585},[260,4627,589],{"class":497},[260,4629,301],{"class":300},[260,4631,4632],{"class":270},"knowledgebase_id",[260,4634,301],{"class":300},[260,4636,704],{"class":497},[260,4638,4640,4643,4645,4647,4650,4652,4655,4657,4659],{"class":262,"line":4639},288,[260,4641,4642],{"class":1121},"    print",[260,4644,589],{"class":497},[260,4646,1656],{"class":288},[260,4648,4649],{"class":270},"\"知识库已创建：",[260,4651,1296],{"class":1295},[260,4653,4654],{"class":585},"kb_id",[260,4656,1317],{"class":1295},[260,4658,301],{"class":270},[260,4660,704],{"class":497},[260,4662,4664],{"class":262,"line":4663},289,[260,4665,369],{"emptyLinePlaceholder":368},[260,4667,4669,4671,4673,4675,4677,4679],{"class":262,"line":4668},290,[260,4670,4373],{"class":292},[260,4672,297],{"class":296},[260,4674,1544],{"class":292},[260,4676,576],{"class":497},[260,4678,1549],{"class":585},[260,4680,679],{"class":497},[260,4682,4684,4686,4688,4690,4692,4694,4697],{"class":262,"line":4683},291,[260,4685,4389],{"class":288},[260,4687,301],{"class":270},[260,4689,1296],{"class":1295},[260,4691,661],{"class":1121},[260,4693,1317],{"class":1295},[260,4695,4696],{"class":270},"/add/knowledgebase-file\"",[260,4698,1231],{"class":497},[260,4700,4702,4704,4706,4708],{"class":262,"line":4701},292,[260,4703,4408],{"class":1192},[260,4705,297],{"class":296},[260,4707,1247],{"class":585},[260,4709,1231],{"class":497},[260,4711,4713,4715,4717],{"class":262,"line":4712},293,[260,4714,4420],{"class":1192},[260,4716,297],{"class":296},[260,4718,4425],{"class":497},[260,4720,4722,4724,4726,4728,4730,4733],{"class":262,"line":4721},294,[260,4723,1258],{"class":300},[260,4725,4632],{"class":270},[260,4727,301],{"class":300},[260,4729,525],{"class":497},[260,4731,4732],{"class":585}," kb_id",[260,4734,1231],{"class":497},[260,4736,4738,4740,4743,4745,4747],{"class":262,"line":4737},295,[260,4739,1258],{"class":300},[260,4741,4742],{"class":270},"file",[260,4744,301],{"class":300},[260,4746,525],{"class":497},[260,4748,1743],{"class":497},[260,4750,4752,4755,4757,4760,4762,4764,4766,4769,4771,4773,4775,4777,4779,4781,4783,4786,4788],{"class":262,"line":4751},296,[260,4753,4754],{"class":497},"                {",[260,4756,301],{"class":300},[260,4758,4759],{"class":270},"type",[260,4761,301],{"class":300},[260,4763,525],{"class":497},[260,4765,602],{"class":300},[260,4767,4768],{"class":270},"document",[260,4770,301],{"class":300},[260,4772,599],{"class":497},[260,4774,602],{"class":300},[260,4776,2839],{"class":270},[260,4778,301],{"class":300},[260,4780,525],{"class":497},[260,4782,602],{"class":300},[260,4784,4785],{"class":270},"consumer-after-sale-policy.md",[260,4787,301],{"class":300},[260,4789,1231],{"class":497},[260,4791,4793,4796,4798,4800,4802,4804,4806,4808],{"class":262,"line":4792},297,[260,4794,4795],{"class":300},"                 \"",[260,4797,3248],{"class":270},[260,4799,301],{"class":300},[260,4801,525],{"class":497},[260,4803,4191],{"class":585},[260,4805,589],{"class":497},[260,4807,861],{"class":1121},[260,4809,4810],{"class":497},")},\n",[260,4812,4814,4816,4818,4820,4822,4824,4826,4829,4831,4833,4835,4837,4839,4841,4843,4846,4848],{"class":262,"line":4813},298,[260,4815,4754],{"class":497},[260,4817,301],{"class":300},[260,4819,4759],{"class":270},[260,4821,301],{"class":300},[260,4823,525],{"class":497},[260,4825,602],{"class":300},[260,4827,4828],{"class":270},"skill",[260,4830,301],{"class":300},[260,4832,599],{"class":497},[260,4834,602],{"class":300},[260,4836,2839],{"class":270},[260,4838,301],{"class":300},[260,4840,525],{"class":497},[260,4842,602],{"class":300},[260,4844,4845],{"class":270},"quality-exchange-sop.md",[260,4847,301],{"class":300},[260,4849,1231],{"class":497},[260,4851,4853,4855,4857,4859,4861,4863,4865,4867],{"class":262,"line":4852},299,[260,4854,4795],{"class":300},[260,4856,3248],{"class":270},[260,4858,301],{"class":300},[260,4860,525],{"class":497},[260,4862,4191],{"class":585},[260,4864,589],{"class":497},[260,4866,977],{"class":1121},[260,4868,4810],{"class":497},[260,4870,4872],{"class":262,"line":4871},300,[260,4873,4874],{"class":497},"            ],\n",[260,4876,4878],{"class":262,"line":4877},301,[260,4879,4473],{"class":497},[260,4881,4883],{"class":262,"line":4882},302,[260,4884,4479],{"class":497},[260,4886,4888,4890,4892,4894,4896,4898,4900,4902,4904,4906,4908,4910,4912,4914],{"class":262,"line":4887},303,[260,4889,4501],{"class":420},[260,4891,1607],{"class":292},[260,4893,576],{"class":497},[260,4895,1612],{"class":585},[260,4897,2134],{"class":497},[260,4899,676],{"class":585},[260,4901,589],{"class":497},[260,4903,301],{"class":300},[260,4905,165],{"class":270},[260,4907,301],{"class":300},[260,4909,610],{"class":497},[260,4911,1640],{"class":296},[260,4913,1643],{"class":828},[260,4915,498],{"class":497},[260,4917,4919,4921,4923,4925,4927,4929,4932,4934,4936,4938,4940,4942,4944,4946,4948,4950,4952,4954,4956,4958],{"class":262,"line":4918},304,[260,4920,4529],{"class":292},[260,4922,576],{"class":497},[260,4924,4534],{"class":585},[260,4926,589],{"class":497},[260,4928,1656],{"class":288},[260,4930,4931],{"class":270},"\"上传文件失败：",[260,4933,1296],{"class":1295},[260,4935,2175],{"class":585},[260,4937,576],{"class":497},[260,4939,1612],{"class":585},[260,4941,2134],{"class":497},[260,4943,676],{"class":585},[260,4945,589],{"class":497},[260,4947,1307],{"class":300},[260,4949,1675],{"class":270},[260,4951,1307],{"class":300},[260,4953,610],{"class":497},[260,4955,1317],{"class":1295},[260,4957,301],{"class":270},[260,4959,704],{"class":497},[260,4961,4963,4965,4967,4969,4972,4974],{"class":262,"line":4962},305,[260,4964,4642],{"class":1121},[260,4966,589],{"class":497},[260,4968,301],{"class":300},[260,4970,4971],{"class":270},"政策文档与 Skill 已上传，等待解析...",[260,4973,301],{"class":300},[260,4975,704],{"class":497},[260,4977,4979],{"class":262,"line":4978},306,[260,4980,369],{"emptyLinePlaceholder":368},[260,4982,4984,4987,4990,4992,4995,4997,5000,5003],{"class":262,"line":4983},307,[260,4985,4986],{"class":420},"    for",[260,4988,4989],{"class":292}," _ ",[260,4991,1758],{"class":420},[260,4993,4994],{"class":1121}," range",[260,4996,589],{"class":497},[260,4998,4999],{"class":828},"40",[260,5001,5002],{"class":497},"):",[260,5004,5005],{"class":281},"  # 最长等待约 2 分钟\n",[260,5007,5009,5012,5014,5017,5019,5022],{"class":262,"line":5008},308,[260,5010,5011],{"class":292},"        time",[260,5013,576],{"class":497},[260,5015,5016],{"class":585},"sleep",[260,5018,589],{"class":497},[260,5020,5021],{"class":828},"3",[260,5023,704],{"class":497},[260,5025,5027,5029,5031,5033,5035,5037],{"class":262,"line":5026},309,[260,5028,1539],{"class":292},[260,5030,297],{"class":296},[260,5032,1544],{"class":292},[260,5034,576],{"class":497},[260,5036,1549],{"class":585},[260,5038,679],{"class":497},[260,5040,5042,5044,5046,5048,5050,5052,5055],{"class":262,"line":5041},310,[260,5043,1557],{"class":288},[260,5045,301],{"class":270},[260,5047,1296],{"class":1295},[260,5049,661],{"class":1121},[260,5051,1317],{"class":1295},[260,5053,5054],{"class":270},"/get/knowledgebase-file\"",[260,5056,1231],{"class":497},[260,5058,5060,5063,5065,5067],{"class":262,"line":5059},311,[260,5061,5062],{"class":1192},"            headers",[260,5064,297],{"class":296},[260,5066,1247],{"class":585},[260,5068,1231],{"class":497},[260,5070,5072,5075,5077,5079,5081,5083,5085,5087,5089,5091,5093,5096,5098,5100,5102,5104,5106,5109,5111,5113,5116],{"class":262,"line":5071},312,[260,5073,5074],{"class":1192},"            json",[260,5076,297],{"class":296},[260,5078,1296],{"class":497},[260,5080,301],{"class":300},[260,5082,4632],{"class":270},[260,5084,301],{"class":300},[260,5086,525],{"class":497},[260,5088,4732],{"class":585},[260,5090,599],{"class":497},[260,5092,602],{"class":300},[260,5094,5095],{"class":270},"page",[260,5097,301],{"class":300},[260,5099,525],{"class":497},[260,5101,2635],{"class":828},[260,5103,599],{"class":497},[260,5105,602],{"class":300},[260,5107,5108],{"class":270},"page_size",[260,5110,301],{"class":300},[260,5112,525],{"class":497},[260,5114,5115],{"class":828}," 20",[260,5117,2043],{"class":497},[260,5119,5121],{"class":262,"line":5120},313,[260,5122,1237],{"class":497},[260,5124,5126,5129,5131,5133,5135,5137,5139,5141,5143,5145,5147,5149,5151,5153,5155,5157,5159,5162,5164,5166],{"class":262,"line":5125},314,[260,5127,5128],{"class":292},"        files ",[260,5130,297],{"class":296},[260,5132,1607],{"class":292},[260,5134,576],{"class":497},[260,5136,1612],{"class":585},[260,5138,2134],{"class":497},[260,5140,676],{"class":585},[260,5142,589],{"class":497},[260,5144,301],{"class":300},[260,5146,1725],{"class":270},[260,5148,301],{"class":300},[260,5150,599],{"class":497},[260,5152,2413],{"class":497},[260,5154,676],{"class":585},[260,5156,589],{"class":497},[260,5158,301],{"class":300},[260,5160,5161],{"class":270},"file_detail_list",[260,5163,301],{"class":300},[260,5165,599],{"class":497},[260,5167,1779],{"class":497},[260,5169,5171,5174,5176,5178,5181,5183,5185,5187,5189,5191,5193,5196,5198,5200,5202,5204,5207,5210,5212,5215,5217,5220],{"class":262,"line":5170},315,[260,5172,5173],{"class":292},"        statuses ",[260,5175,297],{"class":296},[260,5177,2012],{"class":497},[260,5179,5180],{"class":521},"str",[260,5182,589],{"class":497},[260,5184,1656],{"class":585},[260,5186,576],{"class":497},[260,5188,676],{"class":585},[260,5190,589],{"class":497},[260,5192,301],{"class":300},[260,5194,5195],{"class":270},"status",[260,5197,301],{"class":300},[260,5199,599],{"class":497},[260,5201,804],{"class":300},[260,5203,3859],{"class":497},[260,5205,5206],{"class":585},"lower",[260,5208,5209],{"class":497},"()",[260,5211,2613],{"class":420},[260,5213,5214],{"class":292}," f ",[260,5216,1758],{"class":420},[260,5218,5219],{"class":292}," files",[260,5221,3024],{"class":497},[260,5223,5225,5227,5230,5233,5236,5239,5241,5243,5246,5248,5250,5252,5255,5257,5259,5261,5264,5266],{"class":262,"line":5224},316,[260,5226,1137],{"class":420},[260,5228,5229],{"class":292}," files ",[260,5231,5232],{"class":296},"and",[260,5234,5235],{"class":292}," statuses ",[260,5237,5238],{"class":296},"\u003C=",[260,5240,2012],{"class":497},[260,5242,301],{"class":300},[260,5244,5245],{"class":270},"completed",[260,5247,301],{"class":300},[260,5249,599],{"class":497},[260,5251,602],{"class":300},[260,5253,5254],{"class":270},"available",[260,5256,301],{"class":300},[260,5258,599],{"class":497},[260,5260,602],{"class":300},[260,5262,5263],{"class":270},"failed",[260,5265,301],{"class":300},[260,5267,5268],{"class":497},"}:\n",[260,5270,5272,5274,5276,5278,5280,5283,5286],{"class":262,"line":5271},317,[260,5273,1785],{"class":420},[260,5275,602],{"class":300},[260,5277,5263],{"class":270},[260,5279,301],{"class":300},[260,5281,5282],{"class":296}," in",[260,5284,5285],{"class":292}," statuses",[260,5287,498],{"class":497},[260,5289,5291,5294,5296,5298,5300,5302,5305,5307],{"class":262,"line":5290},318,[260,5292,5293],{"class":292},"                sys",[260,5295,576],{"class":497},[260,5297,4534],{"class":585},[260,5299,589],{"class":497},[260,5301,301],{"class":300},[260,5303,5304],{"class":270},"有文件解析失败，请在控制台查看详情",[260,5306,301],{"class":300},[260,5308,704],{"class":497},[260,5310,5312],{"class":262,"line":5311},319,[260,5313,5314],{"class":420},"            break\n",[260,5316,5318,5321],{"class":262,"line":5317},320,[260,5319,5320],{"class":420},"    else",[260,5322,498],{"class":497},[260,5324,5326,5328,5330,5332,5334,5336,5339,5341],{"class":262,"line":5325},321,[260,5327,4529],{"class":292},[260,5329,576],{"class":497},[260,5331,4534],{"class":585},[260,5333,589],{"class":497},[260,5335,301],{"class":300},[260,5337,5338],{"class":270},"等待文件解析超时，请稍后在控制台确认状态",[260,5340,301],{"class":300},[260,5342,704],{"class":497},[260,5344,5346],{"class":262,"line":5345},322,[260,5347,369],{"emptyLinePlaceholder":368},[260,5349,5351,5353,5355,5357,5360,5363,5365,5367,5369,5371,5374],{"class":262,"line":5350},323,[260,5352,4642],{"class":1121},[260,5354,589],{"class":497},[260,5356,1656],{"class":288},[260,5358,5359],{"class":270},"\"知识库已就绪。请执行：export MEMOS_KB_ID=",[260,5361,5362],{"class":2559},"\\\"",[260,5364,1296],{"class":1295},[260,5366,4654],{"class":585},[260,5368,1317],{"class":1295},[260,5370,5362],{"class":2559},[260,5372,5373],{"class":270},"，然后运行演示。\"",[260,5375,704],{"class":497},[260,5377,5379],{"class":262,"line":5378},324,[260,5380,369],{"emptyLinePlaceholder":368},[260,5382,5384],{"class":262,"line":5383},325,[260,5385,369],{"emptyLinePlaceholder":368},[260,5387,5389],{"class":262,"line":5388},326,[260,5390,551],{"class":281},[260,5392,5394],{"class":262,"line":5393},327,[260,5395,5396],{"class":281},"# 演示场景：同一消费者，跨「在线客服」与「邮件工单」两个渠道\n",[260,5398,5400],{"class":262,"line":5399},328,[260,5401,551],{"class":281},[260,5403,5405],{"class":262,"line":5404},329,[260,5406,369],{"emptyLinePlaceholder":368},[260,5408,5410,5413,5415,5417,5420,5422],{"class":262,"line":5409},330,[260,5411,5412],{"class":660},"CUSTOMER_ID",[260,5414,664],{"class":296},[260,5416,602],{"class":300},[260,5418,5419],{"class":270},"customer_001",[260,5421,301],{"class":300},[260,5423,5424],{"class":281},"  # 生产环境中应来自登录态的稳定用户 ID\n",[260,5426,5428],{"class":262,"line":5427},331,[260,5429,369],{"emptyLinePlaceholder":368},[260,5431,5433],{"class":262,"line":5432},332,[260,5434,369],{"emptyLinePlaceholder":368},[260,5436,5438,5440,5443],{"class":262,"line":5437},333,[260,5439,4188],{"class":288},[260,5441,5442],{"class":1382}," run_demo",[260,5444,4287],{"class":497},[260,5446,5448,5451,5453,5455],{"class":262,"line":5447},334,[260,5449,5450],{"class":292},"    assistant ",[260,5452,297],{"class":296},[260,5454,1110],{"class":585},[260,5456,1615],{"class":497},[260,5458,5460],{"class":262,"line":5459},335,[260,5461,369],{"emptyLinePlaceholder":368},[260,5463,5465,5467,5469,5471,5473,5475,5477,5480],{"class":262,"line":5464},336,[260,5466,4642],{"class":1121},[260,5468,589],{"class":497},[260,5470,301],{"class":300},[260,5472,297],{"class":270},[260,5474,301],{"class":300},[260,5476,3260],{"class":296},[260,5478,5479],{"class":828}," 64",[260,5481,704],{"class":497},[260,5483,5485,5487,5489,5491,5494,5496],{"class":262,"line":5484},337,[260,5486,4642],{"class":1121},[260,5488,589],{"class":497},[260,5490,301],{"class":300},[260,5492,5493],{"class":270},"DAY 1 · 在线客服渠道：消费者反馈耳机杂音要求换货，并说明时间与通知偏好",[260,5495,301],{"class":300},[260,5497,704],{"class":497},[260,5499,5501,5503,5505,5507,5509,5511,5513,5515],{"class":262,"line":5500},338,[260,5502,4642],{"class":1121},[260,5504,589],{"class":497},[260,5506,301],{"class":300},[260,5508,297],{"class":270},[260,5510,301],{"class":300},[260,5512,3260],{"class":296},[260,5514,5479],{"class":828},[260,5516,704],{"class":497},[260,5518,5520,5523,5525,5527,5530],{"class":262,"line":5519},339,[260,5521,5522],{"class":292},"    chat_conv ",[260,5524,297],{"class":296},[260,5526,602],{"class":300},[260,5528,5529],{"class":270},"conv_chat_0821",[260,5531,307],{"class":300},[260,5533,5535],{"class":262,"line":5534},340,[260,5536,369],{"emptyLinePlaceholder":368},[260,5538,5540,5543,5545,5548,5550,5553],{"class":262,"line":5539},341,[260,5541,5542],{"class":292},"    q1 ",[260,5544,297],{"class":296},[260,5546,5547],{"class":497}," (",[260,5549,301],{"class":300},[260,5551,5552],{"class":270},"你好，我 8 月 20 日签收的订单 20260820-88，里面的降噪耳机左耳一直有",[260,5554,307],{"class":300},[260,5556,5558,5561,5564,5566],{"class":262,"line":5557},342,[260,5559,5560],{"class":300},"          \"",[260,5562,5563],{"class":270},"电流声，杂音很明显，我想换货。",[260,5565,301],{"class":300},[260,5567,704],{"class":497},[260,5569,5571,5573,5575,5577,5579,5581,5584,5586,5589,5591,5593],{"class":262,"line":5570},343,[260,5572,4642],{"class":1121},[260,5574,589],{"class":497},[260,5576,1656],{"class":288},[260,5578,301],{"class":270},[260,5580,2560],{"class":2559},[260,5582,5583],{"class":270},"[消费者] ",[260,5585,1296],{"class":1295},[260,5587,5588],{"class":585},"q1",[260,5590,1317],{"class":1295},[260,5592,301],{"class":270},[260,5594,704],{"class":497},[260,5596,5598,5600,5602,5604,5607,5609,5611,5613,5615,5617,5619,5621,5624,5626,5629,5631,5634,5636,5638,5640,5642,5644],{"class":262,"line":5597},344,[260,5599,4642],{"class":1121},[260,5601,589],{"class":497},[260,5603,1656],{"class":288},[260,5605,5606],{"class":270},"\"[客服助手] ",[260,5608,1296],{"class":1295},[260,5610,3710],{"class":585},[260,5612,576],{"class":497},[260,5614,3320],{"class":585},[260,5616,589],{"class":497},[260,5618,5588],{"class":585},[260,5620,599],{"class":497},[260,5622,5623],{"class":1121}," CUSTOMER_ID",[260,5625,599],{"class":497},[260,5627,5628],{"class":585}," chat_conv",[260,5630,599],{"class":497},[260,5632,5633],{"class":300}," '",[260,5635,2497],{"class":270},[260,5637,1307],{"class":300},[260,5639,610],{"class":497},[260,5641,1317],{"class":1295},[260,5643,301],{"class":270},[260,5645,704],{"class":497},[260,5647,5649],{"class":262,"line":5648},345,[260,5650,369],{"emptyLinePlaceholder":368},[260,5652,5654,5657,5659,5661,5663,5666],{"class":262,"line":5653},346,[260,5655,5656],{"class":292},"    q2 ",[260,5658,297],{"class":296},[260,5660,5547],{"class":497},[260,5662,301],{"class":300},[260,5664,5665],{"class":270},"对了，我下周要出差，换的耳机最好这周五前寄到我公司地址：",[260,5667,307],{"class":300},[260,5669,5671,5673,5676,5678],{"class":262,"line":5670},347,[260,5672,5560],{"class":300},[260,5674,5675],{"class":270},"上海市浦东新区世纪大道 100 号。进度发短信告诉我就行。",[260,5677,301],{"class":300},[260,5679,704],{"class":497},[260,5681,5683,5685,5687,5689,5691,5693,5695,5697,5700,5702,5704],{"class":262,"line":5682},348,[260,5684,4642],{"class":1121},[260,5686,589],{"class":497},[260,5688,1656],{"class":288},[260,5690,301],{"class":270},[260,5692,2560],{"class":2559},[260,5694,5583],{"class":270},[260,5696,1296],{"class":1295},[260,5698,5699],{"class":585},"q2",[260,5701,1317],{"class":1295},[260,5703,301],{"class":270},[260,5705,704],{"class":497},[260,5707,5709,5711,5713,5715,5717,5719,5721,5723,5725,5727,5729,5731,5733,5735,5737,5739,5741,5743,5745,5747,5749,5751],{"class":262,"line":5708},349,[260,5710,4642],{"class":1121},[260,5712,589],{"class":497},[260,5714,1656],{"class":288},[260,5716,5606],{"class":270},[260,5718,1296],{"class":1295},[260,5720,3710],{"class":585},[260,5722,576],{"class":497},[260,5724,3320],{"class":585},[260,5726,589],{"class":497},[260,5728,5699],{"class":585},[260,5730,599],{"class":497},[260,5732,5623],{"class":1121},[260,5734,599],{"class":497},[260,5736,5628],{"class":585},[260,5738,599],{"class":497},[260,5740,5633],{"class":300},[260,5742,2497],{"class":270},[260,5744,1307],{"class":300},[260,5746,610],{"class":497},[260,5748,1317],{"class":1295},[260,5750,301],{"class":270},[260,5752,704],{"class":497},[260,5754,5756],{"class":262,"line":5755},350,[260,5757,369],{"emptyLinePlaceholder":368},[260,5759,5761,5763],{"class":262,"line":5760},351,[260,5762,4642],{"class":1121},[260,5764,1615],{"class":497},[260,5766,5768,5770,5772,5774,5776,5778,5780,5782],{"class":262,"line":5767},352,[260,5769,4642],{"class":1121},[260,5771,589],{"class":497},[260,5773,301],{"class":300},[260,5775,297],{"class":270},[260,5777,301],{"class":300},[260,5779,3260],{"class":296},[260,5781,5479],{"class":828},[260,5783,704],{"class":497},[260,5785,5787,5789,5791,5793,5796,5798],{"class":262,"line":5786},353,[260,5788,4642],{"class":1121},[260,5790,589],{"class":497},[260,5792,301],{"class":300},[260,5794,5795],{"class":270},"DAY 4 · 邮件工单渠道：同一消费者追问进度（新会话、不同渠道）",[260,5797,301],{"class":300},[260,5799,704],{"class":497},[260,5801,5803,5805,5807,5809,5811,5813,5815,5817],{"class":262,"line":5802},354,[260,5804,4642],{"class":1121},[260,5806,589],{"class":497},[260,5808,301],{"class":300},[260,5810,297],{"class":270},[260,5812,301],{"class":300},[260,5814,3260],{"class":296},[260,5816,5479],{"class":828},[260,5818,704],{"class":497},[260,5820,5822,5825,5827,5829,5832],{"class":262,"line":5821},355,[260,5823,5824],{"class":292},"    mail_conv ",[260,5826,297],{"class":296},[260,5828,602],{"class":300},[260,5830,5831],{"class":270},"conv_mail_0824",[260,5833,307],{"class":300},[260,5835,5837],{"class":262,"line":5836},356,[260,5838,369],{"emptyLinePlaceholder":368},[260,5840,5842,5845,5847,5849,5852],{"class":262,"line":5841},357,[260,5843,5844],{"class":292},"    q3 ",[260,5846,297],{"class":296},[260,5848,602],{"class":300},[260,5850,5851],{"class":270},"你好，我之前反馈的耳机换货，现在进行到哪一步了？",[260,5853,307],{"class":300},[260,5855,5857,5859,5861,5863,5865,5867,5869,5871,5874,5876,5878],{"class":262,"line":5856},358,[260,5858,4642],{"class":1121},[260,5860,589],{"class":497},[260,5862,1656],{"class":288},[260,5864,301],{"class":270},[260,5866,2560],{"class":2559},[260,5868,5583],{"class":270},[260,5870,1296],{"class":1295},[260,5872,5873],{"class":585},"q3",[260,5875,1317],{"class":1295},[260,5877,301],{"class":270},[260,5879,704],{"class":497},[260,5881,5883,5885,5887,5889,5891,5893,5895,5897,5899,5901,5903,5905,5907,5909,5912,5914,5916,5918,5920,5922,5924,5926],{"class":262,"line":5882},359,[260,5884,4642],{"class":1121},[260,5886,589],{"class":497},[260,5888,1656],{"class":288},[260,5890,5606],{"class":270},[260,5892,1296],{"class":1295},[260,5894,3710],{"class":585},[260,5896,576],{"class":497},[260,5898,3320],{"class":585},[260,5900,589],{"class":497},[260,5902,5873],{"class":585},[260,5904,599],{"class":497},[260,5906,5623],{"class":1121},[260,5908,599],{"class":497},[260,5910,5911],{"class":585}," mail_conv",[260,5913,599],{"class":497},[260,5915,5633],{"class":300},[260,5917,2515],{"class":270},[260,5919,1307],{"class":300},[260,5921,610],{"class":497},[260,5923,1317],{"class":1295},[260,5925,301],{"class":270},[260,5927,704],{"class":497},[260,5929,5931],{"class":262,"line":5930},360,[260,5932,369],{"emptyLinePlaceholder":368},[260,5934,5936,5938],{"class":262,"line":5935},361,[260,5937,4642],{"class":1121},[260,5939,1615],{"class":497},[260,5941,5943,5945,5947,5949,5952,5954],{"class":262,"line":5942},362,[260,5944,4642],{"class":1121},[260,5946,589],{"class":497},[260,5948,301],{"class":300},[260,5950,5951],{"class":270},"演示结束：DAY 4 的回复应自动关联 DAY 1 的订单、故障商品、收货时间要求",[260,5953,301],{"class":300},[260,5955,704],{"class":497},[260,5957,5959,5961,5963,5965,5968,5970],{"class":262,"line":5958},363,[260,5960,4642],{"class":1121},[260,5962,589],{"class":497},[260,5964,301],{"class":300},[260,5966,5967],{"class":270},"与通知偏好，无需消费者重复描述。这就是跨渠道记忆带来的体验差异。",[260,5969,301],{"class":300},[260,5971,704],{"class":497},[260,5973,5975],{"class":262,"line":5974},364,[260,5976,369],{"emptyLinePlaceholder":368},[260,5978,5980],{"class":262,"line":5979},365,[260,5981,369],{"emptyLinePlaceholder":368},[260,5983,5985,5988,5991,5993,5995,5998,6000],{"class":262,"line":5984},366,[260,5986,5987],{"class":420},"if",[260,5989,5990],{"class":660}," __name__",[260,5992,2381],{"class":296},[260,5994,602],{"class":300},[260,5996,5997],{"class":270},"__main__",[260,5999,301],{"class":300},[260,6001,498],{"class":497},[260,6003,6005,6008,6010,6013,6015,6018,6020,6023,6025,6027,6030,6032],{"class":262,"line":6004},367,[260,6006,6007],{"class":292},"    parser ",[260,6009,297],{"class":296},[260,6011,6012],{"class":292}," argparse",[260,6014,576],{"class":497},[260,6016,6017],{"class":585},"ArgumentParser",[260,6019,589],{"class":497},[260,6021,6022],{"class":1192},"description",[260,6024,297],{"class":296},[260,6026,301],{"class":300},[260,6028,6029],{"class":270},"MemOS 客服场景最佳实践 Demo",[260,6031,301],{"class":300},[260,6033,704],{"class":497},[260,6035,6037,6040,6042,6045,6047,6049,6052,6054,6056,6059,6061,6063,6066,6068],{"class":262,"line":6036},368,[260,6038,6039],{"class":292},"    parser",[260,6041,576],{"class":497},[260,6043,6044],{"class":585},"add_argument",[260,6046,589],{"class":497},[260,6048,301],{"class":300},[260,6050,6051],{"class":270},"--setup",[260,6053,301],{"class":300},[260,6055,599],{"class":497},[260,6057,6058],{"class":1192}," action",[260,6060,297],{"class":296},[260,6062,301],{"class":300},[260,6064,6065],{"class":270},"store_true",[260,6067,301],{"class":300},[260,6069,1231],{"class":497},[260,6071,6073,6076,6078,6080,6083,6085],{"class":262,"line":6072},369,[260,6074,6075],{"class":1192},"                        help",[260,6077,297],{"class":296},[260,6079,301],{"class":300},[260,6081,6082],{"class":270},"创建知识库并上传示例政策文档与 Skill",[260,6084,301],{"class":300},[260,6086,704],{"class":497},[260,6088,6090,6093,6095,6098,6100,6103],{"class":262,"line":6089},370,[260,6091,6092],{"class":292},"    args ",[260,6094,297],{"class":296},[260,6096,6097],{"class":292}," parser",[260,6099,576],{"class":497},[260,6101,6102],{"class":585},"parse_args",[260,6104,1615],{"class":497},[260,6106,6108],{"class":262,"line":6107},371,[260,6109,369],{"emptyLinePlaceholder":368},[260,6111,6113,6115,6117,6119,6121,6123,6125,6127,6129,6131,6133,6135,6137,6139],{"class":262,"line":6112},372,[260,6114,4501],{"class":420},[260,6116,667],{"class":292},[260,6118,576],{"class":497},[260,6120,580],{"class":579},[260,6122,1204],{"class":497},[260,6124,301],{"class":300},[260,6126,594],{"class":270},[260,6128,301],{"class":300},[260,6130,1314],{"class":497},[260,6132,2381],{"class":296},[260,6134,602],{"class":300},[260,6136,605],{"class":270},[260,6138,301],{"class":300},[260,6140,498],{"class":497},[260,6142,6144,6146,6148,6150,6152,6154,6157,6159],{"class":262,"line":6143},373,[260,6145,4529],{"class":292},[260,6147,576],{"class":497},[260,6149,4534],{"class":585},[260,6151,589],{"class":497},[260,6153,301],{"class":300},[260,6155,6156],{"class":270},"请先配置 MEMOS_API_KEY",[260,6158,301],{"class":300},[260,6160,704],{"class":497},[260,6162,6164],{"class":262,"line":6163},374,[260,6165,369],{"emptyLinePlaceholder":368},[260,6167,6169,6171,6174,6176,6179],{"class":262,"line":6168},375,[260,6170,4501],{"class":420},[260,6172,6173],{"class":292}," args",[260,6175,576],{"class":497},[260,6177,6178],{"class":579},"setup",[260,6180,498],{"class":497},[260,6182,6184,6187],{"class":262,"line":6183},376,[260,6185,6186],{"class":585},"        setup_knowledge_base",[260,6188,1615],{"class":497},[260,6190,6192,6194],{"class":262,"line":6191},377,[260,6193,5320],{"class":420},[260,6195,498],{"class":497},[260,6197,6199,6201,6203,6205,6207,6209,6211,6213,6215,6217,6219,6221,6223,6225],{"class":262,"line":6198},378,[260,6200,1137],{"class":420},[260,6202,667],{"class":292},[260,6204,576],{"class":497},[260,6206,580],{"class":579},[260,6208,1204],{"class":497},[260,6210,301],{"class":300},[260,6212,633],{"class":270},[260,6214,301],{"class":300},[260,6216,1314],{"class":497},[260,6218,2381],{"class":296},[260,6220,602],{"class":300},[260,6222,642],{"class":270},[260,6224,301],{"class":300},[260,6226,498],{"class":497},[260,6228,6230,6233,6235,6237,6239,6241,6244,6246],{"class":262,"line":6229},379,[260,6231,6232],{"class":292},"            sys",[260,6234,576],{"class":497},[260,6236,4534],{"class":585},[260,6238,589],{"class":497},[260,6240,301],{"class":300},[260,6242,6243],{"class":270},"请先配置 OPENAI_API_KEY",[260,6245,301],{"class":300},[260,6247,704],{"class":497},[260,6249,6251,6253,6256,6258],{"class":262,"line":6250},380,[260,6252,1137],{"class":420},[260,6254,6255],{"class":296}," not",[260,6257,1352],{"class":660},[260,6259,498],{"class":497},[260,6261,6263,6265,6267,6269,6271,6273,6276,6278],{"class":262,"line":6262},381,[260,6264,6232],{"class":292},[260,6266,576],{"class":497},[260,6268,4534],{"class":585},[260,6270,589],{"class":497},[260,6272,301],{"class":300},[260,6274,6275],{"class":270},"请先运行 python customer_service_demo.py --setup 并配置 MEMOS_KB_ID",[260,6277,301],{"class":300},[260,6279,704],{"class":497},[260,6281,6283,6286],{"class":262,"line":6282},382,[260,6284,6285],{"class":585},"        run_demo",[260,6287,1615],{"class":497},[26,6289],{},[336,6291,6293],{"id":6292},"_222-初始化运行环境","2.2.2 初始化运行环境",[157,6295,6297],{"className":254,"code":6296,"language":256,"meta":163,"style":163},"pip install openai requests\n",[165,6298,6299],{"__ignoreMap":163},[260,6300,6301,6304,6307,6310],{"class":262,"line":263},[260,6302,6303],{"class":266},"pip",[260,6305,6306],{"class":270}," install",[260,6308,6309],{"class":270}," openai",[260,6311,483],{"class":270},[26,6313],{},[336,6315,6317],{"id":6316},"_223-配置环境变量","2.2.3 配置环境变量",[16,6319,6320,6321,6325],{},"登录",[314,6322,319],{"href":6323,"rel":6324},"https://memos-dashboard.openmem.net/cn/apikeys/",[318],"复制 MemOS 密钥，大模型密钥可替换为任意 OpenAI 兼容接口：",[157,6327,6329],{"className":254,"code":6328,"language":256,"meta":163,"style":163},"export MEMOS_API_KEY=\"mpg-xxx\"\nexport OPENAI_API_KEY=\"sk-xxx\"\nexport MEMOS_KB_ID=\"\u003C2.1 创建的知识库 ID>\"\n",[165,6330,6331,6346,6361],{"__ignoreMap":163},[260,6332,6333,6335,6338,6340,6342,6344],{"class":262,"line":263},[260,6334,289],{"class":288},[260,6336,6337],{"class":292}," MEMOS_API_KEY",[260,6339,297],{"class":296},[260,6341,301],{"class":300},[260,6343,605],{"class":270},[260,6345,307],{"class":300},[260,6347,6348,6350,6353,6355,6357,6359],{"class":262,"line":278},[260,6349,289],{"class":288},[260,6351,6352],{"class":292}," OPENAI_API_KEY",[260,6354,297],{"class":296},[260,6356,301],{"class":300},[260,6358,642],{"class":270},[260,6360,307],{"class":300},[260,6362,6363,6365,6367,6369,6371,6374],{"class":262,"line":285},[260,6364,289],{"class":288},[260,6366,293],{"class":292},[260,6368,297],{"class":296},[260,6370,301],{"class":300},[260,6372,6373],{"class":270},"\u003C2.1 创建的知识库 ID>",[260,6375,307],{"class":300},[26,6377],{},[336,6379,6381],{"id":6380},"_224-执行代码","2.2.4 执行代码",[157,6383,6385],{"className":254,"code":6384,"language":256,"meta":163,"style":163},"python customer_service_demo.py\n",[165,6386,6387],{"__ignoreMap":163},[260,6388,6389,6391],{"class":262,"line":263},[260,6390,267],{"class":266},[260,6392,6393],{"class":270}," customer_service_demo.py\n",[26,6395],{},[29,6397,6399],{"id":6398},"_23-演示效果","2.3 演示效果",[16,6401,6402],{},"DAY 1 在线客服渠道，Agent 受理换货并记下消费者的时间要求与通知偏好。DAY 4 消费者改从邮件渠道追问进度，以下是 MemOS 实际召回的内容：",[157,6404,6407],{"className":6405,"code":6406,"language":162,"meta":163},[160],"DAY 4 · 邮件工单渠道（新会话、不同渠道、同一 user_id）\n\n[消费者] 你好，我之前反馈的耳机换货，现在进行到哪一步了？\n  ---- MemOS 召回内容 ----\n  [记忆 0.75] 订单 20260820-88 的耳机换货正在处理中，换货件预计本周五寄达公司地址\n  [记忆 0.75] 订单 20260820-88 的耳机问题属于 15 天质量问题换货范围\n  [记忆 0.63] 消费者反馈降噪耳机左耳有明显电流声和杂音\n  [记忆 0.61] 知识库：换货件发出前支持修改一次收货地址\n  [偏好] 换货件本周五前寄至公司地址（上海市浦东新区世纪大道 100 号），短信接收进度通知\n  [Skill 0.69] 质量问题换货处理\n  ------------------------\n[客服助手] 您好，您反馈的订单 20260820-88 耳机换货工单正在处理中：\n换货件将于本周五前寄往上海市浦东新区世纪大道 100 号，发出后会短信通知物流单号，请留意查收。\n",[165,6408,6406],{"__ignoreMap":163},[16,6410,6411],{},"新会话、新渠道，但订单号、故障描述、地址要求与通知偏好全部自动衔接，无需消费者重复描述。",[26,6413],{},[29,6415,6417],{"id":6416},"_24-代码说明","2.4 代码说明",[37,6419,6420,6423,6430,6436,6464],{},[40,6421,6422],{},"在环境变量中配置 MemOS 密钥、大模型密钥与知识库 ID。",[40,6424,6425,6426,6429],{},"实例化 ",[165,6427,6428],{},"CustomerServiceAssistant","。",[40,6431,6432,6435],{},[165,6433,6434],{},"run_demo()"," 模拟两天、两个渠道的三轮对话。",[40,6437,6438,6439,6442,6443],{},"每轮对话由 ",[165,6440,6441],{},"chat()"," 执行固定闭环：\n",[247,6444,6445,6451,6456,6459],{},[40,6446,6447,6448,6450],{},"调用 ",[165,6449,3469],{},"，拉取当前会话近期消息；",[40,6452,6447,6453,6455],{},[165,6454,3514],{},"，一次调用联合召回个人记忆、偏好、知识库与 Skill，并按相关性阈值过滤；",[40,6457,6458],{},"用通过筛选的记忆组装 system prompt，注入大模型生成回复；",[40,6460,6447,6461,6463],{},[165,6462,3655],{}," 写回本轮对话，沉淀为长期记忆，渠道记入 tags 与 info。",[40,6465,6466],{},"检索或写回失败时降级为无记忆回复，不阻塞消费者。",[26,6468],{},[11,6470,6472],{"id":6471},"_3-生产落地建议","3. 生产落地建议",[29,6474,6476],{"id":6475},"_31-user_id-与权限","3.1 user_id 与权限",[247,6478,6479,6482,6489],{},[40,6480,6481],{},"user_id 必须来自登录态或 CRM 的稳定标识，不要按会话随机生成。消费者换设备、清缓存、换渠道后，仍能命中同一份记忆。",[40,6483,6484,6485,6488],{},"记忆默认按 user_id 隔离。写入时开启 ",[165,6486,6487],{},"allow_public"," 的记忆进入公共记忆库，项目下所有用户可检索，适合存放脱敏后的客服经验；个体消费者的对话记忆不要写入公共记忆库。",[40,6490,6491],{},"多渠道接入时用 tags 或 info 标记渠道来源，便于审计「哪条记忆来自哪个渠道」。",[26,6493],{},[29,6495,6497],{"id":6496},"_32-时延与异步","3.2 时延与异步",[247,6499,6500,6503,6506],{},[40,6501,6502],{},"检索接口典型响应约 200–300 毫秒，放在生成回复前同步调用即可。",[40,6504,6505],{},"记忆写入默认异步执行，后台数秒内完成结构化处理。写回操作不要阻塞客服回复链路。",[40,6507,6508],{},"写入后立刻检索可能查不到最新记忆。演示脚本为此预留了等待时间，生产环境中下一轮对话自然命中即可。",[26,6510],{},[29,6512,6514],{"id":6513},"_33-召回调优","3.3 召回调优",[247,6516,6517,6526],{},[40,6518,6519,6520,6522,6523,6525],{},"用 ",[165,6521,1799],{}," 控制相关性阈值，用 ",[165,6524,1519],{}," 控制返回条数。阈值过低会带入噪音，过高会漏掉有效背景，可从 0.5 起步按 badcase 调整。",[40,6527,6528],{},"调优按根因分层：回答内容错误优先修订知识库文档；该召回的没召回、召回了不相关内容，再调整检索参数或联系 MemOS 支持。",[26,6530],{},[29,6532,6534],{"id":6533},"_34-skill-生命周期","3.4 Skill 生命周期",[247,6536,6537,6540,6543],{},[40,6538,6539],{},"通用服务流程由业务方统一维护为 Skill 并上传知识库，保证全员处理口径一致。",[40,6541,6542],{},"坐席个人在授权范围内沉淀的经验，可随对话写入由 MemOS 自动沉淀。",[40,6544,6545,6546,6548],{},"检索时开启 ",[165,6547,1502],{},"，匹配的 Skill 随记忆一起返回。若返回的 Skill 缺少结构化内容字段，可将 SOP 要点同时作为普通文档上传知识库，确保处理流程能进入 prompt。",[6550,6551,6552],"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 .sp2SP, html code.shiki .sp2SP{--shiki-light:#91B859;--shiki-default:#023B95;--shiki-dark:#79C0FF}html pre.shiki code .sfVK4, html code.shiki .sfVK4{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#66707B;--shiki-default-font-style:inherit;--shiki-dark:#8B949E;--shiki-dark-font-style:inherit}html pre.shiki code .sZ6T4, html code.shiki .sZ6T4{--shiki-light:#9C3EDA;--shiki-default:#A0111F;--shiki-dark:#FF7B72}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 .sjUum, html code.shiki .sjUum{--shiki-light:#39ADB5;--shiki-default:#032563;--shiki-dark:#A5D6FF}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 .s9tbJ, html code.shiki .s9tbJ{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#032563;--shiki-default-font-style:inherit;--shiki-dark:#A5D6FF;--shiki-dark-font-style:inherit}html pre.shiki code .soLfw, html code.shiki .soLfw{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#032563;--shiki-default-font-style:inherit;--shiki-dark:#A5D6FF;--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 .suWxN, html code.shiki .suWxN{--shiki-light:#39ADB5;--shiki-default:#0E1116;--shiki-dark:#E6EDF3}html pre.shiki code .skqQ-, html code.shiki .skqQ-{--shiki-light:#E2931D;--shiki-default:#023B95;--shiki-dark:#79C0FF}html pre.shiki code .smHB8, html code.shiki .smHB8{--shiki-light:#39ADB5;--shiki-default:#023B95;--shiki-dark:#79C0FF}html pre.shiki code .s5qkx, html code.shiki .s5qkx{--shiki-light:#E53935;--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 .sZaqd, html code.shiki .sZaqd{--shiki-light:#90A4AE;--shiki-default:#023B95;--shiki-dark:#79C0FF}html pre.shiki code .sJNII, html code.shiki .sJNII{--shiki-light:#F76D47;--shiki-default:#023B95;--shiki-dark:#79C0FF}html pre.shiki code .svxCd, html code.shiki .svxCd{--shiki-light:#6182B8;--shiki-default:#023B95;--shiki-dark:#79C0FF}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 .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 .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 .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 .seOsA, html code.shiki .seOsA{--shiki-light:#90A4AE;--shiki-default:#A0111F;--shiki-dark:#FF7B72}html pre.shiki code .skqL1, html code.shiki .skqL1{--shiki-light:#39ADB5;--shiki-default:#622CBC;--shiki-dark:#D2A8FF}",{"title":163,"searchDepth":278,"depth":278,"links":6554},[6555,6561,6567],{"id":13,"depth":278,"text":14,"children":6556},[6557,6558,6559,6560],{"id":31,"depth":285,"text":32},{"id":69,"depth":285,"text":70},{"id":151,"depth":285,"text":152},{"id":192,"depth":285,"text":193},{"id":232,"depth":278,"text":233,"children":6562},[6563,6564,6565,6566],{"id":241,"depth":285,"text":242},{"id":328,"depth":285,"text":329},{"id":6398,"depth":285,"text":6399},{"id":6416,"depth":285,"text":6417},{"id":6471,"depth":278,"text":6472,"children":6568},[6569,6570,6571,6572],{"id":6475,"depth":285,"text":6476},{"id":6496,"depth":285,"text":6497},{"id":6513,"depth":285,"text":6514},{"id":6533,"depth":285,"text":6534},"融合长期记忆与知识库，让客服 Agent 跨渠道记住每一位消费者：未完成事项自动衔接、偏好自动生效、政策口径一致、客服经验持续复用。","md",{},"/cn/usecase/customer_service_assistant",{"title":5,"description":163},"cn/usecase/customer_service_assistant","Zagh0PEH5k9AiiLdwPPVJTZ4kH1PmHpd_jfoidbLI24",[6581,6589],{"title":6582,"path":6583,"stem":6584,"icon":6585,"framework":6,"module":6,"class":6586,"target":-1,"active":6587,"defaultOpen":6587,"children":-1,"description":6588},"让知识库成为懂你的专属顾问","/cn/usecase/knowledge_qa_assistant","usecase/knowledge_qa_assistant","i-ri-customer-service-2-line",[],false,"融合长期记忆与知识库，告别 “千人一面” 的检索结果，基于用户背景与偏好提供个性化、精准化解答，让知识库成为懂你的专属顾问。",{"title":6590,"path":6591,"stem":6592,"icon":6593,"framework":6,"module":6,"class":6594,"target":-1,"active":6587,"defaultOpen":6587,"children":-1,"description":6595},"让理财助手读懂客户偏好","/cn/usecase/financial_assistant","usecase/financial_assistant","i-ri-money-dollar-circle-line",[],"借助 MemOS，将用户的操作与对话行为抽象为“记忆”，从而识别并提炼背后的投资偏好，实现更懂客户的个性化服务。",1788265170687]