手机变身AI实验室:用AutoGLM与GLM-4.7实现全自动打卡

每天到工位先掏出手机点打卡,这事我坚持了三年,直到有一天我实在烦了,决定把手机彻底交给AI。当时刷到一个叫AutoGLM的开源手机智能体框架,正好我电脑上还挂着智谱GLM-4.7的模型服务,就顺手做了个小实验:让手机自己打开打卡App、自动定位、点击提交,最后再给我截个图骗不了的那种。第一次跑通的那天上午,我盯着屏幕看它自己完成整套流程,说实话心里有点发毛,但更多的是兴奋——原来手机不是只能装应用,它本身就可以是一间AI实验室。

这篇文章就是那个实验的完整复盘。我会从AutoGLM的核心原理讲起,再拆解环境搭建、打卡任务的落地实操、踩坑记录,最后聊聊怎么把这个能力迁移到别的场景。适合谁看?一个是每天被固定流程反复折腾的上班族,另一个是对AI Agent感兴趣、想动手搞点真东西的开发者。不管你是哪种,这篇文章里没有玄学,只有能复现的步骤和我替你们走过的弯路。

1. 为什么手机能当AI实验室:AutoGLM的原理与玩法拆解

1.1 AutoGLM到底是啥:从“会聊天”到“会动手”

大模型我们已经很熟了,你问它“怎么打卡”,它能给你写一篇800字攻略。但AutoGLM这类开源智能体框架解决的是另一件事:让它真的去执行。两者的差别就像教练和运动员,教练说得头头是道,运动员才是上场跑完那个。

手机端的智能体要干活,本质上是三件事:看屏幕、想下一步、动手操作。看屏幕靠截图和多模态理解,想下一步靠大模型推理,动手靠系统辅助功能接口模拟点击、滑动、输入。AutoGLM干的事情,就是把这三步拧成一个闭环:截图 → GLM-4.7分析当前界面 → 返回一个结构化操作指令 → 系统执行 → 再次截图验证结果。

这里必须强调一个容易被忽略的点:它做的不是简单的坐标点击自动化,坐标点击那种方案又脆又傻,换个分辨率就全废。AutoGLM走的是语义层操作——模型看的是界面文本和控件类型,比如“找到一个按钮,它的文字是打卡,点击它”。哪怕界面布局变了,只要按钮文字还在,它就能重新定位。这一点直接决定了这套方案在真实App里的存活率。

1.2 从“会聊天”到“会动手”:任务拆解是核心能力

我一开始以为,只要对模型说一句“帮我打卡”就完事了。真跑起来才发现,模型能理解这句话,但它不知道你的打卡App长什么样、按钮藏在哪里、中间会不会弹广告。

所以做智能体任务,核心不是写Prompt,而是把目标拆成“可执行步骤”。我自己的方法是先把流程写成伪代码:

  1. 如果屏幕上有“打卡”App图标,点击它。
  2. 等待App完成加载,识别“考勤打卡”入口。
  3. 点击“定位打卡”或者“打卡”按钮。
  4. 如果弹出“确认提交”弹窗,点击“确定”。
  5. 验证屏幕出现“打卡成功”之类的提示,截图留证。

这一步做得好不好,直接决定后面模型的具体表现。拆得越细,模型就越少产生歧义。AutoGLM的框架通常支持“任务指令 + 操作定义”的结构化输入,你可以把上面这种伪代码转成它认识的格式。这也是我最想让你先记住的经验:智能体不是魔法,它是把人的步骤感翻译给机器听。

2. 环境准备:搭建一套极简的手机自动化实验环境

2.1 物料清单:你需要准备的设备与安装包

这套实验的最低配置很亲民,不用顶配旗舰机,但有些基础条件必须满足:

  • 一台Android手机,系统版本建议8.0以上,太老的无障碍接口不完整。
  • 开启开发者选项和USB调试,用于连接电脑查看日志、安装调试包。
  • 一个AutoGLM运行环境,可以直接拉开源仓库的代码自己编译,也可以用社区编好的预构建版本。
  • 一个GLM-4.7模型服务,两选一:本地部署(需要一张显存大点的显卡,或者用量化版本跑CPU)或者调用在线API。
  • ADB工具包,电脑上装一个,方便做日志抓取和命令下发。

需要说明的是,这里说到的AutoGLM和GLM-4.7并不是一套完整商业系统,更像是“轮子”。我们真正要做的,是把轮子装到自己的车上。我自己的实践是用一台闲置的老Android机当测试机,因为自动化框架要不断试错,主力机上装来装去容易影响日常使用。

2.2 初始化配置:开通无障碍服务与必要的权限

这是整套流程里最敏感也最关键的环节。手机自动化为什么普遍要开“无障碍服务”?因为Android系统出于安全考虑,不允许普通App直接替用户点击屏幕,无障碍服务是官方留出来的合法通道,原本是为了帮助视障用户操作手机。智能体框架正是借了这条通道,才实现的点击、滑动、读取控件内容。

配置路径大同小异:设置 → 无障碍 → 已下载的服务 → 找AutoGLM对应的服务,开启即可。这里有个容易踩的坑:很多手机厂商会在后台杀掉无障碍服务,特别是某些主打“省电优化”的机型,明明设置好了,过几个小时再一看,服务已自动关闭。解决办法是在系统设置里把智能体App锁定后台,多任务卡片上点锁,部分激进系统还需要在电池优化里设置为“不限制”。

除了无障碍,还要给摄像头权限吗?不需要,AutoGLM默认抓取屏幕截图,不需要拍照权限。但存储权限要开,因为截图文件要落盘;位置权限要谨慎处理,比如打卡App会要求定位,那是App自己的权限请求,属于自动化执行过程中的正常交互。

2.3 模型服务接入:本地部署还是在线API?参数怎么选

AutoGLM本身只是个“手”,负责操作手机。GLM-4.7才是“脑子”,负责看屏幕、出决策。所以第二步是把两者串起来。

我以我自己的环境举例。本地部署方案:下载GLM-4.7对应的开源权重,用标准推理脚本启动本地服务,监听特定端口。内存和显存是主要门槛,我是量化版本加载,大约占用不到16G显存,CPU模式也能跑,但每一步决策可能要等几十秒,体验比较痛苦。在线API方案更省心,注册之后拿一个密钥,在AutoGLM配置里填上接口地址和模型名即可。

这里有个重要的参数经验:温度temperature要调低,比如0.1~0.3。原因很简单,自动化操作需要稳定,不需要创造力。温度太高,模型同一任务十次能给你出十种不同写法,执行起来非常不稳定;温度低一点,它倾向于输出保守、可预测的操作序列。另一个参数是max_tokens,关于这个我要多说两句:模型既要输出动作,又要输出验证条件,给太少会导致动作被截断,建议至少给到1024以上,复杂任务给2048。

3. 自动打卡落地:从Prompt设计到端侧部署的完整流程

3.1 定义打卡任务的“动作序列”:状态机思考法

忠实用户已经知道,「说一句话私AI就自动打开App操作」的难度在于,模型需要随时判断当前处于流程的哪一步。所以我建议在Prompt中用“状态机”的思路,把任务划分成多个封闭的状态:

  • 初始状态:桌面
  • 状态A:打卡App首页
  • 状态B:登录页
  • 状态C:考勤页面
  • 终态:打卡成功

每个状态干什么、如何判断进入下一状态,全部在Prompt里写清楚。相当于给模型一张地图,而不是让它瞎猜。

以我实际使用的模板为例,任务描述部分我会这样写:

任务:在XX打卡App上完成打卡。 你可以使用的操作: - tap(text):点击包含指定文本的控件 - input(text):在输入框填入文本 - wait(秒):等待界面加载 - back():返回上一级 - screenshot():截取当前屏幕 - verify(text):断言当前屏幕出现期望文本 请严格按以下状态顺序执行: 1. 如果屏幕不在打卡App,先打开App。 2. 等待进入App首页,寻找“考勤打卡”或“打卡”按钮。 3. 点击打卡按钮后,如果出现定位授权或提交确认弹窗,选择允许或确定。 4. 每步执行后截图,并输出当前状态为OK或FAIL。 5. 当屏幕出现“打卡成功”字样时,停止操作,输出最终结果。

这段Prompt没有华丽的词藻,但模型理解起来非常准确。别把提示词写成“请你帮我打卡”,那是不负责任的。好的任务描述应该像给实习生写SOP,一条一条列清楚。

3.2 执行与验证:为什么每一步都要“截图证明”

我最初版本的Prompt没有验证步骤,模型一股脑往下点,结果点错了还在继续,甚至退出打卡App回桌面了。后来我才加上了“verify”这一步,就是上一步操作完成后,必须截图确认预期界面出现,再进入下一步。

本质上这是给智能体加了一道“自检回路”。如果某一步验证失败,模型应该停下来,而不是硬着头皮执行后面的步骤,或者盲目重试。在实际运行中,这个设计救了我很多次。比如打卡按钮被广告弹窗挡住,验证失败后模型停下来报告“未找到目标控件”,我再针对弹窗增加一条处理规则,整个流程才变稳。

这里有一个特别细节的处理:等待时间。App加载慢是常态,如果刚点完按钮立刻验证,大概率失败。我习惯在关键点击之后加一个wait(2~3秒),等页面稳定后再验证。参数别写死太长,否则一次打卡要半分钟,人早自己点完了。

3.3 定时触发:让它每天自己跑起来

流程跑通只是第一步,能做到“每天到点自动执行”才算真的解放双手。定时触发我试过两条路线:

  • 第一条是手机本地的自动化工具,设定每天固定时间发出一个任务广播,唤醒AutoGLM去执行打卡任务。这个方案的好处是不依赖电脑,但要求自动化工具与AutoGLM之间能通信,有些时候要写一点简单的任务脚本来桥接。
  • 第二条是电脑端定时器,每次到点通过ADB向手机下发一条执行命令。优点是可操控性强,日志也好收集;缺点是手机要连着电脑,或者在同一局域网内开启网络调试。

我最后采用的是手机端定时方案。具体实现不复杂:在自动化工具里添加每天09:00的打卡任务,动作是启动AutoGLM并传入任务ID。我还做了一个保护逻辑:如果当天已经打卡成功,就跳过执行,避免重复提交。这一点建议所有做自动化的朋友都加上,没人想因为脚本抽风再跑一遍流程的。

3.4 从命令行到无人值守:一次完整的真实运行记录

为了让概念更具体,我把一次真实运行的日志简化一下,大概是下面这个样子:

[09:00:01] 任务启动:打卡任务 [09:00:02] 当前界面=桌面,开始查找图标 [09:00:05] 执行 tap("考勤打卡") [09:00:08] wait(2秒) [09:00:10] 截图验证,发现登录页,进入状态B [09:00:11] 执行 input("手机号") [09:00:13] 执行 input("密码") [09:00:15] 执行 tap("登录") [09:00:19] 截图验证,发现首页,进入状态C [09:00:21] 执行 tap("上班打卡") [09:00:23] 弹窗出现,exec da("确定") [09:00:26] 截图验证,发现“打卡成功”,任务结束

整个流程26秒,而我自己手动操作通常也要15秒左右,这个效率完全可接受。而且中间不需要我的任何干预,模型像一个非常听话的实习生,每一步都会先看再动。第一次跑通那会儿我真就坐在旁边看着,有种在带新人的感觉。

4. 实操中踩过的坑:误触、弹窗、网络白屏与界面变化

4.1 弹窗拦截与误触:一招解决“模型被广告带走”

手机App最大的敌人不是人脸识别,是五花八门的弹窗。打卡App时不时弹出“签到有礼”“升级提示”“红包领取”,模型第一步点打卡按钮还好,万一弹窗刚好出现在按钮上面,它可能就点进广告页里出不来了。

我的处理方法是给Prompt加一条“弹窗优先”规则:任何一步执行前,先截图检查是否出现“关闭”“跳过”“取消”等弹窗关闭按钮,如果出现且内容与当前任务无关,优先点击关闭,再执行原计划操作。这条规则写进去之后,任务成功率至少提高了三成。别小看这一句,弹出拦截本质上就是智能体在动态世界中保持目标稳定的能力。

4.2 网络白屏与等待时长:别让模型在加载页里硬刚

打卡App偶尔会出现白屏或加载动画停留很久的情况。模型如果看到白屏,它会敏感地认为“目标控件不存在”,然后给出FAIL,白白打断流程。后来我在验证逻辑里增加了一个“等待确认”机制:当预期控件未出现时,先等待2秒再截图确认,如果连续两次确认仍失败,才判断为异常。

这个机制的好处是大幅减少误报。但你也别太乐观,有些App加载要十秒以上,2秒根本不够。再狠一点的处理是设一个“最大等待时长”,比如15秒,超过这个时间就判定网络异常并停止任务。杜绝了模型卡在加载页里反复重试直到把流量耗尽的情况。

4.3 UI版本更新:当按钮名字从“打卡”变成“完善信息”

打卡App没人会承诺UI永远不变。某次小版本更新后,按钮文字从“上班打卡”改成了“开始考勤”,模型找不到目标控件,整个流程就断了。这是所有自动化方案都会遇到的宿命问题。

但是我发现一个增强鲁棒性的写法:在Prompt里给按钮准备别名。比如“寻找打卡相关按钮(可能叫:打卡、开始考勤、上班打卡、签到)”。模型在语义理解上的优势在这里体现出来了,就算文字有所变化,它也能通过上下文推断出哪个是打卡入口。这比传统自动化脚本里写死一个坐标或者一个固定控件ID要坚强得多。

4.4 重复打卡与幂等保护

这条是血的教训。有几次定时任务执行时,打卡结果还没弹出来,模型以为失败了,又重新点了一遍,结果当天出现了两条打卡记录,被HR提醒过一次。所以我在任务描述里明确加了“幂等”这个约束:执行前先查看当天是否已有打卡记录,如果有,立即停止。模型看到“已打卡”标识就不会再执行。这个逻辑建议所有自动化任务都内置,不只是打卡,涉及资金、数据写入类的操作尤其要注意。

5. 从打卡到更多场景:把手机变成个人AI工作流

5.1 场景迁移:自动回复、订餐、信息整理

整套方案跑通之后,你会发现手机上的重复劳动窗口基本都被打开了。同原理可以迁移的场景我列几个:

  • 自动查天气并整理出行建议,早上推送通知。
  • 自动回复工作群里的固定问候,比如“收到”。
  • 自动打开外卖App,按预设订单完成订餐。
  • 自动整理短信里的验证码,汇总到备忘录。
  • 自动把公交卡、地铁App里的余额截图存到账本。

每一个场景的落地方式和打卡任务完全一样:拆步骤 → 写状态 → 加验证 → 设触发。我给朋友演示的时候,经常会说这不是做一个App,而是给你手机配置一名“数字员工”,你只负责定目标,具体操作它来做。

5.2 边界与安全提醒:能自动化的,不等于该自动化的

提到这里我必须泼一盆冷水:手机自动化越强大,越要克制。涉及密码输入、支付转账、人脸识别等敏感操作,我不建议交给智能体全自动执行。不是技术上做不到,而是一旦出现误触发或指令被污染,后果远超过省下的那点时间。比较稳妥的模式是“半自动”:智能体负责导航和操作,遇到支付确认之类的关键节点,停下来等人类点头。

隐私方面也要心里有数。你要给AutoGLM赋予非常高的系统权限,它相当于能替你在手机上做几乎任何事。所以尽量只在一台专用手机上跑,别在主力手机上装;任务Prompt里也别写明文密码,尽量用系统级的密码管理方式去处理,或者干脆只做免登录的流程。

5.3 给新手的入门建议:从小任务开始,先不要贪多

如果你也想把手机改造成自己的AI实验室,我的建议是从一个特别小、特别无风险的任务开始,比如“自动打开天气App并截图”。这个任务不涉及任何敏感操作,即使跑砸了也没什么损失。跑通之后再逐步增加步骤,比如登录、填表、跨App跳转。每增加一个环节,就多观察一次日志,确认稳定后再管下一个。

另外不建议一上来就折腾本地模型部署。先接在线API把流程跑通,理解智能体的工作方式之后再考虑离线部署。很多人在环境配置这一步就被劝退了,其实是把顺序搞反了,工具是次要的,核心是把“拆解任务”和“设计验证”这两个思维练出来。

我在实际使用中最大的体会是:把手机交给AI不难,难的是你信不信任它。信任不是靠感觉,是靠一步一步的验证堆出来的。当你看到打卡App在无人工干预的前提下,每天准点完成那套流程,并且在状态日志里留下“验证通过”四个字,你会觉得这块手机屏幕,确实就是一个真正属于你的小实验室。

相关新闻

大模型并行训练全解析:从显存墙到混合并行实战

大模型并行训练全解析:从显存墙到混合并行实战

单机显存耗尽,训练脚本崩溃退场的那晚,我盯着屏幕上的OOM日志,第一次意识到并行训练不是加分项,而是AI应用架构师的硬门槛。后来陆陆续续在多个大模型项目里折腾分布式训练,从单机多卡到多机多卡,从数据并行…

2026/10/20 20:48:53 阅读更多 →
5G核心技术全景梳理:从演进逻辑到网络架构的入门指南

5G核心技术全景梳理:从演进逻辑到网络架构的入门指南

整理5G学习笔记时,我给自己定了一个规矩:每一个技术点都必须回答“它到底为哪个场景解决什么问题”。这套笔记从1G读到5G,从物理层一路看到核心网,中间推翻过好几版结构,最后沉淀下来的主线非常清晰:演进逻…

2026/10/20 20:48:53 阅读更多 →
Coding Agent与Personal Agent架构差异:从收敛到延续的设计逻辑

Coding Agent与Personal Agent架构差异:从收敛到延续的设计逻辑

1. 两类智能体的本质差异:先从"服务对象"说起Coding Agent 和 Personal Agent,这两个词最近在开发者圈子里高频出现。很多人以为它们只是"写代码的Agent"和"处理个人事务的Agent"的区别,但真正做过底层架构设计…

2026/10/20 20:47:50 阅读更多 →

最新新闻

FPGA开发者必看:SRIO协议从IP配置到数据收发的完整调试指南

FPGA开发者必看:SRIO协议从IP配置到数据收发的完整调试指南

简介:面向FPGA与嵌入式系统开发者,这套Xilinx SRIO使用例程围绕Serial RapidIO高速串行互连协议在Spartan6系列中的实际部署,系统覆盖硬核配置、端口速率选择、测试平台搭建与仿真验证,解决高带宽低延迟场景下的接口设计与调试难题…

2026/10/20 21:31:57 阅读更多 →
DeepSeek+客流预测实战:文旅景区智能调度与数据治理指南

DeepSeek+客流预测实战:文旅景区智能调度与数据治理指南

元旦当天上午九点半,某古镇指挥中心的大屏上,瞬时客流曲线还在平缓爬升。过去一到这种关键节点,我们只能靠值班长拍脑袋判断“今天会不会爆”。后来我们把整套逻辑改了:先用 DeepSeek 处理近三年的客流历史数据,产出小…

2026/10/20 21:31:57 阅读更多 →
人工智能防火墙实战:从对抗攻击原理到纵深防御体系

人工智能防火墙实战:从对抗攻击原理到纵深防御体系

1. 先从一张贴纸说起——AI模型并没有你想象的那么“刚”前两年我做过一个小实验,到现在印象都很深:贴在停车标志上的一张黑白贴纸,能让当时测试用的视觉识别模型把“Stop”识别成“限速40”。贴纸的面积不到标志的十分之一,人眼看…

2026/10/20 21:31:57 阅读更多 →
FreeImage Windows编译指南:VS与MinGW完整实践与排坑

FreeImage Windows编译指南:VS与MinGW完整实践与排坑

先聊点实际的。做图像处理或者工具链开发的朋友,应该都遇到过这种场景:手头项目跑得好好的,突然丢过来一批乱七八糟的图片格式,BMP、JPEG、PNG、TIFF、GIF、WebP 混杂在一起,有些还带 EXIF,打开一看全是相机…

2026/10/20 21:31:57 阅读更多 →
报错注入攻击原理与实操:从SQL错误信息泄露到数据提取

报错注入攻击原理与实操:从SQL错误信息泄露到数据提取

1. 报错注入到底是怎么一回事1.1 从一个登录框说起很多做Web开发的朋友都有过这样的经历:写了一个查询接口,用户输入一个ID,后台拼一条SQL去数据库里捞数据,返回结果。逻辑简单,代码也不复杂。但如果这个ID参数没有经过…

2026/10/20 21:31:57 阅读更多 →
图数据建模必知:从转导式到归纳式学习的范式切换实践

图数据建模必知:从转导式到归纳式学习的范式切换实践

前阵子接手一个图数据的用户行为预测项目,最初跑得挺顺,后来每来一批新用户,模型效果就肉眼可见地掉。一开始我以为只是特征没做好,调了一周才意识到,问题出在我用的学习范式上——我一直在一张静态图上做转导式&#…

2026/10/20 21:30:50 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →