[{"data":1,"prerenderedAt":7292},["ShallowReactive",2],{"\u002F":3,"navigation":38,"posts-undefined-undefined-0-10":52},{"id":4,"title":5,"body":6,"description":20,"extension":23,"hideComments":24,"layout":25,"meta":26,"navigation":27,"path":28,"readingTime":29,"seo":34,"sitemap":35,"stem":36,"__hash__":37},"pages\u002F00.index.md","首页",{"type":7,"value":8,"toc":19},"minimark",[9],[10,11,12,16],"page-index",{},[13,14,15],"p",{},"Hello，World!",[13,17,18],{},"这里是 Bean 的个人网站。",{"title":20,"searchDepth":21,"depth":21,"links":22},"",2,[],"md",true,"default",{},{"title":5},"\u002F",{"text":30,"minutes":31,"time":32,"words":33},"1 min read",0.05,3000,10,{"title":5,"description":20},{"loc":28},"00.index","lIF3PmBZsqRJFadyHtLtvpZG3zErCeGYIAxWuyiF6Eg",[39,40,44,48],{"title":5,"path":28,"stem":36},{"title":41,"path":42,"stem":43},"文章","\u002Fposts","01.posts",{"title":45,"path":46,"stem":47},"动态","\u002Fmoments","02.moments",{"title":49,"path":50,"stem":51},"关于","\u002Fabout","09.about",[53,570,828,1506,1550,1781,2955,6470,6828,6962],{"id":54,"title":55,"body":56,"class":554,"cover":554,"coverSize":554,"date":555,"description":60,"draft":556,"extension":23,"hideComments":556,"location":554,"meta":557,"navigation":24,"path":558,"readingTime":559,"seo":564,"sitemap":565,"stem":566,"tags":567,"time":554,"weather":554,"__hash__":569},"posts\u002Fposts\u002F2026\u002F20260124.use-vscode-for-kotlin.md","使用 VSCode 开发 Kotlin",{"type":7,"value":57,"toc":552},[58,61,64,75,84,87,161,168,350,366,380,386,534,537,545,548],[13,59,60],{},"之前有些后端项目用的 Kotlin + Spring Boot，IDE 用的 IDEA 开发的。但是 IDEA 中的 GitHub Copilot 插件实在太弱智，打算换成 VSCode 来开发 Kotlin。",[13,62,63],{},"网上几乎没有教程（可能确实没人这么干），踩了不少坑，试了很多插件，花了快一天时间才终于搞好。",[13,65,66,67,74],{},"首先，需要安装 VSCode 的 ",[68,69,73],"a",{"href":70,"rel":71},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=vscjava.vscode-java-pack",[72],"nofollow","Java Extension Pack"," 插件包，这个插件包包含了 Java 开发所需的各种插件。",[13,76,77,78,83],{},"然后，还需要安装 ",[68,79,82],{"href":80,"rel":81},"https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlin-lsp\u002Freleases",[72],"kotlin-lsp"," 插件，这个是 Kotlin 官方的插件，提供了 Kotlin 的语法高亮、格式化、跳转等功能。需要注意的是，这个插件尚未发布到 VSCode 市场，需要手动下载并安装。另外，该插件当前只支持 Gradle 项目，不支持 Maven 项目。如果是 Maven 项目，得转换成 Gradle 项目才能使用该插件。",[13,85,86],{},"VSCode 配置：",[88,89,93],"pre",{"className":90,"code":91,"language":92,"meta":20,"style":20},"language-json shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"[kotlin]\": {\n    \"editor.defaultFormatter\": \"JetBrains.kotlin\"\n  }\n}\n","json",[94,95,96,105,124,149,155],"code",{"__ignoreMap":20},[97,98,101],"span",{"class":99,"line":100},"line",1,[97,102,104],{"class":103},"sP7_E","{\n",[97,106,107,111,115,118,121],{"class":99,"line":21},[97,108,110],{"class":109},"s39Yj","  \"",[97,112,114],{"class":113},"sseR_","[kotlin]",[97,116,117],{"class":109},"\"",[97,119,120],{"class":103},":",[97,122,123],{"class":103}," {\n",[97,125,127,130,134,136,138,142,146],{"class":99,"line":126},3,[97,128,129],{"class":109},"    \"",[97,131,133],{"class":132},"sZMiF","editor.defaultFormatter",[97,135,117],{"class":109},[97,137,120],{"class":103},[97,139,141],{"class":140},"sjJ54"," \"",[97,143,145],{"class":144},"s_sjI","JetBrains.kotlin",[97,147,148],{"class":140},"\"\n",[97,150,152],{"class":99,"line":151},4,[97,153,154],{"class":103},"  }\n",[97,156,158],{"class":99,"line":157},5,[97,159,160],{"class":103},"}\n",[13,162,163,164,167],{},"F5 调试用的 ",[94,165,166],{},"launch.json"," 配置：",[88,169,171],{"className":90,"code":170,"language":92,"meta":20,"style":20},"{\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"type\": \"java\",\n      \"name\": \"SpringBoot\",\n      \"classPaths\": [\"$Auto\", \"${workspaceFolder}\u002Fbuild\u002Flibs\u002F*\"],\n      \"request\": \"launch\",\n      \"mainClass\": \"net.yuanfen.op.xams.ApplicationKt\"\n    }\n  ]\n}\n",[94,172,173,177,198,212,217,238,259,294,315,334,339,345],{"__ignoreMap":20},[97,174,175],{"class":99,"line":100},[97,176,104],{"class":103},[97,178,179,181,184,186,188,190,193,195],{"class":99,"line":21},[97,180,110],{"class":109},[97,182,183],{"class":113},"version",[97,185,117],{"class":109},[97,187,120],{"class":103},[97,189,141],{"class":140},[97,191,192],{"class":144},"0.2.0",[97,194,117],{"class":140},[97,196,197],{"class":103},",\n",[97,199,200,202,205,207,209],{"class":99,"line":126},[97,201,110],{"class":109},[97,203,204],{"class":113},"configurations",[97,206,117],{"class":109},[97,208,120],{"class":103},[97,210,211],{"class":103}," [\n",[97,213,214],{"class":99,"line":151},[97,215,216],{"class":103},"    {\n",[97,218,219,222,225,227,229,231,234,236],{"class":99,"line":157},[97,220,221],{"class":109},"      \"",[97,223,224],{"class":132},"type",[97,226,117],{"class":109},[97,228,120],{"class":103},[97,230,141],{"class":140},[97,232,233],{"class":144},"java",[97,235,117],{"class":140},[97,237,197],{"class":103},[97,239,241,243,246,248,250,252,255,257],{"class":99,"line":240},6,[97,242,221],{"class":109},[97,244,245],{"class":132},"name",[97,247,117],{"class":109},[97,249,120],{"class":103},[97,251,141],{"class":140},[97,253,254],{"class":144},"SpringBoot",[97,256,117],{"class":140},[97,258,197],{"class":103},[97,260,262,264,267,269,271,274,276,279,281,284,286,289,291],{"class":99,"line":261},7,[97,263,221],{"class":109},[97,265,266],{"class":132},"classPaths",[97,268,117],{"class":109},[97,270,120],{"class":103},[97,272,273],{"class":103}," [",[97,275,117],{"class":140},[97,277,278],{"class":144},"$Auto",[97,280,117],{"class":140},[97,282,283],{"class":103},",",[97,285,141],{"class":140},[97,287,288],{"class":144},"${workspaceFolder}\u002Fbuild\u002Flibs\u002F*",[97,290,117],{"class":140},[97,292,293],{"class":103},"],\n",[97,295,297,299,302,304,306,308,311,313],{"class":99,"line":296},8,[97,298,221],{"class":109},[97,300,301],{"class":132},"request",[97,303,117],{"class":109},[97,305,120],{"class":103},[97,307,141],{"class":140},[97,309,310],{"class":144},"launch",[97,312,117],{"class":140},[97,314,197],{"class":103},[97,316,318,320,323,325,327,329,332],{"class":99,"line":317},9,[97,319,221],{"class":109},[97,321,322],{"class":132},"mainClass",[97,324,117],{"class":109},[97,326,120],{"class":103},[97,328,141],{"class":140},[97,330,331],{"class":144},"net.yuanfen.op.xams.ApplicationKt",[97,333,148],{"class":140},[97,335,336],{"class":99,"line":33},[97,337,338],{"class":103},"    }\n",[97,340,342],{"class":99,"line":341},11,[97,343,344],{"class":103},"  ]\n",[97,346,348],{"class":99,"line":347},12,[97,349,160],{"class":103},[13,351,352,353,355,356,359,360,365],{},"另外，",[94,354,82],{}," 插件暂不支持 ",[94,357,358],{},"Gradle Kotlin DSL"," （",[68,361,364],{"href":362,"rel":363},"https:\u002F\u002Fgithub.com\u002FKotlin\u002Fkotlin-lsp\u002Fissues\u002F55",[72],"Issue#55","）。",[13,367,368,369,372,373,372,376,379],{},"尝试了 ",[94,370,371],{},"ktfmt","、",[94,374,375],{},"ktfmt-gradle",[94,377,378],{},"Spotless Gradle"," 等插件，最终都因为各种原因放弃了。",[13,381,382,383,385],{},"另外还遇到一个 ",[94,384,82],{}," 的奇怪 bug，就是插件一直报错和各种警告：",[88,387,391],{"className":388,"code":389,"language":390,"meta":20,"style":20},"language-log shiki shiki-themes material-theme-lighter github-light github-dark","Error while resolving org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl from SEALED_CLASS_INHERITORS to ANNOTATION_ARGUMENTS current declaration phase SEALED_CLASS_INHERITORS origin: Source session: class org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSourcesSession module data: class org.jetbrains.kotlin.analysis.low.level.api.fir.projectStructure.LLFirModuleData KaModule: class org.jetbrains.kotlin.idea.base.fir.projectStructure.modules.source.KaSourceModuleImpl platform: JVM (1.8)\n\n\nWARNING: package sun.awt.windows not in java.desktop\nWARNING: package sun.awt.X11 not in java.desktop\nWARNING: package com.sun.java.swing.plaf.gtk not in java.desktop\nWARNING - #c.i.i.p.PluginManager - Plugin descriptor for plugin 'intellij.kotlin.searching.xml' has declared element 'visibility' which has no effect there\nWARNING - #c.j.l.a.f.i.c.d.i.LSInspectionDiagnosticProviderImpl - org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments: Unable to get element context\n","log",[94,392,393,438,443,447,465,478,491,516],{"__ignoreMap":20},[97,394,395,398,402,405,408,411,414,417,420,423,426,429,432,435],{"class":99,"line":100},[97,396,397],{"class":144},"Error",[97,399,401],{"class":400},"su5hD"," while resolving ",[97,403,404],{"class":109},"org.jetbrains.kotlin.fir.declarations.impl.FirValueParameterImpl",[97,406,407],{"class":400}," from SEALED_CLASS_INHERITORS to ANNOTATION_ARGUMENTS current declaration phase SEALED_CLASS_INHERITORS origin: Source session: class ",[97,409,410],{"class":109},"org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSourcesSession",[97,412,413],{"class":400}," module data: class ",[97,415,416],{"class":109},"org.jetbrains.kotlin.analysis.low.level.api.fir.projectStructure.LLFirModuleData",[97,418,419],{"class":400}," KaModule: class ",[97,421,422],{"class":109},"org.jetbrains.kotlin.idea.base.fir.projectStructure.modules.source.KaSourceModuleImpl",[97,424,425],{"class":400}," platform: JVM (",[97,427,428],{"class":109},"1",[97,430,431],{"class":400},".",[97,433,434],{"class":109},"8",[97,436,437],{"class":400},")\n",[97,439,440],{"class":99,"line":21},[97,441,442],{"emptyLinePlaceholder":24},"\n",[97,444,445],{"class":99,"line":126},[97,446,442],{"emptyLinePlaceholder":24},[97,448,449,453,456,459,462],{"class":99,"line":151},[97,450,452],{"class":451},"s2YIT","WARNING",[97,454,455],{"class":400},": package ",[97,457,458],{"class":109},"sun.awt.windows",[97,460,461],{"class":400}," not in ",[97,463,464],{"class":109},"java.desktop\n",[97,466,467,469,471,474,476],{"class":99,"line":157},[97,468,452],{"class":451},[97,470,455],{"class":400},[97,472,473],{"class":109},"sun.awt.X11",[97,475,461],{"class":400},[97,477,464],{"class":109},[97,479,480,482,484,487,489],{"class":99,"line":240},[97,481,452],{"class":451},[97,483,455],{"class":400},[97,485,486],{"class":109},"com.sun.java.swing.plaf.gtk",[97,488,461],{"class":400},[97,490,464],{"class":109},[97,492,493,495,498,501,504,507,510,513],{"class":99,"line":261},[97,494,452],{"class":451},[97,496,497],{"class":400}," - #",[97,499,500],{"class":109},"c.i.i.p.PluginManager",[97,502,503],{"class":400}," - Plugin descriptor for plugin ",[97,505,506],{"class":144},"'intellij.kotlin.searching.xml'",[97,508,509],{"class":400}," has declared element ",[97,511,512],{"class":144},"'visibility'",[97,514,515],{"class":400}," which has no effect there\n",[97,517,518,520,522,525,528,531],{"class":99,"line":296},[97,519,452],{"class":451},[97,521,497],{"class":400},[97,523,524],{"class":109},"c.j.l.a.f.i.c.d.i.LSInspectionDiagnosticProviderImpl",[97,526,527],{"class":400}," - ",[97,529,530],{"class":109},"org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments",[97,532,533],{"class":400},": Unable to get element context\n",[13,535,536],{},"比较了两个文件夹，同样的代码，一个报错，一个不报错，报错的那个文件夹换个名字就好了。怀疑是缓存的问题，困扰了很久，最终找到了缓存位置：",[88,538,543],{"className":539,"code":541,"language":542},[540],"language-text","\u002FUsers\u002Fbean\u002FLibrary\u002FApplication Support\u002FJetBrains\u002Fanalyzer\u002Fworkspaces\u002F\n","text",[94,544,541],{"__ignoreMap":20},[13,546,547],{},"删除该目录下的缓存文件夹，重启 VSCode 后问题解决。",[549,550,551],"style",{},"html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--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 .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--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 .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 .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s2YIT, html code.shiki .s2YIT{--shiki-light:#E53935;--shiki-default:#B31D28;--shiki-dark:#FDAEB7}",{"title":20,"searchDepth":21,"depth":21,"links":553},[],null,"2026-01-24",false,{},"\u002Fposts\u002F2026\u002Fuse-vscode-for-kotlin",{"text":560,"minutes":561,"time":562,"words":563},"3 min read",2.28,136800,456,{"title":55,"description":60},{"loc":558,"lastmod":555},"posts\u002F2026\u002F20260124.use-vscode-for-kotlin",[568],"技术","GXxZCrPdasr3Za_z0MuP3TOPnJjje6WtlA4J1g6XgRo",{"id":571,"title":572,"body":573,"class":554,"cover":813,"coverSize":554,"date":814,"description":577,"draft":556,"extension":23,"hideComments":556,"location":554,"meta":815,"navigation":24,"path":816,"readingTime":817,"seo":822,"sitemap":823,"stem":824,"tags":825,"time":554,"weather":554,"__hash__":827},"posts\u002Fposts\u002F2026\u002F20260109.2025-annual-review.md","2025 年度回顾",{"type":7,"value":574,"toc":799},[575,578,583,586,591,594,598,601,604,608,611,615,618,621,625,629,632,636,640,643,647,650,669,672,676,679,683,686,689,692,695,699,702,705,708,711,715,718,721,724,727,741,744,748,751,754,757,761,764,767,770,774,777,780,783,786,789,792,796],[13,576,577],{},"这篇年度回顾从 4 号就建了文档了，陆续写了点，拖了一周多才写完。直接进入正题，回顾下我的 2025 年。",[579,580,582],"h2",{"id":581},"新成就入坑-3d-打印机","✅ 新成就：入坑 3D 打印机",[13,584,585],{},"去年的年度回顾中最后写到，希望每年可以入坑一个新的产品或领域，当时计划的是 3D 打印机，今年做到了。在经过一段时间的调研，以及刚好拓竹发布了 P2S，又无巧不巧的有个同事在公司抽奖中了一台。体验了下之后，我被打印效果惊艳了，毫不犹豫就下单了。",[587,588],"post-image",{"description":589,"filename":590},"拓竹 P2S 3D 打印机","03.jpg",[13,592,593],{},"截至目前已经打印了 164 盘，打了各类家用的小工具、小配件以及儿子的玩具等。其中有意思的项目有：QNAS 的 6 盘位 NAS，未来战士太空头盔、料盘盒堆叠收纳、定制的自行车篮、戴森 Airwrap 收纳支架、自弹式 TF 卡收纳盒、电池收纳盒、咖啡杯支架、咖啡机配件盒、咖啡杯沥水盘、铝型材连接辅助治具、剥瓜子神器、以及内嵌了磁吸和 IC 卡的手机壳等。",[587,595],{"description":596,"filename":597},"一些打印的项目","01.jpg",[13,599,600],{},"不得不提的是拓竹的 MakerWorld 确实是非常棒的 3D 打印社区，我愿称之为 3D 打印界的 GitHub。在调研 3D 打印机的过程中，为了防止买回来积灰，我已提前调研了 3D 建模软件，最终选择了 Shapr3D，并且和儿子一起学习使用它来设计简单的模型。3D 打印机到手之后，我已经用 Shapr3D 设计了非常多的自定义模型，并且从中获得了非常多的创造的乐趣。",[13,602,603],{},"这里再提一下我为什么会选 Shapr3D。主要是他的界面设计比较现代化，并且支持跨平台同步，可以在 iPad\u002FMac\u002FWindows 上使用，并且同步自己设计的模型。这一点非常适合我这种会在多个设备上使用的情况。当然 Shapr3D 价格特别贵，我是在淘宝买的教育版。",[587,605],{"description":606,"filename":607},"Shapr3D 中自己建模的一些模型","02.png",[13,609,610],{},"购买拓竹的 3D 打印机是今年给我带来幸福感最强的一笔消费，非常值得，所以放在第一位写。我给身边很多朋友都推荐了 3D 打印机，确实三四千块钱的东西可以给你带来特别多的 DIY 的乐趣，手工爱好者的福音。",[579,612,614],{"id":613},"新成就第一次自主设计制作铝型材支架","✅ 新成就：第一次自主设计制作铝型材支架",[13,616,617],{},"今年另一件新成就就是解锁了铝型材的设计和制作。由于 3D 打印机放在客厅确实有点占地方，放在阳台的洗衣机旁刚好可以利用那部分空间。但是缺少一个合适的支架。网上成品支架的大小很难严丝合缝完美嵌入，想要定制的话成本也很高，并且稳定性也不一定好。于是在研究了铝型材的的制作之后，自己用 MayCAD 设计，从嘉立创自助下单，回来自己组装。最终完美嵌入了阳台旁的空间，并且稳定性特别好。整个过程获得的成就感也是特别高。",[13,619,620],{},"这里要安利下嘉立创的铝型材，支持自定义加工，各种孔位、切割都可以自主设置，特别方便，并且价格也很透明。很适合 DIY 爱好者。",[587,622],{"description":623,"filename":624},"铝型材支架","04.jpg",[579,626,628],{"id":627},"新成就第一次看大马戏","✅ 新成就：第一次看大马戏",[13,630,631],{},"今年 4 月，跟老婆儿子一起去湖州龙之梦玩，第一次看了“大马戏”，杂技表演非常震撼，尤其是高空表演，非常精彩。现场的沉浸感也特别强，一次不错的亲子活动体验。",[587,633],{"description":634,"filename":635},"大马戏表演","05.jpg",[579,637,639],{"id":638},"今年的理财成果","💰 今年的理财成果",[13,641,642],{},"2025 年度，我的基金账户年收益率是 11.23%，尽管没有跑赢沪深 300，但因为我一直是有一半左右稳健资产，所以整体收益率还是挺满意的。",[587,644],{"description":645,"filename":646},"理财收益率","06.png",[13,648,649],{},"今年的投资分布，一半的稳健基金（主要是易方达增强回报债券），一半风险类基金，如下：",[651,652,653,657,660,663,666],"ul",{},[654,655,656],"li",{},"013308 恒生科技ETF",[654,658,659],{},"005669 前海开源公共事业股票",[654,661,662],{},"020670 上证科创板芯片",[654,664,665],{},"012733 人工智能ETF",[654,667,668],{},"000307 黄金ETF",[13,670,671],{},"这些分布也是有我的思考，恒生科技是传统互联网，前海开源公共事业是一些电力、能源的基建行业，芯片、人工智能是 AI 行业，黄金是避险资产。其中人工智能 ETF 年底已清仓，因为部分持仓公司和芯片 ETF 有重叠，并且目前人工智能 ETF 的持仓公司中，并不是行业内的头部。行业头部要么没上市，要么不在 A 股上市。",[579,673,675],{"id":674},"咖啡-vlog从入门到放弃","❌ 咖啡 Vlog：从入门到放弃",[13,677,678],{},"年初的时候，计划开始拍摄制作咖啡的 Vlog，买了挂脖神器，一共坚持了 30 天，发布了 30 条视频，但是剪辑过程还是太费时间，并且最终播放效果平平，一篇几百的播放量，确实有点打击积极性。并且制作咖啡的 Vlog，内容太过单一，每天基本都是同样的内容，缺乏新鲜感。最终我还是放弃了这个计划。但是还是坚持每天做咖啡，没有了记录和分享的压力之后，反而更加能够享受做咖啡和喝咖啡的过程了。",[579,680,682],{"id":681},"外包维护最后两个传统的-web-项目也不维护了","❌ 外包维护：最后两个传统的 Web 项目也不维护了",[13,684,685],{},"先发表一句感慨，我的 PC 互联网的时代结束了。",[13,687,688],{},"这个感慨来自于，我之前仍在维护中的最后两个传统的 Web 类项目，今年也都不续约了。",[13,690,691],{},"最近在清理这两个旧项目的服务器、存储 Bucket、CDN 配置等。其中有个项目是我刚毕业接的项目，至今已维护超过了 10 年，甚至技术栈还是 ASP.NET MVC + SQLServer。为此我甚至还一直保留着一台 Windows 的服务器。",[13,693,694],{},"今年终于可以彻底消除这些旧时代的印记了，对我来说确实是一件很值得感慨的事。",[579,696,698],{"id":697},"关于-ai-的思考","🤔 关于 AI 的思考",[13,700,701],{},"今年是 AI 高速发展的一年，见证了 AI 发展的很多事。年初还在因为 DeepSeek 官网太慢用阿里云百炼 + Open WebUI 打造专属的 DeepSeek-R1，到后面 Agent 模式的颠覆，Vibe Coding 已经完全改变了我写代码的方式。",[13,703,704],{},"当 AI 可以在几分钟内就能完成你几个小时甚至几天才能完成的工作甚至还做得更好时，你会发现，你之前的努力变得那么不值一提。甚至你多年来积累的经验、能力，在以前会被认为是技术护城河的东西，也被爆破，只剩一地废墟。这种信念的崩塌，是我今年思想上比较困惑和不知所措的地方。",[13,706,707],{},"幸运的是，我能在工作之余找到时间去放空下来思考一些事。有机会少做事甚至不做事。",[13,709,710],{},"我有时在想，在 AI 时代，我应该做什么。如果一个初学者就可以借助 AI 来完成困难的任务，那还需要我做什么呢？或者说，我还有必要做那些事情吗？再换一个角度思考，我们现在做的事，一年后还有意义吗？如果没意义，还需要去做吗？",[579,712,714],{"id":713},"关于要不要做的思考","🤔 关于要不要做的思考",[13,716,717],{},"人性总是会为了自己不想做的事情找借口，也会为了自己想做的事情粉饰。少说多做，当你不得不做一件事的时候，就不要以你想不想做作为出发点，而是应该基于当前的现状、条件、资源思考怎么把手头的事做好。",[13,719,720],{},"当然，如果有权限决定做不做的话，也需要不断基于当前的形势、条件不断判断是否应该继续做下去，及时止损、及时调整。",[13,722,723],{},"人的思维、判断应该是要不断基于现状更新而变化的。我们处在一个技术更迭日新月异的时代，很有可能今天你做的事，明天就被颠覆了。",[13,725,726],{},"这里，我想分享下我们公司的技术老板今年 OKR 中的几个大 O：",[651,728,729,732,735,738],{},[654,730,731],{},"做相信的事",[654,733,734],{},"做确定的事",[654,736,737],{},"做困难的事",[654,739,740],{},"做更少的事",[13,742,743],{},"我觉得总结得非常到位，值得学习。",[579,745,747],{"id":746},"关于组织管理的思考","🤔 关于组织管理的思考",[13,749,750],{},"今年在公司也经历了一些组织调整，一个公司达到一定的规模，都会或多或少遇到一些大公司病。顶层的想法和决策，一层层执行下来，很难达到预期，往往会打折扣，甚至会变样。即便是老板亲自挂帅要完成的事，在一层层执行下来，也会遇到各种各样的问题。老板会觉得下面人在糊弄他，下面人会觉得老板难伺候，工作的重点会变成面向老板工作。大公司会有很多利益团体，每个利益团体会有各自的考量。团队之间的协作也会变得很复杂，效率也会变得很低。",[13,752,753],{},"很欣慰看到公司做了一些变化和调整，尝试通过更小的团队来闭环完成一些事，来提升效率和执行力。未必能成功，但至少值得尝试。团队小了，决策链路是短了，但对于决策者判断力的要求就变高了。",[13,755,756],{},"最近在朋友圈看到一个有意思的观点：组织内部，判断力是可以被制度、团队和时代红利托住的，这也就是为何很多人能做个很出色的高管但创业开公司就不行。即便是一个草包的管理者，如果能够不断听取团队的意见，不断去修正自己天马行空不着边际的想法和判断，在组织的制度和团队努力的托举下，也是可以做出正确的事情。",[579,758,760],{"id":759},"关于世界局势的思考","🤔 关于世界局势的思考",[13,762,763],{},"随着年龄渐长，我现在也越来越会关心世界局势。也会喜欢基于了解到的信息去分析和判断。在这个 AI 突飞猛进的时代，世界局势也在发生着翻天覆地的变化。前几次的工业革命，像蒸汽时代、电气时代，都是伴随着重大的世界格局变化的。而当下绝对是百年未有之大变局。",[13,765,766],{},"我国一直以来一个悬而未决的问题，就是台湾问题了。越来越多的迹象表明，这个问题解决的时间点越来越接近了。美国近期动作频频，已经给中国打了很多样，给了中国很多抄作业的案例。",[13,768,769],{},"我一直在想，如果台海战争发生了，对经济的影响会是什么样的。我现在的资产都在股市和基金里，还是需要早做准备，提前做一些配置调整。",[579,771,773],{"id":772},"关于成就感","🤔 关于成就感",[13,775,776],{},"以前我一直以为我喜欢写代码，是因为写代码的时候能够不断获得反馈获得成就感。但我现在发现，成就感并不是来自于写代码这件事本身。写代码这件事底层其实是创造，通过一堆代码创造出一些功能，而创造带来了成就感。但 AI Coding 的崛起，让这种功能的创造变得非常廉价，从而让自己在写代码这件事上获得的成就感的阈值变高了，你得通过完成一些更复杂的功能和需求，才能获得同样的成就感。",[13,778,779],{},"于是今年，我尝试通过更多别的方式进行创造，并且从中获得了蛮多的成就感。例如入坑了 3D 打印，制作 6 盘位 NAS，制作铝型材支架，把废旧 iPad 改造成屏幕，把旧的 MacBook Pro 改造成“无头骑士”等等。这些创造的过程，让我获得了相当多的成就感。而这些，是目前 AI 无法替我完成的事。",[13,781,782],{},"未来，当 AI\u002F机器人能够完成越来越多的创造性工作时，留给人类能够做的事就越来越少了。当 AI\u002F机器人能够为你更快更好地完成一些事情时，你还需要做它干啥呢？就好比洗衣机、洗碗机、扫地机器人、自动驾驶这些技术的出现，大大减少了人类在洗衣、洗碗、扫地、开车这些事上需要付出的时间和精力。",[13,784,785],{},"好的方面是，我们可以把自己的时间和精力放在一些更有意义的事情上，更多地去享受生活；坏的方面是，我们可能会变得越来越无所事事，无事可做，甚至被淘汰。越来越多的人沉迷在短视频、短剧的奶头乐中，就是一个很好的例子。",[13,787,788],{},"我们需要不断为自己找点有意义有趣的事情做，为自己创造一点价值来获得成就感。我希望每年回顾这一年的时候，能够回忆起自己做过的一些有意义的事情。积累多了，在年老的时候去回顾一生的时候，能够自豪地说，我这一生是有意义的，我这一生是活得有价值的，我这辈子没白活。",[13,790,791],{},"我们需要不断认清自己，并非每个人都能做出非凡的成就，我们作为时代的螺丝钉，做好自己的事情，无愧于自己就可以了。",[579,793,795],{"id":794},"最后","📝 最后",[13,797,798],{},"最后，我给自己 2026 年的目标就是：不设目标。先停下来观察和思考一下，这个时代在怎么变化，看看能不能找到一个方向，为自己职业生涯的下一个阶段做一些规划。",{"title":20,"searchDepth":21,"depth":21,"links":800},[801,802,803,804,805,806,807,808,809,810,811,812],{"id":581,"depth":21,"text":582},{"id":613,"depth":21,"text":614},{"id":627,"depth":21,"text":628},{"id":638,"depth":21,"text":639},{"id":674,"depth":21,"text":675},{"id":681,"depth":21,"text":682},{"id":697,"depth":21,"text":698},{"id":713,"depth":21,"text":714},{"id":746,"depth":21,"text":747},{"id":759,"depth":21,"text":760},{"id":772,"depth":21,"text":773},{"id":794,"depth":21,"text":795},"jpg","2026-01-09",{},"\u002Fposts\u002F2026\u002F2025-annual-review",{"text":818,"minutes":819,"time":820,"words":821},"18 min read",17.69,1061400,3538,{"title":572,"description":577},{"loc":816,"lastmod":814},"posts\u002F2026\u002F20260109.2025-annual-review",[826],"小结","S811p0yDWH2fge4SH7W4ao8VLAEn9_Ss-OGx2wBr_s8",{"id":829,"title":830,"body":831,"class":554,"cover":1492,"coverSize":554,"date":1493,"description":835,"draft":556,"extension":23,"hideComments":556,"location":554,"meta":1494,"navigation":24,"path":1495,"readingTime":1496,"seo":1501,"sitemap":1502,"stem":1503,"tags":1504,"time":554,"weather":554,"__hash__":1505},"posts\u002Fposts\u002F2026\u002F20260104.reduce-clickhouse-resource-usage-for-self-hosted-langfuse.md","优化自托管 Langfuse 的 ClickHouse 资源占用",{"type":7,"value":832,"toc":1490},[833,836,839,846,988,991,998,1475,1482,1484,1487],[13,834,835],{},"最近在研究 Langfuse，用 docker 部署了一套，但是发现空载的情况下 ClickHouse CPU 占用也不低，并且磁盘持续在写入，一不注意，7 天已经写入了 200 多 GB。",[587,837],{"filename":838},"01.png",[13,840,841,842,845],{},"通过如下命令发现，大部分磁盘占用都是 ",[94,843,844],{},"trace_log"," 表造成的：",[88,847,851],{"className":848,"code":849,"language":850,"meta":20,"style":20},"language-sql shiki shiki-themes material-theme-lighter github-light github-dark","SELECT table, formatReadableSize(size) as size, rows FROM (\n    SELECT\n        table,\n        database,\n        sum(bytes) AS size,\n        sum(rows) AS rows\n    FROM system.parts\n    WHERE active\n    GROUP BY table, database\n    ORDER BY size DESC\n)\n","sql",[94,852,853,889,894,901,908,924,940,954,962,974,984],{"__ignoreMap":20},[97,854,855,859,862,865,868,871,874,877,880,883,886],{"class":99,"line":100},[97,856,858],{"class":857},"sw1J6","SELECT",[97,860,861],{"class":857}," table",[97,863,864],{"class":400},", formatReadableSize(",[97,866,867],{"class":857},"size",[97,869,870],{"class":400},") ",[97,872,873],{"class":857},"as",[97,875,876],{"class":857}," size",[97,878,879],{"class":400},", ",[97,881,882],{"class":857},"rows",[97,884,885],{"class":857}," FROM",[97,887,888],{"class":400}," (\n",[97,890,891],{"class":99,"line":21},[97,892,893],{"class":857},"    SELECT\n",[97,895,896,899],{"class":99,"line":126},[97,897,898],{"class":857},"        table",[97,900,197],{"class":400},[97,902,903,906],{"class":99,"line":151},[97,904,905],{"class":857},"        database",[97,907,197],{"class":400},[97,909,910,914,917,920,922],{"class":99,"line":157},[97,911,913],{"class":912},"sptTA","        sum",[97,915,916],{"class":400},"(bytes) ",[97,918,919],{"class":857},"AS",[97,921,876],{"class":857},[97,923,197],{"class":400},[97,925,926,928,931,933,935,937],{"class":99,"line":240},[97,927,913],{"class":912},[97,929,930],{"class":400},"(",[97,932,882],{"class":857},[97,934,870],{"class":400},[97,936,919],{"class":857},[97,938,939],{"class":857}," rows\n",[97,941,942,945,949,951],{"class":99,"line":261},[97,943,944],{"class":857},"    FROM",[97,946,948],{"class":947},"s_hVV"," system",[97,950,431],{"class":400},[97,952,953],{"class":947},"parts\n",[97,955,956,959],{"class":99,"line":296},[97,957,958],{"class":857},"    WHERE",[97,960,961],{"class":400}," active\n",[97,963,964,967,969,971],{"class":99,"line":317},[97,965,966],{"class":857},"    GROUP BY",[97,968,861],{"class":857},[97,970,879],{"class":400},[97,972,973],{"class":857},"database\n",[97,975,976,979,981],{"class":99,"line":33},[97,977,978],{"class":857},"    ORDER BY",[97,980,876],{"class":857},[97,982,983],{"class":857}," DESC\n",[97,985,986],{"class":99,"line":341},[97,987,437],{"class":400},[13,989,990],{},"于是便联想到之前的一次 ClickHouse 优化经历，决定关闭各种 trace 日志，来减少 ClickHouse 的资源占用。",[13,992,993,994,997],{},"网上大部分教程没有提到 ",[94,995,996],{},"background_schedule_pool_log","，但我发现它也会不断产生，也可以关闭。",[88,999,1003],{"className":1000,"code":1001,"language":1002,"meta":20,"style":20},"language-xml shiki shiki-themes material-theme-lighter github-light github-dark","\u003Cclickhouse>\n    \u003Cprofiles>\n        \u003Cdefault>\n            \u003Clog_queries>0\u003C\u002Flog_queries>\n            \u003Clog_query_threads>0\u003C\u002Flog_query_threads>\n        \u003C\u002Fdefault>\n    \u003C\u002Fprofiles>\n    \u003Clogger>\n        \u003Clevel>warning\u003C\u002Flevel>\n        \u003Cconsole>true\u003C\u002Fconsole>\n    \u003C\u002Flogger>\n    \u003Casynchronous_metric_log remove=\"1\" \u002F>\n    \u003Cbackup_log remove=\"1\" \u002F>\n    \u003Cerror_log remove=\"1\" \u002F>\n    \u003Cmetric_log remove=\"1\" \u002F>\n    \u003Cquery_thread_log remove=\"1\" \u002F>\n    \u003Cquery_log remove=\"1\" \u002F>\n    \u003Cquery_views_log remove=\"1\" \u002F>\n    \u003Cpart_log remove=\"1\" \u002F>\n    \u003Csession_log remove=\"1\" \u002F>\n    \u003Ctext_log remove=\"1\" \u002F>\n    \u003Ctrace_log remove=\"1\" \u002F>\n    \u003Ccrash_log remove=\"1\" \u002F>\n    \u003Copentelemetry_span_log remove=\"1\" \u002F>\n    \u003Czookeeper_log remove=\"1\" \u002F>\n    \u003Cprocessors_profile_log remove=\"1\" \u002F>\n    \u003Cbackground_schedule_pool_log remove=\"1\" \u002F>\n\u003C\u002Fclickhouse>\n","xml",[94,1004,1005,1017,1027,1036,1057,1074,1083,1092,1101,1119,1137,1145,1168,1188,1208,1228,1248,1268,1288,1308,1328,1348,1367,1387,1407,1427,1447,1466],{"__ignoreMap":20},[97,1006,1007,1010,1014],{"class":99,"line":100},[97,1008,1009],{"class":103},"\u003C",[97,1011,1013],{"class":1012},"sQzsp","clickhouse",[97,1015,1016],{"class":103},">\n",[97,1018,1019,1022,1025],{"class":99,"line":21},[97,1020,1021],{"class":103},"    \u003C",[97,1023,1024],{"class":1012},"profiles",[97,1026,1016],{"class":103},[97,1028,1029,1032,1034],{"class":99,"line":126},[97,1030,1031],{"class":103},"        \u003C",[97,1033,25],{"class":1012},[97,1035,1016],{"class":103},[97,1037,1038,1041,1044,1047,1050,1053,1055],{"class":99,"line":151},[97,1039,1040],{"class":103},"            \u003C",[97,1042,1043],{"class":1012},"log_queries",[97,1045,1046],{"class":103},">",[97,1048,1049],{"class":400},"0",[97,1051,1052],{"class":103},"\u003C\u002F",[97,1054,1043],{"class":1012},[97,1056,1016],{"class":103},[97,1058,1059,1061,1064,1066,1068,1070,1072],{"class":99,"line":157},[97,1060,1040],{"class":103},[97,1062,1063],{"class":1012},"log_query_threads",[97,1065,1046],{"class":103},[97,1067,1049],{"class":400},[97,1069,1052],{"class":103},[97,1071,1063],{"class":1012},[97,1073,1016],{"class":103},[97,1075,1076,1079,1081],{"class":99,"line":240},[97,1077,1078],{"class":103},"        \u003C\u002F",[97,1080,25],{"class":1012},[97,1082,1016],{"class":103},[97,1084,1085,1088,1090],{"class":99,"line":261},[97,1086,1087],{"class":103},"    \u003C\u002F",[97,1089,1024],{"class":1012},[97,1091,1016],{"class":103},[97,1093,1094,1096,1099],{"class":99,"line":296},[97,1095,1021],{"class":103},[97,1097,1098],{"class":1012},"logger",[97,1100,1016],{"class":103},[97,1102,1103,1105,1108,1110,1113,1115,1117],{"class":99,"line":317},[97,1104,1031],{"class":103},[97,1106,1107],{"class":1012},"level",[97,1109,1046],{"class":103},[97,1111,1112],{"class":400},"warning",[97,1114,1052],{"class":103},[97,1116,1107],{"class":1012},[97,1118,1016],{"class":103},[97,1120,1121,1123,1126,1128,1131,1133,1135],{"class":99,"line":33},[97,1122,1031],{"class":103},[97,1124,1125],{"class":1012},"console",[97,1127,1046],{"class":103},[97,1129,1130],{"class":400},"true",[97,1132,1052],{"class":103},[97,1134,1125],{"class":1012},[97,1136,1016],{"class":103},[97,1138,1139,1141,1143],{"class":99,"line":341},[97,1140,1087],{"class":103},[97,1142,1098],{"class":1012},[97,1144,1016],{"class":103},[97,1146,1147,1149,1152,1156,1159,1161,1163,1165],{"class":99,"line":347},[97,1148,1021],{"class":103},[97,1150,1151],{"class":1012},"asynchronous_metric_log",[97,1153,1155],{"class":1154},"s9AJx"," remove",[97,1157,1158],{"class":103},"=",[97,1160,117],{"class":140},[97,1162,428],{"class":144},[97,1164,117],{"class":140},[97,1166,1167],{"class":103}," \u002F>\n",[97,1169,1171,1173,1176,1178,1180,1182,1184,1186],{"class":99,"line":1170},13,[97,1172,1021],{"class":103},[97,1174,1175],{"class":1012},"backup_log",[97,1177,1155],{"class":1154},[97,1179,1158],{"class":103},[97,1181,117],{"class":140},[97,1183,428],{"class":144},[97,1185,117],{"class":140},[97,1187,1167],{"class":103},[97,1189,1191,1193,1196,1198,1200,1202,1204,1206],{"class":99,"line":1190},14,[97,1192,1021],{"class":103},[97,1194,1195],{"class":1012},"error_log",[97,1197,1155],{"class":1154},[97,1199,1158],{"class":103},[97,1201,117],{"class":140},[97,1203,428],{"class":144},[97,1205,117],{"class":140},[97,1207,1167],{"class":103},[97,1209,1211,1213,1216,1218,1220,1222,1224,1226],{"class":99,"line":1210},15,[97,1212,1021],{"class":103},[97,1214,1215],{"class":1012},"metric_log",[97,1217,1155],{"class":1154},[97,1219,1158],{"class":103},[97,1221,117],{"class":140},[97,1223,428],{"class":144},[97,1225,117],{"class":140},[97,1227,1167],{"class":103},[97,1229,1231,1233,1236,1238,1240,1242,1244,1246],{"class":99,"line":1230},16,[97,1232,1021],{"class":103},[97,1234,1235],{"class":1012},"query_thread_log",[97,1237,1155],{"class":1154},[97,1239,1158],{"class":103},[97,1241,117],{"class":140},[97,1243,428],{"class":144},[97,1245,117],{"class":140},[97,1247,1167],{"class":103},[97,1249,1251,1253,1256,1258,1260,1262,1264,1266],{"class":99,"line":1250},17,[97,1252,1021],{"class":103},[97,1254,1255],{"class":1012},"query_log",[97,1257,1155],{"class":1154},[97,1259,1158],{"class":103},[97,1261,117],{"class":140},[97,1263,428],{"class":144},[97,1265,117],{"class":140},[97,1267,1167],{"class":103},[97,1269,1271,1273,1276,1278,1280,1282,1284,1286],{"class":99,"line":1270},18,[97,1272,1021],{"class":103},[97,1274,1275],{"class":1012},"query_views_log",[97,1277,1155],{"class":1154},[97,1279,1158],{"class":103},[97,1281,117],{"class":140},[97,1283,428],{"class":144},[97,1285,117],{"class":140},[97,1287,1167],{"class":103},[97,1289,1291,1293,1296,1298,1300,1302,1304,1306],{"class":99,"line":1290},19,[97,1292,1021],{"class":103},[97,1294,1295],{"class":1012},"part_log",[97,1297,1155],{"class":1154},[97,1299,1158],{"class":103},[97,1301,117],{"class":140},[97,1303,428],{"class":144},[97,1305,117],{"class":140},[97,1307,1167],{"class":103},[97,1309,1311,1313,1316,1318,1320,1322,1324,1326],{"class":99,"line":1310},20,[97,1312,1021],{"class":103},[97,1314,1315],{"class":1012},"session_log",[97,1317,1155],{"class":1154},[97,1319,1158],{"class":103},[97,1321,117],{"class":140},[97,1323,428],{"class":144},[97,1325,117],{"class":140},[97,1327,1167],{"class":103},[97,1329,1331,1333,1336,1338,1340,1342,1344,1346],{"class":99,"line":1330},21,[97,1332,1021],{"class":103},[97,1334,1335],{"class":1012},"text_log",[97,1337,1155],{"class":1154},[97,1339,1158],{"class":103},[97,1341,117],{"class":140},[97,1343,428],{"class":144},[97,1345,117],{"class":140},[97,1347,1167],{"class":103},[97,1349,1351,1353,1355,1357,1359,1361,1363,1365],{"class":99,"line":1350},22,[97,1352,1021],{"class":103},[97,1354,844],{"class":1012},[97,1356,1155],{"class":1154},[97,1358,1158],{"class":103},[97,1360,117],{"class":140},[97,1362,428],{"class":144},[97,1364,117],{"class":140},[97,1366,1167],{"class":103},[97,1368,1370,1372,1375,1377,1379,1381,1383,1385],{"class":99,"line":1369},23,[97,1371,1021],{"class":103},[97,1373,1374],{"class":1012},"crash_log",[97,1376,1155],{"class":1154},[97,1378,1158],{"class":103},[97,1380,117],{"class":140},[97,1382,428],{"class":144},[97,1384,117],{"class":140},[97,1386,1167],{"class":103},[97,1388,1390,1392,1395,1397,1399,1401,1403,1405],{"class":99,"line":1389},24,[97,1391,1021],{"class":103},[97,1393,1394],{"class":1012},"opentelemetry_span_log",[97,1396,1155],{"class":1154},[97,1398,1158],{"class":103},[97,1400,117],{"class":140},[97,1402,428],{"class":144},[97,1404,117],{"class":140},[97,1406,1167],{"class":103},[97,1408,1410,1412,1415,1417,1419,1421,1423,1425],{"class":99,"line":1409},25,[97,1411,1021],{"class":103},[97,1413,1414],{"class":1012},"zookeeper_log",[97,1416,1155],{"class":1154},[97,1418,1158],{"class":103},[97,1420,117],{"class":140},[97,1422,428],{"class":144},[97,1424,117],{"class":140},[97,1426,1167],{"class":103},[97,1428,1430,1432,1435,1437,1439,1441,1443,1445],{"class":99,"line":1429},26,[97,1431,1021],{"class":103},[97,1433,1434],{"class":1012},"processors_profile_log",[97,1436,1155],{"class":1154},[97,1438,1158],{"class":103},[97,1440,117],{"class":140},[97,1442,428],{"class":144},[97,1444,117],{"class":140},[97,1446,1167],{"class":103},[97,1448,1450,1452,1454,1456,1458,1460,1462,1464],{"class":99,"line":1449},27,[97,1451,1021],{"class":103},[97,1453,996],{"class":1012},[97,1455,1155],{"class":1154},[97,1457,1158],{"class":103},[97,1459,117],{"class":140},[97,1461,428],{"class":144},[97,1463,117],{"class":140},[97,1465,1167],{"class":103},[97,1467,1469,1471,1473],{"class":99,"line":1468},28,[97,1470,1052],{"class":103},[97,1472,1013],{"class":1012},[97,1474,1016],{"class":103},[13,1476,1477,1478,1481],{},"将上述配置挂载到 ClickHouse 容器的 ",[94,1479,1480],{},"\u002Fetc\u002Fclickhouse-server\u002Fconfig.d\u002Flogs.xml"," 后，重启容器即可。",[587,1483],{"filename":607},[13,1485,1486],{},"整个世界清净了。",[549,1488,1489],{},"html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--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 .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .s9AJx, html code.shiki .s9AJx{--shiki-light:#9C3EDA;--shiki-default:#6F42C1;--shiki-dark:#B392F0}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}",{"title":20,"searchDepth":21,"depth":21,"links":1491},[],"png","2026-01-04",{},"\u002Fposts\u002F2026\u002Freduce-clickhouse-resource-usage-for-self-hosted-langfuse",{"text":1497,"minutes":1498,"time":1499,"words":1500},"2 min read",1.255,75300,251,{"title":830,"description":835},{"loc":1495,"lastmod":1493},"posts\u002F2026\u002F20260104.reduce-clickhouse-resource-usage-for-self-hosted-langfuse",[568],"7Hq01juLrC71nQLXMrZ1wFNCDCplNmp-JdCMvi12wuc",{"id":1507,"title":1508,"body":1509,"class":554,"cover":1492,"coverSize":554,"date":1535,"description":1513,"draft":556,"extension":23,"hideComments":556,"location":554,"meta":1536,"navigation":24,"path":1537,"readingTime":1538,"seo":1542,"sitemap":1543,"stem":1544,"tags":1545,"time":554,"weather":554,"__hash__":1549},"posts\u002Fposts\u002F2025\u002F20250708.delete-service-of-synology.md","删除群晖 Synology 证书设置中自定义的服务",{"type":7,"value":1510,"toc":1533},[1511,1514,1517,1519,1522,1528,1531],[13,1512,1513],{},"今天在给群晖增加一个自带的 DDNS 服务以实现在自建的 DDNS 挂掉的情况下还有备用方案。",[13,1515,1516],{},"在配置证书的时候，发现设置列表中有一个我之前自定义的服务，也不记得是在哪里设置的了，但是找不到地方删除。",[587,1518],{"filename":838},[13,1520,1521],{},"经过一番探寻，发现在这个文件中：",[88,1523,1526],{"className":1524,"code":1525,"language":542},[540],"\u002Fusr\u002Fsyno\u002Fetc\u002Fcertificate\u002F_archive\u002FINFO\n",[94,1527,1525],{"__ignoreMap":20},[13,1529,1530],{},"可以看到所有的服务列表，找到对应的服务的 JSON 对象，删掉保存即可。",[587,1532],{"filename":607},{"title":20,"searchDepth":21,"depth":21,"links":1534},[],"2025-07-08",{},"\u002Fposts\u002F2025\u002Fdelete-service-of-synology",{"text":30,"minutes":1539,"time":1540,"words":1541},0.635,38100,127,{"title":1508,"description":1513},{"loc":1537,"lastmod":1535},"posts\u002F2025\u002F20250708.delete-service-of-synology",[1546,1547,1548],"NAS","群晖","HomeLab","0LG2kNgCF7bxyd30Qp42-GKe7SgerIL1bxhbGiAuqBQ",{"id":1551,"title":1552,"body":1553,"class":554,"cover":813,"coverSize":554,"date":1766,"description":20,"draft":556,"extension":23,"hideComments":556,"location":554,"meta":1767,"navigation":24,"path":1768,"readingTime":1769,"seo":1774,"sitemap":1775,"stem":1776,"tags":1777,"time":554,"weather":554,"__hash__":1780},"posts\u002Fposts\u002F2025\u002F20250707.homelab-disaster-postmortem.md","一次 HomeLab 灾难级事故的复盘",{"type":7,"value":1554,"toc":1760},[1555,1558,1674,1677,1723,1726,1746,1749],[579,1556,1557],{"id":1557},"时间线",[651,1559,1560,1567,1573,1579,1585,1591,1597,1603,1609,1615,1621,1626,1632,1638,1644,1650,1656,1662,1668],{},[654,1561,1562,1566],{},[1563,1564,1565],"strong",{},"2025-07-07 09:33",": TP-LINK 主路由设备上线告警（上次离线原因：设备重启）",[654,1568,1569,1572],{},[1563,1570,1571],{},"2025-07-07 09:34",": 收到群晖异常关机的邮件通知（收到该通知说明群晖已经重启过了，实际重启时间会更早一点）",[654,1574,1575,1578],{},[1563,1576,1577],{},"2025-07-07 09:36",": 尝试登录群晖 DSM，发现域名解析有问题，无法登录；尝试 ToDesk 远程连接家里的 PC，发现不在线（未开机）",[654,1580,1581,1584],{},[1563,1582,1583],{},"2025-07-07 09:40",": 收到 Uptime Kuma 监控服务的各种告警通知，多项服务不可用",[654,1586,1587,1590],{},[1563,1588,1589],{},"2025-07-07 09:52",": 通过 TP-LINK 商用云平台远程查看主路由，发现可连接，但由于之前为了 IPTV 改为了光猫的子路由（非桥接），无法查看到公网 IP；尝试通过电信的小翼管家查看公网 IP，发现没有入口可查",[654,1592,1593,1596],{},[1563,1594,1595],{},"2025-07-07 09:54",": 尝试通过群晖的 QuickConnect 远程访问，发现之前被我关闭了",[654,1598,1599,1602],{},[1563,1600,1601],{},"2025-07-07 10:30",": 查看自己写的 bots 服务代码（含 ddns 功能），请求失败时，有 backoff 策略，首次失败休眠 1 分钟，然后再失败休眠 10 分钟，再失败休眠 1 小时，决定再等一小时看看",[654,1604,1605,1608],{},[1563,1606,1607],{},"2025-07-07 11:00",": 在 TP-LINK 主路由管理页面尝试通过网络唤醒服务唤醒家里的 PC，发现无法唤醒（事后发现之前记录的网卡 MAC 不对）",[654,1610,1611,1614],{},[1563,1612,1613],{},"2025-07-07 11:30",": 通过米家控制办公桌的智能插座电源重启，尝试唤醒 PC，未成功；打算通过控制机柜的智能插座重启，实现所有服务的重启，但还打算再等等 bots 的 ddns 能否生效",[654,1616,1617,1620],{},[1563,1618,1619],{},"2025-07-07 11:44",": 等了 2 个多小时了，感觉 bots 服务可能已经不在运行，再等下去也没用了，经过深思熟虑决定重启整个机柜电源",[654,1622,1623,1625],{},[1563,1624,1619],{},": 通过米家控制智能插座关闭电源，发现状态未更新，再次点击发现操作失败，此时发现智能插座设备已离线，意识到机柜一旦断电，所有米家设备也无法控制了，再也无法打开",[654,1627,1628,1631],{},[1563,1629,1630],{},"2025-07-07 11:50",": 出发回家，准备手动重启机柜电源",[654,1633,1634,1637],{},[1563,1635,1636],{},"2025-07-07 12:49",": 到家，手动开启机柜智能插座电源",[654,1639,1640,1643],{},[1563,1641,1642],{},"2025-07-07 12:50",": 打开 PC，发现 主板 PCI-E 设备唤醒是 Enabled",[654,1645,1646,1649],{},[1563,1647,1648],{},"2025-07-07 12:51",": 进入 PC 系统，发现网卡的允许设备唤醒也是启用的，但网卡 MAC 地址和之前配置的不一样，原因后面详述",[654,1651,1652,1655],{},[1563,1653,1654],{},"2025-07-07 12:53",": 通过 PC 内网登录 portainer，发现 bots 容器处于 stopped 状态（Stopped for 3 hours with exit code 127），finished 时间为 09:33:52",[654,1657,1658,1661],{},[1563,1659,1660],{},"2025-07-07 12:54",": 手动重新启动 bots 容器，正常启动",[654,1663,1664,1667],{},[1563,1665,1666],{},"2025-07-07 12:55",": bots 服务已正常更新域名解析，手机切换到蜂窝测试，已经可正常访问",[654,1669,1670,1673],{},[1563,1671,1672],{},"2025-07-07 13:01",": 出门赶回公司",[579,1675,1676],{"id":1676},"原因分析",[651,1678,1679,1685,1691,1697,1717],{},[654,1680,1681,1684],{},[1563,1682,1683],{},"导火索","：家里异常断电（TP-LINK 和群晖都在机柜里，他俩同时重启，可断定机柜掉电了；光猫在弱电箱里，查看光猫的启动时间，也在同一时间重启过，可判断是全屋断电了）",[654,1686,1687,1690],{},[1563,1688,1689],{},"直接原因","：自建的 DDNS 服务在光猫重启后公网 IP 发生变化的情况下未更新解析，导致所有服务无法远程访问",[654,1692,1693,1696],{},[1563,1694,1695],{},"根本原因","：包含了 DDNS 服务的 bots 容器在宿主机重启后未能重启成功，经过分析发现因为 bots 容器启动过程中挂载了群晖中的一个目录，用来更新 clash 的配置文件，但是群晖启动会比 bots 容器所在的宿主机慢，可能导致了启动失败",[654,1698,1699,1702,1703],{},[1563,1700,1701],{},"处理慢的原因（多种补救措施失效）","：\n",[651,1704,1705,1708,1711,1714],{},[654,1706,1707],{},"家里的 PC 未开机，无法通过 ToDesk 远程连接处理（之前几次类似问题都是通过 ToDesk 远程修复）",[654,1709,1710],{},"家里没人，无法帮忙手动启动 PC",[654,1712,1713],{},"PC 的远程唤醒功能失效，原因是网卡 MAC 地址记录不正确，这是因为之前记录的是一个虚拟网卡的 MAC，上次去掉了虚拟网卡，直接走的物理网卡，但是忘记记录 MAC 地址",[654,1715,1716],{},"群晖的 QuickConnect 远程访问服务失效，之前感觉用不到被我手动关闭了",[654,1718,1719,1722],{},[1563,1720,1721],{},"故障升级原因","：由于多个补救方案失效，尝试通过机柜断电重启的方式补救，结果所有设备断电，断绝了任何远程补救的可能",[579,1724,1725],{"id":1725},"改进措施",[651,1727,1728,1731,1734,1737,1740,1743],{},[654,1729,1730],{},"✅ 购买 UPS，确保机柜设备在短暂断电时能够继续供电，避免意外断电导致的服务中断（07-08 更新: 已购买山特 SANTAK TG-BOX850 UPS）",[654,1732,1733],{},"✅ 提升 DDNS 服务的核心程度，从 bots 项目中独立出来，减少其他依赖（07-08 更新: 已完成）",[654,1735,1736],{},"✅ 启用群晖的 QuickConnect 服务， DDNS 失效后可连接到群晖上进行一些处理",[654,1738,1739],{},"✅ 确保 PC 的网络远程唤醒功能正常，可通过远程连接到 PC 解决问题",[654,1741,1742],{},"✅ 部署一个 Cloudflare Tunnel 容器，作为 DDNS 失效后的备用方案",[654,1744,1745],{},"✅ 把机柜的米家插座从米家 APP 首页移除，避免误操作关闭电源，吸取教训，以后不要再给机柜断电了",[579,1747,1748],{"id":1748},"经验教训",[651,1750,1751,1754,1757],{},[654,1752,1753],{},"之前出现过一次机柜断电后 DDNS 服务不可用导致无法访问的问题，当时通过 ToDesk 远程连接到 PC，然后通过内网重启了 bots 服务解决了问题，但应该更进一步，看看为什么 bots 服务没有自动重启成功，从而可以避免这次的事故",[654,1755,1756],{},"核心的服务需要保障高可用，例如公网访问这件事，除了自建的 DDNS 之外，还需要通过 QuickConnect、Cloudflare Tunnel 等多种手段保证可用性",[654,1758,1759],{},"任何情况下都不要尝试给整个机柜断电这种操作，应该优先考虑其他补救措施",{"title":20,"searchDepth":21,"depth":21,"links":1761},[1762,1763,1764,1765],{"id":1557,"depth":21,"text":1557},{"id":1676,"depth":21,"text":1676},{"id":1725,"depth":21,"text":1725},{"id":1748,"depth":21,"text":1748},"2025-07-07",{},"\u002Fposts\u002F2025\u002Fhomelab-disaster-postmortem",{"text":1770,"minutes":1771,"time":1772,"words":1773},"8 min read",7.38,442800,1476,{"title":1552,"description":20},{"loc":1768,"lastmod":1766},"posts\u002F2025\u002F20250707.homelab-disaster-postmortem",[568,1548,1778,1779],"运维","复盘","ICyfDes8hfks9c7nlNUEMy8kuWktGhB5Iu1TriECazU",{"id":1782,"title":1783,"body":1784,"class":554,"cover":813,"coverSize":554,"date":2940,"description":1788,"draft":556,"extension":23,"hideComments":556,"location":554,"meta":2941,"navigation":24,"path":2942,"readingTime":2943,"seo":2948,"sitemap":2949,"stem":2950,"tags":2951,"time":554,"weather":554,"__hash__":2954},"posts\u002Fposts\u002F2025\u002F20250401.thoughts-on-when-to-liberate-taiwan.md","关于何时解放台湾的思考",{"type":7,"value":1785,"toc":2930},[1786,1789,1792,1795,1798,1807,1810,1815,1823,1827,1835,1839,1847,1850,1918,1921,1924,1932,1935,1944,1947,1964,1967,2877,2880,2903,2906,2909,2912,2924,2927],[13,1787,1788],{},"今天一早就看到新闻，东部战区又在台岛周边开展军演，大家对“温水煮青蛙”式的军演已经习以为常。",[13,1790,1791],{},"能不能打得起来，什么时候打，有各种各样的讨论。最近看了很多内容，我想从其中看到的一个角度，搜集一些资料，进行一些思考，供大家参考。",[13,1793,1794],{},"台湾问题是一个跨度很长的问题，国家对于台湾问题的战略，必然也是一个周期很长的战略，我们很难去根据现有信息去准确预测一个时间点，但从一些公开信息，可以看到一些策略上的变化。",[579,1796,1797],{"id":1797},"台湾问题白皮书的变化",[13,1799,1800,1801,1806],{},"关于台湾问题，国台办分别在1993年9月、2000年2月、2022年8月发表过三份白皮书，查阅地址：",[68,1802,1805],{"href":1803,"rel":1804},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002Fzt_674979\u002Fdnzt_674981\u002Fqtzt\u002Ftwwt\u002Ftwwtbps\u002F",[72],"台湾问题白皮书","。",[13,1808,1809],{},"三份白皮书的发布背景和核心内容大致如下：",[1811,1812,1814],"h3",{"id":1813},"_1-1993年8月台湾问题与中国的统一","1. 1993年8月：《台湾问题与中国的统一》",[651,1816,1817,1820],{},[654,1818,1819],{},"背景：两岸关系开始改善，1992年“九二共识”达成，1993年汪辜会谈举行。",[654,1821,1822],{},"核心内容：首次系统阐述台湾问题的历史由来和“一国两制”统一方案，强调通过和平方式实现统一。",[1811,1824,1826],{"id":1825},"_2-2000年2月一个中国的原则与台湾问题","2. 2000年2月：《一个中国的原则与台湾问题》",[651,1828,1829,1832],{},[654,1830,1831],{},"背景：李登辉提出“两国论”，陈水扁上台，两岸关系趋于紧张。",[654,1833,1834],{},"核心内容：强调“一个中国”原则是两岸关系的政治基础，反对任何形式的“台独”。",[1811,1836,1838],{"id":1837},"_3-2022年8月台湾问题与新时代中国统一事业","3. 2022年8月：《台湾问题与新时代中国统一事业》",[651,1840,1841,1844],{},[654,1842,1843],{},"背景：两岸关系进一步紧张，民进党拒绝承认“九二共识”，美国加强对台支持。",[654,1845,1846],{},"核心内容：强调统一是历史必然，并与新时代发展目标结合，重申“一国两制”，但对“台独”采取更强硬立场。",[1811,1848,1849],{"id":1849},"三份白皮书对比",[1851,1852,1853,1872],"table",{},[1854,1855,1856],"thead",{},[1857,1858,1859,1863,1866,1869],"tr",{},[1860,1861,1862],"th",{},"年份",[1860,1864,1865],{},"背景",[1860,1867,1868],{},"核心内容",[1860,1870,1871],{},"态度",[1873,1874,1875,1890,1904],"tbody",{},[1857,1876,1877,1881,1884,1887],{},[1878,1879,1880],"td",{},"1993",[1878,1882,1883],{},"两岸刚开始接触",[1878,1885,1886],{},"“一国两制”，和平统一",[1878,1888,1889],{},"相对温和，提出台湾可保留军队",[1857,1891,1892,1895,1898,1901],{},[1878,1893,1894],{},"2000",[1878,1896,1897],{},"台湾政局变动，出现“两国论”",[1878,1899,1900],{},"“一个中国”，反对“台独”",[1878,1902,1903],{},"更强硬，不排除非和平方式",[1857,1905,1906,1909,1912,1915],{},[1878,1907,1908],{},"2022",[1878,1910,1911],{},"国际局势复杂，民进党拒绝“九二共识”",[1878,1913,1914],{},"统一是必然，反对外部干涉",[1878,1916,1917],{},"更自信，不再提台湾可保留军队",[13,1919,1920],{},"从三份白皮书的对比中，我们可以看到，国家对于台湾问题的态度是随着国际局势和两岸关系的变化而变化的，越来越强硬了。",[13,1922,1923],{},"近几年没有再公布新的白皮书，但从一些公开信息中，也可以看到一些新的变化。",[13,1925,1926,1927],{},"虽然说“和平统一、一国两制”是解决台湾问题的基本方针，是实现祖国统一的最佳方式，但2024年、2025年的政府工作报告中，涉台内容都只是强调“坚定不移推进祖国统一大业”，已连续两年未提及“和平统一”。",[68,1928,1931],{"href":1929,"rel":1930},"https:\u002F\u002Fnews.cctv.com\u002F2025\u002F03\u002F12\u002FARTIHOmZRIB7Sr5CzzM0GAfA250312.shtml",[72],"参考",[579,1933,1934],{"id":1934},"与他国联合声明的变化",[13,1936,1937,1938,1943],{},"发表于2025年2月9日的《经济学人》杂志的一篇文章《",[68,1939,1942],{"href":1940,"rel":1941},"https:\u002F\u002Fwww.economist.com\u002Finternational\u002F2025\u002F02\u002F09\u002Fchinas-stunning-new-campaign-to-turn-the-world-against-taiwan",[72],"China’s stunning new campaign to turn the world against Taiwan","》，详细分析了中国近期在全球范围内推动各国支持其对台湾主权主张的外交行动。",[13,1945,1946],{},"根据文章内容，以下是主要观点的概述：",[651,1948,1949,1952,1955,1958,1961],{},[654,1950,1951],{},"全球支持的增加：目前，已有70个国家正式支持中国对台湾的主权主张，并认可中国为实现统一所采取的“所有”措施。这些国家主要分布在亚洲、欧洲、非洲、大洋洲和拉丁美洲，其中97%位于全球南方，包括南非、埃及和巴基斯坦等国。",[654,1953,1954],{},"外交措辞的变化：许多国家在与中国的联合声明中，开始采用更为明确支持中国统一努力的措辞。例如，斯里兰卡在2025年1月的联合声明中，首次表示“坚定支持中国政府为实现国家统一所做的所有努力”，取代了2024年声明中较为模糊的支持中国“维护主权和领土完整”的表述。",[654,1956,1957],{},"非洲国家的集体支持：2024年9月，53个非洲国家在北京举行的峰会上签署声明，承认台湾是中国领土的一部分，并“坚定支持”中国的统一努力。这与2021年峰会期间未明确提及台湾的立场形成鲜明对比。",[654,1959,1960],{},"中国的战略意图：中国的这一外交攻势旨在为其对台湾的施压行动争取全球支持，包括可能实施的封锁或检查措施。美国官员表示，中国领导人习近平已指示军方在2027年前具备攻台能力。",[654,1962,1963],{},"对西方制裁的预防：通过确保全球多数国家认可其行动的合法性，中国希望在台湾问题上避免遭受类似俄罗斯在乌克兰问题上所面临的国际制裁和孤立。",[13,1965,1966],{},"无法去一一验证数据的真实性，我去外交部官网查阅了近几年的一些联合声明，有关台湾问题的部分列举如下：",[651,1968,1969,1978,1987,1995,2004,2013,2022,2031,2040,2049,2058,2067,2075,2084,2093,2102,2111,2119,2128,2136,2144,2153,2162,2170,2179,2188,2196,2205,2213,2222,2231,2239,2248,2257,2265,2274,2283,2291,2300,2309,2318,2327,2336,2345,2353,2362,2371,2380,2389,2398,2407,2416,2425,2434,2441,2450,2459,2467,2475,2483,2492,2501,2510,2519,2528,2537,2546,2554,2563,2572,2581,2590,2599,2608,2617,2625,2633,2642,2651,2660,2669,2678,2687,2696,2705,2714,2723,2732,2741,2750,2759,2768,2777,2785,2793,2802,2810,2818,2827,2834,2841,2849,2857,2865,2874],{},[654,1970,1971,1972,1977],{},"2025年03月28日，《",[68,1973,1976],{"href":1974,"rel":1975},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202503\u002Ft20250328_11584034.shtml",[72],"中华人民共和国和孟加拉人民共和国联合新闻稿","》：双方强调，联合国大会第2758号决议权威性不容质疑和挑战。孟方重申坚定奉行一个中国原则，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分。孟方反对“台独”。孟方在涉及中国核心利益的问题上支持中方，支持中方为捍卫国家主权和领土完整所作努力。",[654,1979,1980,1981,1986],{},"2025年02月06日，《",[68,1982,1985],{"href":1983,"rel":1984},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202502\u002Ft20250206_11550291.shtml",[72],"中华人民共和国和文莱达鲁萨兰国关于深化战略合作伙伴关系、推进中文命运共同体建设的联合声明","》：双方重申联合国大会第2758号决议的重要性。文方重申坚持一个中国政策，认为台湾是中华人民共和国领土不可分割的一部分。文莱支持两岸关系和平发展和中国国家统一。",[654,1988,1980,1989,1994],{},[68,1990,1993],{"href":1991,"rel":1992},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202502\u002Ft20250206_11550130.shtml",[72],"中华人民共和国和巴基斯坦伊斯兰共和国联合声明","》：双方强调联合国大会第2758号决议权威性不容质疑和挑战。巴方重申坚定奉行一个中国原则，认为台湾是中华人民共和国领土不可分割的一部分、台湾问题是中国核心利益中的核心，坚定支持中方为实现国家统一所作的一切努力，坚决反对任何形式的“台独”。",[654,1996,1997,1998,2003],{},"2025年02月05日，《",[68,1999,2002],{"href":2000,"rel":2001},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202502\u002Ft20250205_11549624.shtml",[72],"中华人民共和国和吉尔吉斯共和国关于深化新时代全面战略伙伴关系的联合声明","》：吉方重申恪守一个中国原则，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府。吉方反对任何利用台湾问题干涉中国内政的图谋，反对任何形式的“台湾独立”，坚定支持中国政府实现国家统一。",[654,2005,2006,2007,2012],{},"2025年01月16日，《",[68,2008,2011],{"href":2009,"rel":2010},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202501\u002Ft20250116_11536630.shtml",[72],"中华人民共和国和斯里兰卡民主社会主义共和国联合声明","》：双方重申联合国大会第2758号决议权威性。斯方重申坚定奉行一个中国原则，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中华人民共和国领土不可分割的一部分。斯方坚定支持中国政府为实现国家统一所作的一切努力，反对任何形式的“台湾独立”。",[654,2014,2015,2016,2021],{},"2024年12月03日，《",[68,2017,2020],{"href":2018,"rel":2019},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202412\u002Ft20241218_11497221.shtml",[72],"中华人民共和国和尼泊尔联合声明","》：尼方忆及联合国大会第2758号决议，重申坚定奉行一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分。尼方坚定支持中方为实现国家统一所作努力，反对“台湾独立”。",[654,2023,2024,2025,2030],{},"2024年11月26日，《",[68,2026,2029],{"href":2027,"rel":2028},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202412\u002Ft20241218_11497348.shtml",[72],"中华人民共和国和萨摩亚独立国联合声明","》：萨方坚定奉行一个中国原则，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，认同中国政府为实现国家统一所做的努力。",[654,2032,2033,2034,2039],{},"2024年11月21日，《",[68,2035,2038],{"href":2036,"rel":2037},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202412\u002Ft20241218_11497520.shtml",[72],"中华人民共和国和巴西联邦共和国关于携手构建更公正世界和更可持续星球的中巴命运共同体的联合声明","》：巴方重申坚持一个中国原则，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府。巴方支持中国为实现国家和平统一所作努力。",[654,2041,2042,2043,2048],{},"2024年11月15日，《",[68,2044,2047],{"href":2045,"rel":2046},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202412\u002Ft20241218_11497859.shtml",[72],"中华人民共和国和秘鲁共和国关于深化全面战略伙伴关系的联合声明","》：双方重申恪守《联合国宪章》的宗旨和原则，尊重各国国家主权、领土完整和核心利益。秘方重申坚定恪守一个中国原则。",[654,2050,2051,2052,2057],{},"2024年11月09日，《",[68,2053,2056],{"href":2054,"rel":2055},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202412\u002Ft20241218_11497865.shtml",[72],"中华人民共和国和印度尼西亚共和国关于推进全面战略伙伴关系和中印尼命运共同体建设的联合声明","》：印尼重申一贯坚定奉行一个中国原则，该原则在联合国大会第2758号决议中得到确认，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，印尼坚定支持中国政府为实现国家和平统一所作的努力。",[654,2059,2060,2061,2066],{},"2024年11月01日，《",[68,2062,2065],{"href":2063,"rel":2064},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202412\u002Ft20241218_11497713.shtml",[72],"中华人民共和国与斯洛伐克共和国关于建立战略伙伴关系的联合声明","》：斯方重申奉行一个中国政策，承认世界上只有一个中国，中华人民共和国政府是代表全中国的唯一合法政府，反对任何干涉中国内政、主权和领土（包括台湾在内）完整的企图。",[654,2068,2069,2070,2074],{},"2024年10月16日，《",[68,2071,1993],{"href":2072,"rel":2073},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202412\u002Ft20241218_11497591.shtml",[72],"》：双方强调联合国大会第2758号决议权威性不容质疑和挑战。巴方重申坚定奉行一个中国原则，台湾是中华人民共和国领土不可分割的一部分，坚定支持中方为实现国家统一所作的一切努力，坚决反对任何形式的“台独”。",[654,2076,2077,2078,2083],{},"2024年10月14日，《",[68,2079,2082],{"href":2080,"rel":2081},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202412\u002Ft20241218_11497563.shtml",[72],"中华人民共和国和越南社会主义共和国联合声明","》：越方重申坚定奉行一个中国政策，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，支持两岸关系和平发展和中国统一大业，坚决反对任何形式的“台独”分裂活动，不同台湾发展任何形式的官方关系。",[654,2085,2086,2087,2092],{},"2024年10月12日，《",[68,2088,2091],{"href":2089,"rel":2090},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202412\u002Ft20241218_11497128.shtml",[72],"中华人民共和国和老挝人民民主共和国联合声明","》：老方重申坚定奉行一个中国原则，承认世界上只有一个中国，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分。反对任何损害中国主权和领土完整的言行，反对任何形式的“台独”分裂活动，反对外部势力以任何借口干涉中国内政，支持中国为实现国家统一所作的一切努力。",[654,2094,2095,2096,2101],{},"2024年09月06日，《",[68,2097,2100],{"href":2098,"rel":2099},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202409\u002Ft20240906_11486777.shtml",[72],"中华人民共和国和刚果共和国关于深化全面战略合作伙伴关系、构建高水平中刚命运共同体的联合声明","》：刚方重申坚定奉行一个中国原则，认为世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，坚决反对任何形式的“台湾独立”，反对外部势力干涉中国内政，重申不同台湾进行任何形式的官方往来，坚定支持中国政府为实现国家统一所作一切努力。",[654,2103,2104,2105,2110],{},"2024年09月05日，《",[68,2106,2109],{"href":2107,"rel":2108},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202409\u002Ft20240905_11486084.shtml",[72],"中华人民共和国和圣多美和普林西比民主共和国关于建立战略伙伴关系的联合声明","》：圣普方重申坚定奉行一个中国原则，认为世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，坚决反对任何形式的“台湾独立”，反对外部势力干涉中国内政，重申不同台湾进行任何形式的官方往来，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2112,2104,2113,2118],{},[68,2114,2117],{"href":2115,"rel":2116},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202409\u002Ft20240905_11486032.shtml",[72],"中华人民共和国和卢旺达共和国关于共同推动落实三大全球倡议的联合声明","》：卢方重申坚定奉行一个中国原则，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，支持中国政府为实现国家统一所作的一切努力，认为中国同任何国家一样，有权自主处理其内部主权事务。",[654,2120,2121,2122,2127],{},"2024年09月04日，《",[68,2123,2126],{"href":2124,"rel":2125},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202409\u002Ft20240904_11485222.shtml",[72],"中华人民共和国和塞内加尔共和国关于深化全面战略合作伙伴关系、构建高水平中塞命运共同体的联合声明","》：塞方重申，坚定不移奉行一个中国原则，认为世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，坚决反对任何形式的“台湾独立”，反对外部势力干涉中国内政，重申不同台湾进行任何形式的官方往来，坚定支持中国政府为实现国家统一所作一切努力。",[654,2129,2121,2130,2135],{},[68,2131,2134],{"href":2132,"rel":2133},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202409\u002Ft20240904_11484700.shtml",[72],"中华人民共和国和尼日利亚联邦共和国关于建立全面战略伙伴关系、构建高水平中尼命运共同体的联合声明","》：尼方坚定奉行一个中国原则，认为世界上只有一个中国，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，反对任何形式的“台湾独立”，反对干涉中国内政，坚定支持中国政府为实现国家统一所作努力。",[654,2137,2121,2138,2143],{},[68,2139,2142],{"href":2140,"rel":2141},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202409\u002Ft20240904_11484698.shtml",[72],"中华人民共和国和津巴布韦共和国关于深化和提升全面战略合作伙伴关系、构建高水平中津命运共同体的联合声明","》：津方强调无条件支持一个中国原则始终是津外交政策的鲜明标志，认为世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，坚决反对任何形式的“台湾独立”，重申不同台湾进行任何形式的官方往来，支持中国政府为实现国家统一所作的一切努力。",[654,2145,2146,2147,2152],{},"2024年09月03日，《",[68,2148,2151],{"href":2149,"rel":2150},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202409\u002Ft20240903_11483773.shtml",[72],"中华人民共和国和南非共和国关于建立新时代全方位战略合作伙伴关系的联合声明","》：南非政府重申奉行一个中国政策，承认世界上只有一个中国，中华人民共和国政府是代表中国的唯一合法政府，台湾是中国不可分割的一部分。南非支持中国政府为实现国家统一所作努力。",[654,2154,2155,2156,2161],{},"2024年08月20日，《",[68,2157,2160],{"href":2158,"rel":2159},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202408\u002Ft20240820_11477053.shtml",[72],"中华人民共和国和斐济共和国联合声明","》：斐方坚定奉行一个中国原则，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府。",[654,2163,2155,2164,2169],{},[68,2165,2168],{"href":2166,"rel":2167},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202408\u002Ft20240820_11477050.shtml",[72],"中华人民共和国和越南社会主义共和国关于进一步加强全面战略合作伙伴关系、推进中越命运共同体建设的联合声明","》：越方重申坚定奉行一个中国政策，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府。支持两岸关系和平发展和中国统一大业，坚决反对任何形式的“台独”分裂活动，不同台湾发展任何形式的官方关系。",[654,2171,2172,2173,2178],{},"2024年07月29日，《",[68,2174,2177],{"href":2175,"rel":2176},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202407\u002Ft20240729_11462593.shtml",[72],"中华人民共和国和东帝汶民主共和国关于深化全面战略伙伴关系的联合声明","》：双方强调联合国大会第2758号决议的权威性不容置疑。东帝汶重申将坚定不移地奉行一个中国原则，承认世界上只有一个中国，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，坚决反对任何形式的“台湾独立”，不与台湾建立任何形式的官方关系，不进行任何形式的官方往来，支持中国政府为实现国家统一所作的一切努力。",[654,2180,2181,2182,2187],{},"2024年07月12日，《",[68,2183,2186],{"href":2184,"rel":2185},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202407\u002Ft20240712_11453165.shtml",[72],"中华人民共和国和所罗门群岛联合声明","》：所方坚定奉行一个中国原则，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府；坚决反对任何形式的“台湾独立”，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2189,2181,2190,2195],{},[68,2191,2194],{"href":2192,"rel":2193},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202407\u002Ft20240712_11453163.shtml",[72],"中华人民共和国和瓦努阿图共和国联合声明","》：瓦方坚定奉行一个中国原则，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府；坚定支持中国政府为实现国家统一所作的努力，反对“台湾独立”。",[654,2197,2198,2199,2204],{},"2024年07月10日，《",[68,2200,2203],{"href":2201,"rel":2202},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202407\u002Ft20240711_11451950.shtml",[72],"中华人民共和国和孟加拉人民共和国关于建立全面战略合作伙伴关系的联合声明","》：孟方重申坚定奉行一个中国原则，中华人民共和国政府代表全中国，台湾是中国的一部分。孟方在涉及中国核心利益的问题上支持中方，支持中方为捍卫国家主权和领土完整所作努力。",[654,2206,2198,2207,2212],{},[68,2208,2211],{"href":2209,"rel":2210},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202407\u002Ft20240710_11451714.shtml",[72],"中华人民共和国和几内亚比绍共和国关于建立战略伙伴关系的联合声明","》：几内亚比绍重申坚定奉行一个中国原则，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，坚决反对任何形式的“台湾独立”，反对外部势力干涉中国内政，声明不同台湾进行任何形式的官方往来，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2214,2215,2216,2221],{},"2024年07月05日，《",[68,2217,2220],{"href":2218,"rel":2219},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202407\u002Ft20240705_11449082.shtml",[72],"中华人民共和国和塔吉克斯坦共和国关于发展新时代全面战略合作伙伴关系的联合声明","》：塔方重申坚定不移恪守一个中国原则，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，反对任何形式的“台湾独立”，坚定支持中方为维护主权和领土完整，实现国家统一所作的一切努力。",[654,2223,2224,2225,2230],{},"2024年07月03日，《",[68,2226,2229],{"href":2227,"rel":2228},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202407\u002Ft20240703_11446766.shtml",[72],"中华人民共和国和阿塞拜疆共和国关于建立战略伙伴关系的联合声明","》：阿方坚定奉行一个中国原则，承认世界上只有一个中国，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，反对任何形式的“台独”，支持两岸关系和平发展和中国政府为实现国家统一所作的努力。",[654,2232,2224,2233,2238],{},[68,2234,2237],{"href":2235,"rel":2236},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202407\u002Ft20240703_11446684.shtml",[72],"中华人民共和国和哈萨克斯坦共和国联合声明","》：哈方坚定支持一个中国原则，即世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府。哈方反对任何形式的“台独”，反对外部势力干涉，重申不同台湾开展任何形式的官方往来，支持中国政府为实现国家统一所作的一切努力。",[654,2240,2241,2242,2247],{},"2024年06月22日，《",[68,2243,2246],{"href":2244,"rel":2245},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fwjbzhd\u002F202406\u002Ft20240622_11439939.shtml",[72],"中华人民共和国和尼日利亚联邦共和国政府间委员会首次全会联合声明","》：尼方认为世界上只有一个中国，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，反对任何形式的“台湾独立”，反对外部势力干涉中国内政，支持中国政府为实现国家统一所作努力。",[654,2249,2250,2251,2256],{},"2024年06月20日，《",[68,2252,2255],{"href":2253,"rel":2254},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202406\u002Ft20240620_11439039.shtml",[72],"中华人民共和国政府和马来西亚政府关于深化提升全面战略伙伴关系、共建中马命运共同体的联合声明","》：马来西亚重申两国领导人1974年5月31日签署的联合公报原则，坚定奉行一个中国政策，承认台湾是中华人民共和国领土不可分割的一部分，支持中国实现国家统一，不支持任何“台独”主张。",[654,2258,2259,2260,2264],{},"2024年06月07日，《",[68,2261,1993],{"href":2262,"rel":2263},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202406\u002Ft20240609_11415901.shtml",[72],"》：双方强调联合国大会第2758号决议权威性不容质疑和挑战。巴方重申坚定奉行一个中国原则，台湾是中华人民共和国领土不可分割的一部分，坚定支持中方为实现国家统一所作的一切努力，坚决反对任何形式的“台湾独立”。",[654,2266,2267,2268,2273],{},"2024年06月02日，《",[68,2269,2272],{"href":2270,"rel":2271},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202406\u002Ft20240602_11368960.shtml",[72],"中华人民共和国和阿拉伯联合酋长国联合声明","》：阿方强调继续坚定恪守一个中国原则，台湾是中国不可分割的一部分，支持中方在涉及自身主权和领土完整问题上所秉持的立场，支持实现中国统一，反对外部势力干涉中国内政。",[654,2275,2276,2277,2282],{},"2024年05月31日，《",[68,2278,2281],{"href":2279,"rel":2280},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202405\u002Ft20240531_11368597.shtml",[72],"中华人民共和国和巴林王国关于建立全面战略伙伴关系的联合声明","》：巴方强调坚定恪守一个中国原则，支持中国维护主权和领土完整，同时也继续坚定支持中方在核心利益问题上的立场。",[654,2284,2276,2285,2290],{},[68,2286,2289],{"href":2287,"rel":2288},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202405\u002Ft20240531_11367022.shtml",[72],"中华人民共和国和突尼斯共和国关于建立战略伙伴关系的联合声明","》：突方重申遵守1971年10月25日通过的联大第2758号决议，该决议强调一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，突方支持中国在其全境行使主权，支持中国为实现国家统一和捍卫核心利益所作努力。",[654,2292,2293,2294,2299],{},"2024年05月30日，《",[68,2295,2298],{"href":2296,"rel":2297},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202405\u002Ft20240530_11314441.shtml",[72],"中华人民共和国和阿拉伯埃及共和国关于深化全面战略伙伴关系的联合声明","》：埃方强调继续坚定恪守一个中国原则，台湾是中国不可分割的一部分，支持中方在涉及自身主权和领土完整问题上所秉持的立场，支持实现中国统一，反对外部势力干涉中国内政。",[654,2301,2302,2303,2308],{},"2024年05月28日，《",[68,2304,2307],{"href":2305,"rel":2306},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202405\u002Ft20240528_11313275.shtml",[72],"中华人民共和国和赤道几内亚共和国关于建立全面战略合作伙伴关系的联合声明","》：赤几方重申坚定奉行一个中国原则，认为世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，坚决反对任何形式的“台湾独立”，反对外部势力干涉中国内政，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2310,2311,2312,2317],{},"2024年05月16日，《",[68,2313,2316],{"href":2314,"rel":2315},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202405\u002Ft20240516_11305860.shtml",[72],"中华人民共和国和俄罗斯联邦在两国建交75周年之际关于深化新时代全面战略协作伙伴关系的联合声明","》：俄方重申恪守一个中国原则，承认台湾是中华人民共和国不可分割的一部分，反对任何形式的“台独”，坚定支持中方维护国家主权和领土完整、实现国家统一的举措。",[654,2319,2320,2321,2326],{},"2024年05月10日，《",[68,2322,2325],{"href":2323,"rel":2324},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202405\u002Ft20240510_11302174.shtml",[72],"中华人民共和国和匈牙利关于建立新时代全天候全面战略伙伴关系的联合声明","》：匈牙利政府坚定奉行一个中国原则，重申世界上只有一个中国，中华人民共和国政府是代表中国的唯一合法政府。匈牙利反对任何形式的破坏中国国家统一的分裂行为。",[654,2328,2329,2330,2335],{},"2024年05月09日，《",[68,2331,2334],{"href":2332,"rel":2333},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202405\u002Ft20240509_11301439.shtml",[72],"中华人民共和国和塞尔维亚共和国关于深化和提升全面战略伙伴关系、构建新时代中塞命运共同体的联合声明","》：塞方重申坚定支持一个中国原则，世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府，反对任何形式的“台湾独立”，反对干涉中国内政，重申不同台湾当局进行任何形式的官方往来，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2337,2338,2339,2344],{},"2024年04月10日，《",[68,2340,2343],{"href":2341,"rel":2342},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202404\u002Ft20240410_11279506.shtml",[72],"中华人民共和国和密克罗尼西亚联邦联合声明","》：密方坚定奉行一个中国原则，承认世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府；坚决反对任何形式的“台湾独立”，坚定支持中国实现国家统一。",[654,2346,2347,2348,2352],{},"2024年03月29日，《",[68,2349,2011],{"href":2350,"rel":2351},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202403\u002Ft20240329_11273744.shtml",[72],"》：斯方重申坚定奉行一个中国原则，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，支持中国政府为维护主权和领土完整所作的一切努力，反对任何形式的“台湾独立”。",[654,2354,2355,2356,2361],{},"2024年03月26日，《",[68,2357,2360],{"href":2358,"rel":2359},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202403\u002Ft20240326_11271182.shtml",[72],"中华人民共和国和瑙鲁共和国联合声明","》：瑙方重申坚定恪守一个中国原则，承认世界上只有一个中国，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分；坚决反对任何形式的“台湾独立”，反对外部势力干涉中国内政，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2363,2364,2365,2370],{},"2024年03月15日，《",[68,2366,2369],{"href":2367,"rel":2368},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202403\u002Ft20240315_11261416.shtml",[72],"中华人民共和国和安哥拉共和国关于建立全面战略合作伙伴关系的联合声明","》：安方重申坚定奉行一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，坚定支持中国为实现国家统一所作的一切努力，坚定支持不干涉内政原则。",[654,2372,2373,2374,2379],{},"2024年02月28日，《",[68,2375,2378],{"href":2376,"rel":2377},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202402\u002Ft20240228_11251588.shtml",[72],"中华人民共和国和塞拉利昂共和国关于深化全面战略合作伙伴关系的联合声明","》：塞方重申坚定奉行一个中国原则，认为中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分；坚决反对任何形式的“台湾独立”，反对外部势力干涉中国内政，重申不同台湾进行任何形式的官方往来，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2381,2382,2383,2388],{},"2024年01月26日，《",[68,2384,2387],{"href":2385,"rel":2386},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202401\u002Ft20240126_11233786.shtml",[72],"中华人民共和国和肯尼亚共和国外交部长联合声明","》：肯方重申世界上只有一个中国，台湾是中国领土不可分割的一部分，中华人民共和国政府是代表全中国的唯一合法政府。一个中国原则是公认的国际关系基本准则和国际社会普遍共识。",[654,2390,2391,2392,2397],{},"2024年01月25日，《",[68,2393,2396],{"href":2394,"rel":2395},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202401\u002Ft20240125_11232777.shtml",[72],"中华人民共和国和乌兹别克斯坦共和国关于新时代全天候全面战略伙伴关系的联合声明","》：乌方坚定支持一个中国原则，重申中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，反对任何形式的台湾独立，重申不同台湾进行任何形式的官方往来，坚定支持两岸关系和平发展，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2399,2400,2401,2406],{},"2023年12月20日，《",[68,2402,2405],{"href":2403,"rel":2404},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202312\u002Ft20231220_11207478.shtml",[72],"中华人民共和国和尼加拉瓜共和国关于建立战略伙伴关系的联合声明","》：尼方坚定奉行一个中国原则，重申中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分；坚决反对任何形式的“台湾独立”，重申不同台湾进行任何形式的官方往来，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2408,2409,2410,2415],{},"2023年12月13日，《",[68,2411,2414],{"href":2412,"rel":2413},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202312\u002Ft20231213_11201756.shtml",[72],"中华人民共和国和越南社会主义共和国关于进一步深化和提升全面战略合作伙伴关系、构建具有战略意义的中越命运共同体的联合声明","》：越方重申坚定奉行一个中国政策，承认台湾是中国领土不可分割的一部分，坚决反对任何形式的“台独”分裂活动，支持不干涉各国内政原则，不同台湾发展任何形式的官方关系。",[654,2417,2418,2419,2424],{},"2023年11月23日，《",[68,2420,2423],{"href":2421,"rel":2422},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202311\u002Ft20231124_11186179.shtml",[72],"中华人民共和国和乌拉圭东岸共和国关于建立全面战略伙伴关系的联合声明","》：乌拉圭重申恪守一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，支持中国政府为实现国家统一所作努力。乌方重申支持中方在涉港等核心利益问题上的正当立场，支持中方维护国家主权安全的努力。",[654,2426,2427,2428,2433],{},"2023年10月25日，《",[68,2429,2432],{"href":2430,"rel":2431},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202310\u002Ft20231025_11168329.shtml",[72],"中华人民共和国和哥伦比亚共和国关于建立战略伙伴关系的联合声明","》：哥伦比亚政府重申恪守一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，坚定支持中国政府为实现国家统一所作的努力。",[654,2435,2436,2437,2352],{},"2023年10月20日，《",[68,2438,2011],{"href":2439,"rel":2440},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202310\u002Ft20231021_11165407.shtml",[72],[654,2442,2443,2444,2449],{},"2023年10月18日，《",[68,2445,2448],{"href":2446,"rel":2447},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202310\u002Ft20231018_11163274.shtml",[72],"中华人民共和国和印度尼西亚共和国关于深化全方位战略合作的联合声明","》：印尼重申一贯坚定奉行一个中国政策，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国不可分割的一部分，坚定支持中国政府为实现国家和平统一所作的努力。",[654,2451,2452,2453,2458],{},"2023年10月17日，《",[68,2454,2457],{"href":2455,"rel":2456},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202310\u002Ft20231018_11162574.shtml",[72],"中华人民共和国和巴布亚新几内亚独立国联合声明","》：巴新方重申，坚定奉行其一贯坚持的一个中国政策，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，坚决反对“台独”，支持中华人民共和国政府为实现国家统一所作的一切努力。",[654,2460,2452,2461,2466],{},[68,2462,2465],{"href":2463,"rel":2464},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202310\u002Ft20231017_11162386.shtml",[72],"中华人民共和国与埃塞俄比亚联邦民主共和国关于建立全天候战略伙伴关系的联合声明","》：埃塞俄比亚政府重申坚持一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，支持中方为实现国家统一所作的一切努力。",[654,2468,2452,2469,2474],{},[68,2470,2473],{"href":2471,"rel":2472},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202310\u002Ft20231017_11162352.shtml",[72],"中华人民共和国和智利共和国联合声明","》：智方重申坚定奉行一个中国原则，支持中国和平统一，坚决反对任何形式的“台独”。",[654,2476,2477,2478,2482],{},"2023年09月26日，《",[68,2479,2020],{"href":2480,"rel":2481},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202309\u002Ft20230926_11149957.shtml",[72],"》：尼方重申坚定奉行一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，反对“台湾独立”。",[654,2484,2485,2486,2491],{},"2023年09月23日，《",[68,2487,2490],{"href":2488,"rel":2489},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202309\u002Ft20230923_11148672.shtml",[72],"中华人民共和国和东帝汶民主共和国关于建立全面战略伙伴关系的联合声明","》：东方重申坚定奉行一个中国原则，承认世界上只有一个中国，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，反对任何形式的“台湾独立”，不与台湾建立任何形式的官方关系，不进行任何形式的官方往来，支持中国政府为实现国家统一所作的努力。",[654,2493,2494,2495,2500],{},"2023年09月22日，《",[68,2496,2499],{"href":2497,"rel":2498},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202309\u002Ft20230922_11148442.shtml",[72],"中华人民共和国和阿拉伯叙利亚共和国关于建立战略伙伴关系的联合声明","》：叙方坚定奉行一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国不可分割的一部分，支持中国维护国家主权、统一和领土完整，坚决反对任何势力干涉中国内政，支持中国政府为实现国家统一所作的一切努力。",[654,2502,2503,2504,2509],{},"2023年09月15日，《",[68,2505,2508],{"href":2506,"rel":2507},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202309\u002Ft20230915_11143613.shtml",[72],"中华人民共和国和赞比亚共和国关于建立全面战略合作伙伴关系的联合声明","》：赞方重申坚定奉行一个中国原则，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，坚定支持中国政府为实现国家统一所作的努力。",[654,2511,2512,2513,2518],{},"2023年09月14日，《",[68,2514,2517],{"href":2515,"rel":2516},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202309\u002Ft20230914_11142477.shtml",[72],"中华人民共和国和委内瑞拉玻利瓦尔共和国关于建立全天候战略伙伴关系的联合声明","》：委方重申恪守一个中国原则的坚定立场，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2520,2521,2522,2527],{},"2023年09月01日，《",[68,2523,2526],{"href":2524,"rel":2525},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202309\u002Ft20230901_11137094.shtml",[72],"中华人民共和国和贝宁共和国关于建立战略伙伴关系的联合声明","》：贝方重申坚定奉行一个中国原则，认为台湾是中国不可分割的一部分，反对任何损害中国主权和领土完整的言行，坚定支持中国政府为实现国家统一所作的努力。",[654,2529,2530,2531,2536],{},"2023年08月23日，《",[68,2532,2535],{"href":2533,"rel":2534},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202308\u002Ft20230823_11130465.shtml",[72],"中华人民共和国和南非共和国联合声明","》：南非重申坚定奉行一个中国政策。",[654,2538,2539,2540,2545],{},"2023年07月31日，《",[68,2541,2544],{"href":2542,"rel":2543},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202307\u002Ft20230731_11120026.shtml",[72],"中华人民共和国与格鲁吉亚关于建立战略伙伴关系的联合声明","》：格方坚定奉行一个中国原则。",[654,2547,2539,2548,2553],{},[68,2549,2552],{"href":2550,"rel":2551},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202307\u002Ft20230731_11120009.shtml",[72],"中华人民共和国和圭亚那合作共和国联合声明","》：圭方重申坚定支持一个中国原则。",[654,2555,2556,2557,2562],{},"2023年07月18日，《",[68,2558,2561],{"href":2559,"rel":2560},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202307\u002Ft20230718_11114859.shtml",[72],"中华人民共和国和阿尔及利亚民主人民共和国联合声明","》：阿方重申坚持一个中国原则，重申台湾是中国领土不可分割的一部分，反对任何形式的“台湾独立”。",[654,2564,2565,2566,2571],{},"2023年07月10日，《",[68,2567,2570],{"href":2568,"rel":2569},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202307\u002Ft20230710_11110974.shtml",[72],"中华人民共和国和所罗门群岛关于建立新时代相互尊重、共同发展的全面战略伙伴关系的联合声明","》：所方重申，坚定奉行一个中国原则，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，坚决反对任何形式的“台独”，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2573,2574,2575,2580],{},"2023年06月28日，《",[68,2576,2579],{"href":2577,"rel":2578},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202306\u002Ft20230628_11104932.shtml",[72],"中华人民共和国和新西兰关于全面战略伙伴关系的联合声明","》：新西兰重申坚持一个中国政策。",[654,2582,2583,2584,2589],{},"2023年06月14日，《",[68,2585,2588],{"href":2586,"rel":2587},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202306\u002Ft20230614_11097775.shtml",[72],"中华人民共和国和巴勒斯坦国关于建立战略伙伴关系的联合声明","》：巴方坚定奉行一个中国原则，支持中国维护国家主权、统一和领土完整，坚决反对任何势力干涉中国内政；重申中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，坚决反对任何形式的“台独”，重申不同台湾进行任何形式的官方往来，支持中国政府为实现国家统一所作的一切努力。",[654,2591,2592,2593,2598],{},"2023年06月12日，《",[68,2594,2597],{"href":2595,"rel":2596},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202306\u002Ft20230612_11095432.shtml",[72],"中华人民共和国和洪都拉斯共和国联合声明","》：洪都拉斯政府支持联合国大会第2758号决议，重申中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分。洪方坚定支持并遵守一个中国原则，坚决反对任何有悖于这一原则的行为，反对任何形式的“台湾独立”，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2600,2601,2602,2607],{},"2023年05月26日，《",[68,2603,2606],{"href":2604,"rel":2605},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202305\u002Ft20230526_11084472.shtml",[72],"中华人民共和国和刚果民主共和国关于建立全面战略合作伙伴关系的联合声明","》：刚方重申坚定奉行一个中国原则，认为台湾是中国不可分割的一部分，反对任何损害中国主权和领土完整的言行。",[654,2609,2610,2611,2616],{},"2023年05月18日，《",[68,2612,2615],{"href":2613,"rel":2614},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202305\u002Ft20230518_11079722.shtml",[72],"中华人民共和国和乌兹别克斯坦共和国联合声明","》：乌方坚定支持一个中国原则，重申中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分。重申不同台湾进行任何形式的官方往来，坚定支持两岸关系和平发展和中国政府为实现国家统一所作的一切努力。",[654,2618,2610,2619,2624],{},[68,2620,2623],{"href":2621,"rel":2622},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202305\u002Ft20230518_11079610.shtml",[72],"中华人民共和国和塔吉克斯坦共和国联合声明","》：塔方坚定恪守一个中国原则，重申中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分。塔方坚决反对任何形式的“台独”，重申不同台湾进行任何形式的官方往来，支持中国政府为实现国家统一所作的一切努力。",[654,2626,2627,2628,2632],{},"2023年05月17日，《",[68,2629,2237],{"href":2630,"rel":2631},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202305\u002Ft20230517_11079124.shtml",[72],"》：哈方坚定奉行一个中国原则，重申中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，反对任何形式的“台独”，重申不同台湾进行任何形式的官方往来，支持中国政府为实现国家和平统一所作的一切努力。",[654,2634,2635,2636,2641],{},"2023年04月19日，《",[68,2637,2640],{"href":2638,"rel":2639},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202304\u002Ft20230419_11061924.shtml",[72],"中华人民共和国和加蓬共和国关于建立全面战略合作伙伴关系的联合声明","》：加方重申坚定奉行一个中国原则，认为台湾是中国不可分割的一部分，反对任何损害中国主权和领土完整的言行，坚定支持中国政府为实现国家统一所作的努力。",[654,2643,2644,2645,2650],{},"2023年04月14日，《",[68,2646,2649],{"href":2647,"rel":2648},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202304\u002Ft20230414_11059627.shtml",[72],"中华人民共和国和巴西联邦共和国关于深化全面战略伙伴关系的联合声明","》：巴方重申坚定奉行一个中国原则，中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分。巴方重申领土完整原则，支持两岸关系和平发展。",[654,2652,2653,2654,2659],{},"2023年04月07日，《",[68,2655,2658],{"href":2656,"rel":2657},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202304\u002Ft20230407_11056239.shtml",[72],"中华人民共和国和法兰西共和国联合声明","》：法国重申坚持一个中国政策。",[654,2661,2662,2663,2668],{},"2023年03月22日，《",[68,2664,2667],{"href":2665,"rel":2666},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202303\u002Ft20230322_11046188.shtml",[72],"中华人民共和国和俄罗斯联邦关于深化新时代全面战略协作伙伴关系的联合声明","》：俄方重申恪守一个中国原则，承认台湾是中国领土不可分割的一部分，反对任何形式的“台独”，坚定支持中方维护本国主权和领土完整的举措。",[654,2670,2671,2672,2677],{},"2023年03月02日，《",[68,2673,2676],{"href":2674,"rel":2675},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202303\u002Ft20230302_11033872.shtml",[72],"中华人民共和国和白俄罗斯共和国关于新时代进一步发展两国全天候全面战略伙伴关系的联合声明","》：白方恪守一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，重申台湾是中国领土不可分割的一部分，反对任何形式的“台独”，支持中国政府为实现国家统一所作的一切努力，支持中方维护国家安全和领土完整、保障公民权利的立场。",[654,2679,2680,2681,2686],{},"2023年02月16日，《",[68,2682,2685],{"href":2683,"rel":2684},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202302\u002Ft20230216_11025836.shtml",[72],"中华人民共和国和伊朗伊斯兰共和国联合声明","》：伊方将继续奉行一个中国政策。",[654,2688,2689,2690,2695],{},"2023年02月11日，《",[68,2691,2694],{"href":2692,"rel":2693},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202302\u002Ft20230211_11023942.shtml",[72],"中华人民共和国和柬埔寨王国关于构建新时代中柬命运共同体的联合声明","》：柬方重申恪守一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分；强调台湾问题是中国内政，任何外部势力无权干涉。柬方反对任何利用台湾问题干涉中国内政、围堵遏制中国的图谋，反对任何形式的“台独”分裂活动，坚定支持中国政府为实现国家统一所作的一切努力，绝不同台湾发展任何形式的官方关系。",[654,2697,2698,2699,2704],{},"2023年01月06日，《",[68,2700,2703],{"href":2701,"rel":2702},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202301\u002Ft20230106_11003592.shtml",[72],"中华人民共和国和土库曼斯坦联合声明","》：土方坚定奉行一个中国原则，坚决反对任何形式的“台独”，支持两岸关系和平发展和中国政府为实现国家统一所做的一切努力。",[654,2706,2707,2708,2713],{},"2023年01月05日，《",[68,2709,2712],{"href":2710,"rel":2711},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202301\u002Ft20230105_11001029.shtml",[72],"中华人民共和国和菲律宾共和国联合声明","》：菲律宾重申恪守一个中国政策。",[654,2715,2716,2717,2722],{},"2022年12月09日，《",[68,2718,2721],{"href":2719,"rel":2720},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202212\u002Ft20221209_10988250.shtml",[72],"中华人民共和国和沙特阿拉伯王国联合声明","》：沙方重申恪守一个中国原则。",[654,2724,2725,2726,2731],{},"2022年12月02日，《",[68,2727,2730],{"href":2728,"rel":2729},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202212\u002Ft20221202_10984212.shtml",[72],"关于进一步深化中老命运共同体建设的联合声明","》：老方重申坚定奉行一个中国原则，反对任何损害中国主权和领土完整的言行，反对任何形式的“台独”分裂活动，反对外部势力以任何借口干涉中国内政，支持中方维护核心利益，支持中国为实现国家统一所作的一切努力。",[654,2733,2734,2735,2740],{},"2022年11月28日，《",[68,2736,2739],{"href":2737,"rel":2738},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202211\u002Ft20221128_10981908.shtml",[72],"中华人民共和国和蒙古国关于新时代推进全面战略伙伴关系的联合声明","》：蒙方重申坚定奉行一个中国原则，支持中方在台湾、涉港、涉疆、涉藏问题上的立场。",[654,2742,2743,2744,2749],{},"2022年11月25日，《",[68,2745,2748],{"href":2746,"rel":2747},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202211\u002Ft20221125_10980884.shtml",[72],"中华人民共和国和古巴共和国关于深化新时代中古关系的联合声明","》：古方重申无条件恪守一个中国原则的坚定立场，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分；强调台湾问题是中国内政，任何一方无权干涉。古方坚决反对任何利用台湾问题干涉中国内政的图谋，坚定支持中国政府为实现国家统一所作的一切努力。",[654,2751,2752,2753,2758],{},"2022年11月19日，《",[68,2754,2757],{"href":2755,"rel":2756},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202211\u002Ft20221119_10978190.shtml",[72],"中华人民共和国和泰王国关于构建更为稳定、更加繁荣、更可持续命运共同体的联合声明","》：泰方坚定奉行一个中国政策，承认台湾是中国不可分割的一部分，承认中华人民共和国政府是代表全中国的唯一合法政府。泰方支持中国“一国两制”方针。",[654,2760,2761,2762,2767],{},"2022年11月16日，《",[68,2763,2766],{"href":2764,"rel":2765},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202211\u002Ft20221117_10976699.shtml",[72],"中华人民共和国和印度尼西亚共和国联合声明","》：印尼重申坚定奉行一个中国政策，继续支持两岸关系和平发展与中国和平统一。中国重申坚定支持印尼维护国家统一和领土完整的努力。",[654,2769,2770,2771,2776],{},"2022年11月03日，《",[68,2772,2775],{"href":2773,"rel":2774},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202211\u002Ft20221103_10800012.shtml",[72],"中华人民共和国和坦桑尼亚联合共和国关于建立全面战略合作伙伴关系的联合声明","》：坦方重申坚定奉行一个中国原则，认为台湾是中国不可分割的一部分，反对任何损害中国主权和领土完整的言行。",[654,2778,2779,2780,2784],{},"2022年11月02日，《",[68,2781,1993],{"href":2782,"rel":2783},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202211\u002Ft20221102_10799301.shtml",[72],"》：巴方坚定奉行一个中国政策，在台湾、南海、涉港、涉疆和涉藏等问题上支持中国。",[654,2786,2779,2787,2792],{},[68,2788,2791],{"href":2789,"rel":2790},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202211\u002Ft20221102_10795594.shtml",[72],"关于进一步加强和深化中越全面战略合作伙伴关系的联合声明","》：越方重申坚定奉行一个中国政策，支持两岸和平发展与中国统一大业，坚决反对任何形式的“台独”分裂活动并一贯支持不干涉各国内政原则，不同台湾发展任何官方关系。",[654,2794,2795,2796,2801],{},"2022年09月16日，《",[68,2797,2800],{"href":2798,"rel":2799},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202209\u002Ft20220916_10766853.shtml",[72],"中华人民共和国和白俄罗斯共和国关于建立全天候全面战略伙伴关系的联合声明","》：白方重申奉行一个中国原则，承认中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分，反对任何形式的“台湾独立”，支持中国政府为实现国家统一所作的一切努力。",[654,2803,2804,2805,2809],{},"2022年09月15日，《",[68,2806,2615],{"href":2807,"rel":2808},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202209\u002Ft20220915_10766621.shtml",[72],"》：乌方坚定奉行一个中国政策，重申中华人民共和国政府是代表全中国的唯一合法政府，台湾是中国领土不可分割的一部分。",[654,2811,2804,2812,2817],{},[68,2813,2816],{"href":2814,"rel":2815},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202209\u002Ft20220915_10766226.shtml",[72],"中华人民共和国和哈萨克斯坦共和国建交30周年联合声明","》：哈方坚定支持一个中国原则，重申中华人民共和国政府是代表全中国的唯一合法政府。这也是联合国大会第2758号决议确定的原则。台湾是中国领土不可分割的一部分，哈方反对任何形式的“台湾独立”，支持两岸关系和平发展以及中国政府为实现国家和平统一所作的一切努力。",[654,2819,2820,2821,2826],{},"2022年03月20日，《",[68,2822,2825],{"href":2823,"rel":2824},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202203\u002Ft20220320_10653575.shtml",[72],"中华人民共和国外交部和阿尔及利亚民主人民共和国外交部联合声明","》：阿方表示恪守一个中国政策。",[654,2828,2829,2830,2784],{},"2022年02月06日，《",[68,2831,1993],{"href":2832,"rel":2833},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202202\u002Ft20220206_10639500.shtml",[72],[654,2835,2829,2836,2740],{},[68,2837,2840],{"href":2838,"rel":2839},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202202\u002Ft20220206_10639499.shtml",[72],"中华人民共和国政府和蒙古国政府联合声明",[654,2842,2829,2843,2848],{},[68,2844,2847],{"href":2845,"rel":2846},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202202\u002Ft20220206_10639419.shtml",[72],"中华人民共和国和阿根廷共和国关于深化中阿全面战略伙伴关系的联合声明","》：阿方重申坚持一个中国原则。",[654,2850,2851,2852,2856],{},"2022年02月05日，《",[68,2853,2457],{"href":2854,"rel":2855},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002F1179_674909\u002F202202\u002Ft20220205_10639294.shtml",[72],"》：巴布亚新几内亚重申坚定奉行一个中国原则，认为涉台、涉疆、涉港、涉藏问题是中国内政，在其“广交友、不树敌”外交政策下，重申不干涉其他主权国家内政的原则。",[654,2858,2851,2859,2864],{},[68,2860,2863],{"href":2861,"rel":2862},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fziliao_674904\u002Fzt_674979\u002Fywzt_675099\u002F2020\u002Fkjgzbdfyyq_699171\u002F202202\u002Ft20220205_10639272.shtml",[72],"中华人民共和国和厄瓜多尔共和国关于深化中厄全面战略伙伴关系的联合声明","》：厄方重申坚定奉行一个中国原则，支持中国政府为完成国家统一所作努力。",[654,2866,2867,2868,2873],{},"2022年02月04日，《",[68,2869,2872],{"href":2870,"rel":2871},"https:\u002F\u002Fwww.mfa.gov.cn\u002Fweb\u002Fzyxw\u002F202202\u002Ft20220204_10638953.shtml",[72],"中华人民共和国和俄罗斯联邦关于新时代国际关系和全球可持续发展的联合声明","》：俄方重申恪守一个中国原则，承认台湾是中国领土不可分割的一部分，反对任何形式的“台独”。",[654,2875,2876],{},"……再往前的声明就不一一列举了",[13,2878,2879],{},"可以看到，不同国家联合声明中关于一个中国以及台湾问题的表述有所不同，主要是以下这些条目的组合：",[651,2881,2882,2885,2888,2891,2894,2897,2900],{},[654,2883,2884],{},"坚持一个中国原则",[654,2886,2887],{},"承认中华人民共和国政府是代表全中国的唯一合法政府",[654,2889,2890],{},"台湾是中国领土不可分割的一部分",[654,2892,2893],{},"反对任何形式的“台湾独立”",[654,2895,2896],{},"不同台湾进行任何形式的官方往来",[654,2898,2899],{},"坚定支持中方为实现国家统一所作的努力",[654,2901,2902],{},"坚定支持中方为实现国家统一所作的一切努力",[13,2904,2905],{},"部分国家发布的新的联合声明中，关于台湾问题的表述与之前的联合声明相比，明确增加了“支持中方为实现国家统一所作的努力\u002F一切努力”等外交措辞。例如斯里兰卡、尼泊尔、巴基斯坦、巴西、刚果等。",[579,2907,2908],{"id":2908},"总结思考",[13,2910,2911],{},"解决台湾问题，有哪几个核心前提？正在进行哪些努力？",[2913,2914,2915,2918,2921],"ol",{},[654,2916,2917],{},"军事方面：单独打台湾早已不是问题，关键是要有足够的军事力量来威慑美国和日本等外部势力的干预。造航母、歼-20、六代机、各种军演等，都是在军事方面的努力。",[654,2919,2920],{},"外交方面：避免在国际上形成对中国的孤立，需要名正言顺、需要争取更多国家的支持。上文中列举的多国的联合声明等就是正在进行中的外交努力。",[654,2922,2923],{},"经济方面：需要能抵挡美欧的经济制裁。一带一路、大金砖合作、去美元化等，都是在减少经济上对西方依赖所做的努力。",[13,2925,2926],{},"这几个方面的动作都在同时进行，本文主要从政策和外交方面的一些变化，给大家分析台湾问题的现状和未来可能的走向带来一些参考。",[13,2928,2929],{},"随着国力增强、国际动作的不断频繁，台湾问题解决的时间点也在不断接近。可以预见，祖国统一已经不再是一件遥远的事情了。",{"title":20,"searchDepth":21,"depth":21,"links":2931},[2932,2938,2939],{"id":1797,"depth":21,"text":1797,"children":2933},[2934,2935,2936,2937],{"id":1813,"depth":126,"text":1814},{"id":1825,"depth":126,"text":1826},{"id":1837,"depth":126,"text":1838},{"id":1849,"depth":126,"text":1849},{"id":1934,"depth":21,"text":1934},{"id":2908,"depth":21,"text":2908},"2025-04-01",{},"\u002Fposts\u002F2025\u002Fthoughts-on-when-to-liberate-taiwan",{"text":2944,"minutes":2945,"time":2946,"words":2947},"70 min read",69.66,4179600,13932,{"title":1783,"description":1788},{"loc":2942,"lastmod":2940},"posts\u002F2025\u002F20250401.thoughts-on-when-to-liberate-taiwan",[2952,2953],"随笔","思考","jGGSw8h4k4yxpKowezdcjDGlRGhidB-TlOIdMFPL830",{"id":2956,"title":2957,"body":2958,"class":554,"cover":1492,"coverSize":554,"date":6453,"description":2962,"draft":556,"extension":23,"hideComments":556,"location":554,"meta":6454,"navigation":24,"path":6455,"readingTime":6456,"seo":6461,"sitemap":6462,"stem":6464,"tags":6465,"time":554,"weather":554,"__hash__":6469},"posts\u002Fposts\u002F2025\u002F20250212.display-deepseek-r1-thinking.md","如何在 Open WebUI 中显示 DeepSeek-R1 的思考过程",{"type":7,"value":2959,"toc":6446},[2960,2963,2984,2988,2993,3043,3048,3144,3148,3165,3167,3179,3181,3185,3200,3203,3208,3211,3219,3222,3231,6338,6343,6346,6351,6354,6358,6373,6376,6381,6384,6388,6395,6411,6434,6437,6440,6443],[13,2961,2962],{},"书接上回，咱们部署好了 DeepSeek-R1 之后，发现没办法显示思考过程，只能等结果出来之后查看结果，这个体感上就会感觉响应很慢。",[13,2964,2965,2966,2971,2972,2977,2978,2983],{},"查看了 ",[68,2967,2970],{"href":2968,"rel":2969},"https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fopen-webui",[72],"open-webui"," 的 issues，发现已经有人提过这个问题，并且已有",[68,2973,2976],{"href":2974,"rel":2975},"https:\u002F\u002Fgithub.com\u002Fopen-webui\u002Fopen-webui\u002Fissues\u002F9488#issuecomment-2640537231",[72],"解决方案","，那就是通过 ",[68,2979,2982],{"href":2980,"rel":2981},"https:\u002F\u002Fdocs.openwebui.com\u002Fpipelines\u002F",[72],"Pipelines"," 来实现。具体步骤如下：",[579,2985,2987],{"id":2986},"_1-部署-pipelines-容器","1. 部署 pipelines 容器",[651,2989,2990],{},[654,2991,2992],{},"docker run 命令：",[88,2994,2998],{"className":2995,"code":2996,"language":2997,"meta":20,"style":20},"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",[94,2999,3000],{"__ignoreMap":20},[97,3001,3002,3006,3009,3013,3016,3019,3022,3025,3028,3031,3034,3037,3040],{"class":99,"line":100},[97,3003,3005],{"class":3004},"sbgvK","docker",[97,3007,3008],{"class":144}," run",[97,3010,3012],{"class":3011},"stzsN"," -d",[97,3014,3015],{"class":3011}," -p",[97,3017,3018],{"class":144}," 9099:9099",[97,3020,3021],{"class":3011}," --add-host=host.docker.internal:host-gateway",[97,3023,3024],{"class":3011}," -v",[97,3026,3027],{"class":144}," pipelines:\u002Fapp\u002Fpipelines",[97,3029,3030],{"class":3011}," --name",[97,3032,3033],{"class":144}," pipelines",[97,3035,3036],{"class":3011}," --restart",[97,3038,3039],{"class":144}," always",[97,3041,3042],{"class":144}," ghcr.io\u002Fopen-webui\u002Fpipelines:main\n",[651,3044,3045],{},[654,3046,3047],{},"docker-compose.yml 配置：",[88,3049,3053],{"className":3050,"code":3051,"language":3052,"meta":20,"style":20},"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",[94,3054,3055,3063,3070,3080,3089,3099,3106,3120,3127,3134],{"__ignoreMap":20},[97,3056,3057,3060],{"class":99,"line":100},[97,3058,3059],{"class":1012},"services",[97,3061,3062],{"class":103},":\n",[97,3064,3065,3068],{"class":99,"line":21},[97,3066,3067],{"class":1012},"  open-webui-pipelines",[97,3069,3062],{"class":103},[97,3071,3072,3075,3077],{"class":99,"line":126},[97,3073,3074],{"class":1012},"    container_name",[97,3076,120],{"class":103},[97,3078,3079],{"class":144}," open-webui-pipelines\n",[97,3081,3082,3085,3087],{"class":99,"line":151},[97,3083,3084],{"class":1012},"    image",[97,3086,120],{"class":103},[97,3088,3042],{"class":144},[97,3090,3091,3094,3096],{"class":99,"line":157},[97,3092,3093],{"class":1012},"    network_mode",[97,3095,120],{"class":103},[97,3097,3098],{"class":144}," bridge\n",[97,3100,3101,3104],{"class":99,"line":240},[97,3102,3103],{"class":1012},"    ports",[97,3105,3062],{"class":103},[97,3107,3108,3111,3114,3117],{"class":99,"line":261},[97,3109,3110],{"class":103},"      -",[97,3112,3113],{"class":140}," '",[97,3115,3116],{"class":144},"9099:9099",[97,3118,3119],{"class":140},"'\n",[97,3121,3122,3125],{"class":99,"line":296},[97,3123,3124],{"class":1012},"    volumes",[97,3126,3062],{"class":103},[97,3128,3129,3131],{"class":99,"line":317},[97,3130,3110],{"class":103},[97,3132,3133],{"class":144}," .\u002Fpipelines:\u002Fapp\u002Fpipelines\n",[97,3135,3136,3139,3141],{"class":99,"line":33},[97,3137,3138],{"class":1012},"    restart",[97,3140,120],{"class":103},[97,3142,3143],{"class":144}," always\n",[579,3145,3147],{"id":3146},"_2-配置管道连接","2. 配置管道连接",[651,3149,3150],{},[654,3151,3152,3153,3156,3157,3160,3161,3164],{},"在 ",[94,3154,3155],{},"管理员设置"," -> ",[94,3158,3159],{},"外部连接"," 中按 ",[94,3162,3163],{},"+"," 添加一个连接。",[587,3166],{"filename":838},[651,3168,3169],{},[654,3170,3171,3172,3175,3176,1806],{},"管道地址通过内网 IP、hostname 或域名等，加上前面 pipelines 容器的端口号 ",[94,3173,3174],{},"9099","；密钥是固定的 ",[94,3177,3178],{},"0p3n-w3bu!",[587,3180],{"filename":607},[579,3182,3184],{"id":3183},"_3-创建函数","3. 创建函数",[651,3186,3187],{},[654,3188,3189,3190,3195,3196,3199],{},"访问 ",[68,3191,3194],{"href":3192,"rel":3193},"https:\u002F\u002Fopenwebui.com\u002Ff\u002Fzgccrui\u002Fdeepseek_r1",[72],"DeepSeek R1 Function"," 函数页面，通过 ",[94,3197,3198],{},"Get"," 按钮完成注册。",[587,3201],{"filename":3202},"03.png",[651,3204,3205],{},[654,3206,3207],{},"注册完成之后，在弹出的页面中输入自己的站点地址自动跳转并导入函数。",[587,3209],{"filename":3210},"04.png",[651,3212,3213],{},[654,3214,3215,3216,3218],{},"也可以手动复制该函数代码，然后点击 ",[94,3217,3163],{}," 加号手动添加。",[587,3220],{"filename":3221},"05.png",[651,3223,3224],{},[654,3225,3226,3227,3230],{},"以下是我在 ",[94,3228,3229],{},"1.2.10"," 版本上修改过的代码，支持了模型显示名的配置，这样方便与原始版本区分",[88,3232,3236],{"className":3233,"code":3234,"language":3235,"meta":20,"style":20},"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",[94,3237,3238,3244,3250,3255,3260,3265,3270,3274,3278,3287,3294,3301,3324,3341,3348,3352,3363,3379,3400,3417,3433,3438,3453,3476,3480,3495,3510,3525,3529,3545,3561,3577,3582,3587,3604,3629,3648,3663,3668,3683,3691,3697,3724,3748,3754,3760,3765,3779,3829,3853,3864,3897,3911,3916,3922,3944,3990,3996,4001,4007,4017,4055,4076,4082,4087,4095,4101,4150,4181,4186,4192,4214,4225,4252,4303,4309,4319,4367,4373,4386,4398,4436,4441,4453,4458,4464,4469,4475,4512,4529,4542,4570,4583,4596,4609,4622,4628,4649,4669,4698,4704,4709,4715,4740,4766,4772,4777,4783,4811,4816,4822,4849,4855,4860,4868,4890,4910,4916,4947,4974,4979,4984,5018,5023,5029,5052,5057,5061,5067,5086,5113,5119,5129,5140,5161,5174,5179,5185,5216,5226,5247,5284,5295,5333,5345,5366,5377,5382,5405,5436,5445,5480,5491,5508,5519,5527,5532,5547,5565,5570,5610,5620,5631,5636,5642,5685,5705,5719,5724,5730,5738,5757,5781,5802,5808,5827,5845,5850,5858,5863,5891,5901,5949,5954,5993,5999,6017,6028,6036,6066,6071,6078,6124,6137,6153,6166,6212,6217,6222,6250,6260,6280],{"__ignoreMap":20},[97,3239,3240],{"class":99,"line":100},[97,3241,3243],{"class":3242},"s2W-s","\"\"\"\n",[97,3245,3246],{"class":99,"line":21},[97,3247,3249],{"class":3248},"sithA","title: DeepSeek R1\n",[97,3251,3252],{"class":99,"line":126},[97,3253,3254],{"class":3248},"author: zgccrui\n",[97,3256,3257],{"class":99,"line":151},[97,3258,3259],{"class":3248},"description: 在OpwenWebUI中显示DeepSeek R1模型的思维链 - 仅支持0.5.6及以上版本\n",[97,3261,3262],{"class":99,"line":157},[97,3263,3264],{"class":3248},"version: 1.2.10\n",[97,3266,3267],{"class":99,"line":240},[97,3268,3269],{"class":3248},"licence: MIT\n",[97,3271,3272],{"class":99,"line":261},[97,3273,3243],{"class":3242},[97,3275,3276],{"class":99,"line":296},[97,3277,442],{"emptyLinePlaceholder":24},[97,3279,3280,3284],{"class":99,"line":317},[97,3281,3283],{"class":3282},"sVHd0","import",[97,3285,3286],{"class":400}," json\n",[97,3288,3289,3291],{"class":99,"line":33},[97,3290,3283],{"class":3282},[97,3292,3293],{"class":400}," httpx\n",[97,3295,3296,3298],{"class":99,"line":341},[97,3297,3283],{"class":3282},[97,3299,3300],{"class":400}," re\n",[97,3302,3303,3306,3309,3311,3314,3316,3319,3321],{"class":99,"line":347},[97,3304,3305],{"class":3282},"from",[97,3307,3308],{"class":400}," typing ",[97,3310,3283],{"class":3282},[97,3312,3313],{"class":400}," AsyncGenerator",[97,3315,283],{"class":103},[97,3317,3318],{"class":400}," Callable",[97,3320,283],{"class":103},[97,3322,3323],{"class":400}," Awaitable\n",[97,3325,3326,3328,3331,3333,3336,3338],{"class":99,"line":1170},[97,3327,3305],{"class":3282},[97,3329,3330],{"class":400}," pydantic ",[97,3332,3283],{"class":3282},[97,3334,3335],{"class":400}," BaseModel",[97,3337,283],{"class":103},[97,3339,3340],{"class":400}," Field\n",[97,3342,3343,3345],{"class":99,"line":1190},[97,3344,3283],{"class":3282},[97,3346,3347],{"class":400}," asyncio\n",[97,3349,3350],{"class":99,"line":1210},[97,3351,442],{"emptyLinePlaceholder":24},[97,3353,3354,3358,3361],{"class":99,"line":1230},[97,3355,3357],{"class":3356},"sbsja","class",[97,3359,3360],{"class":3004}," Pipe",[97,3362,3062],{"class":103},[97,3364,3365,3368,3371,3373,3376],{"class":99,"line":1250},[97,3366,3367],{"class":3356},"    class",[97,3369,3370],{"class":3004}," Valves",[97,3372,930],{"class":103},[97,3374,3375],{"class":3004},"BaseModel",[97,3377,3378],{"class":103},"):\n",[97,3380,3381,3384,3386,3389,3393,3397],{"class":99,"line":1270},[97,3382,3383],{"class":947},"        DEEPSEEK_API_BASE_URL",[97,3385,120],{"class":103},[97,3387,3388],{"class":132}," str",[97,3390,3392],{"class":3391},"smGrS"," =",[97,3394,3396],{"class":3395},"slqww"," Field",[97,3398,3399],{"class":103},"(\n",[97,3401,3402,3406,3408,3410,3413,3415],{"class":99,"line":1290},[97,3403,3405],{"class":3404},"s99_P","            default",[97,3407,1158],{"class":3391},[97,3409,117],{"class":140},[97,3411,3412],{"class":144},"https:\u002F\u002Fapi.deepseek.com\u002Fv1",[97,3414,117],{"class":140},[97,3416,197],{"class":103},[97,3418,3419,3422,3424,3426,3429,3431],{"class":99,"line":1310},[97,3420,3421],{"class":3404},"            description",[97,3423,1158],{"class":3391},[97,3425,117],{"class":140},[97,3427,3428],{"class":144},"DeepSeek API的基础请求地址",[97,3430,117],{"class":140},[97,3432,197],{"class":103},[97,3434,3435],{"class":99,"line":1330},[97,3436,3437],{"class":103},"        )\n",[97,3439,3440,3443,3445,3447,3449,3451],{"class":99,"line":1350},[97,3441,3442],{"class":947},"        DEEPSEEK_API_KEY",[97,3444,120],{"class":103},[97,3446,3388],{"class":132},[97,3448,3392],{"class":3391},[97,3450,3396],{"class":3395},[97,3452,3399],{"class":103},[97,3454,3455,3457,3459,3462,3464,3467,3469,3471,3474],{"class":99,"line":1369},[97,3456,3405],{"class":3404},[97,3458,1158],{"class":3391},[97,3460,3461],{"class":140},"\"\"",[97,3463,283],{"class":103},[97,3465,3466],{"class":3404}," description",[97,3468,1158],{"class":3391},[97,3470,117],{"class":140},[97,3472,3473],{"class":144},"用于身份验证的DeepSeek API密钥，可从控制台获取",[97,3475,148],{"class":140},[97,3477,3478],{"class":99,"line":1389},[97,3479,3437],{"class":103},[97,3481,3482,3485,3487,3489,3491,3493],{"class":99,"line":1409},[97,3483,3484],{"class":947},"        DEEPSEEK_API_MODEL",[97,3486,120],{"class":103},[97,3488,3388],{"class":132},[97,3490,3392],{"class":3391},[97,3492,3396],{"class":3395},[97,3494,3399],{"class":103},[97,3496,3497,3499,3501,3503,3506,3508],{"class":99,"line":1429},[97,3498,3405],{"class":3404},[97,3500,1158],{"class":3391},[97,3502,117],{"class":140},[97,3504,3505],{"class":144},"deepseek-reasoner",[97,3507,117],{"class":140},[97,3509,197],{"class":103},[97,3511,3512,3514,3516,3518,3521,3523],{"class":99,"line":1449},[97,3513,3421],{"class":3404},[97,3515,1158],{"class":3391},[97,3517,117],{"class":140},[97,3519,3520],{"class":144},"API请求的模型名称，默认为 deepseek-reasoner",[97,3522,117],{"class":140},[97,3524,197],{"class":103},[97,3526,3527],{"class":99,"line":1468},[97,3528,3437],{"class":103},[97,3530,3532,3535,3537,3539,3541,3543],{"class":99,"line":3531},29,[97,3533,3534],{"class":947},"        DEEPSEEK_MODEL_DISPLAY_NAME",[97,3536,120],{"class":103},[97,3538,3388],{"class":132},[97,3540,3392],{"class":3391},[97,3542,3396],{"class":3395},[97,3544,3399],{"class":103},[97,3546,3548,3550,3552,3554,3557,3559],{"class":99,"line":3547},30,[97,3549,3405],{"class":3404},[97,3551,1158],{"class":3391},[97,3553,117],{"class":140},[97,3555,3556],{"class":144},"deepseek-reasoner-fix",[97,3558,117],{"class":140},[97,3560,197],{"class":103},[97,3562,3564,3566,3568,3570,3573,3575],{"class":99,"line":3563},31,[97,3565,3421],{"class":3404},[97,3567,1158],{"class":3391},[97,3569,117],{"class":140},[97,3571,3572],{"class":144},"模型名称，默认为 deepseek-reasoner-fix",[97,3574,117],{"class":140},[97,3576,197],{"class":103},[97,3578,3580],{"class":99,"line":3579},32,[97,3581,3437],{"class":103},[97,3583,3585],{"class":99,"line":3584},33,[97,3586,442],{"emptyLinePlaceholder":24},[97,3588,3590,3593,3596,3598,3602],{"class":99,"line":3589},34,[97,3591,3592],{"class":3356},"    def",[97,3594,3595],{"class":912}," __init__",[97,3597,930],{"class":103},[97,3599,3601],{"class":3600},"smCYv","self",[97,3603,3378],{"class":103},[97,3605,3607,3610,3612,3616,3618,3621,3623,3626],{"class":99,"line":3606},35,[97,3608,3609],{"class":947},"        self",[97,3611,431],{"class":103},[97,3613,3615],{"class":3614},"skxfh","valves",[97,3617,3392],{"class":3391},[97,3619,3620],{"class":947}," self",[97,3622,431],{"class":103},[97,3624,3625],{"class":3395},"Valves",[97,3627,3628],{"class":103},"()\n",[97,3630,3632,3634,3636,3639,3641,3643,3646],{"class":99,"line":3631},36,[97,3633,3609],{"class":947},[97,3635,431],{"class":103},[97,3637,3638],{"class":3614},"data_prefix",[97,3640,3392],{"class":3391},[97,3642,141],{"class":140},[97,3644,3645],{"class":144},"data:",[97,3647,148],{"class":140},[97,3649,3651,3653,3655,3658,3660],{"class":99,"line":3650},37,[97,3652,3609],{"class":947},[97,3654,431],{"class":103},[97,3656,3657],{"class":3614},"emitter",[97,3659,3392],{"class":3391},[97,3661,3662],{"class":109}," None\n",[97,3664,3666],{"class":99,"line":3665},38,[97,3667,442],{"emptyLinePlaceholder":24},[97,3669,3671,3673,3677,3679,3681],{"class":99,"line":3670},39,[97,3672,3592],{"class":3356},[97,3674,3676],{"class":3675},"sGLFI"," pipes",[97,3678,930],{"class":103},[97,3680,3601],{"class":3600},[97,3682,3378],{"class":103},[97,3684,3686,3689],{"class":99,"line":3685},40,[97,3687,3688],{"class":3282},"        return",[97,3690,211],{"class":103},[97,3692,3694],{"class":99,"line":3693},41,[97,3695,3696],{"class":103},"            {\n",[97,3698,3700,3703,3706,3708,3710,3712,3714,3716,3718,3722],{"class":99,"line":3699},42,[97,3701,3702],{"class":140},"                \"",[97,3704,3705],{"class":144},"id",[97,3707,117],{"class":140},[97,3709,120],{"class":103},[97,3711,3620],{"class":947},[97,3713,431],{"class":103},[97,3715,3615],{"class":3614},[97,3717,431],{"class":103},[97,3719,3721],{"class":3720},"swQdS","DEEPSEEK_API_MODEL",[97,3723,197],{"class":103},[97,3725,3727,3729,3731,3733,3735,3737,3739,3741,3743,3746],{"class":99,"line":3726},43,[97,3728,3702],{"class":140},[97,3730,245],{"class":144},[97,3732,117],{"class":140},[97,3734,120],{"class":103},[97,3736,3620],{"class":947},[97,3738,431],{"class":103},[97,3740,3615],{"class":3614},[97,3742,431],{"class":103},[97,3744,3745],{"class":3720},"DEEPSEEK_MODEL_DISPLAY_NAME",[97,3747,197],{"class":103},[97,3749,3751],{"class":99,"line":3750},44,[97,3752,3753],{"class":103},"            }\n",[97,3755,3757],{"class":99,"line":3756},45,[97,3758,3759],{"class":103},"        ]\n",[97,3761,3763],{"class":99,"line":3762},46,[97,3764,442],{"emptyLinePlaceholder":24},[97,3766,3768,3771,3774,3777],{"class":99,"line":3767},47,[97,3769,3770],{"class":3356},"    async",[97,3772,3773],{"class":3356}," def",[97,3775,3776],{"class":3675}," pipe",[97,3778,3399],{"class":103},[97,3780,3782,3784,3786,3790,3792,3795,3797,3800,3802,3804,3807,3810,3813,3816,3819,3822,3825,3827],{"class":99,"line":3781},48,[97,3783,3609],{"class":3600},[97,3785,283],{"class":103},[97,3787,3789],{"class":3788},"sFwrP"," body",[97,3791,120],{"class":103},[97,3793,3794],{"class":132}," dict",[97,3796,283],{"class":103},[97,3798,3799],{"class":3788}," __event_emitter__",[97,3801,120],{"class":103},[97,3803,3318],{"class":400},[97,3805,3806],{"class":103},"[[",[97,3808,3809],{"class":132},"dict",[97,3811,3812],{"class":103},"],",[97,3814,3815],{"class":400}," Awaitable",[97,3817,3818],{"class":103},"[",[97,3820,3821],{"class":109},"None",[97,3823,3824],{"class":103},"]]",[97,3826,3392],{"class":3391},[97,3828,3662],{"class":109},[97,3830,3832,3835,3838,3840,3842,3845,3847,3850],{"class":99,"line":3831},49,[97,3833,3834],{"class":103},"    )",[97,3836,3837],{"class":103}," ->",[97,3839,3313],{"class":400},[97,3841,3818],{"class":103},[97,3843,3844],{"class":132},"str",[97,3846,283],{"class":103},[97,3848,3849],{"class":109}," None",[97,3851,3852],{"class":103},"]:\n",[97,3854,3856,3859,3862],{"class":99,"line":3855},50,[97,3857,3858],{"class":3242},"        \"\"\"",[97,3860,3861],{"class":3248},"主处理管道（已移除缓冲）",[97,3863,3243],{"class":3242},[97,3865,3867,3870,3872,3875,3877,3880,3882,3884,3887,3890,3893],{"class":99,"line":3866},51,[97,3868,3869],{"class":400},"        thinking_state ",[97,3871,1158],{"class":3391},[97,3873,3874],{"class":103}," {",[97,3876,117],{"class":140},[97,3878,3879],{"class":144},"thinking",[97,3881,117],{"class":140},[97,3883,120],{"class":103},[97,3885,3886],{"class":3391}," -",[97,3888,428],{"class":3889},"srdBf",[97,3891,3892],{"class":103},"}",[97,3894,3896],{"class":3895},"sutJx","  # 使用字典来存储thinking状态\n",[97,3898,3900,3902,3904,3906,3908],{"class":99,"line":3899},52,[97,3901,3609],{"class":947},[97,3903,431],{"class":103},[97,3905,3657],{"class":3614},[97,3907,3392],{"class":3391},[97,3909,3910],{"class":400}," __event_emitter__\n",[97,3912,3914],{"class":99,"line":3913},53,[97,3915,442],{"emptyLinePlaceholder":24},[97,3917,3919],{"class":99,"line":3918},54,[97,3920,3921],{"class":3895},"        # 验证配置\n",[97,3923,3925,3928,3931,3933,3935,3937,3939,3942],{"class":99,"line":3924},55,[97,3926,3927],{"class":3282},"        if",[97,3929,3930],{"class":3391}," not",[97,3932,3620],{"class":947},[97,3934,431],{"class":103},[97,3936,3615],{"class":3614},[97,3938,431],{"class":103},[97,3940,3941],{"class":3720},"DEEPSEEK_API_KEY",[97,3943,3062],{"class":103},[97,3945,3947,3950,3953,3955,3958,3961,3963,3966,3968,3970,3972,3975,3977,3980,3983,3985,3988],{"class":99,"line":3946},56,[97,3948,3949],{"class":3282},"            yield",[97,3951,3952],{"class":400}," json",[97,3954,431],{"class":103},[97,3956,3957],{"class":3395},"dumps",[97,3959,3960],{"class":103},"({",[97,3962,117],{"class":140},[97,3964,3965],{"class":144},"error",[97,3967,117],{"class":140},[97,3969,120],{"class":103},[97,3971,141],{"class":140},[97,3973,3974],{"class":144},"未配置API密钥",[97,3976,117],{"class":140},[97,3978,3979],{"class":103},"},",[97,3981,3982],{"class":3404}," ensure_ascii",[97,3984,1158],{"class":3391},[97,3986,3987],{"class":109},"False",[97,3989,437],{"class":103},[97,3991,3993],{"class":99,"line":3992},57,[97,3994,3995],{"class":3282},"            return\n",[97,3997,3999],{"class":99,"line":3998},58,[97,4000,442],{"emptyLinePlaceholder":24},[97,4002,4004],{"class":99,"line":4003},59,[97,4005,4006],{"class":3895},"        # 准备请求参数\n",[97,4008,4010,4013,4015],{"class":99,"line":4009},60,[97,4011,4012],{"class":400},"        headers ",[97,4014,1158],{"class":3391},[97,4016,123],{"class":103},[97,4018,4020,4023,4026,4028,4030,4033,4036,4039,4041,4043,4045,4047,4049,4051,4053],{"class":99,"line":4019},61,[97,4021,4022],{"class":140},"            \"",[97,4024,4025],{"class":144},"Authorization",[97,4027,117],{"class":140},[97,4029,120],{"class":103},[97,4031,4032],{"class":3356}," f",[97,4034,4035],{"class":144},"\"Bearer ",[97,4037,4038],{"class":3889},"{",[97,4040,3601],{"class":947},[97,4042,431],{"class":103},[97,4044,3615],{"class":3614},[97,4046,431],{"class":103},[97,4048,3941],{"class":3720},[97,4050,3892],{"class":3889},[97,4052,117],{"class":144},[97,4054,197],{"class":103},[97,4056,4058,4060,4063,4065,4067,4069,4072,4074],{"class":99,"line":4057},62,[97,4059,4022],{"class":140},[97,4061,4062],{"class":144},"Content-Type",[97,4064,117],{"class":140},[97,4066,120],{"class":103},[97,4068,141],{"class":140},[97,4070,4071],{"class":144},"application\u002Fjson",[97,4073,117],{"class":140},[97,4075,197],{"class":103},[97,4077,4079],{"class":99,"line":4078},63,[97,4080,4081],{"class":103},"        }\n",[97,4083,4085],{"class":99,"line":4084},64,[97,4086,442],{"emptyLinePlaceholder":24},[97,4088,4090,4093],{"class":99,"line":4089},65,[97,4091,4092],{"class":3282},"        try",[97,4094,3062],{"class":103},[97,4096,4098],{"class":99,"line":4097},66,[97,4099,4100],{"class":3895},"            # 模型ID提取\n",[97,4102,4104,4107,4109,4111,4113,4115,4118,4120,4123,4126,4128,4130,4132,4134,4136,4139,4142,4145,4147],{"class":99,"line":4103},67,[97,4105,4106],{"class":400},"            model_id ",[97,4108,1158],{"class":3391},[97,4110,3789],{"class":400},[97,4112,3818],{"class":103},[97,4114,117],{"class":140},[97,4116,4117],{"class":144},"model",[97,4119,117],{"class":140},[97,4121,4122],{"class":103},"].",[97,4124,4125],{"class":3395},"split",[97,4127,930],{"class":103},[97,4129,117],{"class":140},[97,4131,431],{"class":144},[97,4133,117],{"class":140},[97,4135,283],{"class":103},[97,4137,4138],{"class":3889}," 1",[97,4140,4141],{"class":103},")[",[97,4143,4144],{"class":3391},"-",[97,4146,428],{"class":3889},[97,4148,4149],{"class":103},"]\n",[97,4151,4153,4156,4158,4160,4163,4166,4168,4170,4172,4174,4176,4179],{"class":99,"line":4152},68,[97,4154,4155],{"class":400},"            payload ",[97,4157,1158],{"class":3391},[97,4159,3874],{"class":103},[97,4161,4162],{"class":3391},"**",[97,4164,4165],{"class":400},"body",[97,4167,283],{"class":103},[97,4169,141],{"class":140},[97,4171,4117],{"class":144},[97,4173,117],{"class":140},[97,4175,120],{"class":103},[97,4177,4178],{"class":400}," model_id",[97,4180,160],{"class":103},[97,4182,4184],{"class":99,"line":4183},69,[97,4185,442],{"emptyLinePlaceholder":24},[97,4187,4189],{"class":99,"line":4188},70,[97,4190,4191],{"class":3895},"            # 处理消息以防止连续的相同角色\n",[97,4193,4195,4198,4200,4203,4205,4207,4210,4212],{"class":99,"line":4194},71,[97,4196,4197],{"class":400},"            messages ",[97,4199,1158],{"class":3391},[97,4201,4202],{"class":400}," payload",[97,4204,3818],{"class":103},[97,4206,117],{"class":140},[97,4208,4209],{"class":144},"messages",[97,4211,117],{"class":140},[97,4213,4149],{"class":103},[97,4215,4217,4220,4222],{"class":99,"line":4216},72,[97,4218,4219],{"class":400},"            i ",[97,4221,1158],{"class":3391},[97,4223,4224],{"class":3889}," 0\n",[97,4226,4228,4231,4234,4236,4239,4241,4243,4246,4248,4250],{"class":99,"line":4227},73,[97,4229,4230],{"class":3282},"            while",[97,4232,4233],{"class":400}," i ",[97,4235,1009],{"class":3391},[97,4237,4238],{"class":912}," len",[97,4240,930],{"class":103},[97,4242,4209],{"class":3395},[97,4244,4245],{"class":103},")",[97,4247,3886],{"class":3391},[97,4249,4138],{"class":3889},[97,4251,3062],{"class":103},[97,4253,4255,4258,4261,4263,4266,4269,4271,4274,4276,4279,4282,4284,4286,4289,4291,4293,4295,4297,4299,4301],{"class":99,"line":4254},74,[97,4256,4257],{"class":3282},"                if",[97,4259,4260],{"class":400}," messages",[97,4262,3818],{"class":103},[97,4264,4265],{"class":400},"i",[97,4267,4268],{"class":103},"][",[97,4270,117],{"class":140},[97,4272,4273],{"class":144},"role",[97,4275,117],{"class":140},[97,4277,4278],{"class":103},"]",[97,4280,4281],{"class":3391}," ==",[97,4283,4260],{"class":400},[97,4285,3818],{"class":103},[97,4287,4288],{"class":400},"i ",[97,4290,3163],{"class":3391},[97,4292,4138],{"class":3889},[97,4294,4268],{"class":103},[97,4296,117],{"class":140},[97,4298,4273],{"class":144},[97,4300,117],{"class":140},[97,4302,3852],{"class":103},[97,4304,4306],{"class":99,"line":4305},75,[97,4307,4308],{"class":3895},"                    # 插入具有替代角色的占位符消息\n",[97,4310,4312,4315,4317],{"class":99,"line":4311},76,[97,4313,4314],{"class":400},"                    alternate_role ",[97,4316,1158],{"class":3391},[97,4318,888],{"class":103},[97,4320,4322,4325,4328,4330,4333,4335,4337,4339,4341,4343,4345,4347,4349,4351,4353,4356,4358,4361,4363,4365],{"class":99,"line":4321},77,[97,4323,4324],{"class":140},"                        \"",[97,4326,4327],{"class":144},"assistant",[97,4329,117],{"class":140},[97,4331,4332],{"class":3282}," if",[97,4334,4260],{"class":400},[97,4336,3818],{"class":103},[97,4338,4265],{"class":400},[97,4340,4268],{"class":103},[97,4342,117],{"class":140},[97,4344,4273],{"class":144},[97,4346,117],{"class":140},[97,4348,4278],{"class":103},[97,4350,4281],{"class":3391},[97,4352,141],{"class":140},[97,4354,4355],{"class":144},"user",[97,4357,117],{"class":140},[97,4359,4360],{"class":3282}," else",[97,4362,141],{"class":140},[97,4364,4355],{"class":144},[97,4366,148],{"class":140},[97,4368,4370],{"class":99,"line":4369},78,[97,4371,4372],{"class":103},"                    )\n",[97,4374,4376,4379,4381,4384],{"class":99,"line":4375},79,[97,4377,4378],{"class":400},"                    messages",[97,4380,431],{"class":103},[97,4382,4383],{"class":3395},"insert",[97,4385,3399],{"class":103},[97,4387,4389,4392,4394,4396],{"class":99,"line":4388},80,[97,4390,4391],{"class":3395},"                        i ",[97,4393,3163],{"class":3391},[97,4395,4138],{"class":3889},[97,4397,197],{"class":103},[97,4399,4401,4404,4406,4408,4410,4412,4415,4417,4419,4422,4424,4426,4428,4431,4433],{"class":99,"line":4400},81,[97,4402,4403],{"class":103},"                        {",[97,4405,117],{"class":140},[97,4407,4273],{"class":144},[97,4409,117],{"class":140},[97,4411,120],{"class":103},[97,4413,4414],{"class":3395}," alternate_role",[97,4416,283],{"class":103},[97,4418,141],{"class":140},[97,4420,4421],{"class":144},"content",[97,4423,117],{"class":140},[97,4425,120],{"class":103},[97,4427,141],{"class":140},[97,4429,4430],{"class":144},"[Unfinished thinking]",[97,4432,117],{"class":140},[97,4434,4435],{"class":103},"},\n",[97,4437,4439],{"class":99,"line":4438},82,[97,4440,4372],{"class":103},[97,4442,4444,4447,4450],{"class":99,"line":4443},83,[97,4445,4446],{"class":400},"                i ",[97,4448,4449],{"class":3391},"+=",[97,4451,4452],{"class":3889}," 1\n",[97,4454,4456],{"class":99,"line":4455},84,[97,4457,442],{"emptyLinePlaceholder":24},[97,4459,4461],{"class":99,"line":4460},85,[97,4462,4463],{"class":3895},"            # yield json.dumps(payload, ensure_ascii=False)\n",[97,4465,4467],{"class":99,"line":4466},86,[97,4468,442],{"emptyLinePlaceholder":24},[97,4470,4472],{"class":99,"line":4471},87,[97,4473,4474],{"class":3895},"            # 发起API请求\n",[97,4476,4478,4481,4484,4487,4489,4492,4494,4497,4499,4502,4504,4507,4510],{"class":99,"line":4477},88,[97,4479,4480],{"class":3282},"            async",[97,4482,4483],{"class":3282}," with",[97,4485,4486],{"class":400}," httpx",[97,4488,431],{"class":103},[97,4490,4491],{"class":3395},"AsyncClient",[97,4493,930],{"class":103},[97,4495,4496],{"class":3404},"http2",[97,4498,1158],{"class":3391},[97,4500,4501],{"class":109},"True",[97,4503,4245],{"class":103},[97,4505,4506],{"class":3282}," as",[97,4508,4509],{"class":400}," client",[97,4511,3062],{"class":103},[97,4513,4515,4518,4520,4522,4524,4527],{"class":99,"line":4514},89,[97,4516,4517],{"class":3282},"                async",[97,4519,4483],{"class":3282},[97,4521,4509],{"class":400},[97,4523,431],{"class":103},[97,4525,4526],{"class":3395},"stream",[97,4528,3399],{"class":103},[97,4530,4532,4535,4538,4540],{"class":99,"line":4531},90,[97,4533,4534],{"class":140},"                    \"",[97,4536,4537],{"class":144},"POST",[97,4539,117],{"class":140},[97,4541,197],{"class":103},[97,4543,4545,4548,4550,4552,4554,4556,4558,4560,4563,4565,4568],{"class":99,"line":4544},91,[97,4546,4547],{"class":3356},"                    f",[97,4549,117],{"class":144},[97,4551,4038],{"class":3889},[97,4553,3601],{"class":947},[97,4555,431],{"class":103},[97,4557,3615],{"class":3614},[97,4559,431],{"class":103},[97,4561,4562],{"class":3720},"DEEPSEEK_API_BASE_URL",[97,4564,3892],{"class":3889},[97,4566,4567],{"class":144},"\u002Fchat\u002Fcompletions\"",[97,4569,197],{"class":103},[97,4571,4573,4576,4578,4581],{"class":99,"line":4572},92,[97,4574,4575],{"class":3404},"                    json",[97,4577,1158],{"class":3391},[97,4579,4580],{"class":3395},"payload",[97,4582,197],{"class":103},[97,4584,4586,4589,4591,4594],{"class":99,"line":4585},93,[97,4587,4588],{"class":3404},"                    headers",[97,4590,1158],{"class":3391},[97,4592,4593],{"class":3395},"headers",[97,4595,197],{"class":103},[97,4597,4599,4602,4604,4607],{"class":99,"line":4598},94,[97,4600,4601],{"class":3404},"                    timeout",[97,4603,1158],{"class":3391},[97,4605,4606],{"class":3889},"300",[97,4608,197],{"class":103},[97,4610,4612,4615,4617,4620],{"class":99,"line":4611},95,[97,4613,4614],{"class":103},"                )",[97,4616,4506],{"class":3282},[97,4618,4619],{"class":400}," response",[97,4621,3062],{"class":103},[97,4623,4625],{"class":99,"line":4624},96,[97,4626,4627],{"class":3895},"                    # 错误处理\n",[97,4629,4631,4634,4636,4638,4641,4644,4647],{"class":99,"line":4630},97,[97,4632,4633],{"class":3282},"                    if",[97,4635,4619],{"class":400},[97,4637,431],{"class":103},[97,4639,4640],{"class":3614},"status_code",[97,4642,4643],{"class":3391}," !=",[97,4645,4646],{"class":3889}," 200",[97,4648,3062],{"class":103},[97,4650,4652,4655,4657,4660,4662,4664,4667],{"class":99,"line":4651},98,[97,4653,4654],{"class":400},"                        error ",[97,4656,1158],{"class":3391},[97,4658,4659],{"class":3282}," await",[97,4661,4619],{"class":400},[97,4663,431],{"class":103},[97,4665,4666],{"class":3395},"aread",[97,4668,3628],{"class":103},[97,4670,4672,4675,4677,4679,4682,4684,4687,4689,4691,4693,4696],{"class":99,"line":4671},99,[97,4673,4674],{"class":3282},"                        yield",[97,4676,3620],{"class":947},[97,4678,431],{"class":103},[97,4680,4681],{"class":3395},"_format_error",[97,4683,930],{"class":103},[97,4685,4686],{"class":3395},"response",[97,4688,431],{"class":103},[97,4690,4640],{"class":3614},[97,4692,283],{"class":103},[97,4694,4695],{"class":3395}," error",[97,4697,437],{"class":103},[97,4699,4701],{"class":99,"line":4700},100,[97,4702,4703],{"class":3282},"                        return\n",[97,4705,4707],{"class":99,"line":4706},101,[97,4708,442],{"emptyLinePlaceholder":24},[97,4710,4712],{"class":99,"line":4711},102,[97,4713,4714],{"class":3895},"                    # 流式处理响应\n",[97,4716,4718,4721,4724,4727,4730,4732,4734,4737],{"class":99,"line":4717},103,[97,4719,4720],{"class":3282},"                    async",[97,4722,4723],{"class":3282}," for",[97,4725,4726],{"class":400}," line ",[97,4728,4729],{"class":3282},"in",[97,4731,4619],{"class":400},[97,4733,431],{"class":103},[97,4735,4736],{"class":3395},"aiter_lines",[97,4738,4739],{"class":103},"():\n",[97,4741,4743,4746,4748,4751,4753,4756,4758,4760,4762,4764],{"class":99,"line":4742},104,[97,4744,4745],{"class":3282},"                        if",[97,4747,3930],{"class":3391},[97,4749,4750],{"class":400}," line",[97,4752,431],{"class":103},[97,4754,4755],{"class":3395},"startswith",[97,4757,930],{"class":103},[97,4759,3601],{"class":947},[97,4761,431],{"class":103},[97,4763,3638],{"class":3614},[97,4765,3378],{"class":103},[97,4767,4769],{"class":99,"line":4768},105,[97,4770,4771],{"class":3282},"                            continue\n",[97,4773,4775],{"class":99,"line":4774},106,[97,4776,442],{"emptyLinePlaceholder":24},[97,4778,4780],{"class":99,"line":4779},107,[97,4781,4782],{"class":3895},"                        # 截取 JSON 字符串\n",[97,4784,4786,4789,4791,4793,4795,4798,4800,4802,4804,4806,4808],{"class":99,"line":4785},108,[97,4787,4788],{"class":400},"                        json_str ",[97,4790,1158],{"class":3391},[97,4792,4750],{"class":400},[97,4794,3818],{"class":103},[97,4796,4797],{"class":912},"len",[97,4799,930],{"class":103},[97,4801,3601],{"class":947},[97,4803,431],{"class":103},[97,4805,3638],{"class":3614},[97,4807,4245],{"class":103},[97,4809,4810],{"class":103}," :]\n",[97,4812,4814],{"class":99,"line":4813},109,[97,4815,442],{"emptyLinePlaceholder":24},[97,4817,4819],{"class":99,"line":4818},110,[97,4820,4821],{"class":3895},"                        # 去除首尾空格后检查是否为结束标记\n",[97,4823,4825,4827,4830,4832,4835,4838,4840,4842,4845,4847],{"class":99,"line":4824},111,[97,4826,4745],{"class":3282},[97,4828,4829],{"class":400}," json_str",[97,4831,431],{"class":103},[97,4833,4834],{"class":3395},"strip",[97,4836,4837],{"class":103},"()",[97,4839,4281],{"class":3391},[97,4841,141],{"class":140},[97,4843,4844],{"class":144},"[DONE]",[97,4846,117],{"class":140},[97,4848,3062],{"class":103},[97,4850,4852],{"class":99,"line":4851},112,[97,4853,4854],{"class":3282},"                            return\n",[97,4856,4858],{"class":99,"line":4857},113,[97,4859,442],{"emptyLinePlaceholder":24},[97,4861,4863,4866],{"class":99,"line":4862},114,[97,4864,4865],{"class":3282},"                        try",[97,4867,3062],{"class":103},[97,4869,4871,4874,4876,4878,4880,4883,4885,4888],{"class":99,"line":4870},115,[97,4872,4873],{"class":400},"                            data ",[97,4875,1158],{"class":3391},[97,4877,3952],{"class":400},[97,4879,431],{"class":103},[97,4881,4882],{"class":3395},"loads",[97,4884,930],{"class":103},[97,4886,4887],{"class":3395},"json_str",[97,4889,437],{"class":103},[97,4891,4893,4896,4898,4900,4903,4905,4908],{"class":99,"line":4892},116,[97,4894,4895],{"class":3282},"                        except",[97,4897,3952],{"class":400},[97,4899,431],{"class":103},[97,4901,4902],{"class":3614},"JSONDecodeError",[97,4904,4506],{"class":3282},[97,4906,4907],{"class":400}," e",[97,4909,3062],{"class":103},[97,4911,4913],{"class":99,"line":4912},117,[97,4914,4915],{"class":3895},"                            # 格式化错误信息，这里传入错误类型和详细原因（包括出错内容和异常信息）\n",[97,4917,4919,4922,4924,4926,4929,4931,4933,4935,4938,4940,4943,4945],{"class":99,"line":4918},118,[97,4920,4921],{"class":400},"                            error_detail ",[97,4923,1158],{"class":3391},[97,4925,4032],{"class":3356},[97,4927,4928],{"class":144},"\"解析失败 - 内容：",[97,4930,4038],{"class":3889},[97,4932,4887],{"class":400},[97,4934,3892],{"class":3889},[97,4936,4937],{"class":144},"，原因：",[97,4939,4038],{"class":3889},[97,4941,4942],{"class":400},"e",[97,4944,3892],{"class":3889},[97,4946,148],{"class":144},[97,4948,4950,4953,4955,4957,4959,4961,4963,4965,4967,4969,4972],{"class":99,"line":4949},119,[97,4951,4952],{"class":3282},"                            yield",[97,4954,3620],{"class":947},[97,4956,431],{"class":103},[97,4958,4681],{"class":3395},[97,4960,930],{"class":103},[97,4962,117],{"class":140},[97,4964,4902],{"class":144},[97,4966,117],{"class":140},[97,4968,283],{"class":103},[97,4970,4971],{"class":3395}," error_detail",[97,4973,437],{"class":103},[97,4975,4977],{"class":99,"line":4976},120,[97,4978,4854],{"class":3282},[97,4980,4982],{"class":99,"line":4981},121,[97,4983,442],{"emptyLinePlaceholder":24},[97,4985,4987,4990,4992,4995,4997,5000,5002,5004,5007,5009,5011,5014,5016],{"class":99,"line":4986},122,[97,4988,4989],{"class":400},"                        choice ",[97,4991,1158],{"class":3391},[97,4993,4994],{"class":400}," data",[97,4996,431],{"class":103},[97,4998,4999],{"class":3395},"get",[97,5001,930],{"class":103},[97,5003,117],{"class":140},[97,5005,5006],{"class":144},"choices",[97,5008,117],{"class":140},[97,5010,283],{"class":103},[97,5012,5013],{"class":103}," [{}])[",[97,5015,1049],{"class":3889},[97,5017,4149],{"class":103},[97,5019,5021],{"class":99,"line":5020},123,[97,5022,442],{"emptyLinePlaceholder":24},[97,5024,5026],{"class":99,"line":5025},124,[97,5027,5028],{"class":3895},"                        # 结束条件判断\n",[97,5030,5032,5034,5037,5039,5041,5043,5045,5048,5050],{"class":99,"line":5031},125,[97,5033,4745],{"class":3282},[97,5035,5036],{"class":400}," choice",[97,5038,431],{"class":103},[97,5040,4999],{"class":3395},[97,5042,930],{"class":103},[97,5044,117],{"class":140},[97,5046,5047],{"class":144},"finish_reason",[97,5049,117],{"class":140},[97,5051,3378],{"class":103},[97,5053,5055],{"class":99,"line":5054},126,[97,5056,4854],{"class":3282},[97,5058,5059],{"class":99,"line":1541},[97,5060,442],{"emptyLinePlaceholder":24},[97,5062,5064],{"class":99,"line":5063},128,[97,5065,5066],{"class":3895},"                        # 状态机处理\n",[97,5068,5070,5073,5075,5077,5079,5081,5084],{"class":99,"line":5069},129,[97,5071,5072],{"class":400},"                        state_output ",[97,5074,1158],{"class":3391},[97,5076,4659],{"class":3282},[97,5078,3620],{"class":947},[97,5080,431],{"class":103},[97,5082,5083],{"class":3395},"_update_thinking_state",[97,5085,3399],{"class":103},[97,5087,5089,5092,5094,5096,5098,5100,5103,5105,5107,5110],{"class":99,"line":5088},130,[97,5090,5091],{"class":3395},"                            choice",[97,5093,431],{"class":103},[97,5095,4999],{"class":3395},[97,5097,930],{"class":103},[97,5099,117],{"class":140},[97,5101,5102],{"class":144},"delta",[97,5104,117],{"class":140},[97,5106,283],{"class":103},[97,5108,5109],{"class":103}," {}),",[97,5111,5112],{"class":3395}," thinking_state\n",[97,5114,5116],{"class":99,"line":5115},131,[97,5117,5118],{"class":103},"                        )\n",[97,5120,5122,5124,5127],{"class":99,"line":5121},132,[97,5123,4745],{"class":3282},[97,5125,5126],{"class":400}," state_output",[97,5128,3062],{"class":103},[97,5130,5132,5134,5137],{"class":99,"line":5131},133,[97,5133,4952],{"class":3282},[97,5135,5136],{"class":400}," state_output  ",[97,5138,5139],{"class":3895},"# 直接发送状态标记\n",[97,5141,5143,5146,5149,5152,5154,5157,5159],{"class":99,"line":5142},134,[97,5144,5145],{"class":3282},"                            if",[97,5147,5148],{"class":400}," state_output ",[97,5150,5151],{"class":3391},"==",[97,5153,141],{"class":140},[97,5155,5156],{"class":144},"\u003Cthink>",[97,5158,117],{"class":140},[97,5160,3062],{"class":103},[97,5162,5164,5167,5169,5172],{"class":99,"line":5163},135,[97,5165,5166],{"class":3282},"                                yield",[97,5168,141],{"class":140},[97,5170,5171],{"class":947},"\\n",[97,5173,148],{"class":140},[97,5175,5177],{"class":99,"line":5176},136,[97,5178,442],{"emptyLinePlaceholder":24},[97,5180,5182],{"class":99,"line":5181},137,[97,5183,5184],{"class":3895},"                        # 内容处理并立即发送\n",[97,5186,5188,5191,5193,5195,5197,5200,5202,5205,5207,5209,5211,5213],{"class":99,"line":5187},138,[97,5189,5190],{"class":400},"                        content ",[97,5192,1158],{"class":3391},[97,5194,3620],{"class":947},[97,5196,431],{"class":103},[97,5198,5199],{"class":3395},"_process_content",[97,5201,930],{"class":103},[97,5203,5204],{"class":3395},"choice",[97,5206,3818],{"class":103},[97,5208,117],{"class":140},[97,5210,5102],{"class":144},[97,5212,117],{"class":140},[97,5214,5215],{"class":103},"])\n",[97,5217,5219,5221,5224],{"class":99,"line":5218},139,[97,5220,4745],{"class":3282},[97,5222,5223],{"class":400}," content",[97,5225,3062],{"class":103},[97,5227,5229,5231,5233,5235,5237,5239,5241,5243,5245],{"class":99,"line":5228},140,[97,5230,5145],{"class":3282},[97,5232,5223],{"class":400},[97,5234,431],{"class":103},[97,5236,4755],{"class":3395},[97,5238,930],{"class":103},[97,5240,117],{"class":140},[97,5242,5156],{"class":144},[97,5244,117],{"class":140},[97,5246,3378],{"class":103},[97,5248,5250,5253,5255,5258,5260,5263,5265,5268,5270,5273,5276,5278,5280,5282],{"class":99,"line":5249},141,[97,5251,5252],{"class":400},"                                match ",[97,5254,1158],{"class":3391},[97,5256,5257],{"class":400}," re",[97,5259,431],{"class":103},[97,5261,5262],{"class":3395},"match",[97,5264,930],{"class":103},[97,5266,5267],{"class":3356},"r",[97,5269,117],{"class":140},[97,5271,5272],{"class":3011},"^",[97,5274,5156],{"class":5275},"sQRbd",[97,5277,117],{"class":140},[97,5279,283],{"class":103},[97,5281,5223],{"class":3395},[97,5283,437],{"class":103},[97,5285,5287,5290,5293],{"class":99,"line":5286},142,[97,5288,5289],{"class":3282},"                                if",[97,5291,5292],{"class":400}," match",[97,5294,3062],{"class":103},[97,5296,5298,5301,5303,5305,5307,5310,5312,5314,5316,5318,5320,5322,5324,5327,5329,5331],{"class":99,"line":5297},143,[97,5299,5300],{"class":400},"                                    content ",[97,5302,1158],{"class":3391},[97,5304,5257],{"class":400},[97,5306,431],{"class":103},[97,5308,5309],{"class":3395},"sub",[97,5311,930],{"class":103},[97,5313,5267],{"class":3356},[97,5315,117],{"class":140},[97,5317,5272],{"class":3011},[97,5319,5156],{"class":5275},[97,5321,117],{"class":140},[97,5323,283],{"class":103},[97,5325,5326],{"class":140}," \"\"",[97,5328,283],{"class":103},[97,5330,5223],{"class":3395},[97,5332,437],{"class":103},[97,5334,5336,5339,5341,5343],{"class":99,"line":5335},144,[97,5337,5338],{"class":3282},"                                    yield",[97,5340,141],{"class":140},[97,5342,5156],{"class":144},[97,5344,148],{"class":140},[97,5346,5348,5351,5354,5356,5359,5361,5364],{"class":99,"line":5347},145,[97,5349,5350],{"class":3282},"                                    await",[97,5352,5353],{"class":400}," asyncio",[97,5355,431],{"class":103},[97,5357,5358],{"class":3395},"sleep",[97,5360,930],{"class":103},[97,5362,5363],{"class":3889},"0.1",[97,5365,437],{"class":103},[97,5367,5369,5371,5373,5375],{"class":99,"line":5368},146,[97,5370,5338],{"class":3282},[97,5372,141],{"class":140},[97,5374,5171],{"class":947},[97,5376,148],{"class":140},[97,5378,5380],{"class":99,"line":5379},147,[97,5381,442],{"emptyLinePlaceholder":24},[97,5383,5385,5388,5390,5392,5394,5396,5398,5401,5403],{"class":99,"line":5384},148,[97,5386,5387],{"class":3282},"                            elif",[97,5389,5223],{"class":400},[97,5391,431],{"class":103},[97,5393,4755],{"class":3395},[97,5395,930],{"class":103},[97,5397,117],{"class":140},[97,5399,5400],{"class":144},"\u003C\u002Fthink>",[97,5402,117],{"class":140},[97,5404,3378],{"class":103},[97,5406,5408,5410,5412,5414,5416,5418,5420,5422,5424,5426,5428,5430,5432,5434],{"class":99,"line":5407},149,[97,5409,5252],{"class":400},[97,5411,1158],{"class":3391},[97,5413,5257],{"class":400},[97,5415,431],{"class":103},[97,5417,5262],{"class":3395},[97,5419,930],{"class":103},[97,5421,5267],{"class":3356},[97,5423,117],{"class":140},[97,5425,5272],{"class":3011},[97,5427,5400],{"class":5275},[97,5429,117],{"class":140},[97,5431,283],{"class":103},[97,5433,5223],{"class":3395},[97,5435,437],{"class":103},[97,5437,5439,5441,5443],{"class":99,"line":5438},150,[97,5440,5289],{"class":3282},[97,5442,5292],{"class":400},[97,5444,3062],{"class":103},[97,5446,5448,5450,5452,5454,5456,5458,5460,5462,5464,5466,5468,5470,5472,5474,5476,5478],{"class":99,"line":5447},151,[97,5449,5300],{"class":400},[97,5451,1158],{"class":3391},[97,5453,5257],{"class":400},[97,5455,431],{"class":103},[97,5457,5309],{"class":3395},[97,5459,930],{"class":103},[97,5461,5267],{"class":3356},[97,5463,117],{"class":140},[97,5465,5272],{"class":3011},[97,5467,5400],{"class":5275},[97,5469,117],{"class":140},[97,5471,283],{"class":103},[97,5473,5326],{"class":140},[97,5475,283],{"class":103},[97,5477,5223],{"class":3395},[97,5479,437],{"class":103},[97,5481,5483,5485,5487,5489],{"class":99,"line":5482},152,[97,5484,5338],{"class":3282},[97,5486,141],{"class":140},[97,5488,5400],{"class":144},[97,5490,148],{"class":140},[97,5492,5494,5496,5498,5500,5502,5504,5506],{"class":99,"line":5493},153,[97,5495,5350],{"class":3282},[97,5497,5353],{"class":400},[97,5499,431],{"class":103},[97,5501,5358],{"class":3395},[97,5503,930],{"class":103},[97,5505,5363],{"class":3889},[97,5507,437],{"class":103},[97,5509,5511,5513,5515,5517],{"class":99,"line":5510},154,[97,5512,5338],{"class":3282},[97,5514,141],{"class":140},[97,5516,5171],{"class":947},[97,5518,148],{"class":140},[97,5520,5522,5524],{"class":99,"line":5521},155,[97,5523,4952],{"class":3282},[97,5525,5526],{"class":400}," content\n",[97,5528,5530],{"class":99,"line":5529},156,[97,5531,442],{"emptyLinePlaceholder":24},[97,5533,5535,5538,5541,5543,5545],{"class":99,"line":5534},157,[97,5536,5537],{"class":3282},"        except",[97,5539,5540],{"class":132}," Exception",[97,5542,4506],{"class":3282},[97,5544,4907],{"class":400},[97,5546,3062],{"class":103},[97,5548,5550,5552,5554,5556,5559,5561,5563],{"class":99,"line":5549},158,[97,5551,3949],{"class":3282},[97,5553,3620],{"class":947},[97,5555,431],{"class":103},[97,5557,5558],{"class":3395},"_format_exception",[97,5560,930],{"class":103},[97,5562,4942],{"class":3395},[97,5564,437],{"class":103},[97,5566,5568],{"class":99,"line":5567},159,[97,5569,442],{"emptyLinePlaceholder":24},[97,5571,5573,5575,5577,5580,5582,5584,5586,5589,5591,5593,5595,5598,5600,5602,5604,5606,5608],{"class":99,"line":5572},160,[97,5574,3770],{"class":3356},[97,5576,3773],{"class":3356},[97,5578,5579],{"class":3675}," _update_thinking_state",[97,5581,930],{"class":103},[97,5583,3601],{"class":3600},[97,5585,283],{"class":103},[97,5587,5588],{"class":3788}," delta",[97,5590,120],{"class":103},[97,5592,3794],{"class":132},[97,5594,283],{"class":103},[97,5596,5597],{"class":3788}," thinking_state",[97,5599,120],{"class":103},[97,5601,3794],{"class":132},[97,5603,4245],{"class":103},[97,5605,3837],{"class":103},[97,5607,3388],{"class":132},[97,5609,3062],{"class":103},[97,5611,5613,5615,5618],{"class":99,"line":5612},161,[97,5614,3858],{"class":3242},[97,5616,5617],{"class":3248},"更新思考状态机（简化版）",[97,5619,3243],{"class":3242},[97,5621,5623,5626,5628],{"class":99,"line":5622},162,[97,5624,5625],{"class":400},"        state_output ",[97,5627,1158],{"class":3391},[97,5629,5630],{"class":140}," \"\"\n",[97,5632,5634],{"class":99,"line":5633},163,[97,5635,442],{"emptyLinePlaceholder":24},[97,5637,5639],{"class":99,"line":5638},164,[97,5640,5641],{"class":3895},"        # 状态转换：未开始 -> 思考中\n",[97,5643,5645,5647,5649,5651,5653,5655,5657,5659,5661,5663,5665,5668,5670,5672,5674,5676,5678,5681,5683],{"class":99,"line":5644},165,[97,5646,3927],{"class":3282},[97,5648,5597],{"class":400},[97,5650,3818],{"class":103},[97,5652,117],{"class":140},[97,5654,3879],{"class":144},[97,5656,117],{"class":140},[97,5658,4278],{"class":103},[97,5660,4281],{"class":3391},[97,5662,3886],{"class":3391},[97,5664,428],{"class":3889},[97,5666,5667],{"class":3391}," and",[97,5669,5588],{"class":400},[97,5671,431],{"class":103},[97,5673,4999],{"class":3395},[97,5675,930],{"class":103},[97,5677,117],{"class":140},[97,5679,5680],{"class":144},"reasoning_content",[97,5682,117],{"class":140},[97,5684,3378],{"class":103},[97,5686,5688,5691,5693,5695,5697,5699,5701,5703],{"class":99,"line":5687},166,[97,5689,5690],{"class":400},"            thinking_state",[97,5692,3818],{"class":103},[97,5694,117],{"class":140},[97,5696,3879],{"class":144},[97,5698,117],{"class":140},[97,5700,4278],{"class":103},[97,5702,3392],{"class":3391},[97,5704,4224],{"class":3889},[97,5706,5708,5711,5713,5715,5717],{"class":99,"line":5707},167,[97,5709,5710],{"class":400},"            state_output ",[97,5712,1158],{"class":3391},[97,5714,141],{"class":140},[97,5716,5156],{"class":144},[97,5718,148],{"class":140},[97,5720,5722],{"class":99,"line":5721},168,[97,5723,442],{"emptyLinePlaceholder":24},[97,5725,5727],{"class":99,"line":5726},169,[97,5728,5729],{"class":3895},"        # 状态转换：思考中 -> 已回答\n",[97,5731,5733,5736],{"class":99,"line":5732},170,[97,5734,5735],{"class":3282},"        elif",[97,5737,888],{"class":103},[97,5739,5741,5743,5745,5747,5749,5751,5753,5755],{"class":99,"line":5740},171,[97,5742,5690],{"class":400},[97,5744,3818],{"class":103},[97,5746,117],{"class":140},[97,5748,3879],{"class":144},[97,5750,117],{"class":140},[97,5752,4278],{"class":103},[97,5754,4281],{"class":3391},[97,5756,4224],{"class":3889},[97,5758,5760,5763,5765,5767,5769,5771,5773,5775,5777,5779],{"class":99,"line":5759},172,[97,5761,5762],{"class":3391},"            and",[97,5764,3930],{"class":3391},[97,5766,5588],{"class":400},[97,5768,431],{"class":103},[97,5770,4999],{"class":3395},[97,5772,930],{"class":103},[97,5774,117],{"class":140},[97,5776,5680],{"class":144},[97,5778,117],{"class":140},[97,5780,437],{"class":103},[97,5782,5784,5786,5788,5790,5792,5794,5796,5798,5800],{"class":99,"line":5783},173,[97,5785,5762],{"class":3391},[97,5787,5588],{"class":400},[97,5789,431],{"class":103},[97,5791,4999],{"class":3395},[97,5793,930],{"class":103},[97,5795,117],{"class":140},[97,5797,4421],{"class":144},[97,5799,117],{"class":140},[97,5801,437],{"class":103},[97,5803,5805],{"class":99,"line":5804},174,[97,5806,5807],{"class":103},"        ):\n",[97,5809,5811,5813,5815,5817,5819,5821,5823,5825],{"class":99,"line":5810},175,[97,5812,5690],{"class":400},[97,5814,3818],{"class":103},[97,5816,117],{"class":140},[97,5818,3879],{"class":144},[97,5820,117],{"class":140},[97,5822,4278],{"class":103},[97,5824,3392],{"class":3391},[97,5826,4452],{"class":3889},[97,5828,5830,5832,5834,5836,5838,5840,5843],{"class":99,"line":5829},176,[97,5831,5710],{"class":400},[97,5833,1158],{"class":3391},[97,5835,141],{"class":140},[97,5837,5171],{"class":947},[97,5839,5400],{"class":144},[97,5841,5842],{"class":947},"\\n\\n",[97,5844,148],{"class":140},[97,5846,5848],{"class":99,"line":5847},177,[97,5849,442],{"emptyLinePlaceholder":24},[97,5851,5853,5855],{"class":99,"line":5852},178,[97,5854,3688],{"class":3282},[97,5856,5857],{"class":400}," state_output\n",[97,5859,5861],{"class":99,"line":5860},179,[97,5862,442],{"emptyLinePlaceholder":24},[97,5864,5866,5868,5871,5873,5875,5877,5879,5881,5883,5885,5887,5889],{"class":99,"line":5865},180,[97,5867,3592],{"class":3356},[97,5869,5870],{"class":3675}," _process_content",[97,5872,930],{"class":103},[97,5874,3601],{"class":3600},[97,5876,283],{"class":103},[97,5878,5588],{"class":3788},[97,5880,120],{"class":103},[97,5882,3794],{"class":132},[97,5884,4245],{"class":103},[97,5886,3837],{"class":103},[97,5888,3388],{"class":132},[97,5890,3062],{"class":103},[97,5892,5894,5896,5899],{"class":99,"line":5893},181,[97,5895,3858],{"class":3242},[97,5897,5898],{"class":3248},"直接返回处理后的内容",[97,5900,3243],{"class":3242},[97,5902,5904,5906,5908,5910,5912,5914,5916,5918,5920,5922,5924,5926,5929,5931,5933,5935,5937,5939,5941,5943,5945,5947],{"class":99,"line":5903},182,[97,5905,3688],{"class":3282},[97,5907,5588],{"class":400},[97,5909,431],{"class":103},[97,5911,4999],{"class":3395},[97,5913,930],{"class":103},[97,5915,117],{"class":140},[97,5917,5680],{"class":144},[97,5919,117],{"class":140},[97,5921,283],{"class":103},[97,5923,5326],{"class":140},[97,5925,4245],{"class":103},[97,5927,5928],{"class":3391}," or",[97,5930,5588],{"class":400},[97,5932,431],{"class":103},[97,5934,4999],{"class":3395},[97,5936,930],{"class":103},[97,5938,117],{"class":140},[97,5940,4421],{"class":144},[97,5942,117],{"class":140},[97,5944,283],{"class":103},[97,5946,5326],{"class":140},[97,5948,437],{"class":103},[97,5950,5952],{"class":99,"line":5951},183,[97,5953,442],{"emptyLinePlaceholder":24},[97,5955,5957,5959,5962,5964,5966,5968,5971,5973,5976,5978,5980,5982,5985,5987,5989,5991],{"class":99,"line":5956},184,[97,5958,3592],{"class":3356},[97,5960,5961],{"class":3675}," _format_error",[97,5963,930],{"class":103},[97,5965,3601],{"class":3600},[97,5967,283],{"class":103},[97,5969,5970],{"class":3788}," status_code",[97,5972,120],{"class":103},[97,5974,5975],{"class":132}," int",[97,5977,283],{"class":103},[97,5979,4695],{"class":3788},[97,5981,120],{"class":103},[97,5983,5984],{"class":132}," bytes",[97,5986,4245],{"class":103},[97,5988,3837],{"class":103},[97,5990,3388],{"class":132},[97,5992,3062],{"class":103},[97,5994,5996],{"class":99,"line":5995},185,[97,5997,5998],{"class":3895},"        # 如果 error 已经是字符串，则无需 decode\n",[97,6000,6002,6004,6007,6009,6011,6013,6015],{"class":99,"line":6001},186,[97,6003,3927],{"class":3282},[97,6005,6006],{"class":912}," isinstance",[97,6008,930],{"class":103},[97,6010,3965],{"class":3395},[97,6012,283],{"class":103},[97,6014,3388],{"class":132},[97,6016,3378],{"class":103},[97,6018,6020,6023,6025],{"class":99,"line":6019},187,[97,6021,6022],{"class":400},"            error_str ",[97,6024,1158],{"class":3391},[97,6026,6027],{"class":400}," error\n",[97,6029,6031,6034],{"class":99,"line":6030},188,[97,6032,6033],{"class":3282},"        else",[97,6035,3062],{"class":103},[97,6037,6039,6041,6043,6045,6047,6050,6052,6055,6057,6059,6062,6064],{"class":99,"line":6038},189,[97,6040,6022],{"class":400},[97,6042,1158],{"class":3391},[97,6044,4695],{"class":400},[97,6046,431],{"class":103},[97,6048,6049],{"class":3395},"decode",[97,6051,930],{"class":103},[97,6053,6054],{"class":3404},"errors",[97,6056,1158],{"class":3391},[97,6058,117],{"class":140},[97,6060,6061],{"class":144},"ignore",[97,6063,117],{"class":140},[97,6065,437],{"class":103},[97,6067,6069],{"class":99,"line":6068},190,[97,6070,442],{"emptyLinePlaceholder":24},[97,6072,6074,6076],{"class":99,"line":6073},191,[97,6075,4092],{"class":3282},[97,6077,3062],{"class":103},[97,6079,6081,6084,6086,6088,6090,6092,6094,6097,6100,6102,6104,6106,6109,6111,6113,6116,6119,6122],{"class":99,"line":6080},192,[97,6082,6083],{"class":400},"            err_msg ",[97,6085,1158],{"class":3391},[97,6087,3952],{"class":400},[97,6089,431],{"class":103},[97,6091,4882],{"class":3395},[97,6093,930],{"class":103},[97,6095,6096],{"class":3395},"error_str",[97,6098,6099],{"class":103},").",[97,6101,4999],{"class":3395},[97,6103,930],{"class":103},[97,6105,117],{"class":140},[97,6107,6108],{"class":144},"message",[97,6110,117],{"class":140},[97,6112,283],{"class":103},[97,6114,6115],{"class":3395}," error_str",[97,6117,6118],{"class":103},")[:",[97,6120,6121],{"class":3889},"200",[97,6123,4149],{"class":103},[97,6125,6127,6129,6131,6133,6135],{"class":99,"line":6126},193,[97,6128,5537],{"class":3282},[97,6130,5540],{"class":132},[97,6132,4506],{"class":3282},[97,6134,4907],{"class":400},[97,6136,3062],{"class":103},[97,6138,6140,6142,6144,6146,6149,6151],{"class":99,"line":6139},194,[97,6141,6083],{"class":400},[97,6143,1158],{"class":3391},[97,6145,6115],{"class":400},[97,6147,6148],{"class":103},"[:",[97,6150,6121],{"class":3889},[97,6152,4149],{"class":103},[97,6154,6156,6158,6160,6162,6164],{"class":99,"line":6155},195,[97,6157,3688],{"class":3282},[97,6159,3952],{"class":400},[97,6161,431],{"class":103},[97,6163,3957],{"class":3395},[97,6165,3399],{"class":103},[97,6167,6169,6172,6174,6176,6178,6180,6182,6185,6187,6189,6191,6194,6196,6199,6201,6203,6205,6207,6209],{"class":99,"line":6168},196,[97,6170,6171],{"class":103},"            {",[97,6173,117],{"class":140},[97,6175,3965],{"class":144},[97,6177,117],{"class":140},[97,6179,120],{"class":103},[97,6181,4032],{"class":3356},[97,6183,6184],{"class":144},"\"HTTP ",[97,6186,4038],{"class":3889},[97,6188,4640],{"class":3395},[97,6190,3892],{"class":3889},[97,6192,6193],{"class":144},": ",[97,6195,4038],{"class":3889},[97,6197,6198],{"class":3395},"err_msg",[97,6200,3892],{"class":3889},[97,6202,117],{"class":144},[97,6204,3979],{"class":103},[97,6206,3982],{"class":3404},[97,6208,1158],{"class":3391},[97,6210,6211],{"class":109},"False\n",[97,6213,6215],{"class":99,"line":6214},197,[97,6216,3437],{"class":103},[97,6218,6220],{"class":99,"line":6219},198,[97,6221,442],{"emptyLinePlaceholder":24},[97,6223,6225,6227,6230,6232,6234,6236,6238,6240,6242,6244,6246,6248],{"class":99,"line":6224},199,[97,6226,3592],{"class":3356},[97,6228,6229],{"class":3675}," _format_exception",[97,6231,930],{"class":103},[97,6233,3601],{"class":3600},[97,6235,283],{"class":103},[97,6237,4907],{"class":3788},[97,6239,120],{"class":103},[97,6241,5540],{"class":132},[97,6243,4245],{"class":103},[97,6245,3837],{"class":103},[97,6247,3388],{"class":132},[97,6249,3062],{"class":103},[97,6251,6253,6255,6258],{"class":99,"line":6252},200,[97,6254,3858],{"class":3242},[97,6256,6257],{"class":3248},"异常格式化保持不变",[97,6259,3243],{"class":3242},[97,6261,6263,6266,6268,6271,6273,6275,6277],{"class":99,"line":6262},201,[97,6264,6265],{"class":400},"        err_type ",[97,6267,1158],{"class":3391},[97,6269,6270],{"class":132}," type",[97,6272,930],{"class":103},[97,6274,4942],{"class":3395},[97,6276,6099],{"class":103},[97,6278,6279],{"class":947},"__name__\n",[97,6281,6283,6285,6287,6289,6291,6293,6295,6297,6299,6301,6303,6305,6307,6310,6312,6314,6316,6318,6320,6322,6324,6326,6328,6330,6332,6334,6336],{"class":99,"line":6282},202,[97,6284,3688],{"class":3282},[97,6286,3952],{"class":400},[97,6288,431],{"class":103},[97,6290,3957],{"class":3395},[97,6292,3960],{"class":103},[97,6294,117],{"class":140},[97,6296,3965],{"class":144},[97,6298,117],{"class":140},[97,6300,120],{"class":103},[97,6302,4032],{"class":3356},[97,6304,117],{"class":144},[97,6306,4038],{"class":3889},[97,6308,6309],{"class":3395},"err_type",[97,6311,3892],{"class":3889},[97,6313,6193],{"class":144},[97,6315,4038],{"class":3889},[97,6317,3844],{"class":132},[97,6319,930],{"class":103},[97,6321,4942],{"class":3395},[97,6323,4245],{"class":103},[97,6325,3892],{"class":3889},[97,6327,117],{"class":144},[97,6329,3979],{"class":103},[97,6331,3982],{"class":3404},[97,6333,1158],{"class":3391},[97,6335,3987],{"class":109},[97,6337,437],{"class":103},[651,6339,6340],{},[654,6341,6342],{},"函数配置中，Api URL、Api Key、模型名字和上个教程一样，输入阿里云百炼对应的即可。",[587,6344],{"filename":6345},"13.png",[651,6347,6348],{},[654,6349,6350],{},"启用该函数",[587,6352],{"filename":6353},"07.png",[579,6355,6357],{"id":6356},"_4-设置新模型","4. 设置新模型",[651,6359,6360],{},[654,6361,6362,6363,3156,6365,6368,6369,6372],{},"前往 ",[94,6364,3155],{},[94,6366,6367],{},"模型","，将新的 ",[94,6370,6371],{},"deepseek-r1-fix"," 设为启用，还可手动修改 Logo 图片等。",[587,6374],{"filename":6375},"14.png",[651,6377,6378],{},[654,6379,6380],{},"然后就可以在对话中看到思考过程了，出现「正在思考」的时候，可以点击旁边的箭头展开思考过程。",[587,6382],{"filename":6383},"15.png",[579,6385,6387],{"id":6386},"_5-联网搜索-error-searching-的问题","5. 联网搜索 Error searching 的问题",[13,6389,6390,6391,6394],{},"目前使用下来发现一个问题，配置了 Pipeline 之后，虽然能够正常显示深度思考过程了，但是使用「联网搜索」会出现 ",[94,6392,6393],{},"Error searching"," 的问题。",[13,6396,6397],{},[6398,6399,6400,6401,3156,6403,6406,6407,6410],"del",{},"目前发现一个临时解决方案，就是去 ",[94,6402,3155],{},[94,6404,6405],{},"界面"," 中关闭 ",[94,6408,6409],{},"网页搜索关键词生成","。初步判断是经过了 Pipeline 的时候，会导致联网搜索的关键词生成出现问题，从而传到搜索引擎的是空的内容，导致搜索失败。临时关闭搜索关键词生成，导致的问题是用户输入内容会直接作为搜索引擎的搜索关键词，不过这个倒能接受。",[13,6412,6413,6414,3156,6416,3156,6418,6421,6422,6425,6426,6429,6430,6433],{},"2025-02-18 更新：发现一个完美的解决方案，在 ",[94,6415,3155],{},[94,6417,6405],{},[94,6419,6420],{},"外部模型"," 中选择一个其他模型（非配置了 Pipeline 的这个模型，例如 ",[94,6423,6424],{},"qwen-max-latest"," 或 ",[94,6427,6428],{},"deepseek-v3","）即可，尽量不要用 ",[94,6431,6432],{},"deepseek-r1","，会比较慢。",[587,6435],{"filename":6436},"16.png",[6438,6439],"hr",{},[6441,6442],"reward-code",{},[549,6444,6445],{},"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":20,"searchDepth":21,"depth":21,"links":6447},[6448,6449,6450,6451,6452],{"id":2986,"depth":21,"text":2987},{"id":3146,"depth":21,"text":3147},{"id":3183,"depth":21,"text":3184},{"id":6356,"depth":21,"text":6357},{"id":6386,"depth":21,"text":6387},"2025-02-12",{},"\u002Fposts\u002F2025\u002Fdisplay-deepseek-r1-thinking",{"text":6457,"minutes":6458,"time":6459,"words":6460},"7 min read",6.775,406500,1355,{"title":2957,"description":2962},{"loc":6455,"lastmod":6463},"2025-02-18","posts\u002F2025\u002F20250212.display-deepseek-r1-thinking",[568,6466,6467,6468],"人工智能","大语言模型","DeepSeek","AqfdzW2_tEalBScyb92RvCd17nOnwUQjxUqN_MnKsVo",{"id":6471,"title":6472,"body":6473,"class":554,"cover":1492,"coverSize":554,"date":6815,"description":6477,"draft":556,"extension":23,"hideComments":556,"location":554,"meta":6816,"navigation":24,"path":6817,"readingTime":6818,"seo":6823,"sitemap":6824,"stem":6825,"tags":6826,"time":554,"weather":554,"__hash__":6827},"posts\u002Fposts\u002F2025\u002F20250211.deploy-deepseek-r1-for-free.md","零成本部署！阿里云百炼 + Open WebUI 打造专属 DeepSeek-R1",{"type":7,"value":6474,"toc":6808},[6475,6478,6480,6483,6485,6488,6490,6493,6496,6499,6519,6523,6663,6667,6681,6683,6701,6704,6722,6725,6728,6731,6734,6774,6776,6781,6783,6786,6795,6798,6801,6803,6805],[13,6476,6477],{},"大家好，众所周知，国产之光 DeepSeek 现在的热度远比当时 ChatGPT 出来的时候要火多了。泼天的流量再加上各种恶意攻击，导致 DeepSeek 一直存在性能问题。",[587,6479],{"filename":607},[13,6481,6482],{},"开启了深度思考就经常出现那句经典名言：服务器繁忙，请稍后再试。",[587,6484],{"filename":3202},[13,6486,6487],{},"以至于社区已经出现了各种搞笑段子：",[587,6489],{"filename":597},[13,6491,6492],{},"好了，废话不多说，在这样的情况下各大云厂商都纷纷推出了自己的模型部署服务，支持 DeepSeek，并且会赠送很多免费额度。",[13,6494,6495],{},"今天来教大家如何用阿里云百炼平台和开源工具 Open WebUI，零成本部署专属的 DeepSeek R1 模型！全程无需复杂代码，跟着我做就能拥有企业级 AI 服务！我只花了不到半小时就完成了整个服务的部署，并且本视频的脚本有一部分就是由我自己部署的 DeepSeek-R1 来写的。",[579,6497,6498],{"id":6498},"前期准备",[2913,6500,6501,6504,6516],{},[654,6502,6503],{},"注册阿里云账号并实名认证（已有账号可跳过）",[654,6505,6506,6507,6512,6513],{},"进入 ",[68,6508,6511],{"href":6509,"rel":6510},"https:\u002F\u002Fwww.aliyun.com\u002Fproduct\u002Fbailian",[72],"阿里云百炼"," 的管理控制台，开通大模型服务，获取 ",[94,6514,6515],{},"API KEY",[654,6517,6518],{},"准备一台有 Docker 环境的服务器，用于部署 WebUI（本机部署亦可）",[579,6520,6522],{"id":6521},"open-webui-部署","Open WebUI 部署",[2913,6524,6525,6601,6656],{},[654,6526,6527,6528,6531],{},"通过 Docker Compose 直接部署 ",[68,6529,2970],{"href":2968,"rel":6530},[72],[88,6532,6534],{"className":3050,"code":6533,"language":3052,"meta":20,"style":20},"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",[94,6535,6536,6549,6555,6562,6571,6577,6588,6594],{"__ignoreMap":20},[97,6537,6538,6540,6542,6544,6547],{"class":99,"line":100},[97,6539,183],{"class":1012},[97,6541,120],{"class":103},[97,6543,3113],{"class":140},[97,6545,6546],{"class":144},"3",[97,6548,3119],{"class":140},[97,6550,6551,6553],{"class":99,"line":21},[97,6552,3059],{"class":1012},[97,6554,3062],{"class":103},[97,6556,6557,6560],{"class":99,"line":126},[97,6558,6559],{"class":1012},"  openwebui",[97,6561,3062],{"class":103},[97,6563,6564,6566,6568],{"class":99,"line":151},[97,6565,3084],{"class":1012},[97,6567,120],{"class":103},[97,6569,6570],{"class":144}," ghcr.io\u002Fopen-webui\u002Fopen-webui:0.5.12（版本号可更新为当前最新 tag 版本号，或使用 main 拉取最新）\n",[97,6572,6573,6575],{"class":99,"line":157},[97,6574,3103],{"class":1012},[97,6576,3062],{"class":103},[97,6578,6579,6581,6583,6586],{"class":99,"line":240},[97,6580,3110],{"class":103},[97,6582,3113],{"class":140},[97,6584,6585],{"class":144},"3000:8080",[97,6587,3119],{"class":140},[97,6589,6590,6592],{"class":99,"line":261},[97,6591,3124],{"class":1012},[97,6593,3062],{"class":103},[97,6595,6596,6598],{"class":99,"line":296},[97,6597,3110],{"class":103},[97,6599,6600],{"class":144}," .\u002Fdata:\u002Fapp\u002Fbackend\u002Fdata\n",[654,6602,6603,6604,6607,6608],{},"启动好实例后，通过 ",[94,6605,6606],{},"http:\u002F\u002Flocalhost:3000\u002F"," 访问 Open WebUI，如果是在云服务器上部署，还有一些域名解析、nginx 代理等操作，这里不再赘述。如果手动设置的 nginx，需要加上 websocket 相关的请求头，具体不赘述，可搜索一下。",[88,6609,6613],{"className":6610,"code":6611,"language":6612,"meta":20,"style":20},"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",[94,6614,6615,6626,6642],{"__ignoreMap":20},[97,6616,6617,6620,6623],{"class":99,"line":100},[97,6618,6619],{"class":3391},"proxy_http_version ",[97,6621,6622],{"class":3889},"1.1",[97,6624,6625],{"class":103},";\n",[97,6627,6628,6631,6634,6637,6640],{"class":99,"line":21},[97,6629,6630],{"class":3391},"proxy_set_header ",[97,6632,6633],{"class":400},"Upgrade ",[97,6635,6636],{"class":103},"$",[97,6638,6639],{"class":400},"http_upgrade",[97,6641,6625],{"class":103},[97,6643,6644,6646,6649,6651,6654],{"class":99,"line":126},[97,6645,6630],{"class":3391},[97,6647,6648],{"class":400},"Connection ",[97,6650,6636],{"class":103},[97,6652,6653],{"class":400},"connection_upgrade",[97,6655,6625],{"class":103},[654,6657,6658,6659,6662],{},"登录进去之后设置好管理员帐号，如果出现白屏需要等待一段时间，大概率是默认的 OpenAI 的接口卡住了，等后面把 API 改成阿里云百炼的，就不会卡住了。有条件的可以给容器设置好 ",[94,6660,6661],{},"HTTP_PROXY"," 的代理，后面联网搜索需要用到。",[579,6664,6666],{"id":6665},"deepseek-r1-接入","DeepSeek-R1 接入",[2913,6668,6669],{},[654,6670,6671,6672,3156,6675,3156,6678],{},"进入 Open WebUI 的 ",[94,6673,6674],{},"管理员面板",[94,6676,6677],{},"外部链接",[94,6679,6680],{},"设置",[587,6682],{"filename":3210},[2913,6684,6685],{"start":21},[654,6686,6687,6688,6691,6692,6694,6695,6697,6698,6700],{},"将 OpenAI 的 API 地址改成阿里云百炼的 API 地址：",[94,6689,6690],{},"https:\u002F\u002Fdashscope.aliyuncs.com\u002Fcompatible-mode\u002Fv1","，秘钥输入百炼获取的 ",[94,6693,6515],{},"，模型 ID 输入 ",[94,6696,6432],{},"，记得一定要点输入框后面那个 ",[94,6699,3163],{}," 加号，不然添加不进去。最后点击“保存”按钮。",[587,6702],{"filename":6703},"12.png",[2913,6705,6706,6709],{"start":126},[654,6707,6708],{},"打开新会话，测试模型响应。",[654,6710,6711,6712,6714,6715,6717,6718,6721],{},"如果需要使用阿里云百炼支持的其他模型，可在上述模型 ID 中手动添加需要的模型 ID，或者也可以再添加一个外部连接，模型 ID 留空，就可以添加除了 ",[94,6713,6432],{}," 和 ",[94,6716,6428],{}," 之外的其他所有模型了。之所以需要这么操作是因为目前如果直接留空的话，默认拉不出 ",[94,6719,6720],{},"deepseek"," 相关的模型，手动设置 ID 才能使用，估计日后等阿里云百炼彻底支持 DeepSeek 了就不需要那么操作了。",[587,6723],{"filename":6724},"09.png",[587,6726],{"filename":6727},"10.png",[587,6729],{"filename":6730},"11.png",[579,6732,6733],{"id":6733},"设置联网搜索",[2913,6735,6736,6744,6753,6760,6767],{},[654,6737,6738,6739],{},"登录 ",[68,6740,6743],{"href":6741,"rel":6742},"https:\u002F\u002Fdevelopers.google.com\u002Fcustom-search",[72],"Google 开发者账号",[654,6745,6746,6747,6752],{},"去 ",[68,6748,6751],{"href":6749,"rel":6750},"https:\u002F\u002Fprogrammablesearchengine.google.com\u002Fcontrolpanel\u002Fall",[72],"可编程搜索引擎"," 添加一个自定义搜索引擎",[654,6754,6755],{},[68,6756,6759],{"href":6757,"rel":6758},"https:\u002F\u002Fdevelopers.google.com\u002Fcustom-search\u002Fv1\u002Fintroduction",[72],"获取密钥",[654,6761,6762,6763],{},"点击引擎名称，",[68,6764,6766],{"href":6749,"rel":6765},[72],"获取搜索引擎 ID",[654,6768,6769,6770,6773],{},"前往 Open WebUI 设置页面，联网搜索引擎中下拉选择 ",[94,6771,6772],{},"google_pse","，输入密钥和搜索引擎ID，点击保存。搜索结果数量可设置多一些（会导致 token 消耗多）",[587,6775],{"filename":646},[2913,6777,6778],{"start":240},[654,6779,6780],{},"打开新会话，发现已经有「联网搜索」选项",[587,6782],{"filename":6353},[579,6784,6785],{"id":6785},"结语",[13,6787,6788,6789,6794],{},"好了，现在你已经拥有属于自己的 DeepSeek-R1 模型了，并且可以免费使用 100 万 Token，自开通起半年有效期。可在 ",[68,6790,6793],{"href":6791,"rel":6792},"https:\u002F\u002Fbailian.console.aliyun.com\u002Fdetail\u002Fdeepseek-r1#\u002Fmodel-market\u002Fdetail\u002Fdeepseek-r1",[72],"阿里云百炼 DeepSeek-R1"," 页面实时查看自己剩余的免费额度数量以及过期时间。有一说一，这 Token 消耗还挺快的，一下午已经消耗了 5 万多 Token 了。",[587,6796],{"filename":6797},"08.png",[13,6799,6800],{},"同样的，你还可以白嫖腾讯云，同样也有 100万的免费 Token。",[6438,6802],{},[6441,6804],{},[549,6806,6807],{},"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":20,"searchDepth":21,"depth":21,"links":6809},[6810,6811,6812,6813,6814],{"id":6498,"depth":21,"text":6498},{"id":6521,"depth":21,"text":6522},{"id":6665,"depth":21,"text":6666},{"id":6733,"depth":21,"text":6733},{"id":6785,"depth":21,"text":6785},"2025-02-11",{},"\u002Fposts\u002F2025\u002Fdeploy-deepseek-r1-for-free",{"text":6819,"minutes":6820,"time":6821,"words":6822},"5 min read",4.94,296400,988,{"title":6472,"description":6477},{"loc":6817,"lastmod":6463},"posts\u002F2025\u002F20250211.deploy-deepseek-r1-for-free",[568,6466,6467,6468],"leo4ZEdDEANgF-NvFKhxq93mMJOpiEnKbDqFfmqbgPw",{"id":6829,"title":6830,"body":6831,"class":554,"cover":1492,"coverSize":554,"date":6949,"description":6950,"draft":556,"extension":23,"hideComments":556,"location":554,"meta":6951,"navigation":24,"path":6952,"readingTime":6953,"seo":6957,"sitemap":6958,"stem":6959,"tags":6960,"time":554,"weather":554,"__hash__":6961},"posts\u002Fposts\u002F2025\u002F20250107.change-font-of-vscode-sidebar.md","如何修改 VSCode 侧边栏字体",{"type":7,"value":6832,"toc":6947},[6833,6846,6861,6863,6884,6886,6889,6939,6942,6944],[13,6834,6835,6836,6839,6840,6845],{},"如果你折腾过 VSCode 自定义字体的话，你应该知道目前 VSCode 只能自定义编辑器以及终端的字体样式，而侧边栏的字体样式是无法自定义的。不过你可以通过 ",[94,6837,6838],{},"window.zoomLevel"," 来曲线救国实现侧边栏字号的调整，但字体依旧无法设置，关于这个问题的讨论，可以查看这个存在了近十年但仍未解决的 ",[68,6841,6844],{"href":6842,"rel":6843},"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvscode\u002Fissues\u002F519",[72],"issue#519","。上下文实在太长，有几百个评论，我也没仔细研究其原因。有兴趣的可以研究一下来龙去脉。",[13,6847,6848,6849,6854,6855,6860],{},"经过一顿探寻，发现可以通过 ",[68,6850,6853],{"href":6851,"rel":6852},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=drcika.apc-extension",[72],"Apc Customize UI++"," 这个插件来实现侧边栏字体的调整，这个插件可以通过简单的配置来实现。另外还可以通过 ",[68,6856,6859],{"href":6857,"rel":6858},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=be5invis.vscode-custom-css",[72],"Custom CSS and JS Loader"," 这个插件来实现，这个可以自定义 CSS 样式，可定制化程度更高，不过没有前者方便。我这里打算使用前者。",[587,6862],{"filename":838},[13,6864,6865,6866,6868,6869,6872,6873,6878,6879,1806],{},"遗憾的是，经过尝试，这个 ",[94,6867,6853],{}," 这个插件目前在 ",[94,6870,6871],{},"1.93"," 以上的版本中已经无法使用。在相关 ",[68,6874,6877],{"href":6875,"rel":6876},"https:\u002F\u002Fgithub.com\u002Fdrcika\u002Fapc-extension\u002Fissues\u002F230#issuecomment-2421377174",[72],"issue#230"," 中发现一个国人开发的可替代的插件：",[68,6880,6883],{"href":6881,"rel":6882},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=subframe7536.custom-ui-style",[72],"Custom UI Style",[587,6885],{"filename":607},[13,6887,6888],{},"对于我这种只需要修改字体的，配制就比较简单了，侵入性也比较小。配置如下：",[88,6890,6892],{"className":90,"code":6891,"language":92,"meta":20,"style":20},"{\n  \"custom-ui-style.font.monospace\": \"Jetbrains Mono\",\n  \"custom-ui-style.font.sansSerif\": \"Jetbrains Mono\"\n}\n",[94,6893,6894,6898,6918,6935],{"__ignoreMap":20},[97,6895,6896],{"class":99,"line":100},[97,6897,104],{"class":103},[97,6899,6900,6902,6905,6907,6909,6911,6914,6916],{"class":99,"line":21},[97,6901,110],{"class":109},[97,6903,6904],{"class":113},"custom-ui-style.font.monospace",[97,6906,117],{"class":109},[97,6908,120],{"class":103},[97,6910,141],{"class":140},[97,6912,6913],{"class":144},"Jetbrains Mono",[97,6915,117],{"class":140},[97,6917,197],{"class":103},[97,6919,6920,6922,6925,6927,6929,6931,6933],{"class":99,"line":126},[97,6921,110],{"class":109},[97,6923,6924],{"class":113},"custom-ui-style.font.sansSerif",[97,6926,117],{"class":109},[97,6928,120],{"class":103},[97,6930,141],{"class":140},[97,6932,6913],{"class":144},[97,6934,148],{"class":140},[97,6936,6937],{"class":99,"line":151},[97,6938,160],{"class":103},[13,6940,6941],{},"最后看下整体效果吧：",[587,6943],{"filename":3202},[549,6945,6946],{},"html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--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 .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}",{"title":20,"searchDepth":21,"depth":21,"links":6948},[],"2025-01-07","如果你折腾过 VSCode 自定义字体的话，你应该知道目前 VSCode 只能自定义编辑器以及终端的字体样式，而侧边栏的字体样式是无法自定义的。不过你可以通过 window.zoomLevel 来曲线救国实现侧边栏字号的调整，但字体依旧无法设置，关于这个问题的讨论，可以查看这个存在了近十年但仍未解决的 issue#519。上下文实在太长，有几百个评论，我也没仔细研究其原因。有兴趣的可以研究一下来龙去脉。",{},"\u002Fposts\u002F2025\u002Fchange-font-of-vscode-sidebar",{"text":1497,"minutes":6954,"time":6955,"words":6956},1.755,105300,351,{"title":6830,"description":6950},{"loc":6952},"posts\u002F2025\u002F20250107.change-font-of-vscode-sidebar",[568],"6_cHQtBHbF5RA_jswlXNVQQD0TOfXQSPE0WUEkfTWIc",{"id":6963,"title":6964,"body":6965,"class":554,"cover":813,"coverSize":7277,"date":7280,"description":6969,"draft":556,"extension":23,"hideComments":556,"location":554,"meta":7281,"navigation":24,"path":7282,"readingTime":7283,"seo":7287,"sitemap":7288,"stem":7289,"tags":7290,"time":554,"weather":554,"__hash__":7291},"posts\u002Fposts\u002F2025\u002F20250102.end-of-2024.md","2024 年度总结",{"type":7,"value":6966,"toc":7262},[6967,6970,6974,6977,6988,6991,6995,6998,7000,7003,7006,7009,7013,7016,7018,7020,7024,7027,7029,7031,7035,7038,7041,7045,7048,7051,7054,7057,7060,7063,7066,7070,7073,7076,7079,7082,7086,7089,7093,7096,7101,7104,7107,7110,7115,7118,7123,7127,7131,7135,7138,7141,7144,7148,7152,7156,7161,7165,7169,7172,7176,7180,7184,7188,7192,7196,7200,7204,7207,7211,7215,7218,7222,7225,7228,7232,7246,7250,7253,7256,7259],[13,6968,6969],{},"又是一年过去，但 2024 年我可以比较自豪地说，我达成了很多了不起的成就。",[1811,6971,6973],{"id":6972},"新成就连续一年每天喝咖啡","✅ 新成就：连续一年每天喝咖啡",[13,6975,6976],{},"年初定了一个小目标，争取每天不间断喝咖啡，我可以自豪的宣布，达成了！",[651,6978,6979,6982,6985],{},[654,6980,6981],{},"累计打卡 366 天",[654,6983,6984],{},"总杯数 418 杯",[654,6986,6987],{},"平均每天 1.14 杯",[587,6989],{"filename":6990},"25.jpg",[1811,6992,6994],{"id":6993},"新成就入手咖啡机并学会了拉花","✅ 新成就：入手咖啡机，并学会了拉花",[13,6996,6997],{},"在国庆节前，我入手了一台半自动咖啡机，铂富 BES880，并从每天中午在公司喝一杯瑞幸，改成了每天早上自己做一杯咖啡。",[587,6999],{"filename":597},[13,7001,7002],{},"进入冬天改喝热拿铁之后，我尝试了拉花的学习，经过一个月左右的陆续练习，我终于悟了，可以拉出一个比较不错的大白心了！",[587,7004],{"filename":7005},"02.jpg",[13,7007,7008],{},"明年争取学会拉郁金香。",[1811,7010,7012],{"id":7011},"新成就第一次杀青","✅ 新成就：第一次“杀青”",[13,7014,7015],{},"今年参与了公司 1024 程序员节视频的拍摄，第一次体验当“专业演员”，从化妆、花絮、道具、灯光、摄影、导演等等，一群人服务我一个人感觉，拍摄完成的时候，有个工作人员对我说，Bean 老师，恭喜杀青了，第一次有人跟我说这么专业的词语。虽然只有短短一个多小时，但真是一次难忘的体验。",[587,7017],{"filename":590},[587,7019],{"filename":624},[1811,7021,7023],{"id":7022},"新成就单次游泳-1000-米","✅ 新成就：单次游泳 1000 米",[13,7025,7026],{},"在曼谷酒店的游泳池里，戴着 Apple Watch 游了个 1000 米，这是我第一次单次游这么长的距离（中途有休息）。",[587,7028],{"filename":635},[587,7030],{"filename":646},[1811,7032,7034],{"id":7033},"新成就第一次在-w3c-年度大会分享","✅ 新成就：第一次在 W3C 年度大会分享",[13,7036,7037],{},"今年的 W3C·Web 进化论是由 B 站承办的，公司有几个分享名额，我有幸分享了团队在数字人领域的一些探索和实践。",[587,7039],{"filename":7040},"07.jpg",[1811,7042,7044],{"id":7043},"新成就第一次在房车里过夜","✅ 新成就：第一次在房车里过夜",[13,7046,7047],{},"年底的自驾游回程途中，我们在青岛住了一个民宿，里面有个房车，第一次体验了在房车里过夜，感觉非常棒。",[13,7049,7050],{},"房车里设施齐全，还带了灶台，不过我们自己也带了一个炉子，煮了一顿泡面火锅，还煮了茶，非常有意思。这个炉子和茶壶买来第一次用，特别喜欢，而且炉子是折叠的，特方便。以后的露营或者自驾游都会带上，非常实用。希望能用很多年。",[587,7052],{"filename":7053},"30.jpg",[587,7055],{"filename":7056},"26.jpg",[587,7058],{"filename":7059},"27.jpg",[587,7061],{"filename":7062},"28.jpg",[587,7064],{"filename":7065},"29.jpg",[1811,7067,7069],{"id":7068},"️-技术折腾homelab-升级降本增效","🛠️ 技术折腾：HomeLab 升级，降本增效",[13,7071,7072],{},"今年升级了自己的 HomeLab，从电视柜迁移到了正规的机柜中。并且将阿里云上所有的服务器都迁移到了我的 HomeLab，仅保留了一个最低配的 ECS 作为网络代理。",[587,7074],{"filename":7075},"24.jpg",[13,7077,7078],{},"HomeLab 的自动化的工作流也进行了非常多的优化，可以参见上一篇文章中的一些介绍，经历了很长时间的打磨，现在已经比较稳定和完善。",[13,7080,7081],{},"另外，今年将自己 10 年的移动号码携号转网到了电信，同时把我老婆、丈人、丈母娘的手机号全部一起携号转网到我的电信账号下作为副卡，5G 套餐总流量是 200G\u002F月，宽带也升级到了 2000M FTTR，总成本其实相比之前每个号单独付月租还降低了一些。",[1811,7083,7085],{"id":7084},"终于升级了-etc-设备","🚗 终于升级了 ETC 设备",[13,7087,7088],{},"关于换 ETC 这个事情已经拖延了好几年了，之前 ETC 办的非常早，是那种插卡的设备。在各大银行发力之前就已经办了，那时候是不绑定银行卡的，需要去线下充值，很不方便。后来买了个蓝牙充值的设备自己充值，但仍然很麻烦。后来想更换，但是需要注销旧设备才能买新设备，而我这款的苏通卡只能去高速口的服务点线下注销，很不方便。今年终于找到个机会去注销了，然后线上买了个「ETC助手」的 3 代设备，很小巧，很方便。",[1811,7090,7092],{"id":7091},"️-年度旅行汇总","✈️ 年度旅行汇总",[13,7094,7095],{},"今年的旅行也比较丰富：",[651,7097,7098],{},[654,7099,7100],{},"4月，去了云南，玩了昆明、大理、丽江",[587,7102],{"filename":7103},"08.jpg",[587,7105],{"filename":7106},"09.jpg",[587,7108],{"filename":7109},"10.jpg",[651,7111,7112],{},[654,7113,7114],{},"5月，自驾去了宜兴",[587,7116],{"filename":7117},"11.jpg",[651,7119,7120],{},[654,7121,7122],{},"8月，去了泰国，玩了曼谷和华欣",[587,7124],{"filename":7125,"description":7126},"12.jpg","郑王庙",[587,7128],{"filename":7129,"description":7130},"13.jpg","曼谷恐怖的摩托大军",[587,7132],{"filename":7133,"description":7134},"14.jpg","曼谷是一个繁华与落后的混合体，繁华的几公里外是这样的街道",[587,7136],{"filename":7137},"15.jpg",[587,7139],{"filename":7140},"16.jpg",[587,7142],{"filename":7143},"17.jpg",[587,7145],{"filename":7146,"description":7147},"18.jpg","海上的云像《楚门的世界》里那样美得不真实",[587,7149],{"filename":7150,"description":7151},"19.jpg","华欣，早上 6 点去酒店外的海滩看日出",[587,7153],{"filename":7154,"description":7155},"20.jpg","5 年过去了，这个麦当劳一点没变",[651,7157,7158],{},[654,7159,7160],{},"12月，日照-青岛-威海自驾游",[587,7162],{"filename":7163,"description":7164},"31.jpg","日照的一顿海鲜，包括疙瘩汤和一盘水饺才 168，特实惠",[587,7166],{"filename":7167,"description":7168},"32.jpg","日照海边的咖啡店「咖啡与海」，环境很棒",[587,7170],{"filename":7171,"description":7168},"33.jpg",[587,7173],{"filename":7174,"description":7175},"34.jpg","青岛民宿附近的海边，有很多礁石",[587,7177],{"filename":7178,"description":7179},"35.jpg","青岛的海鸥",[587,7181],{"filename":7182,"description":7183},"36.jpg","威海的布鲁维斯号货轮",[587,7185],{"filename":7186,"description":7187},"37.jpg","威海灯塔",[587,7189],{"filename":7190,"description":7191},"38.jpg","威海灯塔下的一尺花园咖啡店",[587,7193],{"filename":7194,"description":7195},"39.jpg","威海猫头山观景台下的风景",[587,7197],{"filename":7198,"description":7199},"40.jpg","威海国际海水浴场",[587,7201],{"filename":7202,"description":7203},"41.jpg","威海国际海水浴场-泡沫海浪",[587,7205],{"filename":7053,"description":7206},"回程途中在青岛别墅区住了一晚房车",[587,7208],{"filename":7209,"description":7210},"42.jpg","青岛别墅区外的墙上",[1811,7212,7214],{"id":7213},"️-结婚十周年","👩🏻‍❤️‍👨🏻 结婚十周年",[13,7216,7217],{},"一眨眼结婚十周年了，在这个浮躁的社会里，能够相亲相爱还是一件挺不容易的事情。这十年里，互相经历了很多，也一起成长了很多。身边有很多过得不那么开心的例子，对比之下，简简单单的幸福尤为珍惜。珍惜当下，享受生活。",[587,7219],{"filename":7220,"description":7221},"21.jpg","纪念日那天去的咖啡店，这张照片很喜欢，有点王家卫风",[587,7223],{"filename":7224},"22.jpg",[587,7226],{"filename":7227},"23.jpg",[1811,7229,7231],{"id":7230},"️-年度运动健康汇总","❤️ 年度运动健康汇总",[651,7233,7234,7237,7240,7243],{},[654,7235,7236],{},"运动步数：平均 10680 步\u002F天，相比去年提升 34.8%",[654,7238,7239],{},"运动距离：平均 7.4 公里\u002F天，相比去年提升 39.6%",[654,7241,7242],{},"睡眠时长：平均 6 小时 22 分钟\u002F天，相比去年提升 4.4%",[654,7244,7245],{},"能量消耗：平均 503 千卡\u002F天，相比去年提升 10.8%",[1811,7247,7249],{"id":7248},"挑战去-100-家不同的咖啡店22100","⏳ 挑战去 100 家不同的咖啡店（22\u002F100）",[13,7251,7252],{},"不得不说，当初我立这个 flag 的时候，没想到进展会这么慢，以为可以在一年内达成，但其实去不同的咖啡店（不包括连锁咖啡），并且还得是能够足够发朋友圈的，还是需要一点时间去寻找。但人生就是一个不断积累和不断挑战的过程，这个成就作为一个支线挑战，我会持续记录并继续完成。",[1811,7254,7255],{"id":7255},"其他",[13,7257,7258],{},"今年对生活的一个比较大的变化是，决定把生活当成一场长期的游戏，按照游戏中的任务、成就的方式来记录生活。这种记录会比较有意思，并且可以更好的体验生活。",[13,7260,7261],{},"另外，还有一个想法，就是每年入坑一个新的产品或领域，例如今年入坑了咖啡机，明年有点想入坑「3D 打印机」，已经研究了一段时间了，但还没有决定，看看明年是不是可以找到合适的契机入坑。",{"title":20,"searchDepth":21,"depth":21,"links":7263},[7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276],{"id":6972,"depth":126,"text":6973},{"id":6993,"depth":126,"text":6994},{"id":7011,"depth":126,"text":7012},{"id":7022,"depth":126,"text":7023},{"id":7033,"depth":126,"text":7034},{"id":7043,"depth":126,"text":7044},{"id":7068,"depth":126,"text":7069},{"id":7084,"depth":126,"text":7085},{"id":7091,"depth":126,"text":7092},{"id":7213,"depth":126,"text":7214},{"id":7230,"depth":126,"text":7231},{"id":7248,"depth":126,"text":7249},{"id":7255,"depth":126,"text":7255},{"width":7278,"height":7279},1920,1440,"2025-01-02",{},"\u002Fposts\u002F2025\u002Fend-of-2024",{"text":1770,"minutes":7284,"time":7285,"words":7286},7.625,457500,1525,{"title":6964,"description":6969},{"loc":7282},"posts\u002F2025\u002F20250102.end-of-2024",[826],"MwvlAO9WbiKXPhF-6Mb0FLYooArsJmHqr4YlIZagNYU",1777580262977]