LiteLLM:大模型API统一网关与智能路由中枢
1. 为什么是 LiteLLM当大模型调用变成“API 路由器”这件事LiteLLM 这个名字第一次出现在我视野里是在一个凌晨三点的告警群里。某高校实验室部署的推理服务突然响应延迟飙升监控显示 OpenAI 接口超时率突破 40%但本地 vLLM 实例负载却只有 12%。运维同学甩来一张截图后端日志里密密麻麻全是openai.APIConnectionError而前端用户反馈“刚输完提示词就卡住”。我们临时切流到 Azure OpenAI结果发现请求体结构不兼容——messages字段要改成prompttemperature得映射成temperature_value连max_tokens的默认值都对不上。那一晚没人去改业务代码所有人围在白板前画接口转换关系图最后用 Python 写了 37 行胶水代码硬生生把 OpenAI 的 JSON Schema 翻译成 Anthropic 的格式。这就是 LiteLLM 出现的真实土壤它根本不是什么“轻量级大模型”而是大模型 API 的协议翻译层 流量调度中枢。你把它理解成 HTTP 协议栈里的 TLS 终止代理或者数据库中间件里的分库分表路由就对了。它的核心价值从来不在“跑模型”而在“让模型调用这件事不再需要人肉适配”。关键词里没写出来但所有用过它的人都在反复验证一件事当你同时对接超过 3 家 LLM 服务商比如 OpenAI Groq Ollama 自建集群LiteLLM 就从可选项变成必选项。它解决的不是“能不能调用”而是“要不要为每家服务商单独维护一套 SDK、重写一遍重试逻辑、手动处理各家不同的 rate limit 错误码”。我见过最典型的误用场景是某创业团队把 LiteLLM 当成模型压缩工具——他们以为加个--lite参数就能让 Llama-3-70B 跑进 8G 显存。结果部署失败后翻文档才发现LiteLLM 根本不碰模型权重它连 GPU 都不申请。它的“Lite”指的是代码体积主模块仅 1200 行 Python和心智负担统一completion()接口不是计算资源消耗。这种认知偏差背后藏着一个更本质的问题当前大模型工程化最大的瓶颈早就不在模型本身而在异构 API 生态的碎片化治理。OpenAI 的/v1/chat/completions、Anthropic 的/v1/messages、Google 的/v1beta/models/{model}:generateContent三套完全不同的请求/响应结构就像 TCP/IP 时代还在用 NetBEUI 和 IPX/SPX 通信。LiteLLM 做的就是强制所有流量走 HTTP/3再在应用层做语义对齐。提示LiteLLM 不是模型推理框架不提供量化、编译、显存优化等功能。如果你需要降低模型运行成本请关注 vLLM、TGI 或 llama.cpp如果你需要统一管理 5 家以上 LLM 服务商的调用链路LiteLLM 才是你该打开的第一个 GitHub 仓库。2. 协议翻译引擎LiteLLM 如何把 27 种 API 变成同一套函数签名LiteLLM 的核心魔法藏在litellm/main.py的completion()函数里。这个函数接收的参数看似简单modelgpt-3.5-turbo、messages[{role:user,content:你好}]、temperature0.7但背后是一场精密的协议翻译战争。截至 2024 年 6 月它已支持 27 个提供商Provider包括 OpenAI、Azure、Anthropic、Cohere、Google Vertex AI、Groq、Fireworks、Ollama、LM Studio、DeepInfra 等。这些服务商的 API 差异之大远超普通开发者想象——不是字段名不同而是整个交互范式分裂。以最基础的“流式响应”为例OpenAI 返回data: {choices:[{delta:{content:世}}]}Anthropic 返回event: content_block_delta\ndata: {type:content_block_delta,delta:{text:世}}Google Vertex 则用{candidates:[{content:{parts:[{text:世}]}}]}。LiteLLM 的解决方案是建立三层抽象输入标准化层 → 供应商适配层 → 输出归一化层。当你调用litellm.completion(modelanthropic/claude-3-haiku, messages...)时实际发生的是输入标准化将你的messages列表按 OpenAI 格式解析提取 role/content 对同时识别 system promptAnthropic 要求 system 消息必须独立传参供应商适配根据model参数前缀anthropic/触发 AnthropicAdapter把messages拆解为systemmessages两个字段并将temperature映射为temperatureAnthropic 用法相同但max_tokens会转为max_tokens此处巧合一致但 Google Vertex 需转为maxOutputTokens输出归一化收到 Anthropic 原生响应后遍历content_block_delta事件提取text字段重新组装成 OpenAI 风格的delta.content结构最终返回给调用方完全一致的choices[0].delta.content这个过程的关键在于“动态路由表”。LiteLLM 不是硬编码所有映射关系而是通过litellm/providers/目录下的每个 Provider 模块实现CompletionRequest抽象类。以anthropic.py为例其核心方法convert_messages_to_prompt()仅 23 行代码却精准处理了 Anthropic 要求的system消息分离、tool_use的 JSON Schema 转换、以及stop_sequences的数组格式兼容。这种设计让新增一个 Provider 只需实现 4 个核心方法输入转换、输出解析、错误映射、流式处理平均开发时间控制在 4 小时内——这正是它能快速支持 Groq2024 年 3 月上线和 DeepInfra2024 年 5 月上线的原因。注意LiteLLM 的协议翻译存在“有损压缩”。例如 Anthropic 的max_tokens实际限制的是输出 token 总数而 OpenAI 的max_tokens默认包含输入 token。LiteLLM 在转换时会警告max_tokens含义差异但不会自动修正——这要求开发者必须理解目标 Provider 的语义边界否则可能触发意外截断。3. 流量调度中枢从静态路由到智能熔断的演进路径如果 LiteLLM 只做协议翻译它最多是个高级版 curl 封装。真正让它成为生产环境基础设施的是内置的多模型路由Model Routing和自适应熔断Adaptive Fallback机制。这功能最初源于某金融公司的真实需求他们需要同时调用 OpenAI高精度、Groq低延迟、Ollama低成本三个模型但业务规则极其复杂——“用户提问含‘财报’二字时优先用 OpenAI若 2 秒未响应则降级到 Groq若 Groq 返回空内容则启用 Ollama 重试并添加‘请用中文详细解释’前缀”。LiteLLM 的路由系统用 YAML 配置文件定义策略核心是model_list和routing_strategy两个字段。一个典型配置如下model_list: - model_name: finance-analyzer litellm_params: model: gpt-4-turbo api_key: sk-... - model_name: finance-analyzer litellm_params: model: groq/llama3-70b-8192 api_key: gsk_... - model_name: finance-analyzer litellm_params: model: ollama/llama3:70b api_base: http://localhost:11434 routing_strategy: least-busy这里model_name是逻辑模型名业务代码只认这个litellm_params是具体 Provider 参数。least-busy策略会让 LiteLLM 维护每个实例的并发请求数永远把新请求发给负载最低的节点。但这只是起点。更强大的是usage-based-routing用量路由LiteLLM 会实时统计每个模型的input_tokens和output_tokens当 OpenAI 账户余额低于 $50 时自动将 70% 流量切到 Groq。这个能力依赖于litellm.track_cost()的埋点它会在每次响应后解析x-ratelimit-remaining-tokens等响应头或调用 Provider 的成本计算 API如 OpenAI 的/v1/models接口。而熔断机制则直面现实世界的脆弱性。2024 年 4 月 OpenAI 全球性故障期间某客户通过 LiteLLM 的fallbacks配置实现了零感知切换litellm.completion( modelgpt-4-turbo, messages[...], fallbacks[groq/llama3-70b-8192, ollama/phi3:medium] )当gpt-4-turbo返回503 Service Unavailable时LiteLLM 会自动重试groq/llama3-70b-8192若仍失败则尝试ollama/phi3:medium。关键在于重试过程保持原始请求的语义完整性——包括messages结构、temperature、tools定义等全部参数原样传递无需业务代码做任何修改。这种“故障透明化”能力让下游服务彻底摆脱了对单一 Provider 的强依赖。实测心得熔断策略需配合num_retries和timeout精细调控。我们曾因设置num_retries3导致单次请求耗时达 15 秒OpenAI 3s timeout × 3 Groq 2s timeout × 3 Ollama 1s timeout × 3。最终调整为num_retries1timeout3.0并在业务层增加超时兜底使 P99 延迟稳定在 2.8 秒内。4. 生产就绪的暗线监控、审计与成本治理的落地细节LiteLLM 最被低估的价值是它把原本分散在各处的可观测性能力收束到一个入口。传统方案中监控 OpenAI 调用要接 Prometheus Exporter审计 Anthropic 请求要解析 Nginx 日志核算 Google Vertex 成本得调用 Billing API——而 LiteLLM 用litellm.success_callback和litellm.failure_callback两个钩子把所有事件统一为标准结构{ model: gpt-4-turbo, stream: False, litellm_call_id: 8a3f2c1e-..., response_time: 2450.3, input_tokens: 127, output_tokens: 89, total_tokens: 216, spend: 0.00234, cache_hit: false, api_base: https://api.openai.com/v1 }这个结构直接支撑三大生产刚需第一是实时成本监控。LiteLLM 内置cost_calculator.py根据公开定价表如 OpenAI GPT-4 Turbo 输入 $0.01/1K tokens自动计算每次调用花费。我们将其接入 Grafana构建了“每小时模型成本热力图”发现某对话机器人 83% 的费用来自gpt-3.5-turbo的长上下文平均 4200 tokens而非gpt-4-turbo。于是推动产品团队增加对话摘要功能将平均 token 数压到 1800月成本下降 61%。第二是安全审计追踪。通过litellm.set_verbose True开启详细日志LiteLLM 会记录原始请求体脱敏后和完整响应。某次客户投诉“AI 给出了错误投资建议”我们仅用 12 分钟就从日志中定位到具体请求 ID、调用模型、输入消息及返回内容确认是用户输入的“特斯拉股价”被模型误解为“特斯拉债券”而非模型本身缺陷。第三是缓存治理。LiteLLM 支持 Redis 缓存但关键在于缓存键的设计。它默认用model messages_hash temperature生成 key这意味着temperature0.7和temperature0.8会被视为不同请求。我们在金融场景中发现对“计算复利”的问题temperature0.0确定性输出和temperature0.2微扰动结果完全一致于是自定义缓存策略对数学类请求强制temperature0.0并将 key 中的 temperature 字段移除缓存命中率从 31% 提升至 79%。关键经验LiteLLM 的success_callback默认在主线程执行高并发下可能阻塞请求。我们通过threading.Thread(targetcallback_func, args(kwargs,))将日志上报异步化实测 QPS 从 1200 提升至 3800。这个细节在官方文档里被轻描淡写带过却是生产环境的性能分水岭。5. 那些官方文档不会写的实战陷阱与破局思路LiteLLM 的 GitHub Star 数已突破 28k但社区里高频出现的“为什么我的请求失败了”问题往往源于几个文档刻意弱化的深层约束。我整理了过去半年踩过的 5 类典型陷阱附带可直接复用的解决方案。陷阱一Provider 认证方式的隐式覆盖规则现象配置了 Azure OpenAI 的api_key但请求仍返回AuthenticationError。根因LiteLLM 对 Azure 的认证采用“环境变量优先”策略。当你设置了AZURE_API_KEY环境变量即使代码中传入api_keyxxx也会被忽略。更隐蔽的是AZURE_API_KEY和AZURE_API_BASE必须同时存在缺一则触发InvalidRequestError。破局在启动脚本中加入校验逻辑if [ -z $AZURE_API_KEY ] || [ -z $AZURE_API_BASE ]; then echo ERROR: AZURE_API_KEY and AZURE_API_BASE must both be set exit 1 fi陷阱二Messages 格式中的角色陷阱现象向 Anthropic 发送{role:system,content:...}报错InvalidRequestError: system message not allowed in messages array。根因Anthropic 要求 system 消息必须作为独立参数system...传入不能放在messages数组里。但 LiteLLM 的自动转换只在model参数明确为anthropic/时生效。若你用别名modelfinance-claude且未在model_list中声明 provider转换就不会触发。破局强制指定 provider 类型litellm.completion( modelanthropic/claude-3-haiku, messages[{role:user,content:...}], system你是金融分析师 )陷阱三流式响应的内存泄漏现象长时间运行的 WebSocket 服务内存持续增长ps aux显示 Python 进程 RSS 达 4.2G。根因LiteLLM 的流式响应对象StreamingResponse默认缓存所有delta.content到内存直到流结束。对于 10 分钟的语音转文字流累积的字符串可达 GB 级。破局使用iter_lines()手动消费流并及时清理response litellm.completion(..., streamTrue) for chunk in response: # 立即处理 chunk不累积 if hasattr(chunk.choices[0].delta, content): yield chunk.choices[0].delta.content # 强制垃圾回收 del chunk gc.collect()陷阱四Ollama 模型加载的竞态条件现象首次调用ollama/llama3:70b时返回Model not found但 30 秒后重试成功。根因Ollama 的/api/chat接口在模型未加载时会返回 404LiteLLM 默认不重试 404。而 Ollama 加载 70B 模型需 22-38 秒。破局为 Ollama 配置专用重试策略litellm.set_timeout(60) # 全局超时设为 60s litellm.set_retry_policy( {ollama/*: {num_retries: 3, backoff_factor: 2}} )陷阱五成本计算的精度幻觉现象LiteLLM 日志显示spend0.00123但 OpenAI 账单显示 $0.00187。根因LiteLLM 的成本计算基于公开定价表但实际账单受用量阶梯、预留容量、促销折扣影响。更重要的是它无法获取prompt_filter_results内容安全过滤消耗的 token和completion_filter_results这些 token 会计费但不返回内容。破局将 LiteLLM 成本作为预算预警参考误差容忍 ±25%真实结算以 Provider 账单为准。我们用 AWS Lambda 每日拉取 OpenAI Usage API与 LiteLLM 日志做差值分析发现过滤 token 占比达 17%据此优化了输入清洗策略。最后分享一个硬核技巧LiteLLM 的mock_response功能可用于全链路压测。我们创建了一个mock_llm.py当环境变量MOCK_LLM1时所有completion()调用返回预设的 JSON含固定input_tokens和response_time这样就能在不消耗真实 API 配额的情况下测试路由策略在 10K QPS 下的稳定性。这个技巧让我们的混沌工程演练效率提升了 8 倍。6. 从胶水代码到基础设施LiteLLM 在真实架构中的定位演进LiteLLM 的演进轨迹本质上是大模型应用架构分层的缩影。三年前它只是某个工程师在requirements.txt里加的一行litellm1.0.0用来快速替换掉项目里硬编码的 OpenAI SDK。今天它已成为某跨平台系统的核心中间件部署形态也从单机进程升级为独立服务集群。这个转变过程揭示了一个关键事实当胶水代码的维护成本超过其带来的便利性时它就必须被基础设施化。我们参与的某智能客服系统LiteLLM 的部署经历了三个阶段阶段一SDK 替代层2022 年直接在 Flask 应用中import litellm所有/v1/chat/completions请求经由litellm.completion()转发。优点是改造快2 天上线缺点是耦合度高——每次 LiteLLM 升级都要重启整个 Web 服务且无法集中管控限流策略。阶段二Sidecar 模式2023 年将 LiteLLM 封装为独立 FastAPI 服务与业务容器共部署Kubernetes Sidecar。业务服务通过http://localhost:4000/v1/chat/completions调用。此时 LiteLLM 承担了真正的网关职责统一 TLS 终止、IP 白名单、请求体大小限制max_content_length4MB。我们甚至用它实现了“模型灰度发布”——通过 Kubernetes Service 的权重配置将 5% 流量导向新模型gpt-4o-mini其余走gpt-3.5-turbo所有业务代码零修改。阶段三API 网关层2024 年LiteLLM 作为独立微服务集群前置 WAF 和 CDN。此时它不再只是协议转换器而是承担了完整的 API 生命周期管理鉴权集成 OAuth2.0验证Authorization: Bearer token后从 JWT 中提取allowed_models声明动态生成model_list计费对接内部结算系统按user_id model_name统计用量生成账单明细合规对messages内容进行 DLP 扫描检测身份证号、银行卡号等敏感信息命中则拒绝请求并记录审计日志这个演进过程的关键转折点是某次安全审计要求“所有 LLM 调用必须经过统一出口”。当时我们评估了 Kong、Apigee 等传统 API 网关发现它们无法理解messages字段的语义更无法做模型级熔断。最终选择将 LiteLLM 升级为网关用 320 行自定义中间件代码实现了审计要求的所有能力。我的体会是LiteLLM 的终极形态不是取代 vLLM 或 TGI而是成为它们的“北向接口”。当你用 vLLM 部署了 12 个自研模型LiteLLM 就是让这些模型像 OpenAI 一样被业务调用的那层薄薄的膜。它的价值不在于多强大而在于多“无感”——当团队里新人入职他不需要知道背后是 Groq 还是 Ollama只要记住litellm.completion(modelchatbot-pro, messages...)世界就正常运转。这种确定性才是工程化最奢侈的奢侈品。

