[{"data":1,"prerenderedAt":3628},["ShallowReactive",2],{"navigation":3,"post-\u002Fposts\u002F2025\u002Fdisplay-deepseek-r1-thinking":20,"surroundPosts-\u002Fposts\u002F2025\u002Fdisplay-deepseek-r1-thinking":3615},[4,8,12,16],{"title":5,"path":6,"stem":7},"首页","\u002F","00.index",{"title":9,"path":10,"stem":11},"文章","\u002Fposts","01.posts",{"title":13,"path":14,"stem":15},"动态","\u002Fmoments","02.moments",{"title":17,"path":18,"stem":19},"关于","\u002Fabout","09.about",{"id":21,"title":22,"body":23,"class":3593,"cover":3594,"coverSize":3593,"date":3595,"description":29,"draft":3596,"extension":3597,"hideComments":3596,"location":3593,"meta":3598,"navigation":374,"path":3599,"readingTime":3600,"seo":3605,"sitemap":3606,"stem":3608,"tags":3609,"time":3593,"weather":3593,"__hash__":3614},"posts\u002Fposts\u002F2025\u002F20250212.display-deepseek-r1-thinking.md","如何在 Open WebUI 中显示 DeepSeek-R1 的思考过程",{"type":24,"value":25,"toc":3586},"minimark",[26,30,53,58,65,122,127,236,240,257,261,274,277,281,296,299,304,307,315,318,327,3477,3482,3485,3490,3493,3497,3512,3515,3520,3523,3527,3534,3550,3573,3576,3579,3582],[27,28,29],"p",{},"书接上回，咱们部署好了 DeepSeek-R1 之后，发现没办法显示思考过程，只能等结果出来之后查看结果，这个体感上就会感觉响应很慢。",[27,31,32,33,40,41,46,47,52],{},"查看了 ",[34,35,39],"a",{"href":36,"rel":37},"https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fopen-webui",[38],"nofollow","open-webui"," 的 issues，发现已经有人提过这个问题，并且已有",[34,42,45],{"href":43,"rel":44},"https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fopen-webui\u002Fissues\u002F9488#issuecomment-2640537231",[38],"解决方案","，那就是通过 ",[34,48,51],{"href":49,"rel":50},"https:\u002F\u002Fdocs.openwebui.com\u002Fpipelines\u002F",[38],"Pipelines"," 来实现。具体步骤如下：",[54,55,57],"h2",{"id":56},"_1-部署-pipelines-容器","1. 部署 pipelines 容器",[59,60,61],"ul",{},[62,63,64],"li",{},"docker run 命令：",[66,67,72],"pre",{"className":68,"code":69,"language":70,"meta":71,"style":71},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","docker run -d -p 9099:9099 --add-host=host.docker.internal:host-gateway -v pipelines:\u002Fapp\u002Fpipelines --name pipelines --restart always ghcr.io\u002Fopen-webui\u002Fpipelines:main\n","bash","",[73,74,75],"code",{"__ignoreMap":71},[76,77,80,84,88,92,95,98,101,104,107,110,113,116,119],"span",{"class":78,"line":79},"line",1,[76,81,83],{"class":82},"sbgvK","docker",[76,85,87],{"class":86},"s_sjI"," run",[76,89,91],{"class":90},"stzsN"," -d",[76,93,94],{"class":90}," -p",[76,96,97],{"class":86}," 9099:9099",[76,99,100],{"class":90}," --add-host=host.docker.internal:host-gateway",[76,102,103],{"class":90}," -v",[76,105,106],{"class":86}," pipelines:\u002Fapp\u002Fpipelines",[76,108,109],{"class":90}," --name",[76,111,112],{"class":86}," pipelines",[76,114,115],{"class":90}," --restart",[76,117,118],{"class":86}," always",[76,120,121],{"class":86}," ghcr.io\u002Fopen-webui\u002Fpipelines:main\n",[59,123,124],{},[62,125,126],{},"docker-compose.yml 配置：",[66,128,132],{"className":129,"code":130,"language":131,"meta":71,"style":71},"language-yaml shiki shiki-themes material-theme-lighter github-light github-dark","services:\n  open-webui-pipelines:\n    container_name: open-webui-pipelines\n    image: ghcr.io\u002Fopen-webui\u002Fpipelines:main\n    network_mode: bridge\n    ports:\n      - '9099:9099'\n    volumes:\n      - .\u002Fpipelines:\u002Fapp\u002Fpipelines\n    restart: always\n","yaml",[73,133,134,144,152,164,174,185,193,209,217,225],{"__ignoreMap":71},[76,135,136,140],{"class":78,"line":79},[76,137,139],{"class":138},"sQzsp","services",[76,141,143],{"class":142},"sP7_E",":\n",[76,145,147,150],{"class":78,"line":146},2,[76,148,149],{"class":138},"  open-webui-pipelines",[76,151,143],{"class":142},[76,153,155,158,161],{"class":78,"line":154},3,[76,156,157],{"class":138},"    container_name",[76,159,160],{"class":142},":",[76,162,163],{"class":86}," open-webui-pipelines\n",[76,165,167,170,172],{"class":78,"line":166},4,[76,168,169],{"class":138},"    image",[76,171,160],{"class":142},[76,173,121],{"class":86},[76,175,177,180,182],{"class":78,"line":176},5,[76,178,179],{"class":138},"    network_mode",[76,181,160],{"class":142},[76,183,184],{"class":86}," bridge\n",[76,186,188,191],{"class":78,"line":187},6,[76,189,190],{"class":138},"    ports",[76,192,143],{"class":142},[76,194,196,199,203,206],{"class":78,"line":195},7,[76,197,198],{"class":142},"      -",[76,200,202],{"class":201},"sjJ54"," '",[76,204,205],{"class":86},"9099:9099",[76,207,208],{"class":201},"'\n",[76,210,212,215],{"class":78,"line":211},8,[76,213,214],{"class":138},"    volumes",[76,216,143],{"class":142},[76,218,220,222],{"class":78,"line":219},9,[76,221,198],{"class":142},[76,223,224],{"class":86}," .\u002Fpipelines:\u002Fapp\u002Fpipelines\n",[76,226,228,231,233],{"class":78,"line":227},10,[76,229,230],{"class":138},"    restart",[76,232,160],{"class":142},[76,234,235],{"class":86}," always\n",[54,237,239],{"id":238},"_2-配置管道连接","2. 配置管道连接",[59,241,242],{},[62,243,244,245,248,249,252,253,256],{},"在 ",[73,246,247],{},"管理员设置"," -> ",[73,250,251],{},"外部连接"," 中按 ",[73,254,255],{},"+"," 添加一个连接。",[258,259],"post-image",{"filename":260},"01.png",[59,262,263],{},[62,264,265,266,269,270,273],{},"管道地址通过内网 IP、hostname 或域名等，加上前面 pipelines 容器的端口号 ",[73,267,268],{},"9099","；密钥是固定的 ",[73,271,272],{},"0p3n-w3bu!","。",[258,275],{"filename":276},"02.png",[54,278,280],{"id":279},"_3-创建函数","3. 创建函数",[59,282,283],{},[62,284,285,286,291,292,295],{},"访问 ",[34,287,290],{"href":288,"rel":289},"https:\u002F\u002Fopenwebui.com\u002Ff\u002Fzgccrui\u002Fdeepseek_r1",[38],"DeepSeek R1 Function"," 函数页面，通过 ",[73,293,294],{},"Get"," 按钮完成注册。",[258,297],{"filename":298},"03.png",[59,300,301],{},[62,302,303],{},"注册完成之后，在弹出的页面中输入自己的站点地址自动跳转并导入函数。",[258,305],{"filename":306},"04.png",[59,308,309],{},[62,310,311,312,314],{},"也可以手动复制该函数代码，然后点击 ",[73,313,255],{}," 加号手动添加。",[258,316],{"filename":317},"05.png",[59,319,320],{},[62,321,322,323,326],{},"以下是我在 ",[73,324,325],{},"1.2.10"," 版本上修改过的代码，支持了模型显示名的配置，这样方便与原始版本区分",[66,328,332],{"className":329,"code":330,"language":331,"meta":71,"style":71},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","\"\"\"\ntitle: DeepSeek R1\nauthor: zgccrui\ndescription: 在OpwenWebUI中显示DeepSeek R1模型的思维链 - 仅支持0.5.6及以上版本\nversion: 1.2.10\nlicence: MIT\n\"\"\"\n\nimport json\nimport httpx\nimport re\nfrom typing import AsyncGenerator, Callable, Awaitable\nfrom pydantic import BaseModel, Field\nimport asyncio\n\nclass Pipe:\n    class Valves(BaseModel):\n        DEEPSEEK_API_BASE_URL: str = Field(\n            default=\"https:\u002F\u002Fapi.deepseek.com\u002Fv1\",\n            description=\"DeepSeek API的基础请求地址\",\n        )\n        DEEPSEEK_API_KEY: str = Field(\n            default=\"\", description=\"用于身份验证的DeepSeek API密钥，可从控制台获取\"\n        )\n        DEEPSEEK_API_MODEL: str = Field(\n            default=\"deepseek-reasoner\",\n            description=\"API请求的模型名称，默认为 deepseek-reasoner\",\n        )\n        DEEPSEEK_MODEL_DISPLAY_NAME: str = Field(\n            default=\"deepseek-reasoner-fix\",\n            description=\"模型名称，默认为 deepseek-reasoner-fix\",\n        )\n\n    def __init__(self):\n        self.valves = self.Valves()\n        self.data_prefix = \"data:\"\n        self.emitter = None\n\n    def pipes(self):\n        return [\n            {\n                \"id\": self.valves.DEEPSEEK_API_MODEL,\n                \"name\": self.valves.DEEPSEEK_MODEL_DISPLAY_NAME,\n            }\n        ]\n\n    async def pipe(\n        self, body: dict, __event_emitter__: Callable[[dict], Awaitable[None]] = None\n    ) -> AsyncGenerator[str, None]:\n        \"\"\"主处理管道（已移除缓冲）\"\"\"\n        thinking_state = {\"thinking\": -1}  # 使用字典来存储thinking状态\n        self.emitter = __event_emitter__\n\n        # 验证配置\n        if not self.valves.DEEPSEEK_API_KEY:\n            yield json.dumps({\"error\": \"未配置API密钥\"}, ensure_ascii=False)\n            return\n\n        # 准备请求参数\n        headers = {\n            \"Authorization\": f\"Bearer {self.valves.DEEPSEEK_API_KEY}\",\n            \"Content-Type\": \"application\u002Fjson\",\n        }\n\n        try:\n            # 模型ID提取\n            model_id = body[\"model\"].split(\".\", 1)[-1]\n            payload = {**body, \"model\": model_id}\n\n            # 处理消息以防止连续的相同角色\n            messages = payload[\"messages\"]\n            i = 0\n            while i \u003C len(messages) - 1:\n                if messages[i][\"role\"] == messages[i + 1][\"role\"]:\n                    # 插入具有替代角色的占位符消息\n                    alternate_role = (\n                        \"assistant\" if messages[i][\"role\"] == \"user\" else \"user\"\n                    )\n                    messages.insert(\n                        i + 1,\n                        {\"role\": alternate_role, \"content\": \"[Unfinished thinking]\"},\n                    )\n                i += 1\n\n            # yield json.dumps(payload, ensure_ascii=False)\n\n            # 发起API请求\n            async with httpx.AsyncClient(http2=True) as client:\n                async with client.stream(\n                    \"POST\",\n                    f\"{self.valves.DEEPSEEK_API_BASE_URL}\u002Fchat\u002Fcompletions\",\n                    json=payload,\n                    headers=headers,\n                    timeout=300,\n                ) as response:\n                    # 错误处理\n                    if response.status_code != 200:\n                        error = await response.aread()\n                        yield self._format_error(response.status_code, error)\n                        return\n\n                    # 流式处理响应\n                    async for line in response.aiter_lines():\n                        if not line.startswith(self.data_prefix):\n                            continue\n\n                        # 截取 JSON 字符串\n                        json_str = line[len(self.data_prefix) :]\n\n                        # 去除首尾空格后检查是否为结束标记\n                        if json_str.strip() == \"[DONE]\":\n                            return\n\n                        try:\n                            data = json.loads(json_str)\n                        except json.JSONDecodeError as e:\n                            # 格式化错误信息，这里传入错误类型和详细原因（包括出错内容和异常信息）\n                            error_detail = f\"解析失败 - 内容：{json_str}，原因：{e}\"\n                            yield self._format_error(\"JSONDecodeError\", error_detail)\n                            return\n\n                        choice = data.get(\"choices\", [{}])[0]\n\n                        # 结束条件判断\n                        if choice.get(\"finish_reason\"):\n                            return\n\n                        # 状态机处理\n                        state_output = await self._update_thinking_state(\n                            choice.get(\"delta\", {}), thinking_state\n                        )\n                        if state_output:\n                            yield state_output  # 直接发送状态标记\n                            if state_output == \"\u003Cthink>\":\n                                yield \"\\n\"\n\n                        # 内容处理并立即发送\n                        content = self._process_content(choice[\"delta\"])\n                        if content:\n                            if content.startswith(\"\u003Cthink>\"):\n                                match = re.match(r\"^\u003Cthink>\", content)\n                                if match:\n                                    content = re.sub(r\"^\u003Cthink>\", \"\", content)\n                                    yield \"\u003Cthink>\"\n                                    await asyncio.sleep(0.1)\n                                    yield \"\\n\"\n\n                            elif content.startswith(\"\u003C\u002Fthink>\"):\n                                match = re.match(r\"^\u003C\u002Fthink>\", content)\n                                if match:\n                                    content = re.sub(r\"^\u003C\u002Fthink>\", \"\", content)\n                                    yield \"\u003C\u002Fthink>\"\n                                    await asyncio.sleep(0.1)\n                                    yield \"\\n\"\n                            yield content\n\n        except Exception as e:\n            yield self._format_exception(e)\n\n    async def _update_thinking_state(self, delta: dict, thinking_state: dict) -> str:\n        \"\"\"更新思考状态机（简化版）\"\"\"\n        state_output = \"\"\n\n        # 状态转换：未开始 -> 思考中\n        if thinking_state[\"thinking\"] == -1 and delta.get(\"reasoning_content\"):\n            thinking_state[\"thinking\"] = 0\n            state_output = \"\u003Cthink>\"\n\n        # 状态转换：思考中 -> 已回答\n        elif (\n            thinking_state[\"thinking\"] == 0\n            and not delta.get(\"reasoning_content\")\n            and delta.get(\"content\")\n        ):\n            thinking_state[\"thinking\"] = 1\n            state_output = \"\\n\u003C\u002Fthink>\\n\\n\"\n\n        return state_output\n\n    def _process_content(self, delta: dict) -> str:\n        \"\"\"直接返回处理后的内容\"\"\"\n        return delta.get(\"reasoning_content\", \"\") or delta.get(\"content\", \"\")\n\n    def _format_error(self, status_code: int, error: bytes) -> str:\n        # 如果 error 已经是字符串，则无需 decode\n        if isinstance(error, str):\n            error_str = error\n        else:\n            error_str = error.decode(errors=\"ignore\")\n\n        try:\n            err_msg = json.loads(error_str).get(\"message\", error_str)[:200]\n        except Exception as e:\n            err_msg = error_str[:200]\n        return json.dumps(\n            {\"error\": f\"HTTP {status_code}: {err_msg}\"}, ensure_ascii=False\n        )\n\n    def _format_exception(self, e: Exception) -> str:\n        \"\"\"异常格式化保持不变\"\"\"\n        err_type = type(e).__name__\n        return json.dumps({\"error\": f\"{err_type}: {str(e)}\"}, ensure_ascii=False)\n\n","python",[73,333,334,340,346,351,356,361,366,370,376,386,393,401,426,444,452,457,469,487,511,532,549,555,571,596,601,617,633,649,654,670,686,702,707,712,730,756,776,792,797,812,821,827,854,879,885,891,896,910,960,984,995,1029,1043,1048,1054,1076,1123,1129,1134,1140,1151,1189,1210,1216,1221,1229,1235,1284,1316,1321,1327,1349,1360,1388,1439,1445,1456,1504,1510,1523,1535,1573,1578,1590,1595,1601,1606,1612,1649,1666,1679,1707,1720,1733,1746,1759,1765,1786,1806,1835,1841,1846,1852,1877,1903,1909,1914,1920,1948,1953,1959,1986,1992,1997,2005,2027,2047,2053,2084,2111,2116,2121,2156,2161,2167,2190,2195,2200,2206,2225,2252,2258,2268,2279,2300,2313,2318,2324,2355,2365,2386,2423,2434,2472,2484,2505,2516,2521,2544,2575,2584,2619,2630,2647,2658,2666,2671,2686,2704,2709,2749,2759,2770,2775,2781,2824,2844,2858,2863,2869,2877,2896,2920,2941,2947,2966,2984,2989,2997,3002,3030,3040,3088,3093,3132,3138,3156,3167,3175,3205,3210,3217,3263,3276,3292,3305,3351,3356,3361,3389,3399,3419],{"__ignoreMap":71},[76,335,336],{"class":78,"line":79},[76,337,339],{"class":338},"s2W-s","\"\"\"\n",[76,341,342],{"class":78,"line":146},[76,343,345],{"class":344},"sithA","title: DeepSeek R1\n",[76,347,348],{"class":78,"line":154},[76,349,350],{"class":344},"author: zgccrui\n",[76,352,353],{"class":78,"line":166},[76,354,355],{"class":344},"description: 在OpwenWebUI中显示DeepSeek R1模型的思维链 - 仅支持0.5.6及以上版本\n",[76,357,358],{"class":78,"line":176},[76,359,360],{"class":344},"version: 1.2.10\n",[76,362,363],{"class":78,"line":187},[76,364,365],{"class":344},"licence: MIT\n",[76,367,368],{"class":78,"line":195},[76,369,339],{"class":338},[76,371,372],{"class":78,"line":211},[76,373,375],{"emptyLinePlaceholder":374},true,"\n",[76,377,378,382],{"class":78,"line":219},[76,379,381],{"class":380},"sVHd0","import",[76,383,385],{"class":384},"su5hD"," json\n",[76,387,388,390],{"class":78,"line":227},[76,389,381],{"class":380},[76,391,392],{"class":384}," httpx\n",[76,394,396,398],{"class":78,"line":395},11,[76,397,381],{"class":380},[76,399,400],{"class":384}," re\n",[76,402,404,407,410,412,415,418,421,423],{"class":78,"line":403},12,[76,405,406],{"class":380},"from",[76,408,409],{"class":384}," typing ",[76,411,381],{"class":380},[76,413,414],{"class":384}," AsyncGenerator",[76,416,417],{"class":142},",",[76,419,420],{"class":384}," Callable",[76,422,417],{"class":142},[76,424,425],{"class":384}," Awaitable\n",[76,427,429,431,434,436,439,441],{"class":78,"line":428},13,[76,430,406],{"class":380},[76,432,433],{"class":384}," pydantic ",[76,435,381],{"class":380},[76,437,438],{"class":384}," BaseModel",[76,440,417],{"class":142},[76,442,443],{"class":384}," Field\n",[76,445,447,449],{"class":78,"line":446},14,[76,448,381],{"class":380},[76,450,451],{"class":384}," asyncio\n",[76,453,455],{"class":78,"line":454},15,[76,456,375],{"emptyLinePlaceholder":374},[76,458,460,464,467],{"class":78,"line":459},16,[76,461,463],{"class":462},"sbsja","class",[76,465,466],{"class":82}," Pipe",[76,468,143],{"class":142},[76,470,472,475,478,481,484],{"class":78,"line":471},17,[76,473,474],{"class":462},"    class",[76,476,477],{"class":82}," Valves",[76,479,480],{"class":142},"(",[76,482,483],{"class":82},"BaseModel",[76,485,486],{"class":142},"):\n",[76,488,490,494,496,500,504,508],{"class":78,"line":489},18,[76,491,493],{"class":492},"s_hVV","        DEEPSEEK_API_BASE_URL",[76,495,160],{"class":142},[76,497,499],{"class":498},"sZMiF"," str",[76,501,503],{"class":502},"smGrS"," =",[76,505,507],{"class":506},"slqww"," Field",[76,509,510],{"class":142},"(\n",[76,512,514,518,521,524,527,529],{"class":78,"line":513},19,[76,515,517],{"class":516},"s99_P","            default",[76,519,520],{"class":502},"=",[76,522,523],{"class":201},"\"",[76,525,526],{"class":86},"https:\u002F\u002Fapi.deepseek.com\u002Fv1",[76,528,523],{"class":201},[76,530,531],{"class":142},",\n",[76,533,535,538,540,542,545,547],{"class":78,"line":534},20,[76,536,537],{"class":516},"            description",[76,539,520],{"class":502},[76,541,523],{"class":201},[76,543,544],{"class":86},"DeepSeek API的基础请求地址",[76,546,523],{"class":201},[76,548,531],{"class":142},[76,550,552],{"class":78,"line":551},21,[76,553,554],{"class":142},"        )\n",[76,556,558,561,563,565,567,569],{"class":78,"line":557},22,[76,559,560],{"class":492},"        DEEPSEEK_API_KEY",[76,562,160],{"class":142},[76,564,499],{"class":498},[76,566,503],{"class":502},[76,568,507],{"class":506},[76,570,510],{"class":142},[76,572,574,576,578,581,583,586,588,590,593],{"class":78,"line":573},23,[76,575,517],{"class":516},[76,577,520],{"class":502},[76,579,580],{"class":201},"\"\"",[76,582,417],{"class":142},[76,584,585],{"class":516}," description",[76,587,520],{"class":502},[76,589,523],{"class":201},[76,591,592],{"class":86},"用于身份验证的DeepSeek API密钥，可从控制台获取",[76,594,595],{"class":201},"\"\n",[76,597,599],{"class":78,"line":598},24,[76,600,554],{"class":142},[76,602,604,607,609,611,613,615],{"class":78,"line":603},25,[76,605,606],{"class":492},"        DEEPSEEK_API_MODEL",[76,608,160],{"class":142},[76,610,499],{"class":498},[76,612,503],{"class":502},[76,614,507],{"class":506},[76,616,510],{"class":142},[76,618,620,622,624,626,629,631],{"class":78,"line":619},26,[76,621,517],{"class":516},[76,623,520],{"class":502},[76,625,523],{"class":201},[76,627,628],{"class":86},"deepseek-reasoner",[76,630,523],{"class":201},[76,632,531],{"class":142},[76,634,636,638,640,642,645,647],{"class":78,"line":635},27,[76,637,537],{"class":516},[76,639,520],{"class":502},[76,641,523],{"class":201},[76,643,644],{"class":86},"API请求的模型名称，默认为 deepseek-reasoner",[76,646,523],{"class":201},[76,648,531],{"class":142},[76,650,652],{"class":78,"line":651},28,[76,653,554],{"class":142},[76,655,657,660,662,664,666,668],{"class":78,"line":656},29,[76,658,659],{"class":492},"        DEEPSEEK_MODEL_DISPLAY_NAME",[76,661,160],{"class":142},[76,663,499],{"class":498},[76,665,503],{"class":502},[76,667,507],{"class":506},[76,669,510],{"class":142},[76,671,673,675,677,679,682,684],{"class":78,"line":672},30,[76,674,517],{"class":516},[76,676,520],{"class":502},[76,678,523],{"class":201},[76,680,681],{"class":86},"deepseek-reasoner-fix",[76,683,523],{"class":201},[76,685,531],{"class":142},[76,687,689,691,693,695,698,700],{"class":78,"line":688},31,[76,690,537],{"class":516},[76,692,520],{"class":502},[76,694,523],{"class":201},[76,696,697],{"class":86},"模型名称，默认为 deepseek-reasoner-fix",[76,699,523],{"class":201},[76,701,531],{"class":142},[76,703,705],{"class":78,"line":704},32,[76,706,554],{"class":142},[76,708,710],{"class":78,"line":709},33,[76,711,375],{"emptyLinePlaceholder":374},[76,713,715,718,722,724,728],{"class":78,"line":714},34,[76,716,717],{"class":462},"    def",[76,719,721],{"class":720},"sptTA"," __init__",[76,723,480],{"class":142},[76,725,727],{"class":726},"smCYv","self",[76,729,486],{"class":142},[76,731,733,736,739,743,745,748,750,753],{"class":78,"line":732},35,[76,734,735],{"class":492},"        self",[76,737,738],{"class":142},".",[76,740,742],{"class":741},"skxfh","valves",[76,744,503],{"class":502},[76,746,747],{"class":492}," self",[76,749,738],{"class":142},[76,751,752],{"class":506},"Valves",[76,754,755],{"class":142},"()\n",[76,757,759,761,763,766,768,771,774],{"class":78,"line":758},36,[76,760,735],{"class":492},[76,762,738],{"class":142},[76,764,765],{"class":741},"data_prefix",[76,767,503],{"class":502},[76,769,770],{"class":201}," \"",[76,772,773],{"class":86},"data:",[76,775,595],{"class":201},[76,777,779,781,783,786,788],{"class":78,"line":778},37,[76,780,735],{"class":492},[76,782,738],{"class":142},[76,784,785],{"class":741},"emitter",[76,787,503],{"class":502},[76,789,791],{"class":790},"s39Yj"," None\n",[76,793,795],{"class":78,"line":794},38,[76,796,375],{"emptyLinePlaceholder":374},[76,798,800,802,806,808,810],{"class":78,"line":799},39,[76,801,717],{"class":462},[76,803,805],{"class":804},"sGLFI"," pipes",[76,807,480],{"class":142},[76,809,727],{"class":726},[76,811,486],{"class":142},[76,813,815,818],{"class":78,"line":814},40,[76,816,817],{"class":380},"        return",[76,819,820],{"class":142}," [\n",[76,822,824],{"class":78,"line":823},41,[76,825,826],{"class":142},"            {\n",[76,828,830,833,836,838,840,842,844,846,848,852],{"class":78,"line":829},42,[76,831,832],{"class":201},"                \"",[76,834,835],{"class":86},"id",[76,837,523],{"class":201},[76,839,160],{"class":142},[76,841,747],{"class":492},[76,843,738],{"class":142},[76,845,742],{"class":741},[76,847,738],{"class":142},[76,849,851],{"class":850},"swQdS","DEEPSEEK_API_MODEL",[76,853,531],{"class":142},[76,855,857,859,862,864,866,868,870,872,874,877],{"class":78,"line":856},43,[76,858,832],{"class":201},[76,860,861],{"class":86},"name",[76,863,523],{"class":201},[76,865,160],{"class":142},[76,867,747],{"class":492},[76,869,738],{"class":142},[76,871,742],{"class":741},[76,873,738],{"class":142},[76,875,876],{"class":850},"DEEPSEEK_MODEL_DISPLAY_NAME",[76,878,531],{"class":142},[76,880,882],{"class":78,"line":881},44,[76,883,884],{"class":142},"            }\n",[76,886,888],{"class":78,"line":887},45,[76,889,890],{"class":142},"        ]\n",[76,892,894],{"class":78,"line":893},46,[76,895,375],{"emptyLinePlaceholder":374},[76,897,899,902,905,908],{"class":78,"line":898},47,[76,900,901],{"class":462},"    async",[76,903,904],{"class":462}," def",[76,906,907],{"class":804}," pipe",[76,909,510],{"class":142},[76,911,913,915,917,921,923,926,928,931,933,935,938,941,944,947,950,953,956,958],{"class":78,"line":912},48,[76,914,735],{"class":726},[76,916,417],{"class":142},[76,918,920],{"class":919},"sFwrP"," body",[76,922,160],{"class":142},[76,924,925],{"class":498}," dict",[76,927,417],{"class":142},[76,929,930],{"class":919}," __event_emitter__",[76,932,160],{"class":142},[76,934,420],{"class":384},[76,936,937],{"class":142},"[[",[76,939,940],{"class":498},"dict",[76,942,943],{"class":142},"],",[76,945,946],{"class":384}," Awaitable",[76,948,949],{"class":142},"[",[76,951,952],{"class":790},"None",[76,954,955],{"class":142},"]]",[76,957,503],{"class":502},[76,959,791],{"class":790},[76,961,963,966,969,971,973,976,978,981],{"class":78,"line":962},49,[76,964,965],{"class":142},"    )",[76,967,968],{"class":142}," ->",[76,970,414],{"class":384},[76,972,949],{"class":142},[76,974,975],{"class":498},"str",[76,977,417],{"class":142},[76,979,980],{"class":790}," None",[76,982,983],{"class":142},"]:\n",[76,985,987,990,993],{"class":78,"line":986},50,[76,988,989],{"class":338},"        \"\"\"",[76,991,992],{"class":344},"主处理管道（已移除缓冲）",[76,994,339],{"class":338},[76,996,998,1001,1003,1006,1008,1011,1013,1015,1018,1022,1025],{"class":78,"line":997},51,[76,999,1000],{"class":384},"        thinking_state ",[76,1002,520],{"class":502},[76,1004,1005],{"class":142}," {",[76,1007,523],{"class":201},[76,1009,1010],{"class":86},"thinking",[76,1012,523],{"class":201},[76,1014,160],{"class":142},[76,1016,1017],{"class":502}," -",[76,1019,1021],{"class":1020},"srdBf","1",[76,1023,1024],{"class":142},"}",[76,1026,1028],{"class":1027},"sutJx","  # 使用字典来存储thinking状态\n",[76,1030,1032,1034,1036,1038,1040],{"class":78,"line":1031},52,[76,1033,735],{"class":492},[76,1035,738],{"class":142},[76,1037,785],{"class":741},[76,1039,503],{"class":502},[76,1041,1042],{"class":384}," __event_emitter__\n",[76,1044,1046],{"class":78,"line":1045},53,[76,1047,375],{"emptyLinePlaceholder":374},[76,1049,1051],{"class":78,"line":1050},54,[76,1052,1053],{"class":1027},"        # 验证配置\n",[76,1055,1057,1060,1063,1065,1067,1069,1071,1074],{"class":78,"line":1056},55,[76,1058,1059],{"class":380},"        if",[76,1061,1062],{"class":502}," not",[76,1064,747],{"class":492},[76,1066,738],{"class":142},[76,1068,742],{"class":741},[76,1070,738],{"class":142},[76,1072,1073],{"class":850},"DEEPSEEK_API_KEY",[76,1075,143],{"class":142},[76,1077,1079,1082,1085,1087,1090,1093,1095,1098,1100,1102,1104,1107,1109,1112,1115,1117,1120],{"class":78,"line":1078},56,[76,1080,1081],{"class":380},"            yield",[76,1083,1084],{"class":384}," json",[76,1086,738],{"class":142},[76,1088,1089],{"class":506},"dumps",[76,1091,1092],{"class":142},"({",[76,1094,523],{"class":201},[76,1096,1097],{"class":86},"error",[76,1099,523],{"class":201},[76,1101,160],{"class":142},[76,1103,770],{"class":201},[76,1105,1106],{"class":86},"未配置API密钥",[76,1108,523],{"class":201},[76,1110,1111],{"class":142},"},",[76,1113,1114],{"class":516}," ensure_ascii",[76,1116,520],{"class":502},[76,1118,1119],{"class":790},"False",[76,1121,1122],{"class":142},")\n",[76,1124,1126],{"class":78,"line":1125},57,[76,1127,1128],{"class":380},"            return\n",[76,1130,1132],{"class":78,"line":1131},58,[76,1133,375],{"emptyLinePlaceholder":374},[76,1135,1137],{"class":78,"line":1136},59,[76,1138,1139],{"class":1027},"        # 准备请求参数\n",[76,1141,1143,1146,1148],{"class":78,"line":1142},60,[76,1144,1145],{"class":384},"        headers ",[76,1147,520],{"class":502},[76,1149,1150],{"class":142}," {\n",[76,1152,1154,1157,1160,1162,1164,1167,1170,1173,1175,1177,1179,1181,1183,1185,1187],{"class":78,"line":1153},61,[76,1155,1156],{"class":201},"            \"",[76,1158,1159],{"class":86},"Authorization",[76,1161,523],{"class":201},[76,1163,160],{"class":142},[76,1165,1166],{"class":462}," f",[76,1168,1169],{"class":86},"\"Bearer ",[76,1171,1172],{"class":1020},"{",[76,1174,727],{"class":492},[76,1176,738],{"class":142},[76,1178,742],{"class":741},[76,1180,738],{"class":142},[76,1182,1073],{"class":850},[76,1184,1024],{"class":1020},[76,1186,523],{"class":86},[76,1188,531],{"class":142},[76,1190,1192,1194,1197,1199,1201,1203,1206,1208],{"class":78,"line":1191},62,[76,1193,1156],{"class":201},[76,1195,1196],{"class":86},"Content-Type",[76,1198,523],{"class":201},[76,1200,160],{"class":142},[76,1202,770],{"class":201},[76,1204,1205],{"class":86},"application\u002Fjson",[76,1207,523],{"class":201},[76,1209,531],{"class":142},[76,1211,1213],{"class":78,"line":1212},63,[76,1214,1215],{"class":142},"        }\n",[76,1217,1219],{"class":78,"line":1218},64,[76,1220,375],{"emptyLinePlaceholder":374},[76,1222,1224,1227],{"class":78,"line":1223},65,[76,1225,1226],{"class":380},"        try",[76,1228,143],{"class":142},[76,1230,1232],{"class":78,"line":1231},66,[76,1233,1234],{"class":1027},"            # 模型ID提取\n",[76,1236,1238,1241,1243,1245,1247,1249,1252,1254,1257,1260,1262,1264,1266,1268,1270,1273,1276,1279,1281],{"class":78,"line":1237},67,[76,1239,1240],{"class":384},"            model_id ",[76,1242,520],{"class":502},[76,1244,920],{"class":384},[76,1246,949],{"class":142},[76,1248,523],{"class":201},[76,1250,1251],{"class":86},"model",[76,1253,523],{"class":201},[76,1255,1256],{"class":142},"].",[76,1258,1259],{"class":506},"split",[76,1261,480],{"class":142},[76,1263,523],{"class":201},[76,1265,738],{"class":86},[76,1267,523],{"class":201},[76,1269,417],{"class":142},[76,1271,1272],{"class":1020}," 1",[76,1274,1275],{"class":142},")[",[76,1277,1278],{"class":502},"-",[76,1280,1021],{"class":1020},[76,1282,1283],{"class":142},"]\n",[76,1285,1287,1290,1292,1294,1297,1300,1302,1304,1306,1308,1310,1313],{"class":78,"line":1286},68,[76,1288,1289],{"class":384},"            payload ",[76,1291,520],{"class":502},[76,1293,1005],{"class":142},[76,1295,1296],{"class":502},"**",[76,1298,1299],{"class":384},"body",[76,1301,417],{"class":142},[76,1303,770],{"class":201},[76,1305,1251],{"class":86},[76,1307,523],{"class":201},[76,1309,160],{"class":142},[76,1311,1312],{"class":384}," model_id",[76,1314,1315],{"class":142},"}\n",[76,1317,1319],{"class":78,"line":1318},69,[76,1320,375],{"emptyLinePlaceholder":374},[76,1322,1324],{"class":78,"line":1323},70,[76,1325,1326],{"class":1027},"            # 处理消息以防止连续的相同角色\n",[76,1328,1330,1333,1335,1338,1340,1342,1345,1347],{"class":78,"line":1329},71,[76,1331,1332],{"class":384},"            messages ",[76,1334,520],{"class":502},[76,1336,1337],{"class":384}," payload",[76,1339,949],{"class":142},[76,1341,523],{"class":201},[76,1343,1344],{"class":86},"messages",[76,1346,523],{"class":201},[76,1348,1283],{"class":142},[76,1350,1352,1355,1357],{"class":78,"line":1351},72,[76,1353,1354],{"class":384},"            i ",[76,1356,520],{"class":502},[76,1358,1359],{"class":1020}," 0\n",[76,1361,1363,1366,1369,1372,1375,1377,1379,1382,1384,1386],{"class":78,"line":1362},73,[76,1364,1365],{"class":380},"            while",[76,1367,1368],{"class":384}," i ",[76,1370,1371],{"class":502},"\u003C",[76,1373,1374],{"class":720}," len",[76,1376,480],{"class":142},[76,1378,1344],{"class":506},[76,1380,1381],{"class":142},")",[76,1383,1017],{"class":502},[76,1385,1272],{"class":1020},[76,1387,143],{"class":142},[76,1389,1391,1394,1397,1399,1402,1405,1407,1410,1412,1415,1418,1420,1422,1425,1427,1429,1431,1433,1435,1437],{"class":78,"line":1390},74,[76,1392,1393],{"class":380},"                if",[76,1395,1396],{"class":384}," messages",[76,1398,949],{"class":142},[76,1400,1401],{"class":384},"i",[76,1403,1404],{"class":142},"][",[76,1406,523],{"class":201},[76,1408,1409],{"class":86},"role",[76,1411,523],{"class":201},[76,1413,1414],{"class":142},"]",[76,1416,1417],{"class":502}," ==",[76,1419,1396],{"class":384},[76,1421,949],{"class":142},[76,1423,1424],{"class":384},"i ",[76,1426,255],{"class":502},[76,1428,1272],{"class":1020},[76,1430,1404],{"class":142},[76,1432,523],{"class":201},[76,1434,1409],{"class":86},[76,1436,523],{"class":201},[76,1438,983],{"class":142},[76,1440,1442],{"class":78,"line":1441},75,[76,1443,1444],{"class":1027},"                    # 插入具有替代角色的占位符消息\n",[76,1446,1448,1451,1453],{"class":78,"line":1447},76,[76,1449,1450],{"class":384},"                    alternate_role ",[76,1452,520],{"class":502},[76,1454,1455],{"class":142}," (\n",[76,1457,1459,1462,1465,1467,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1493,1495,1498,1500,1502],{"class":78,"line":1458},77,[76,1460,1461],{"class":201},"                        \"",[76,1463,1464],{"class":86},"assistant",[76,1466,523],{"class":201},[76,1468,1469],{"class":380}," if",[76,1471,1396],{"class":384},[76,1473,949],{"class":142},[76,1475,1401],{"class":384},[76,1477,1404],{"class":142},[76,1479,523],{"class":201},[76,1481,1409],{"class":86},[76,1483,523],{"class":201},[76,1485,1414],{"class":142},[76,1487,1417],{"class":502},[76,1489,770],{"class":201},[76,1491,1492],{"class":86},"user",[76,1494,523],{"class":201},[76,1496,1497],{"class":380}," else",[76,1499,770],{"class":201},[76,1501,1492],{"class":86},[76,1503,595],{"class":201},[76,1505,1507],{"class":78,"line":1506},78,[76,1508,1509],{"class":142},"                    )\n",[76,1511,1513,1516,1518,1521],{"class":78,"line":1512},79,[76,1514,1515],{"class":384},"                    messages",[76,1517,738],{"class":142},[76,1519,1520],{"class":506},"insert",[76,1522,510],{"class":142},[76,1524,1526,1529,1531,1533],{"class":78,"line":1525},80,[76,1527,1528],{"class":506},"                        i ",[76,1530,255],{"class":502},[76,1532,1272],{"class":1020},[76,1534,531],{"class":142},[76,1536,1538,1541,1543,1545,1547,1549,1552,1554,1556,1559,1561,1563,1565,1568,1570],{"class":78,"line":1537},81,[76,1539,1540],{"class":142},"                        {",[76,1542,523],{"class":201},[76,1544,1409],{"class":86},[76,1546,523],{"class":201},[76,1548,160],{"class":142},[76,1550,1551],{"class":506}," alternate_role",[76,1553,417],{"class":142},[76,1555,770],{"class":201},[76,1557,1558],{"class":86},"content",[76,1560,523],{"class":201},[76,1562,160],{"class":142},[76,1564,770],{"class":201},[76,1566,1567],{"class":86},"[Unfinished thinking]",[76,1569,523],{"class":201},[76,1571,1572],{"class":142},"},\n",[76,1574,1576],{"class":78,"line":1575},82,[76,1577,1509],{"class":142},[76,1579,1581,1584,1587],{"class":78,"line":1580},83,[76,1582,1583],{"class":384},"                i ",[76,1585,1586],{"class":502},"+=",[76,1588,1589],{"class":1020}," 1\n",[76,1591,1593],{"class":78,"line":1592},84,[76,1594,375],{"emptyLinePlaceholder":374},[76,1596,1598],{"class":78,"line":1597},85,[76,1599,1600],{"class":1027},"            # yield json.dumps(payload, ensure_ascii=False)\n",[76,1602,1604],{"class":78,"line":1603},86,[76,1605,375],{"emptyLinePlaceholder":374},[76,1607,1609],{"class":78,"line":1608},87,[76,1610,1611],{"class":1027},"            # 发起API请求\n",[76,1613,1615,1618,1621,1624,1626,1629,1631,1634,1636,1639,1641,1644,1647],{"class":78,"line":1614},88,[76,1616,1617],{"class":380},"            async",[76,1619,1620],{"class":380}," with",[76,1622,1623],{"class":384}," httpx",[76,1625,738],{"class":142},[76,1627,1628],{"class":506},"AsyncClient",[76,1630,480],{"class":142},[76,1632,1633],{"class":516},"http2",[76,1635,520],{"class":502},[76,1637,1638],{"class":790},"True",[76,1640,1381],{"class":142},[76,1642,1643],{"class":380}," as",[76,1645,1646],{"class":384}," client",[76,1648,143],{"class":142},[76,1650,1652,1655,1657,1659,1661,1664],{"class":78,"line":1651},89,[76,1653,1654],{"class":380},"                async",[76,1656,1620],{"class":380},[76,1658,1646],{"class":384},[76,1660,738],{"class":142},[76,1662,1663],{"class":506},"stream",[76,1665,510],{"class":142},[76,1667,1669,1672,1675,1677],{"class":78,"line":1668},90,[76,1670,1671],{"class":201},"                    \"",[76,1673,1674],{"class":86},"POST",[76,1676,523],{"class":201},[76,1678,531],{"class":142},[76,1680,1682,1685,1687,1689,1691,1693,1695,1697,1700,1702,1705],{"class":78,"line":1681},91,[76,1683,1684],{"class":462},"                    f",[76,1686,523],{"class":86},[76,1688,1172],{"class":1020},[76,1690,727],{"class":492},[76,1692,738],{"class":142},[76,1694,742],{"class":741},[76,1696,738],{"class":142},[76,1698,1699],{"class":850},"DEEPSEEK_API_BASE_URL",[76,1701,1024],{"class":1020},[76,1703,1704],{"class":86},"\u002Fchat\u002Fcompletions\"",[76,1706,531],{"class":142},[76,1708,1710,1713,1715,1718],{"class":78,"line":1709},92,[76,1711,1712],{"class":516},"                    json",[76,1714,520],{"class":502},[76,1716,1717],{"class":506},"payload",[76,1719,531],{"class":142},[76,1721,1723,1726,1728,1731],{"class":78,"line":1722},93,[76,1724,1725],{"class":516},"                    headers",[76,1727,520],{"class":502},[76,1729,1730],{"class":506},"headers",[76,1732,531],{"class":142},[76,1734,1736,1739,1741,1744],{"class":78,"line":1735},94,[76,1737,1738],{"class":516},"                    timeout",[76,1740,520],{"class":502},[76,1742,1743],{"class":1020},"300",[76,1745,531],{"class":142},[76,1747,1749,1752,1754,1757],{"class":78,"line":1748},95,[76,1750,1751],{"class":142},"                )",[76,1753,1643],{"class":380},[76,1755,1756],{"class":384}," response",[76,1758,143],{"class":142},[76,1760,1762],{"class":78,"line":1761},96,[76,1763,1764],{"class":1027},"                    # 错误处理\n",[76,1766,1768,1771,1773,1775,1778,1781,1784],{"class":78,"line":1767},97,[76,1769,1770],{"class":380},"                    if",[76,1772,1756],{"class":384},[76,1774,738],{"class":142},[76,1776,1777],{"class":741},"status_code",[76,1779,1780],{"class":502}," !=",[76,1782,1783],{"class":1020}," 200",[76,1785,143],{"class":142},[76,1787,1789,1792,1794,1797,1799,1801,1804],{"class":78,"line":1788},98,[76,1790,1791],{"class":384},"                        error ",[76,1793,520],{"class":502},[76,1795,1796],{"class":380}," await",[76,1798,1756],{"class":384},[76,1800,738],{"class":142},[76,1802,1803],{"class":506},"aread",[76,1805,755],{"class":142},[76,1807,1809,1812,1814,1816,1819,1821,1824,1826,1828,1830,1833],{"class":78,"line":1808},99,[76,1810,1811],{"class":380},"                        yield",[76,1813,747],{"class":492},[76,1815,738],{"class":142},[76,1817,1818],{"class":506},"_format_error",[76,1820,480],{"class":142},[76,1822,1823],{"class":506},"response",[76,1825,738],{"class":142},[76,1827,1777],{"class":741},[76,1829,417],{"class":142},[76,1831,1832],{"class":506}," error",[76,1834,1122],{"class":142},[76,1836,1838],{"class":78,"line":1837},100,[76,1839,1840],{"class":380},"                        return\n",[76,1842,1844],{"class":78,"line":1843},101,[76,1845,375],{"emptyLinePlaceholder":374},[76,1847,1849],{"class":78,"line":1848},102,[76,1850,1851],{"class":1027},"                    # 流式处理响应\n",[76,1853,1855,1858,1861,1864,1867,1869,1871,1874],{"class":78,"line":1854},103,[76,1856,1857],{"class":380},"                    async",[76,1859,1860],{"class":380}," for",[76,1862,1863],{"class":384}," line ",[76,1865,1866],{"class":380},"in",[76,1868,1756],{"class":384},[76,1870,738],{"class":142},[76,1872,1873],{"class":506},"aiter_lines",[76,1875,1876],{"class":142},"():\n",[76,1878,1880,1883,1885,1888,1890,1893,1895,1897,1899,1901],{"class":78,"line":1879},104,[76,1881,1882],{"class":380},"                        if",[76,1884,1062],{"class":502},[76,1886,1887],{"class":384}," line",[76,1889,738],{"class":142},[76,1891,1892],{"class":506},"startswith",[76,1894,480],{"class":142},[76,1896,727],{"class":492},[76,1898,738],{"class":142},[76,1900,765],{"class":741},[76,1902,486],{"class":142},[76,1904,1906],{"class":78,"line":1905},105,[76,1907,1908],{"class":380},"                            continue\n",[76,1910,1912],{"class":78,"line":1911},106,[76,1913,375],{"emptyLinePlaceholder":374},[76,1915,1917],{"class":78,"line":1916},107,[76,1918,1919],{"class":1027},"                        # 截取 JSON 字符串\n",[76,1921,1923,1926,1928,1930,1932,1935,1937,1939,1941,1943,1945],{"class":78,"line":1922},108,[76,1924,1925],{"class":384},"                        json_str ",[76,1927,520],{"class":502},[76,1929,1887],{"class":384},[76,1931,949],{"class":142},[76,1933,1934],{"class":720},"len",[76,1936,480],{"class":142},[76,1938,727],{"class":492},[76,1940,738],{"class":142},[76,1942,765],{"class":741},[76,1944,1381],{"class":142},[76,1946,1947],{"class":142}," :]\n",[76,1949,1951],{"class":78,"line":1950},109,[76,1952,375],{"emptyLinePlaceholder":374},[76,1954,1956],{"class":78,"line":1955},110,[76,1957,1958],{"class":1027},"                        # 去除首尾空格后检查是否为结束标记\n",[76,1960,1962,1964,1967,1969,1972,1975,1977,1979,1982,1984],{"class":78,"line":1961},111,[76,1963,1882],{"class":380},[76,1965,1966],{"class":384}," json_str",[76,1968,738],{"class":142},[76,1970,1971],{"class":506},"strip",[76,1973,1974],{"class":142},"()",[76,1976,1417],{"class":502},[76,1978,770],{"class":201},[76,1980,1981],{"class":86},"[DONE]",[76,1983,523],{"class":201},[76,1985,143],{"class":142},[76,1987,1989],{"class":78,"line":1988},112,[76,1990,1991],{"class":380},"                            return\n",[76,1993,1995],{"class":78,"line":1994},113,[76,1996,375],{"emptyLinePlaceholder":374},[76,1998,2000,2003],{"class":78,"line":1999},114,[76,2001,2002],{"class":380},"                        try",[76,2004,143],{"class":142},[76,2006,2008,2011,2013,2015,2017,2020,2022,2025],{"class":78,"line":2007},115,[76,2009,2010],{"class":384},"                            data ",[76,2012,520],{"class":502},[76,2014,1084],{"class":384},[76,2016,738],{"class":142},[76,2018,2019],{"class":506},"loads",[76,2021,480],{"class":142},[76,2023,2024],{"class":506},"json_str",[76,2026,1122],{"class":142},[76,2028,2030,2033,2035,2037,2040,2042,2045],{"class":78,"line":2029},116,[76,2031,2032],{"class":380},"                        except",[76,2034,1084],{"class":384},[76,2036,738],{"class":142},[76,2038,2039],{"class":741},"JSONDecodeError",[76,2041,1643],{"class":380},[76,2043,2044],{"class":384}," e",[76,2046,143],{"class":142},[76,2048,2050],{"class":78,"line":2049},117,[76,2051,2052],{"class":1027},"                            # 格式化错误信息，这里传入错误类型和详细原因（包括出错内容和异常信息）\n",[76,2054,2056,2059,2061,2063,2066,2068,2070,2072,2075,2077,2080,2082],{"class":78,"line":2055},118,[76,2057,2058],{"class":384},"                            error_detail ",[76,2060,520],{"class":502},[76,2062,1166],{"class":462},[76,2064,2065],{"class":86},"\"解析失败 - 内容：",[76,2067,1172],{"class":1020},[76,2069,2024],{"class":384},[76,2071,1024],{"class":1020},[76,2073,2074],{"class":86},"，原因：",[76,2076,1172],{"class":1020},[76,2078,2079],{"class":384},"e",[76,2081,1024],{"class":1020},[76,2083,595],{"class":86},[76,2085,2087,2090,2092,2094,2096,2098,2100,2102,2104,2106,2109],{"class":78,"line":2086},119,[76,2088,2089],{"class":380},"                            yield",[76,2091,747],{"class":492},[76,2093,738],{"class":142},[76,2095,1818],{"class":506},[76,2097,480],{"class":142},[76,2099,523],{"class":201},[76,2101,2039],{"class":86},[76,2103,523],{"class":201},[76,2105,417],{"class":142},[76,2107,2108],{"class":506}," error_detail",[76,2110,1122],{"class":142},[76,2112,2114],{"class":78,"line":2113},120,[76,2115,1991],{"class":380},[76,2117,2119],{"class":78,"line":2118},121,[76,2120,375],{"emptyLinePlaceholder":374},[76,2122,2124,2127,2129,2132,2134,2137,2139,2141,2144,2146,2148,2151,2154],{"class":78,"line":2123},122,[76,2125,2126],{"class":384},"                        choice ",[76,2128,520],{"class":502},[76,2130,2131],{"class":384}," data",[76,2133,738],{"class":142},[76,2135,2136],{"class":506},"get",[76,2138,480],{"class":142},[76,2140,523],{"class":201},[76,2142,2143],{"class":86},"choices",[76,2145,523],{"class":201},[76,2147,417],{"class":142},[76,2149,2150],{"class":142}," [{}])[",[76,2152,2153],{"class":1020},"0",[76,2155,1283],{"class":142},[76,2157,2159],{"class":78,"line":2158},123,[76,2160,375],{"emptyLinePlaceholder":374},[76,2162,2164],{"class":78,"line":2163},124,[76,2165,2166],{"class":1027},"                        # 结束条件判断\n",[76,2168,2170,2172,2175,2177,2179,2181,2183,2186,2188],{"class":78,"line":2169},125,[76,2171,1882],{"class":380},[76,2173,2174],{"class":384}," choice",[76,2176,738],{"class":142},[76,2178,2136],{"class":506},[76,2180,480],{"class":142},[76,2182,523],{"class":201},[76,2184,2185],{"class":86},"finish_reason",[76,2187,523],{"class":201},[76,2189,486],{"class":142},[76,2191,2193],{"class":78,"line":2192},126,[76,2194,1991],{"class":380},[76,2196,2198],{"class":78,"line":2197},127,[76,2199,375],{"emptyLinePlaceholder":374},[76,2201,2203],{"class":78,"line":2202},128,[76,2204,2205],{"class":1027},"                        # 状态机处理\n",[76,2207,2209,2212,2214,2216,2218,2220,2223],{"class":78,"line":2208},129,[76,2210,2211],{"class":384},"                        state_output ",[76,2213,520],{"class":502},[76,2215,1796],{"class":380},[76,2217,747],{"class":492},[76,2219,738],{"class":142},[76,2221,2222],{"class":506},"_update_thinking_state",[76,2224,510],{"class":142},[76,2226,2228,2231,2233,2235,2237,2239,2242,2244,2246,2249],{"class":78,"line":2227},130,[76,2229,2230],{"class":506},"                            choice",[76,2232,738],{"class":142},[76,2234,2136],{"class":506},[76,2236,480],{"class":142},[76,2238,523],{"class":201},[76,2240,2241],{"class":86},"delta",[76,2243,523],{"class":201},[76,2245,417],{"class":142},[76,2247,2248],{"class":142}," {}),",[76,2250,2251],{"class":506}," thinking_state\n",[76,2253,2255],{"class":78,"line":2254},131,[76,2256,2257],{"class":142},"                        )\n",[76,2259,2261,2263,2266],{"class":78,"line":2260},132,[76,2262,1882],{"class":380},[76,2264,2265],{"class":384}," state_output",[76,2267,143],{"class":142},[76,2269,2271,2273,2276],{"class":78,"line":2270},133,[76,2272,2089],{"class":380},[76,2274,2275],{"class":384}," state_output  ",[76,2277,2278],{"class":1027},"# 直接发送状态标记\n",[76,2280,2282,2285,2288,2291,2293,2296,2298],{"class":78,"line":2281},134,[76,2283,2284],{"class":380},"                            if",[76,2286,2287],{"class":384}," state_output ",[76,2289,2290],{"class":502},"==",[76,2292,770],{"class":201},[76,2294,2295],{"class":86},"\u003Cthink>",[76,2297,523],{"class":201},[76,2299,143],{"class":142},[76,2301,2303,2306,2308,2311],{"class":78,"line":2302},135,[76,2304,2305],{"class":380},"                                yield",[76,2307,770],{"class":201},[76,2309,2310],{"class":492},"\\n",[76,2312,595],{"class":201},[76,2314,2316],{"class":78,"line":2315},136,[76,2317,375],{"emptyLinePlaceholder":374},[76,2319,2321],{"class":78,"line":2320},137,[76,2322,2323],{"class":1027},"                        # 内容处理并立即发送\n",[76,2325,2327,2330,2332,2334,2336,2339,2341,2344,2346,2348,2350,2352],{"class":78,"line":2326},138,[76,2328,2329],{"class":384},"                        content ",[76,2331,520],{"class":502},[76,2333,747],{"class":492},[76,2335,738],{"class":142},[76,2337,2338],{"class":506},"_process_content",[76,2340,480],{"class":142},[76,2342,2343],{"class":506},"choice",[76,2345,949],{"class":142},[76,2347,523],{"class":201},[76,2349,2241],{"class":86},[76,2351,523],{"class":201},[76,2353,2354],{"class":142},"])\n",[76,2356,2358,2360,2363],{"class":78,"line":2357},139,[76,2359,1882],{"class":380},[76,2361,2362],{"class":384}," content",[76,2364,143],{"class":142},[76,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384],{"class":78,"line":2367},140,[76,2369,2284],{"class":380},[76,2371,2362],{"class":384},[76,2373,738],{"class":142},[76,2375,1892],{"class":506},[76,2377,480],{"class":142},[76,2379,523],{"class":201},[76,2381,2295],{"class":86},[76,2383,523],{"class":201},[76,2385,486],{"class":142},[76,2387,2389,2392,2394,2397,2399,2402,2404,2407,2409,2412,2415,2417,2419,2421],{"class":78,"line":2388},141,[76,2390,2391],{"class":384},"                                match ",[76,2393,520],{"class":502},[76,2395,2396],{"class":384}," re",[76,2398,738],{"class":142},[76,2400,2401],{"class":506},"match",[76,2403,480],{"class":142},[76,2405,2406],{"class":462},"r",[76,2408,523],{"class":201},[76,2410,2411],{"class":90},"^",[76,2413,2295],{"class":2414},"sQRbd",[76,2416,523],{"class":201},[76,2418,417],{"class":142},[76,2420,2362],{"class":506},[76,2422,1122],{"class":142},[76,2424,2426,2429,2432],{"class":78,"line":2425},142,[76,2427,2428],{"class":380},"                                if",[76,2430,2431],{"class":384}," match",[76,2433,143],{"class":142},[76,2435,2437,2440,2442,2444,2446,2449,2451,2453,2455,2457,2459,2461,2463,2466,2468,2470],{"class":78,"line":2436},143,[76,2438,2439],{"class":384},"                                    content ",[76,2441,520],{"class":502},[76,2443,2396],{"class":384},[76,2445,738],{"class":142},[76,2447,2448],{"class":506},"sub",[76,2450,480],{"class":142},[76,2452,2406],{"class":462},[76,2454,523],{"class":201},[76,2456,2411],{"class":90},[76,2458,2295],{"class":2414},[76,2460,523],{"class":201},[76,2462,417],{"class":142},[76,2464,2465],{"class":201}," \"\"",[76,2467,417],{"class":142},[76,2469,2362],{"class":506},[76,2471,1122],{"class":142},[76,2473,2475,2478,2480,2482],{"class":78,"line":2474},144,[76,2476,2477],{"class":380},"                                    yield",[76,2479,770],{"class":201},[76,2481,2295],{"class":86},[76,2483,595],{"class":201},[76,2485,2487,2490,2493,2495,2498,2500,2503],{"class":78,"line":2486},145,[76,2488,2489],{"class":380},"                                    await",[76,2491,2492],{"class":384}," asyncio",[76,2494,738],{"class":142},[76,2496,2497],{"class":506},"sleep",[76,2499,480],{"class":142},[76,2501,2502],{"class":1020},"0.1",[76,2504,1122],{"class":142},[76,2506,2508,2510,2512,2514],{"class":78,"line":2507},146,[76,2509,2477],{"class":380},[76,2511,770],{"class":201},[76,2513,2310],{"class":492},[76,2515,595],{"class":201},[76,2517,2519],{"class":78,"line":2518},147,[76,2520,375],{"emptyLinePlaceholder":374},[76,2522,2524,2527,2529,2531,2533,2535,2537,2540,2542],{"class":78,"line":2523},148,[76,2525,2526],{"class":380},"                            elif",[76,2528,2362],{"class":384},[76,2530,738],{"class":142},[76,2532,1892],{"class":506},[76,2534,480],{"class":142},[76,2536,523],{"class":201},[76,2538,2539],{"class":86},"\u003C\u002Fthink>",[76,2541,523],{"class":201},[76,2543,486],{"class":142},[76,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573],{"class":78,"line":2546},149,[76,2548,2391],{"class":384},[76,2550,520],{"class":502},[76,2552,2396],{"class":384},[76,2554,738],{"class":142},[76,2556,2401],{"class":506},[76,2558,480],{"class":142},[76,2560,2406],{"class":462},[76,2562,523],{"class":201},[76,2564,2411],{"class":90},[76,2566,2539],{"class":2414},[76,2568,523],{"class":201},[76,2570,417],{"class":142},[76,2572,2362],{"class":506},[76,2574,1122],{"class":142},[76,2576,2578,2580,2582],{"class":78,"line":2577},150,[76,2579,2428],{"class":380},[76,2581,2431],{"class":384},[76,2583,143],{"class":142},[76,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617],{"class":78,"line":2586},151,[76,2588,2439],{"class":384},[76,2590,520],{"class":502},[76,2592,2396],{"class":384},[76,2594,738],{"class":142},[76,2596,2448],{"class":506},[76,2598,480],{"class":142},[76,2600,2406],{"class":462},[76,2602,523],{"class":201},[76,2604,2411],{"class":90},[76,2606,2539],{"class":2414},[76,2608,523],{"class":201},[76,2610,417],{"class":142},[76,2612,2465],{"class":201},[76,2614,417],{"class":142},[76,2616,2362],{"class":506},[76,2618,1122],{"class":142},[76,2620,2622,2624,2626,2628],{"class":78,"line":2621},152,[76,2623,2477],{"class":380},[76,2625,770],{"class":201},[76,2627,2539],{"class":86},[76,2629,595],{"class":201},[76,2631,2633,2635,2637,2639,2641,2643,2645],{"class":78,"line":2632},153,[76,2634,2489],{"class":380},[76,2636,2492],{"class":384},[76,2638,738],{"class":142},[76,2640,2497],{"class":506},[76,2642,480],{"class":142},[76,2644,2502],{"class":1020},[76,2646,1122],{"class":142},[76,2648,2650,2652,2654,2656],{"class":78,"line":2649},154,[76,2651,2477],{"class":380},[76,2653,770],{"class":201},[76,2655,2310],{"class":492},[76,2657,595],{"class":201},[76,2659,2661,2663],{"class":78,"line":2660},155,[76,2662,2089],{"class":380},[76,2664,2665],{"class":384}," content\n",[76,2667,2669],{"class":78,"line":2668},156,[76,2670,375],{"emptyLinePlaceholder":374},[76,2672,2674,2677,2680,2682,2684],{"class":78,"line":2673},157,[76,2675,2676],{"class":380},"        except",[76,2678,2679],{"class":498}," Exception",[76,2681,1643],{"class":380},[76,2683,2044],{"class":384},[76,2685,143],{"class":142},[76,2687,2689,2691,2693,2695,2698,2700,2702],{"class":78,"line":2688},158,[76,2690,1081],{"class":380},[76,2692,747],{"class":492},[76,2694,738],{"class":142},[76,2696,2697],{"class":506},"_format_exception",[76,2699,480],{"class":142},[76,2701,2079],{"class":506},[76,2703,1122],{"class":142},[76,2705,2707],{"class":78,"line":2706},159,[76,2708,375],{"emptyLinePlaceholder":374},[76,2710,2712,2714,2716,2719,2721,2723,2725,2728,2730,2732,2734,2737,2739,2741,2743,2745,2747],{"class":78,"line":2711},160,[76,2713,901],{"class":462},[76,2715,904],{"class":462},[76,2717,2718],{"class":804}," _update_thinking_state",[76,2720,480],{"class":142},[76,2722,727],{"class":726},[76,2724,417],{"class":142},[76,2726,2727],{"class":919}," delta",[76,2729,160],{"class":142},[76,2731,925],{"class":498},[76,2733,417],{"class":142},[76,2735,2736],{"class":919}," thinking_state",[76,2738,160],{"class":142},[76,2740,925],{"class":498},[76,2742,1381],{"class":142},[76,2744,968],{"class":142},[76,2746,499],{"class":498},[76,2748,143],{"class":142},[76,2750,2752,2754,2757],{"class":78,"line":2751},161,[76,2753,989],{"class":338},[76,2755,2756],{"class":344},"更新思考状态机（简化版）",[76,2758,339],{"class":338},[76,2760,2762,2765,2767],{"class":78,"line":2761},162,[76,2763,2764],{"class":384},"        state_output ",[76,2766,520],{"class":502},[76,2768,2769],{"class":201}," \"\"\n",[76,2771,2773],{"class":78,"line":2772},163,[76,2774,375],{"emptyLinePlaceholder":374},[76,2776,2778],{"class":78,"line":2777},164,[76,2779,2780],{"class":1027},"        # 状态转换：未开始 -> 思考中\n",[76,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804,2807,2809,2811,2813,2815,2817,2820,2822],{"class":78,"line":2783},165,[76,2785,1059],{"class":380},[76,2787,2736],{"class":384},[76,2789,949],{"class":142},[76,2791,523],{"class":201},[76,2793,1010],{"class":86},[76,2795,523],{"class":201},[76,2797,1414],{"class":142},[76,2799,1417],{"class":502},[76,2801,1017],{"class":502},[76,2803,1021],{"class":1020},[76,2805,2806],{"class":502}," and",[76,2808,2727],{"class":384},[76,2810,738],{"class":142},[76,2812,2136],{"class":506},[76,2814,480],{"class":142},[76,2816,523],{"class":201},[76,2818,2819],{"class":86},"reasoning_content",[76,2821,523],{"class":201},[76,2823,486],{"class":142},[76,2825,2827,2830,2832,2834,2836,2838,2840,2842],{"class":78,"line":2826},166,[76,2828,2829],{"class":384},"            thinking_state",[76,2831,949],{"class":142},[76,2833,523],{"class":201},[76,2835,1010],{"class":86},[76,2837,523],{"class":201},[76,2839,1414],{"class":142},[76,2841,503],{"class":502},[76,2843,1359],{"class":1020},[76,2845,2847,2850,2852,2854,2856],{"class":78,"line":2846},167,[76,2848,2849],{"class":384},"            state_output ",[76,2851,520],{"class":502},[76,2853,770],{"class":201},[76,2855,2295],{"class":86},[76,2857,595],{"class":201},[76,2859,2861],{"class":78,"line":2860},168,[76,2862,375],{"emptyLinePlaceholder":374},[76,2864,2866],{"class":78,"line":2865},169,[76,2867,2868],{"class":1027},"        # 状态转换：思考中 -> 已回答\n",[76,2870,2872,2875],{"class":78,"line":2871},170,[76,2873,2874],{"class":380},"        elif",[76,2876,1455],{"class":142},[76,2878,2880,2882,2884,2886,2888,2890,2892,2894],{"class":78,"line":2879},171,[76,2881,2829],{"class":384},[76,2883,949],{"class":142},[76,2885,523],{"class":201},[76,2887,1010],{"class":86},[76,2889,523],{"class":201},[76,2891,1414],{"class":142},[76,2893,1417],{"class":502},[76,2895,1359],{"class":1020},[76,2897,2899,2902,2904,2906,2908,2910,2912,2914,2916,2918],{"class":78,"line":2898},172,[76,2900,2901],{"class":502},"            and",[76,2903,1062],{"class":502},[76,2905,2727],{"class":384},[76,2907,738],{"class":142},[76,2909,2136],{"class":506},[76,2911,480],{"class":142},[76,2913,523],{"class":201},[76,2915,2819],{"class":86},[76,2917,523],{"class":201},[76,2919,1122],{"class":142},[76,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939],{"class":78,"line":2922},173,[76,2924,2901],{"class":502},[76,2926,2727],{"class":384},[76,2928,738],{"class":142},[76,2930,2136],{"class":506},[76,2932,480],{"class":142},[76,2934,523],{"class":201},[76,2936,1558],{"class":86},[76,2938,523],{"class":201},[76,2940,1122],{"class":142},[76,2942,2944],{"class":78,"line":2943},174,[76,2945,2946],{"class":142},"        ):\n",[76,2948,2950,2952,2954,2956,2958,2960,2962,2964],{"class":78,"line":2949},175,[76,2951,2829],{"class":384},[76,2953,949],{"class":142},[76,2955,523],{"class":201},[76,2957,1010],{"class":86},[76,2959,523],{"class":201},[76,2961,1414],{"class":142},[76,2963,503],{"class":502},[76,2965,1589],{"class":1020},[76,2967,2969,2971,2973,2975,2977,2979,2982],{"class":78,"line":2968},176,[76,2970,2849],{"class":384},[76,2972,520],{"class":502},[76,2974,770],{"class":201},[76,2976,2310],{"class":492},[76,2978,2539],{"class":86},[76,2980,2981],{"class":492},"\\n\\n",[76,2983,595],{"class":201},[76,2985,2987],{"class":78,"line":2986},177,[76,2988,375],{"emptyLinePlaceholder":374},[76,2990,2992,2994],{"class":78,"line":2991},178,[76,2993,817],{"class":380},[76,2995,2996],{"class":384}," state_output\n",[76,2998,3000],{"class":78,"line":2999},179,[76,3001,375],{"emptyLinePlaceholder":374},[76,3003,3005,3007,3010,3012,3014,3016,3018,3020,3022,3024,3026,3028],{"class":78,"line":3004},180,[76,3006,717],{"class":462},[76,3008,3009],{"class":804}," _process_content",[76,3011,480],{"class":142},[76,3013,727],{"class":726},[76,3015,417],{"class":142},[76,3017,2727],{"class":919},[76,3019,160],{"class":142},[76,3021,925],{"class":498},[76,3023,1381],{"class":142},[76,3025,968],{"class":142},[76,3027,499],{"class":498},[76,3029,143],{"class":142},[76,3031,3033,3035,3038],{"class":78,"line":3032},181,[76,3034,989],{"class":338},[76,3036,3037],{"class":344},"直接返回处理后的内容",[76,3039,339],{"class":338},[76,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3065,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086],{"class":78,"line":3042},182,[76,3044,817],{"class":380},[76,3046,2727],{"class":384},[76,3048,738],{"class":142},[76,3050,2136],{"class":506},[76,3052,480],{"class":142},[76,3054,523],{"class":201},[76,3056,2819],{"class":86},[76,3058,523],{"class":201},[76,3060,417],{"class":142},[76,3062,2465],{"class":201},[76,3064,1381],{"class":142},[76,3066,3067],{"class":502}," or",[76,3069,2727],{"class":384},[76,3071,738],{"class":142},[76,3073,2136],{"class":506},[76,3075,480],{"class":142},[76,3077,523],{"class":201},[76,3079,1558],{"class":86},[76,3081,523],{"class":201},[76,3083,417],{"class":142},[76,3085,2465],{"class":201},[76,3087,1122],{"class":142},[76,3089,3091],{"class":78,"line":3090},183,[76,3092,375],{"emptyLinePlaceholder":374},[76,3094,3096,3098,3101,3103,3105,3107,3110,3112,3115,3117,3119,3121,3124,3126,3128,3130],{"class":78,"line":3095},184,[76,3097,717],{"class":462},[76,3099,3100],{"class":804}," _format_error",[76,3102,480],{"class":142},[76,3104,727],{"class":726},[76,3106,417],{"class":142},[76,3108,3109],{"class":919}," status_code",[76,3111,160],{"class":142},[76,3113,3114],{"class":498}," int",[76,3116,417],{"class":142},[76,3118,1832],{"class":919},[76,3120,160],{"class":142},[76,3122,3123],{"class":498}," bytes",[76,3125,1381],{"class":142},[76,3127,968],{"class":142},[76,3129,499],{"class":498},[76,3131,143],{"class":142},[76,3133,3135],{"class":78,"line":3134},185,[76,3136,3137],{"class":1027},"        # 如果 error 已经是字符串，则无需 decode\n",[76,3139,3141,3143,3146,3148,3150,3152,3154],{"class":78,"line":3140},186,[76,3142,1059],{"class":380},[76,3144,3145],{"class":720}," isinstance",[76,3147,480],{"class":142},[76,3149,1097],{"class":506},[76,3151,417],{"class":142},[76,3153,499],{"class":498},[76,3155,486],{"class":142},[76,3157,3159,3162,3164],{"class":78,"line":3158},187,[76,3160,3161],{"class":384},"            error_str ",[76,3163,520],{"class":502},[76,3165,3166],{"class":384}," error\n",[76,3168,3170,3173],{"class":78,"line":3169},188,[76,3171,3172],{"class":380},"        else",[76,3174,143],{"class":142},[76,3176,3178,3180,3182,3184,3186,3189,3191,3194,3196,3198,3201,3203],{"class":78,"line":3177},189,[76,3179,3161],{"class":384},[76,3181,520],{"class":502},[76,3183,1832],{"class":384},[76,3185,738],{"class":142},[76,3187,3188],{"class":506},"decode",[76,3190,480],{"class":142},[76,3192,3193],{"class":516},"errors",[76,3195,520],{"class":502},[76,3197,523],{"class":201},[76,3199,3200],{"class":86},"ignore",[76,3202,523],{"class":201},[76,3204,1122],{"class":142},[76,3206,3208],{"class":78,"line":3207},190,[76,3209,375],{"emptyLinePlaceholder":374},[76,3211,3213,3215],{"class":78,"line":3212},191,[76,3214,1226],{"class":380},[76,3216,143],{"class":142},[76,3218,3220,3223,3225,3227,3229,3231,3233,3236,3239,3241,3243,3245,3248,3250,3252,3255,3258,3261],{"class":78,"line":3219},192,[76,3221,3222],{"class":384},"            err_msg ",[76,3224,520],{"class":502},[76,3226,1084],{"class":384},[76,3228,738],{"class":142},[76,3230,2019],{"class":506},[76,3232,480],{"class":142},[76,3234,3235],{"class":506},"error_str",[76,3237,3238],{"class":142},").",[76,3240,2136],{"class":506},[76,3242,480],{"class":142},[76,3244,523],{"class":201},[76,3246,3247],{"class":86},"message",[76,3249,523],{"class":201},[76,3251,417],{"class":142},[76,3253,3254],{"class":506}," error_str",[76,3256,3257],{"class":142},")[:",[76,3259,3260],{"class":1020},"200",[76,3262,1283],{"class":142},[76,3264,3266,3268,3270,3272,3274],{"class":78,"line":3265},193,[76,3267,2676],{"class":380},[76,3269,2679],{"class":498},[76,3271,1643],{"class":380},[76,3273,2044],{"class":384},[76,3275,143],{"class":142},[76,3277,3279,3281,3283,3285,3288,3290],{"class":78,"line":3278},194,[76,3280,3222],{"class":384},[76,3282,520],{"class":502},[76,3284,3254],{"class":384},[76,3286,3287],{"class":142},"[:",[76,3289,3260],{"class":1020},[76,3291,1283],{"class":142},[76,3293,3295,3297,3299,3301,3303],{"class":78,"line":3294},195,[76,3296,817],{"class":380},[76,3298,1084],{"class":384},[76,3300,738],{"class":142},[76,3302,1089],{"class":506},[76,3304,510],{"class":142},[76,3306,3308,3311,3313,3315,3317,3319,3321,3324,3326,3328,3330,3333,3335,3338,3340,3342,3344,3346,3348],{"class":78,"line":3307},196,[76,3309,3310],{"class":142},"            {",[76,3312,523],{"class":201},[76,3314,1097],{"class":86},[76,3316,523],{"class":201},[76,3318,160],{"class":142},[76,3320,1166],{"class":462},[76,3322,3323],{"class":86},"\"HTTP ",[76,3325,1172],{"class":1020},[76,3327,1777],{"class":506},[76,3329,1024],{"class":1020},[76,3331,3332],{"class":86},": ",[76,3334,1172],{"class":1020},[76,3336,3337],{"class":506},"err_msg",[76,3339,1024],{"class":1020},[76,3341,523],{"class":86},[76,3343,1111],{"class":142},[76,3345,1114],{"class":516},[76,3347,520],{"class":502},[76,3349,3350],{"class":790},"False\n",[76,3352,3354],{"class":78,"line":3353},197,[76,3355,554],{"class":142},[76,3357,3359],{"class":78,"line":3358},198,[76,3360,375],{"emptyLinePlaceholder":374},[76,3362,3364,3366,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387],{"class":78,"line":3363},199,[76,3365,717],{"class":462},[76,3367,3368],{"class":804}," _format_exception",[76,3370,480],{"class":142},[76,3372,727],{"class":726},[76,3374,417],{"class":142},[76,3376,2044],{"class":919},[76,3378,160],{"class":142},[76,3380,2679],{"class":498},[76,3382,1381],{"class":142},[76,3384,968],{"class":142},[76,3386,499],{"class":498},[76,3388,143],{"class":142},[76,3390,3392,3394,3397],{"class":78,"line":3391},200,[76,3393,989],{"class":338},[76,3395,3396],{"class":344},"异常格式化保持不变",[76,3398,339],{"class":338},[76,3400,3402,3405,3407,3410,3412,3414,3416],{"class":78,"line":3401},201,[76,3403,3404],{"class":384},"        err_type ",[76,3406,520],{"class":502},[76,3408,3409],{"class":498}," type",[76,3411,480],{"class":142},[76,3413,2079],{"class":506},[76,3415,3238],{"class":142},[76,3417,3418],{"class":492},"__name__\n",[76,3420,3422,3424,3426,3428,3430,3432,3434,3436,3438,3440,3442,3444,3446,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475],{"class":78,"line":3421},202,[76,3423,817],{"class":380},[76,3425,1084],{"class":384},[76,3427,738],{"class":142},[76,3429,1089],{"class":506},[76,3431,1092],{"class":142},[76,3433,523],{"class":201},[76,3435,1097],{"class":86},[76,3437,523],{"class":201},[76,3439,160],{"class":142},[76,3441,1166],{"class":462},[76,3443,523],{"class":86},[76,3445,1172],{"class":1020},[76,3447,3448],{"class":506},"err_type",[76,3450,1024],{"class":1020},[76,3452,3332],{"class":86},[76,3454,1172],{"class":1020},[76,3456,975],{"class":498},[76,3458,480],{"class":142},[76,3460,2079],{"class":506},[76,3462,1381],{"class":142},[76,3464,1024],{"class":1020},[76,3466,523],{"class":86},[76,3468,1111],{"class":142},[76,3470,1114],{"class":516},[76,3472,520],{"class":502},[76,3474,1119],{"class":790},[76,3476,1122],{"class":142},[59,3478,3479],{},[62,3480,3481],{},"函数配置中，Api URL、Api Key、模型名字和上个教程一样，输入阿里云百炼对应的即可。",[258,3483],{"filename":3484},"13.png",[59,3486,3487],{},[62,3488,3489],{},"启用该函数",[258,3491],{"filename":3492},"07.png",[54,3494,3496],{"id":3495},"_4-设置新模型","4. 设置新模型",[59,3498,3499],{},[62,3500,3501,3502,248,3504,3507,3508,3511],{},"前往 ",[73,3503,247],{},[73,3505,3506],{},"模型","，将新的 ",[73,3509,3510],{},"deepseek-r1-fix"," 设为启用，还可手动修改 Logo 图片等。",[258,3513],{"filename":3514},"14.png",[59,3516,3517],{},[62,3518,3519],{},"然后就可以在对话中看到思考过程了，出现「正在思考」的时候，可以点击旁边的箭头展开思考过程。",[258,3521],{"filename":3522},"15.png",[54,3524,3526],{"id":3525},"_5-联网搜索-error-searching-的问题","5. 联网搜索 Error searching 的问题",[27,3528,3529,3530,3533],{},"目前使用下来发现一个问题，配置了 Pipeline 之后，虽然能够正常显示深度思考过程了，但是使用「联网搜索」会出现 ",[73,3531,3532],{},"Error searching"," 的问题。",[27,3535,3536],{},[3537,3538,3539,3540,248,3542,3545,3546,3549],"del",{},"目前发现一个临时解决方案，就是去 ",[73,3541,247],{},[73,3543,3544],{},"界面"," 中关闭 ",[73,3547,3548],{},"网页搜索关键词生成","。初步判断是经过了 Pipeline 的时候，会导致联网搜索的关键词生成出现问题，从而传到搜索引擎的是空的内容，导致搜索失败。临时关闭搜索关键词生成，导致的问题是用户输入内容会直接作为搜索引擎的搜索关键词，不过这个倒能接受。",[27,3551,3552,3553,248,3555,248,3557,3560,3561,3564,3565,3568,3569,3572],{},"2025-02-18 更新：发现一个完美的解决方案，在 ",[73,3554,247],{},[73,3556,3544],{},[73,3558,3559],{},"外部模型"," 中选择一个其他模型（非配置了 Pipeline 的这个模型，例如 ",[73,3562,3563],{},"qwen-max-latest"," 或 ",[73,3566,3567],{},"deepseek-v3","）即可，尽量不要用 ",[73,3570,3571],{},"deepseek-r1","，会比较慢。",[258,3574],{"filename":3575},"16.png",[3577,3578],"hr",{},[3580,3581],"reward-code",{},[3583,3584,3585],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s2W-s, html code.shiki .s2W-s{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#032F62;--shiki-default-font-style:inherit;--shiki-dark:#9ECBFF;--shiki-dark-font-style:inherit}html pre.shiki code .sithA, html code.shiki .sithA{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#032F62;--shiki-default-font-style:inherit;--shiki-dark:#9ECBFF;--shiki-dark-font-style:inherit}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smCYv, html code.shiki .smCYv{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .swQdS, html code.shiki .swQdS{--shiki-light:#E53935;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sFwrP, html code.shiki .sFwrP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sQRbd, html code.shiki .sQRbd{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#DBEDFF}",{"title":71,"searchDepth":146,"depth":146,"links":3587},[3588,3589,3590,3591,3592],{"id":56,"depth":146,"text":57},{"id":238,"depth":146,"text":239},{"id":279,"depth":146,"text":280},{"id":3495,"depth":146,"text":3496},{"id":3525,"depth":146,"text":3526},null,"png","2025-02-12",false,"md",{},"\u002Fposts\u002F2025\u002Fdisplay-deepseek-r1-thinking",{"text":3601,"minutes":3602,"time":3603,"words":3604},"7 min read",6.775,406500,1355,{"title":22,"description":29},{"loc":3599,"lastmod":3607},"2025-02-18","posts\u002F2025\u002F20250212.display-deepseek-r1-thinking",[3610,3611,3612,3613],"技术","人工智能","大语言模型","DeepSeek","AqfdzW2_tEalBScyb92RvCd17nOnwUQjxUqN_MnKsVo",[3616,3622],{"title":3617,"path":3618,"stem":3619,"date":3620,"description":3621,"children":-1},"关于何时解放台湾的思考","\u002Fposts\u002F2025\u002Fthoughts-on-when-to-liberate-taiwan","posts\u002F2025\u002F20250401.thoughts-on-when-to-liberate-taiwan","2025-04-01","今天一早就看到新闻，东部战区又在台岛周边开展军演，大家对“温水煮青蛙”式的军演已经习以为常。",{"title":3623,"path":3624,"stem":3625,"date":3626,"description":3627,"children":-1},"零成本部署！阿里云百炼 + Open WebUI 打造专属 DeepSeek-R1","\u002Fposts\u002F2025\u002Fdeploy-deepseek-r1-for-free","posts\u002F2025\u002F20250211.deploy-deepseek-r1-for-free","2025-02-11","大家好，众所周知，国产之光 DeepSeek 现在的热度远比当时 ChatGPT 出来的时候要火多了。泼天的流量再加上各种恶意攻击，导致 DeepSeek 一直存在性能问题。",1777579131736]