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