相关新闻

imgsTools图片合并实战:基于Python和Pillow的拼接与批处理

imgsTools图片合并实战:基于Python和Pillow的拼接与批处理

简介:这是一份面向游戏开发者的图片合并工具 imgsTools 完整工程,基于 VALib 图像库与 MFC、GDI 技术实现,用于把多张图片合并为透明 PNG、GIF、JPEG,并生成 Cocos2d 可识别的 .plis 资源清单。PNG 适合精细界面元素与图标&#x…

2026/10/13 21:29:24 阅读更多 →
litellm 实战:统一多模型调用接口与代理层架构设计

litellm 实战:统一多模型调用接口与代理层架构设计

1. 项目概述与核心定位1.1 这个项目到底解决什么问题第一次接触 litellm 是在一个多模型混用的项目里。当时团队同时接入了好几家不同厂商的大模型服务,每家的接口格式、鉴权方式、返回结构都不一样,代码里到处是 if-else 分支,维护起来非常头…

2026/10/13 21:29:24 阅读更多 →
遗传算法优化SVM参数:Python实战与调参避坑指南

遗传算法优化SVM参数:Python实战与调参避坑指南

简介:这份资源面向具备一定Python与机器学习基础、希望掌握超参数调优实战的学习者,聚焦用遗传算法(GA)自动搜索支持向量机(SVM)的最优参数组合,解决人工调参效率低、易陷入局部最优的问题。压缩…

2026/10/13 21:29:24 阅读更多 →

最新新闻

Python超市管理系统源码实战:Flask+SQLite收银库存全流程

Python超市管理系统源码实战:Flask+SQLite收银库存全流程

简介:这是一份面向Python初学者与课程设计学习者的超市管理系统源码包,围绕员工管理、客户管理、登录验证与商品库存记录等日常运营场景展开,适合用来练习GUI界面搭建、文件持久化存储与模块化组织方式。压缩包共13个文件,约8KB&a…

2026/10/13 22:18:56 阅读更多 →
AI制图实测:10分钟生成架构图与流程图

AI制图实测:10分钟生成架构图与流程图

相信不少朋友都经历过这样的场景:刚画完一张系统架构图,产品经理又改了两版需求;刚理清一条业务主线,对接方又加了三个分支。画图这件事,听着很轻松,真正动手才发现,框要对齐、线要避开交叉、字…

2026/10/13 22:18:56 阅读更多 →
AI编程大模型免费活动的技术真相与工程实践指南

AI编程大模型免费活动的技术真相与工程实践指南

1. 项目概述:这不是“薅羊毛清单”,而是一份AI编程模型能力演进的实时观测日志“最新免费AI编程大模型活动汇总 2026年10月8日更新”——这个标题乍看像电商促销页,实则藏着当前AI工程落地最真实的脉搏。我从2023年起持续跟踪国内大模型在开发…

2026/10/13 22:18:56 阅读更多 →
PyTorch目标检测实战:小黄人检测从数据准备到模型训练全流程

PyTorch目标检测实战:小黄人检测从数据准备到模型训练全流程

最近用PyTorch做图像识别练习,选了个特别有画面感的入门任务——小黄人检测。目标检测这个名字听着有点唬人,但拆开其实就两件事:先把图片里的小黄人找出来,再用矩形框把它框住。上学那会儿做这类需求,第一反应是搞滑动…

2026/10/13 22:18:56 阅读更多 →
矩阵置零:原地算法与状态管理,LeetCode 73 题全解析

矩阵置零:原地算法与状态管理,LeetCode 73 题全解析

矩阵置零这个题,我第一次在刷题平台上看到时,内心是有点不屑的:两层循环,遇到 0 就改行改列,这不是有手就行?可当我真的原地写起来,才发现完全不是那么回事。题目本身很短:给定一个m…

2026/10/13 22:18:56 阅读更多 →
利用阿里云alidns实现DDNS动态解析:公网IP变化自动更新教程

利用阿里云alidns实现DDNS动态解析:公网IP变化自动更新教程

家里的宽带每隔一段时间公网IP就会变,尤其是不满运营商最长在线时长之后强制断线重拨的那种,老域名解析记录一直是旧IP,访问家里NAS或者是远程桌面全都得靠临时记IP来连,烦得不行。后来我把域名托管到了阿里云云解析,直…

2026/10/13 22:17:56 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →