大模型API计费与Key管理实战:从余额监控到密钥轮换
1. 为什么“查计费面板、充值、换API Key”成了AI开发者的日常做AI应用开发的朋友最近应该都有同一个体感模型接口的账单比代码报错还让人紧张。应用跑得好好的测试群里突然来一句“怎么又停了”登录后台一看不是代码出bug而是额度见底了。弹窗上那句话翻译过来就是请检查你的大模型API计费面板充值余额或者换一把新的API Key。这不是偶发事件而是大规模模型接入时代的基础运维动作。我最早遇到这种情况是在一个内部工具项目上。凌晨两点定时任务跑了一会儿就报“Authentication failed”我当时第一反应是Key被撤销了查了一圈发现根本没有失效就是账户余额归零。从那以后我才认真研究计费面板里的每一个字段也慢慢养成了“先看账单、再调代码”的习惯。这篇文章不聊怎么调用模型专门聊怎么管住调用背后的钱和Key。这个话题适合谁如果你正在做个人AI应用、企业内部Demo或者把模型接口封装成对外服务只要你每天在和API Key打交道这篇文章都值得花十分钟看完。我不只讲怎么看控制台还会把充值时机、切换Key的完整流程、账单异常的排查思路以及自动监控余额的脚本方案全部拆开说清楚。先给结论计费面板不是“没钱了才去看一眼”的地方而是应该像看数据库慢查询一样定期、主动地观察。Key也不是一把用到底的钥匙它和运维密钥一样需要轮换、隔离和回收。下面从最核心的几个问题展开。2. 计费面板里到底藏着哪些关键指标很多人打开计费面板只盯一个数字——余额。余额确实是最直观的但它绝不是唯一需要关心的指标。一个合格的API管理习惯是从读懂账单结构开始的。2.1 余额、可用额度与配额先分清三件事余额不等于你能花的钱。绝大多数模型服务商采取“先充值后使用”的预付费模式账户余额代表剩余可用金额。但有些平台会把“赠送金额”和“已充值金额”分开显示赠送金往往有有效期而且可能限定某些模型或服务可用。我之前在某个平台就遇到过后台显示余额还有几十块但调用高端模型时提示额度不足一看细则——赠送金不支持该模型。可用额度是另一个概念它通常和服务套餐挂钩。如果你是包月套餐用户套餐内包含一定量的调用次数或Token数超出部分才会按量扣费。这时候你真正要看的指标是“本月已用量”和“套餐剩余量”而不是单纯看余额。配额Rate Limit则控制的是请求速率比如每分钟允许调用多少次、并发数是多少。即使账户里钱再多撞上速率限制依然会返回429错误表现出来也是“服务不可用”很容易被误判成Key出问题了。这三者虽然都出现在计费面板上但管理逻辑完全不同余额靠充值解决套餐用量靠升级或加购解决配额靠申请调高或使用多Key分摊解决。一次排查要先把问题归到正确的维度。2.2 历史账单和调用明细是成本优化的第一手资料只盯着当前余额查不出长期成本问题。我建议每月至少导出一次历史账单重点看三个维度按天的调用量曲线、按模型的价格占比、按项目或者Key维度的消耗分布。举个例子我维护过一个客服机器人一开始所有流量都走大模型接口月末账单接近预算上限。后来导出明细才发现超过70%的Token消耗其实来自长文本的系统提示词反复拼接。优化掉这部分之后账单直接下来了。如果只看余额根本意识不到钱花在哪里。现在几乎所有主流模型服务商都支持在计费面板里按日期、模型、API Key筛选明细把这个数据用起来比单纯“定时充值”重要得多。2.3 发票、支付方式和账户等级容易被忽视的隐藏项很多独立开发者不关心发票但一旦你的项目变成公司业务发票就是刚需。不同服务商的发票规则完全不同有的充值后自动开具电子发票有的需要手动申请还有的对最低开票金额有要求。我遇到过需要报销的场景结果发现后台只支持“消费满100才能开票”只能硬着头皮继续消费。账户等级通常和折扣挂钩有些平台根据月度消费总额调整折扣率。升级后单价会变低但阈值往往藏在计费规则里不显眼的位置。有时间的话把服务商官网的计费文档通读一遍把折扣档位记下来这是很多人忽略的省钱细节。提示把“余额”“用量”“配额”“账单明细”分开记忆。排查故障时先判断报错属于哪一类再决定是充值、升级套餐还是调整调用策略。混淆这三者会让排查走上弯路。3. 充值与续费的正确方式不要等到弹窗才动手充值这个动作看起来简单但实际踩坑的人不少。过早充值占用资金过晚充值影响业务充值金额不合适又容易造成浪费。这里有一套我实践下来的操作逻辑。3.1 用“日均消耗”反推充值金额而不是凭感觉先不要直接输入一个大额数字花两分钟算一下应用的日均消耗。无论你的计费单位是Token还是请求次数都先折算成日均金额。计算方式很简单近7天消耗总额除以7或者用单次请求平均费用乘以日均请求量再加上30%的冗余。根据这个数值决定充值周期。比如我的某个测试应用日均消耗约5块我会一次性充值50块大约是10天的量。这样既避免了频繁充值的麻烦也不会在长时间不用时锁住太多资金。对于生产环境建议至少保证30天的余额甚至设置“余额低于7天消耗自动告警”给自己留出缓冲时间。3.2 设置消费告警和自动充值但要设置上限大多数服务商都提供余额阈值告警比如低于10块、低于50块时发短信或邮件通知。不要嫌烦这个功能一定要开尤其是有定时任务在夜间跑的场景。白天发现余额不足可以随时处理凌晨出现耗尽就只能干瞪眼。自动充值功能要谨慎。我是吃过亏的人某次绑定了自动充值原本想着最低限额充值20块结果服务商默认按“补足至100块”的规则执行一夜之间被自动充了一笔大额而调用量根本用不完。现在我的建议是生产环境可以开启自动充值但必须把充值上限设置成“不会高于你预估的最高月成本”并且绑定独立的支付账户避免影响个人资金规划。3.3 支付方式与到账延迟充完没到账怎么办几乎每家服务商都支持支付宝、微信和银行卡但到账速度不一样。银行卡快捷支付通常是即时的但对公转账就慢得多可能延迟几小时甚至一两天。虽然屏幕上显示“充值成功”但余额更新往往要等支付回调。如果正在赶项目不要选对公转账优先用即时到账的方式。万一充值后余额没有变化先不要急着重复支付。先看支付平台那边的扣款记录再回控制台看订单状态。多数情况下是回调延迟等一会儿刷新就好。如果订单状态显示“失败”但钱扣了保留订单号联系客服一般当天就能解决。养成“先查订单号再问客服”的习惯效率高很多。3.4 优惠券和赠送金用之前先读规则部分平台为了拉新会有优惠券、充值返赠之类的活动。这些资金往往附带限制条件有的只适用于指定模型有的有效期只有30天有的要求消耗完赠送金才能用余额还有的不能用来开发票。做业务项目时千万别把赠送金当作可用的预算不然月底对账会非常痛苦。我的做法是把所有限定的赠送金当作“不存在”预算规划只按真实充值的金额计算这样才能避免超支。4. 什么时候该换API Key切换流程一文讲透如果说充值解决了“没钱”的问题那么换Key处理的则是一大批“有钱但用不了”的问题。API Key不仅是一串访问凭证它实际上是权限、身份和计费归属的集合。该换的时候就别犹豫但换的过程必须规范。4.1 需要立刻换Key的四种典型场景第一密钥疑似泄露。日志里出现异常调用或者代码仓库被误上传不管有没有真实损失都要立刻撤销并重建。第二Key被限流或封禁。有时候你调用数量正常但频繁被拒排查后发现是共享IP出了问题或者触发了风控规则这时候生成一把新Key往往比申诉更快。第三团队协作和人员变动。员工离职、外包交付结束时如果旧的Key没有回收就代表你还在为“已不存在的人”支付费用这属于安全漏洞。第四计费归属需要调整。比如你把免费项目的测试Key误用到了生产环境或者想要把不同客户消耗拆开到不同账户更换Key是最直接的隔离方式。有一种情况更容易忽略当服务商整体资费调整或你决定从A模型切换到B模型时也需要换Key因为Key一般绑定具体的服务范围或应用类型。我迁移过一个小型问答机器人从单一模型切到多模型路由旧Key的权限是固定的必须新建一个具备多个模型访问权限的Key才能正常工作。4.2 标准切换六步法一个都不能省切换Key看起来是“改个字符串”实际上是一次小型的变更发布。我总结过一个六步流程每一步都有明确目的。第一步在控制台生成新Key。生成时注意设置好权限范围如果服务商支持按“仅可调用指定模型”“仅读权限”“写权限”等最小权限原则来分配不要一把Key走天下。第二步在应用配置中替换Key。最推荐的方式是把Key放到环境变量或配置中心里而不是硬编码在代码中。第三步重启或热加载应用。文件型配置一般需要重启进程环境变量注入的方式可能需要重新部署如果用的是配置中心通常可以秒级生效。第四步用一个真实请求验证新Key是否可用。不要只看服务端Start成功要实际调用一次接口确认计费归属正确、返回结果正常。第五步观察一段时间后再撤销旧Key。建议至少观察1-2天确认所有实例都稳定运行再把旧Key停用。第六步清理旧Key的所有痕迹包括日志、配置文件、客户端的缓存防止被误用。4.3 两种切换策略一刀切与灰度替换如果是个人项目停旧开新一口气完成没有问题。如果是在生产环境尤其是有多实例或跨区域部署的应用我强烈建议用“双Key共存”的方式做灰度。具体操作先保留旧Key再新增一个新Key让流量按比例分配过去。有的API网关可以按权重路由有的服务商支持多个Key轮询没有这些能力的话也可以直接在代码里做逻辑切换先让10%的请求使用新Key观察错误率和延迟确认没问题后逐步提升到50%、100%最后再删除旧Key。这样做的好处是一旦新Key配置错误可以秒级回滚到旧Key而不需要重新部署应用。5. 踩坑实录账单“突然爆炸”和Key“神秘失效”的排查手册即使做好了前面所有步骤实际操作中还是会遇到各种古怪问题。这里整理了我自己的排查笔记每一类问题都对应了真实踩过的坑。现象可能原因排查方向余额充足但提示401/403Key被撤销、权限被手动调整、账户被风控先查控制台Key状态再看绑定的权限Scope是否有变更检查是否触发了异常调用风控突然出现大量429限流单Key请求速率触顶、并发数过高查看配额使用率分散到多个Key或申请提高配额账单比预期高很多重试机制导致重复计费、每次请求Token数比预期大导出调用明细筛选高消耗请求给客户端加超时和幂等充值后余额长期未更新支付回调延迟、对公转账未处理查看支付平台订单状态确认订单号等待或联系客服切换新Key后仍然报错应用多实例中有实例未更新配置、代码里硬编码了旧Key全局搜索旧Key检查每个实例的环境变量确认负载均衡没有命中旧节点Key被自动删除超过密钥有效期、控制台设置了自动轮换给Key设置提醒把自动轮换周期和业务周期对齐5.1 一次“余额充足”却反复403的经典排查某次在调试一个图片生成应用控制台余额明明还有两百多但请求一直返回403。我当时怀疑账户被封登录后台又一切正常。后来仔细查看了该Key的权限发现新配置里只勾选了对话模型的访问权限而图片生成接口需要的是另一次独立的权限授权。这是一类非常容易忽略的问题很多服务商把权限细分到模型甚至接口级别你换了新Key没有重新授权自然会被拒绝。解决方案很简单回控制台找到Key管理页面查看Scope配置并补上缺少的权限。这也解释了为什么切换Key之后不能只看“能访问”就完事还要确认能访问的目标资源和原来一致。5.2 深夜账单异常的元凶无超时重试另一个让我印象深刻的问题来自一个定时脚本调用大模型接口处理一批文档批量任务到一半就报错然后无限重试。因为每次重试都会计费结果一晚上跑了数万次调用余额直接清零。后来我做了两件事第一给HTTP请求加了超时和最大重试次数避免死循环第二在代码里加了一个“日消费上限”的判断当天的成本达到预设值后自动停止任务。这类问题的关键在于API计费是即时的但成本控制必须在客户端做。你以为服务商会帮你拦截超额消费实际上按量计费模式下每一笔调用都会被扣费服务商并不知道这笔调用是你真正想要的。把“熔断”逻辑写到自己的代码里比事后看着账单后悔靠谱得多。5.3 一个Key命名规范帮你省掉80%的排查时间排查这些问题的过程中我最大的体会是大部分故障都是因为“Key太多但没有管理”。这里分享一个简单可用的命名规范按环境和用途两段式命名。比如“dev-export“、“prod-customer-service”、“test-billing-api”如果服务商支持备注功能一定把Created-by、用途、失效日期写进去。有了清晰的命名你能在控制台快速定位到异常消耗对应的Key。否则几十把Key堆在一起每把都叫“API Key 1”排查成本会高到你崩溃。另外名称里包含环境意味着你绝对不会把测试Key用到生产环境或者反过来。6. 从手工查账到自动监控让API成本管理“无人值守”老实说把前面几节的习惯都养成之后大部分问题都不会发生。但人总有疏忽的时候所以最后一步是把整个“查余额、告警、提醒自己充值”的过程自动化。不同服务商提供的开放接口不同但思路是通用的通过控制台的用户中心找到查询余额和用量的接口写一个定时脚本去拉取数据然后在成本越过阈值时通知自己。6.1 一个简单的余额查询与告警脚本参考这里给一个Python脚本的思路不依赖特定服务商SDK只需要把API地址和认证方式替换成你自己的。脚本做的事情就三件请求余额接口、解析剩余金额、和阈值比较后决定是否发出告警。import os import requests def check_balance(api_key, api_url): headers {Authorization: fBearer {api_key}} resp requests.get(api_url, headersheaders, timeout10) resp.raise_for_status() data resp.json() return data.get(balance, 0), data.get(currency, CNY) def send_alert(message): # 这里可以接入邮件、企业IM机器人的Webhook print(f[ALERT] {message}) def main(): api_key os.environ.get(BILLING_API_KEY) balance_url os.environ.get(BILLING_URL) balance, currency check_balance(api_key, balance_url) low_threshold float(os.environ.get(LOW_BALANCE_THRESHOLD, 10)) print(f当前余额: {balance:.2f} {currency}) if balance low_threshold: send_alert(f余额仅剩 {balance:.2f} {currency}请及时充值) if __name__ __main__: main()配合crontab或者CI调度服务每小时执行一次成本几乎为零但能在余额耗尽前给你充足的反应时间。6.2 多Key轮换和更细粒度的成本治理对有一定规模的项目建议使用配置中心统一管理Key而不是把Key散落在各个服务里。配置中心可以做到动态修改、按环境隔离、审批流追踪提交一次变更就能批量更新到所有实例。同时也可以实现更细粒度的成本标签给每个Key打上团队、应用、环境标签然后在计费报表里按标签汇总月底对账一目了然。6.3 密钥轮换的长期节奏密钥轮换不是出了故障才做而是应该像修改数据库密码一样定期执行。具体周期取决于你的业务类型和合规要求。对于内部工具每个季度轮换一次足够对于对外服务的生产Key建议每月轮换并且配合自动化流程避免轮换时出现人为疏漏。我个人在实际操作中的经验是任何一次轮换都当作一次发布变更走测试、灰度、全量、回收的完整链路。不要因为只是“改了一串字符”就降低敬畏心小动作往往藏大坑。最后再分享一个小技巧每次充值或者换Key之后随手在项目文档里更新一行记录写清楚“时间、操作人、原因、新Key标识”。这个习惯坚持半年之后你会发现自己对API成本和安全状态的掌控感完全不一样。管理API Key和账单这件事本身不复杂难的是持续用正确的方式做。希望这篇内容能帮你少踩几个坑把更多时间花在真正重要的业务逻辑上。

相关新闻

ITU-R BT.2154解读:数字地面电视接收机性能评估与频谱规划实践

ITU-R BT.2154解读:数字地面电视接收机性能评估与频谱规划实践

做频谱规划和无线覆盖优化的朋友,对ITU-R BT系列建议书应该都不陌生。但这个系列编号密集、内容交错,真到用的时候很容易挑花眼。最近我把ITU-R BT.2154从头到尾读了一遍,又把它用到一次跨系统频率迁移的兼容性评估里,这篇文章就当…

2026/10/14 3:57:41 阅读更多 →
网络安全密码学核心考点:从古典密码到数字签名复习指南

网络安全密码学核心考点:从古典密码到数字签名复习指南

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

2026/10/14 3:56:41 阅读更多 →
FFmpeg Bitstream Filter原理与实战:码流语法转换核心技术

FFmpeg Bitstream Filter原理与实战:码流语法转换核心技术

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

2026/10/14 3:56:41 阅读更多 →

最新新闻

Qt Linux打包失败原因与linuxdeployqt避坑指南

Qt Linux打包失败原因与linuxdeployqt避坑指南

简介:本资源是一份面向Linux Qt开发者的技术实践指南,聚焦Ubuntu环境下使用linuxdeployqt工具完成Qt程序跨机部署的核心痛点。针对无Qt运行环境的目标机器,系统性梳理了从Qt开发环境配置、linuxdeployqt源码编译(含Ubuntu 18.04兼…

2026/10/14 4:46:57 阅读更多 →
开放权重模型:可控部署、商用微调与硬件感知推理实战

开放权重模型:可控部署、商用微调与硬件感知推理实战

1. 项目概述:一场被公开谈论的“开放权重”战略卡位战最近刷到一条消息,说英伟达正在和一家叫 Reflection AI 的初创公司洽谈收购或追加投资——这事本身不稀奇,大厂盯上潜力股是常态。但真正让我多看了两眼的,是它背后那个反复出…

2026/10/14 4:46:57 阅读更多 →
Linux系统工具pstack二进制瘦身实战:ELF优化与C语言编译精简

Linux系统工具pstack二进制瘦身实战:ELF优化与C语言编译精简

1. 一个被低估的系统工具&#xff1a;pstack 的“瘦身”为什么值得较真很多人第一次听说 pstack&#xff0c;是在某个进程卡死、CPU 疯狂打满、日志毫无输出的深夜。运维同事甩来一句&#xff1a;“快&#xff0c;pstack 看下堆栈&#xff01;”——于是你敲下pstack <pid&g…

2026/10/14 4:46:57 阅读更多 →
PS5数据管理方案:AnyPS5搞定存档备份与远程串流

PS5数据管理方案:AnyPS5搞定存档备份与远程串流

1. 为什么需要AnyPS5方案PS5入手之后&#xff0c;很多玩家都会遇到同一个问题&#xff1a;主机硬盘看着不小&#xff0c;真用起来却总是捉襟见肘。一款大型游戏动辄上百GB&#xff0c;加上截图、录像、存档备份&#xff0c;内置SSD没过多久就亮红灯。更麻烦的是&#xff0c;一旦…

2026/10/14 4:46:57 阅读更多 →
实时事件分析系统架构设计与Flink+Kafka+ClickHouse实战

实时事件分析系统架构设计与Flink+Kafka+ClickHouse实战

1. 从“rea”这个标题说起&#xff1a;一个被低估的缩写背后藏着什么第一次看到“rea”这个标题的时候&#xff0c;我脑子里蹦出来的第一反应是——这大概率又是一个被缩写玩坏的项目名。做技术的人都有个通病&#xff0c;喜欢把长名字砍成三四个字母&#xff0c;仿佛名字越短越…

2026/10/14 4:46:57 阅读更多 →
一文搞懂MySQL socket连接:原理、配置与2002/2003故障排查

一文搞懂MySQL socket连接:原理、配置与2002/2003故障排查

一次线上事故让我把socket连接这件事彻底搞明白了。当时某个项目组反馈所有本地应用突然连不上MySQL&#xff0c;我登录服务器一看&#xff0c;mysqld进程明明活着&#xff0c;3306端口也在正常监听&#xff0c;可本地应用全部报socket错误。查了半个多小时&#xff0c;最后发现…

2026/10/14 4:45:56 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →