Claude Skills + X API + cron 实现全自动发推实战指南
先说我这边最终跑通的效果一个 Claude Skill放在.claude/skills/tweet-writer目录下每天早上十点、下午三点、晚上八点各发一条推。整个过程从选题、写正文、贴图、加话题标签到点击发布全都不需要人工介入。我连续跑了三个星期发了六十多条中间只手动处理过两次一次是推文里带了统计口径错误另一次是账号被风控要求验证设备。这个活儿乍一听很唬人真拆开其实就三块Claude 的 Skills 机制负责“会写”X 的 v2 API 负责“能发”cron 负责“按时发”。三块都不需要很深的底层知识但拦路坑非常多。这篇文章把每一步怎么搭、每个坑怎么踩、每个参数怎么选全部展开写清楚方便你照着复现。1. 先聊清楚Claude Skills 到底解决了什么问题1.1 自动写推这事难在哪想在 X也就是推特上稳定日更最麻烦的其实不是“发推”这个动作而是“持续产出内容”。手动一个个编文案是最笨的做法。用 Claude 网页版或 App 生成文案也麻烦生成完你还得复制、打开 X、粘贴、配图、点发送。一两天能坚持连续一个月你会疯。市面上也有各种 AI 发推工具按月付费有的还要求绑定独立开发者账号授权环节动不动就把你的账号搞成只读状态。我建议的第一步是做减法把“全自动”拆成三个可以独立解决的问题。第一谁来生成内容第二生成的内容怎么变成合法推文第三怎么调度执行。第一步我选了 Claude 的 Skills 机制第二步选了 X 官方 v2 API第三步用系统自带的 cron。一整套做下来成本约等于零没有月费只有一个基础设施费用。1.2 三个方案对比后为什么选了 Skills写推文不只靠一个“API Key”就完事。你先要解决“让 AI 知道今天该发什么主题、语气是什么、带不带话题标签、要不要避雷”这些规则问题。市面上做这类事的方案大致有三种。第一种走现成的自动化平台。把 Claude 接到某个工作流平台上配置触发器和动作。优势是可视化不用写代码劣势是这些平台对 X 这个渠道的覆盖很粗糙授权流程复杂免费额度极其有限跑两周就开始提示升级付费套餐。第二种直接用 Claude 的 API 写一个 Python 调度程序。这个思路对但你很快会发现要维护的东西太多对话历史、上下文、重试逻辑、格式化输出、敏感词过滤全都要自己写在代码里。想改一句“推文风格别太正式”得改代码重发一次。改十次你就烦了。第三种也就是我最终用的方案把规则写进 Claude 的 Skill 里让 Skill 自己管理逻辑。你可以把它理解成给 Claude 装了一个“发推专用外挂”。Skil 里包含一个 SKILL.md 说明文件里面写了完整的流程规则比如“每篇推文必须 280 字符以内”“禁止说确切数值除非有来源”再配一个 Python 脚本负责真正调接口发推。Claude 读取 SKILL.md 之后遇到符合场景的任务会自动调用配套脚本不需要我再手动复制粘贴文本。这样好处很明显规则改起来只需要改 SKILL.md 里的文字逻辑和代码完全解耦发布路径又完全自己掌控不依赖任何中间平台。实际对比下来第三种方案最适合个人开发者和小团队因为你能完全控制发布流程避免平台夹在中间造成的信息差和“黑箱”问题。2. 准备工作账号、密钥、环境一次性配齐2.1 X开发者账号权限要给够要想用程序发推必须注册 X 的开发者账号并创建一个应用。这里有个非常关键的细节创建应用的时候应用权限一定要选“读、写”级别不要只选“读”。我在这一步踩过坑默认权限是只读导致后面所有发推请求都返回 403 错误。另外X 开发者平台现在区分试用版Free和付费企业版。个人弄自动发推、频率不高、每天几条的话试用版足够用了每个月有免费发推额度。创建应用后必须去 User Authentication 设置里确认 OAuth 1.0a 权限是开启状态并且勾选“可以代表用户发推”。很多教程不强调这个实际少配置一步后面全白搭。2.2 四把钥匙一个都不能少X 的 v2 API 发推走的是 OAuth 1.0a不是 OAuth 2.0。这意味着你需要四样东西缺一不可API Key也叫 Consumer KeyAPI Key SecretConsumer Key SecretAccess TokenAccess Token Secret这四个值在开发者平台的 Keys and tokens 页面都能看到要点“生成”才会有完整字符串。获取 Access Token 那一步需要你授权的账号是被这个应用绑定过权限的账号别用错账号。注意这四把钥匙里任何一把都不能出现在公开仓库或前端代码中。最安全的做法是写进本机环境变量比如.env文件然后让 Python 脚本用os.getenv()读取。别问我为什么强调这个GitHub 搜代码搜索你能搜到大量因为密钥写在代码注释里而被盗刷账号的案例。2.3 本地环境Python 3.11 tweepy我本机用的是 Python 3.11装了一个发推专用的第三方库tweepy。这个库把 OAuth 1.0a 的签名流程封装好了你只需要传四个密钥进去就能直接发推比直接裸调requests实现 OAuth 签名省下一百多行代码。安装命令很简单pip install tweepy python-dotenv装完python-dotenv再在项目根目录放一个.env文件填上X_API_KEY你的APIKey X_API_SECRET你的APISecret X_ACCESS_TOKEN你的AccessToken X_ACCESS_TOKEN_SECRET你的AccessTokenSecret然后写段代码验证一下能不能发出一条测试推import tweepy import os from dotenv import load_dotenv load_dotenv() client tweepy.Client( consumer_keyos.getenv(X_API_KEY), consumer_secretos.getenv(X_API_SECRET), access_tokenos.getenv(X_ACCESS_TOKEN), access_token_secretos.getenv(X_ACCESS_TOKEN_SECRET), ) response client.create_tweet(textHello from Python!) print(response.data)能打印出tweet_id就是成功。这一步是后面所有动作的地基建议先跑通再说其他。3. 从0搓一个Skill目录、SKILL.md和脚本3.1 Skill 目录结构长这样Claude 的 Skills 机制本身不复杂它就是一个约定的目录结构。你把目录放在 Claude 能识别的位置Claude 遇到相应场景就会加载里面的说明文件。我建立的目录长这样~/.claude/skills/tweet-writer/ ├── SKILL.md └── scripts/ ├── post_tweet.py └── check_text.pySKILL.md是技能的大脑里面用自然语言写清楚“这个技能是干什么的、触发条件是什么、执行步骤是什么、输出格式是什么”。scripts目录放着真正干活的 Python 脚本。Claude 会在需要的时候读取SKILL.md并按照里面的指令来调用脚本。这个设计的好处是技能的“行为规则”和“执行代码”是分开存放的。你想让推文风格变活泼一点只改 SKILL.md 里的 prompt 描述就行不用动代码。反过来万一 X 接口调用方式改了只需要更新post_tweet.py规则文案完全不受影响。3.2 SKILL.md 的 YAML 头任何 Skill 的SKILL.md都必须以 YAML frontmatter 开头包含name和description。description尤其关键因为它决定了 Claude 什么情况下会调用这个 Skill。我写的头是这样的--- name: tweet-writer description: Generate and publish short-form social media posts to X (Twitter). Use this when the user wants to create a new tweet, schedule a daily post, or set up automatic posting. ---这里要注意description不要写“发推文”这三个字就完了要写清楚触发场景。Claude 靠它来判断何时加载该技能。写得越具体触发越精准。建议把“daily”“automatic”“tweet”“X post”这些相近语义都涵盖进去。3.3 核心 prompt让 Claude 懂规矩YAML 头结束后正文部分就是技能的使用说明书。我把它设计成一段结构化指令Claude 执行时必须严格遵守。我的 SKILL.md 正文精简版# Tweet Writer Skill ## 目标 生成高质量、原创、符合平台调性的推文并直接发布。 ## 触发时机 - 用户要求“发推”“自动发推”“写一条X内容”时 - 用户要求“日更”“定时发推”时 ## 执行步骤 1. 根据当前时间和前一天发布的选题记录确定今天发布的 3 个主题范围分别对应早、中、晚三个时段。 2. 为每个主题撰写一版推文要求 - 正文不超过 280 字符必须用 check_text.py 做字符校验 - 语气偏轻松、口语化但不要用 emoji - 开头第一句直接给用户可感知的价值不绕弯 - 不使用绝对化用语比如“绝对”“最好”“100%” - 需要配图时脚本会输出一个纯文本占位标记 3. 将推文文本写入临时文件调用 scripts/post_tweet.py 发布。 4. 发布后读取返回结果保留 tweet_id 写在运行日志中。 ## 输出格式 - 若发布成功返回推文原文与 tweet_id - 若失败返回错误码与原因并整理为“已失败待人工处理”你看这里的关键是把“人的要求”转成“机器能执行的步骤”。Claude 读完这段它会先构思主题再写内容再调用脚本发出去最后记录结果。我自己的经验是不要只写“写一条推文”而是要告诉它完整流程。3.4 发推脚本把文案变成真实 Tweetpost_tweet.py的核心就是调用 tweepy 发推。但我不建议直接把推文内容传给脚本因为 Claude 生成文本时偶尔会带出引号、换行符、Markdown 符号等不该出现的东西。更稳妥的做法是让 Claude 先把文本写入draft.txt脚本再读这个文件预处理后再发布。我的脚本大概是这样的import os import re import sys import tweepy from dotenv import load_dotenv load_dotenv() def clean_draft(raw_text: str) - str: # 去掉多余引号和 Markdown 符号 text raw_text.strip() text text.strip().strip() text text.replace(*, ).replace(#, ) # 压缩多个换行为一个 text re.sub(r\n{2,}, \n, text) return text.strip() def main() - int: draft_path sys.argv[1] if len(sys.argv) 1 else draft.txt with open(draft_path, r, encodingutf-8) as f: raw f.read() text clean_draft(raw) if len(text) 280: print(ERROR: text exceeds 280 characters) return 1 client tweepy.Client( consumer_keyos.getenv(X_API_KEY), consumer_secretos.getenv(X_API_SECRET), access_tokenos.getenv(X_ACCESS_TOKEN), access_token_secretos.getenv(X_ACCESS_TOKEN_SECRET), ) resp client.create_tweet(texttext) print(resp.data[id]) return 0 if __name__ __main__: sys.exit(main())发推前清理字符这件事很多人不重视。我之前就让 Claude 生成的文字直接输出结果出现过推文里带一个星号的情况看起来很业余。脚本里做一次净化问题直接消失。字符校验也不能全依赖 Claude因为英文 280 字符限制是按码点算的某些特殊符号和表情占长度跟普通字符不一样写进脚本里强制检查最稳。另外post_tweet.py不接受从命令行直接传文本而是让它读文件。原因很简单文件方式能避免引号嵌套和转义地狱Claude 也不需要在命令行里拼接长字符串出错率低得多。4. 全自动流水线定时触发 校验 复盘4.1 三种定时方案Skill 本身只解决“会发布”的问题真正实现“全自动”还差一个调度器。我评估过三种方案第一种是个人电脑的 cron。配置简单执行稳定缺点是电脑不能关机而且要处理睡眠唤醒问题。如果你用笔记本还要考虑电池策略。第二种是云服务器的 cron。这台服务器 24 小时在线我最后用的就是这种。成本和一顿外卖差不多。第三种是 GitHub Actions。免费额度对个人足够但它的触发有分钟级延迟且运行环境每次都是全新容器要把密钥配在仓库 Secrets 里。我测试过最终因为延迟问题没有采用——早晨那条推文如果晚 10 分钟问题不大但如果你对时间要求卡到分钟级还是服务器更可靠。4.2 调度配置我用云服务器的 cron 实现三段时间控制。配置方式crontab -e写入0 10 * * * cd /path/to/tweet-writer source /path/to/venv/bin/activate python run_daily.py --slot morning 0 15 * * * cd /path/to/tweet-writer source /path/to/venv/bin/activate python run_daily.py --slot afternoon 0 20 * * * cd /path/to/tweet-writer source /path/to/venv/bin/activate python run_daily.py --slot evening这里有个特别容易踩的坑cron 的环境变量跟终端不一样直接写python经常找不到命令必须用绝对路径。而且source那步不能省否则 Python 虚拟环境没激活tweepy 就 import 不到。我在这个位置上至少耗了一个小时才排查明白。run_daily.py做的事情很简单读入当天的主题配置文件调用 Claude Skill 生成草稿把草稿传给post_tweet.py再把日志追加到post_log.csv。这样一个完整的三段发布流程就是闭环了。4.3 发布前的自检光能发还不算完还得让 Claude 在发布前做一轮自检。我在 SKILL.md 里加了一条硬性规则发布前必须逐项检查以下内容全部通过才允许调用 post_tweet.py正文长度是否小于等于 280 字符是否包含绝对化用语最高、最好、史上等是否包含不完整语句或明显逻辑断裂是否包含未经查证的具体数字是否带有会让读者误以为是官方账号的表述这一轮自检非常重要。AI 生成内容速度快但它在事实准确性和风格一致性上并不稳定。没有自检直接发的后果是偶尔冒出一条没头没尾的推文粉丝一看就觉得是机器人乱发。不是不能有机器味而是你得保证即便机器味内容质量也在线。5. 常见问题速查与踩坑实录5.1 高频问题速查表我把三个星期里遇到的所有问题汇总成了一张表方便你排查。现象原因解法发推返回 403 Forbidden应用权限不是“读写”去开发者平台改权限并重新生成密钥发推返回 401 Unauthorized密钥错误或 OAuth 1.0a 配置没开检查 .env 四个字段确认 User Authentication 开启返回 187 Duplicate推文内容和历史推文完全重复在 SKILL.md 中增加“避免和过去三条完全一样的开头”推文显示不全长度超限被截断脚本强制 280 字符校验不要依赖模型自觉cron 不执行环境变量或 python 路径错误用绝对路径命令先手动跑通再加 cron文本多出星号和引号Claude 习惯了 Markdown 语法脚本中做字符清理连续发两条内容雷同主题规划没做去重让 Claude 先读历史日志再选主题这张表覆盖了我 95% 的问题场景。每次新增问题我都往这个表里加一条现在排查难度大幅下降。5.2 三个值得单独展开的坑第一个坑是 OAuth 权限配置。创建 X 应用时默认权限是“只读”如果你不看清楚就直接生成密钥后面所有发推请求都会失败。改权限后注意旧的密钥要重新生成旧的 Access Token 也会失效。这一步必须从头刷新一遍。第二个坑是重复内容检测。X 对完全相同或高度相似的推文有硬性去重机制。刚开始跑的时候上午十点和下午三点各发一条结果第二条约十分钟后收到错误码 187。原因是两条推文开头句式太像被系统判定为重复。后来我要求 Claude 在写下午和晚上推文之前先读一条当天早上的推文换句式、换切入点问题就消失了。第三个坑是 Claude 生成的文本内容带了 Markdown 痕迹。它会把词语包上星号或者行首加井号明晃晃的**重点**出现在推文里非常难看。单纯在 prompt 里说“不要 Markdown”效果不稳定最后还是在代码层做了全面清理才彻底解决。经验就是AI 输出别全信能代码校验就代码校验。5.3 内容调优的复盘笔记运行三周后我拉了一份数据对比。第一周发的内容比较“AI 味重”也就是那种“今天我们来聊聊XX”的句式点赞和转发都少。第二周开始强制改开头要求必须用结论或观点开头互动量明显上升。比如这两个开头差“今天我们聊聊如何提高个人生产力”好“个人生产力提升的秘诀不在于做更多事而在于减少‘伪工作’”同样一个主题换个开头阅读体验完全不同。这个调整在 SKILL.md 的 prompt 里写死之后整体互动数据稳定了一个档位。这也是我推荐把规则写进 SKILL.md 而不是写进代码的原因——你可以一直做内容层面的快速迭代而不需要重新部署代码。写在最后运行这套东西到现在最大的体会是自动化不是“把人力变成 0”而是“把低水平的重复工作交给机器自己只留判断力”。我现在每天打开后台看一眼发布日志偶尔手动调整一下第二天要发布的主题范围真正需要人工干预的时间不超过五分钟。最后再分享一个小习惯每周我会把发布日志导出来统计一下互动量最高的三条推文分别是什么主题、什么句式然后把“高互动主题方向”追加到 SKILL.md 的 prompt 里。这套 Skill 不是一次搭完就固定不变它更像一个持续进出的内容机器人规则你可以反复在文本层面调整成本基本为零。你要是也想搞一套属于自己的全自动发推流水线按这个流程走一遍应该比我想象中顺利不少。

相关新闻

运动是机器人的本质:从控制原理到具身智能落地实践

运动是机器人的本质:从控制原理到具身智能落地实践

先抛一个我经常用来给外行解释机器人的场景:你可以让手机帮你查路线、读新闻、放音乐,甚至陪你聊天,但你没法让手机替你从桌上端一杯水过来。手机再聪明,它的智能停留在屏幕和扬声器里,而机器人不一样——哪怕是一个最…

2026/10/17 6:19:45 阅读更多 →
JSP电影页面实战:Servlet+JDBC+MySQL全链路开发与优化

JSP电影页面实战:Servlet+JDBC+MySQL全链路开发与优化

1. 从零拆解一个JSP电影页面:为什么老技术依然值得动手做一遍做后端开发的人,早晚都会碰到JSP。不是因为它在技术选型里有多时髦,而是因为大量存量系统、教学项目、企业内部管理后台,至今还跑在JSP上。你打开招聘网站搜“Java开发…

2026/10/17 6:19:45 阅读更多 →
BlueSync:在低功耗蓝牙上实现高精度时间同步的协议与工程实践

BlueSync:在低功耗蓝牙上实现高精度时间同步的协议与工程实践

简介:BlueSync是一套基于低功耗蓝牙(BLE)的时间同步协议实现,源自UCLA ENGR299课程项目,适合嵌入式、物联网与无线传感器网络方向的中高级开发者学习或二次开发。压缩包共262个文件、约4.38MB,以192个C头文…

2026/10/17 6:19:45 阅读更多 →

最新新闻

AI辅助科研:赋能学术创新与高效科研成果产出的新路径探索

AI辅助科研:赋能学术创新与高效科研成果产出的新路径探索

很多2026级新生刚入学或刚转博,就被开题报告这四个字整得心力交瘁。最崩溃的不是写不出来,而是你辛辛苦苦熬夜半个月翻出来的创新点,导师看一眼就冷冷地抛回一句:这个方向十年前就有人做透了,前沿性在哪?或…

2026/10/17 6:55:01 阅读更多 →
大模型推理过程故事化透明呈现:原理、实现与落地指南

大模型推理过程故事化透明呈现:原理、实现与落地指南

AI能给出答案,却说不出自己为什么这么想。这句话几乎可以概括过去几年里我跟多数做AI落地朋友共同的痛点。模型输出越强,它内部的推理过程反而越像个黑盒;我们拿到了准确率,却拿不到一条能说给人听的、带逻辑链条的解释。最近某顶…

2026/10/17 6:55:01 阅读更多 →
7131、6293、4762、1579:同一份稿子在四个编辑器里的四个长度

7131、6293、4762、1579:同一份稿子在四个编辑器里的四个长度

7131、6293、4762、1579:同一份稿子在四个编辑器里的四个长度 昨晚我发一篇稿子,脚本的日志里跳出来四个数字。 源文件 7131 博客园 7131 简书 6293(DOM)/ 8779(服务端) 知乎…

2026/10/17 6:55:01 阅读更多 →
Java 转 Python 后端 04: GIL 机制、单线程事件循环与异步并发实战

Java 转 Python 后端 04: GIL 机制、单线程事件循环与异步并发实战

第 5 章 并发体系、异步编程与 Agent 后端实战 5.1 并发基石:GIL 机制与并发选型矩阵 Java 工程师非常熟悉 JVM 内存模型(JMM)、内核线程与 JUC 线程池,在 Java 里多线程可以轻松打满多核 CPU。而在 Python 中,首先需要…

2026/10/17 6:55:01 阅读更多 →
Python集成学习实战:从Bagging手写到LightGBM时序CV与Stacking元特征

Python集成学习实战:从Bagging手写到LightGBM时序CV与Stacking元特征

简介:这是一本面向Python开发者与机器学习实践者的集成学习速成指南,适合已掌握基础Python、NumPy及scikit-learn的中初级学习者,旨在7天内系统掌握装袋、随机森林、AdaBoost、梯度提升、投票与堆叠六大主流集成方法,解决单一模型…

2026/10/17 6:55:01 阅读更多 →
Harbor私有镜像仓库部署与运维实践:从架构到避坑指南

Harbor私有镜像仓库部署与运维实践:从架构到避坑指南

一套业务系统跑了一两年,环境中几十上百个容器,镜像分散在各台机器甚至每个人电脑里,等到要统一发版、回滚版本的时候,才发现连一个准确的镜像清单都凑不出来。这种场景我想很多团队都经历过。所以当我的某位合作伙伴第一次提出“…

2026/10/17 6:54:01 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →