OpenShell实操指南:自然语言转Shell命令的安全终端助手
1. OpenShell 不是又一个“AI 套壳终端”它到底长什么样1.1 从一次半夜误删目录的教训说起先说清楚我为什么开始折腾 OpenShell。有次半夜排查一个线上问题手忙脚乱本来想删临时目录temp_bak结果因为路径自动补全时按快了一条rm -rf /data/app/temp_bak /直接被发出去了。等反应过来那个斜杠后面的内容已经没了一半。虽然大部分数据后来靠备份找回来了但那一晚上给我留下的阴影非常大。我知道这不是工具的问题是我自己的问题——终端给的反馈太薄误操作成本太高。所以我开始想能不能给 Shell 套一层“会说人话”的护盾在我敲下危险命令之前让一个助手先告诉我这条命令到底要干什么、影响哪些文件、有没有明显的坑。同时我又不想把终端完全变成一个聊天机器人窗口毕竟grep、awk、git log这些老朋友是真的顺手下。后来我索性写了套东西名字就叫 OpenShell。它本质上不是某个大模型的单独壳子更准确地说它是一组把“自然语言意图”和“真实 Shell 命令”连接起来的工作流覆盖了解释、确认、执行、回灌这一整条链路。OpenShell 适合两类人。一类是刚接触命令行的朋友经常想不起来某个参数拼写与其翻十分钟 man page不如让 OpenShell 给出带注释的候选命令。另一类是像我这种老油条虽然命令都熟但偶尔会有“一时上头”的时候——批量操作几百个文件之前多花三秒钟看一眼它准备怎么执行值得。1.2 一次典型交互长这样简单展示一下它的使用方式。我在终端里用os作为命令入口后面跟自然语言描述它会先给出解释和命令再由我决定要不要执行# 我想看看 nginx 日志里最近 20 分钟有多少 5xx 错误 os 最近20分钟nginx日志里5xx错误有多少 # OpenShell 的返回大概是这样的 # 意图识别统计 nginx access.log 中最近 20 分钟状态码为 5xx 的请求数量 # 候选命令awk $4 [时间戳] $9 500 {count} END {print count} /var/log/nginx/access.log # 危险等级低 # 执行方式仅展示不自动执行对它第一步并不是直接把命令跑起来而是先把“我的意图”和“它理解到的命令”对齐给我看。等我说“执行”它才会真正去跑。这一步看起来只是多了个确认动作但实际上解决了一个很关键的问题大模型生成命令这件事本身不可怕可怕的是生成完不解释、不确认、直接丢进bash执行。OpenShell 做的核心事情就是把这条要命的链路拆开每一段都留给人来把守。后来我慢慢把 OpenShell 从一个“查询工具”扩张成了一套有本地记忆、有危险命令分级、有回退机制的终端助手。现在它在我日常机器和服务器上都在用写这篇文章就是想把我踩过的坑和最终沉淀下来的方案都讲清楚免得你再从零趟一遍。2. 设计 OpenShell 时做过的三个关键取舍2.1 先解释后执行把“信任”拆成两步第一个关键取舍也是最核心的取舍OpenShell 默认永远不把自然语言直接转成可执行命令然后立刻执行。哪怕我说“运行它”它也要先输出一段“意图-命令对照”再由我按回车确认。有人可能会觉得这样太啰嗦。我刚开始做原型的时候也确实设想过“低风险命令直接跑、高风险命令才确认”但后来发现“风险高低”这个判断没那么可靠。比如curl命令看起来人畜无害但如果你误写成往内网某个接口POST了一大堆数据它一样能造成事故。又比如chmod -R 777系统没任何报错但整个项目的权限一下就乱了。所以我的做法是把“信任”拆成两步先相信模型能理解意图再相信我能看懂它给的解释。第二步永远不跳过。实际代码里我会把模型返回的原始输出拆成结构化字段包括intent一句话描述它理解的用户意图command候选 shell 命令risky危险等级标记reason为什么推荐这条命令。展示给用户时只把intent、command、reason渲染出来risky用来决定底部提示颜色。这样即便模型本身判断错了最终拍板的人依然是我。2.2 三级确认模式替代“y/n”无脑确认第二件事是我把执行确认做成了三个级别而不是所有命令都弹同一个y/n。默认情况下OpenShell 的所有执行请求都会走到手动确认。但日常用久了你会发现老在低风险命令上点头也很烦。所以在稳定跑了两个月后我加了三个模式safe模式只对rm、mv、dd、mkfs、file这类白名单中的危险操作做确认normal模式所有命令都在终端展示但只有被标记为高风险或涉及路径删除的才需要回车确认auto模式完全自动执行只记录日志不做任何确认。实际使用中我大多数时间开的是safe或normal。auto模式我只会在一个完全隔离的测试容器里用绝不在生产环境开启。这里有个细节值得提一下命令是否危险不能光看开头的程序名还要看参数。比如rm本身不危险但rm -rf很危险dd不危险但dd if/dev/zero of/dev/sda就是灾难。所以判定逻辑不能写死成一张程序名单而要做成“程序名参数特征”组合判断。2.3 不把宝全押在大模型上本地词库兜底第三个取舍也是最容易踩坑的部分不要把每个字都交给大模型。OpenShell 的完整链路里模型只负责理解和生成自然语言辅助信息至于命令本身我要先用本地逻辑做一次“预对齐”。我会在本地维护一张常用命令表和别名表比如list file→ 优先推荐ls -lh和find . -maxdepth 1 -type fkill process→ 先尝试用pgrep -f找到进程再生成killchange permission→ 记得同时拼接-R是否递归。这张本地表不需要做得多大几十条核心操作就够。它的价值在于当模型推荐的命令跟我本地预判不一致时OpenShell 会弹出一个小提示告诉我“模型给的方案和常规做法有差异请二次确认”。这就避免了好几次因为模型幻觉把mv拼成cp的问题。另一个兜底是把候选命令里的路径参数规范化。比如我经常写“那个文件”OpenShell 会结合当前目录、最近修改时间、文件大小这些信息用glob和fzf的方式列出候选让我选后再生成完整命令。这一步很实用因为它让“自然语言”真正变成了“参数补全”而不是让模型瞎猜路径。模型一旦在路径上猜错它自己很难感知到但本地逻辑可以。3. 核心链路拆解自然语言怎么变成一条可执行命令3.1 上下文拼装让 AI 记住你在哪个目录、刚看过哪份日志OpenShell 的第二步是拼上下文。这个拼上下文不是把聊天记录全部塞给模型而是有选择地注入几个关键字段。我把每次会话当成一个“工作状态”里面包括当前目录路径和目录下的文件列表只取前 30 个文件名当前 Shell 用户名、主机名、操作系统类型最近执行过的 10 条命令当前会话里最近一次os交互时提到的目标文件或目录如果用户刚才用cat看过某份日志OpenShell 会把该文件的后 50 行作为“临时上下文”。举个例子如果我在/var/log目录下执行过tail -100 nginx/access.log然后问 OpenShell“刚才那堆 5xx 来自哪些 IP”它能知道你不只是问“从日志里找 5xx”而是要从刚刚查看过的那个具体文件里找。这种能力靠纯命令解析很难做但靠“会话状态注入”就很容易实现。在实现上我给每次交互分配一个会话 ID用 JSON 缓存当前工作区的快照。每次提问时组装成如下的 prompt 结构你是运行在终端里的 Shell 助手。 当前用户ubuntu 当前目录/var/log 操作系统Linux 6.8 最近命令 - tail -100 nginx/access.log - ls -lh 用户需求刚才那堆 5xx 来自哪些 IP 约束 - 只输出 JSON 格式结果不要解释 - command 必须能在 bash 中执行 - 不要使用 sudo除非用户明确要求。这个 prompt 结构经过很多轮迭代关键点是要明确告诉模型“不要解释、不要夸夸其谈、直接给 JSON”。否则它会给你输出一大段带 markdown 的废话解析起来很痛苦。3.2 参数补全与模糊匹配它怎么猜你“那个文件”是哪个很多人第一次用 OpenShell 时最容易疑惑的问题是我明明说的是“那个配置文件”它怎么知道是哪个这里我没有用任何玄学就是靠三个步骤第一步本地逻辑先从当前目录里把候选文件找出来按修改时间倒序排把最近改动过的文件排在前面。如果用户刚才看过某文件那张“刚才看过”的临时上下文优先级更高。第二步把文件名和用户句子里提到的片段做模糊匹配。比如用户说“那个 nginx conf”当前目录有nginx.conf.bak和nginx.conf.newOpenShell 会把nginx.conf.new排在nginx.conf.bak前面因为“new”和用户想要的“当前配置”语义更接近。第三步如果仍然有多个候选OpenShell 不会硬猜而是列出候选让我选? 你指的是哪个文件 /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak /etc/nginx/sites-available/default.conf这比模型自己随便选一个要安全得多。以前我试过让模型直接填路径十个里有三个是错的而且错得很自然不仔细看根本发现不了。现在强制走候选确认路径问题基本绝迹了。3.3 执行结果回灌命令跑完之后学习才刚刚开始OpenShell 区别于普通“自然语言转命令”工具的地方是它有一步执行结果回灌。命令执行完之后OpenShell 会捕获退出码、标准输出、标准错误的关键信息再发回给模型做一次“结果摘要”。这里不是把完整输出乱塞回去而是做截断和结构化比如只保留退出码是否为 0如果有报错保留前 200 个字符的错误信息如果命令是表格输出保留前 20 行如果命令产生了文件比如日志、临时文件记录文件路径和大小。然后 OpenShell 把这次“请求-命令-结果-摘要”整体存进本地 SQLite 历史表里。下一次你再问“刚才的结果说明什么问题”它可以直接从这个历史表里翻出完整的上下文不需要重新执行那条命令也不需要在对话里反复贴日志。举个很实际的例子。有一次我批量压缩一批图片OpenShell 帮我生成了for i in *.png; do pngquant $i --output opt/$i; done。执行后有一张图片因为文件名里有中文导致路径断裂。OpenShell 把这条报错信息回灌给它自己然后主动建议“用find -print0配合while read -d 处理空格和中文文件名”。我确认后放心执行这就是一个典型的“执行结果回灌”带来的好处。4. 哪些场景真的值得用 OpenShell4.1 日志分析一条命令看完整月报错日志分析是我用 OpenShell 最频繁的场景。以前排查问题时要手写一串awk处理时间范围、状态码、IP 排序费时间不说写错了还没人提醒。现在我可以直接说os 统计 /var/log/nginx/access.log 里这周每天的 502 数量按天排序OpenShell 会先给我一条类似这样的命令awk {print $4} /var/log/nginx/access.log | cut -d: -f1 | sort | uniq -c | sort -rn它还知道要加grep 502 过滤状态码并且会把$4这个字段先转成可读格式再分组因为它知道 nginx 日志里时间字段是[02/Jan/2025:13:45:10 0800]这种格式。这种细节光靠人记很容易错但它是从上下文和历史回灌里学到的。另一个更爽的场景是把几条命令串成管道。比如先找报错 IP再去查这个 IP 的请求分布最后统计响应时间。我只需要说“先找 top 10 报错 IP再查这些 IP 的请求时间分布”OpenShell 会把这两步拆成两条命令然后一步步执行中间自动把第一条的输出作为第二条的输入条件之一。这样就不需要我手动把 IP 列表复制粘贴到第二条命令里了。4.2 批量文件操作与 Git 场景批量文件操作是收益很大但风险也很高的场景。比如批量重命名传统做法可能是rename s/old/new/ *.txt但如果正则写错了轻则名字不对重则覆盖同名文件。OpenShell 在这里做的事情是先把要重命名的文件列表和对应目标名列出来让我一眼能看到完整 mapping确认无误后再执行。Git 场景我会更谨慎一些。OpenShell 可以自动生成git add、git commit的消息建议但我不让它直接执行push。它的交互一般是os 看下当前改动帮我起个提交信息 # 候选命令git status --short # 然后根据 status 结果生成提交信息 # 提交信息如feat: 增加 OpenShell 日志回灌模块提交信息这东西模型生成的确实比我自己敲的规范但需要小心它把“不该提交的文件”描述得头头是道。所以我会让它执行git status、git diff --stat这类只读命令然后把结果展示给我最后我自己手动git add和git commit。安全性和便利性之间取一个折中是值得的。还有一类是文件迁移比如“把/data/images下 7 天前的文件挪到冷存储盘”。OpenShell 会生成find /data/images -type f -mtime 7 -exec mv {} /backup/images/ \;这条命令并把受影响文件数量先统计一遍。我确认数量合理才执行这比直接闭眼跑 shell 循环靠谱得多。4.3 服务器环境里的正确打开方式在服务器上使用 OpenShell我特别建议收敛模式甚至可以考虑把确认模式强制设为safe。服务器上可没有后悔药一个rm -rf删库跑路的故事大家都听过。我在生产环境会额外加两步禁掉su、sudo、rm -rf /、mkfs、dd等命令除非用户手动取消禁用对任何涉及--force、-rf、-f的命令强制做一次“变更影响范围”的估算给出文件数量、路径前缀和预计大小。有一次它给我生成了一条rsync同步命令因为目标目录写成了userhost:/data/而不是userhost:/data/backup/差点把主库目录覆盖掉。OpenShell 检查到目标路径以/data/结尾属于高危模式直接拒绝了执行并提示“目标路径疑似为根路径是否改为子目录”。这一步救了我一命。所以我在服务器上宁愿让它多管一点也不愿意太“放手”。5. 踩坑复盘与现在的使用习惯5.1 权限边界不能靠“提示词自觉”第一个大坑我早期天真地以为在 prompt 里写一句“不要执行危险命令”就够了。结果模型照样给我生成sudo rm -rf /tmp/* /var/log这种命令。它确实没有直接执行但问题在于它把命令摆在我面前如果我看走眼按了回车锅还是我的。所以后来我把权限判断从“模型自觉”改成了“本地规则硬卡”。OpenShell 在展示最终命令前会跑一套本地规则引擎扫描命令字符串里的危险片段。规则包括rm带-r或-f且路径不是绝对路径、重定向到关键路径如/etc/passwd、/home、/rootmkfs、dd、shutdown、reboot系统更新类命令会要求二次输入理由任何包含sudo但当前用户不属于 sudo 白名单的场景。这套规则触发后OpenShell 不是简单地给个警告而是直接禁用“确认执行”选项只允许你复制命令手动操作。从设计上强制把人拉回清醒状态。5.2 不是所有模型都能干这活别贪便宜第二个坑是模型选择。OpenShell 底层可以接不同的模型我试过本地小模型、开源微调模型、还有商用 API。试完一圈我最终的结论是代码生成类任务参数 7B 以下的本地模型真不太行。不是它写不出命令而是它容易在细节上出问题。比如把awk的字段顺序写错或者把sort -k 2理解成排序第二列文本而不是第二列数值。更烦的是它会一本正经地解释成一个完全错误的算法如果你对命令没那么熟很容易被骗。我的建议是如果条件允许优先用中等及以上能力的模型来做生成本地规则只做安全兜底和参数补全。如果只能跑本地小模型那就把它限制在“解释命令”和“生成 prompt 草稿”这两个低风险场景不要让它直接负责最终命令。另外模型温度参数也要注意。OpenShell 生成命令时会读取用户配置文件里的temperature我自己设成 0.1。温度越高模型发挥越“自由”生成正则和管道串时就越容易跑偏。在这种“一条命令值一百条文本”的场景我们稳定第一创意不需要。5.3 我把 OpenShell 放在工作流里的哪个位置现在的习惯是OpenShell 主要承担“草稿生成器 解释器 安全哨兵”三种角色而不是“自动驾驶执行器”。比如我还在用原生的git命令、原生的find但每次执行前如果涉及大量文件或者有删除、覆盖、权限修改我都会习惯性用 OpenShell 先过一遍。它给我的不是“帮我做”而是“告诉我准备怎么做”。看清楚之后真正的手速执行还是我自己来。我还给 OpenShell 配了一个别名os同时在~/.os_history.sqlite里保存每次交互的历史。这样每周花十分钟翻一下历史能发现很多重复操作再顺势提炼成一个小函数写进~/.bashrc。某种程度上OpenShell 变成了一台“命令行为挖掘机”它不止帮你回答当前问题还在帮你发现哪些操作值得固化。我个人的体会是终端里真正核心的能力还是人对命令的理解。OpenShell 这类工具更像助手不是替代品。它能帮你少踩坑、快上手、批量操作前多一道保险但最终确认的责任人永远是你自己。如果你也准备在终端前更“稳”一点不妨从把“确认”这一步做得更扎实开始。

相关新闻

阿里云OpenLake迈向Agentic Lake:智能体就绪的数据湖架构演进

阿里云OpenLake迈向Agentic Lake:智能体就绪的数据湖架构演进

1. 从数据湖到智能体湖:OpenLake 这次到底改了什么第一次看到“Agentic Lake”这个词,我脑子里蹦出来的不是技术架构图,而是一个很具体的画面:以前的数据湖像个巨大的仓库,里面堆满了各种格式的货物,谁来都…

2026/10/3 10:23:16 阅读更多 →
稀疏奖励困境下的突破:HER事后经验回放原理与实践解析

稀疏奖励困境下的突破:HER事后经验回放原理与实践解析

做强化学习这几年,有一个问题几乎每次跑机器人控制、操作类任务都会撞上——稀疏奖励。目标没达成,奖励恒为0,算法像个无头苍蝇乱撞,训练几百回合毫无进展。我早期做机械臂抓取时,跑了一整夜,第二天看曲线还…

2026/10/3 10:23:16 阅读更多 →
RKDevTool解包update.img全流程:原理、实操与排错

RKDevTool解包update.img全流程:原理、实操与排错

玩国产开发板、Android电视盒子或者RK方案平板的朋友,迟早会碰上update.img这个东西。它是Rockchip平台固件的标准打包格式,烧录、救砖、分发都靠它。但很多人的需求恰恰反着来——手头只有一个成品update.img,想看看里面到底装了什么、能不能…

2026/10/3 10:23:15 阅读更多 →

最新新闻

Qwen团队变动后开发者指南:部署微调与API接入全攻略

Qwen团队变动后开发者指南:部署微调与API接入全攻略

你的技术群里有没有被同一条消息刷屏?说的是Qwen技术负责人和多名核心团队成员离职。这件事我听到的时候第一反应是去翻官方公告,结果没看到正式说明,倒是各种猜测已传得满天飞。今天不聊八卦,从一个天天拿Qwen做项目的开发者的角…

2026/10/3 10:54:53 阅读更多 →
Oracle数据卸载模板:Shell脚本编排与SQL执行实践

Oracle数据卸载模板:Shell脚本编排与SQL执行实践

简介:这是一份面向数据仓库与ETL开发人员的Oracle数据卸载Shell脚本模板,适合需要将库内数据按批次导出为文本并完成后续传输的运维与开发场景。使用者只需在SQL模板文件中填写待卸载的查询语句,并在文件名配置中指定对应输出名称&#xff0c…

2026/10/3 10:54:53 阅读更多 →
Oracle数据模板卸载脚本实战:shell驱动sqlplus的避坑指南

Oracle数据模板卸载脚本实战:shell驱动sqlplus的避坑指南

简介:这份资源是一套面向数据仓库与ETL开发人员的Oracle数据卸载Shell脚本模板,适合需要将库内数据按批次导出为文本文件并完成后续传输的工程师使用。包内共4个文件,包含1个sh主脚本、1个config环境配置、2个txt模板文件,压缩包仅…

2026/10/3 10:54:53 阅读更多 →
Unity资产库工具:从素材混乱到URP转换与植被自动化的流水线

Unity资产库工具:从素材混乱到URP转换与植被自动化的流水线

1. 从素材混乱到资产流水线:我为什么要做这个工具做Unity项目超过三年的人,大概率都经历过同一个噩梦:项目文件夹里躺着十几个来源不同的素材包,有的是Asset Store买的,有的是外包给的,有的是从旧项目里扒出…

2026/10/3 10:54:53 阅读更多 →
Unity内存泄漏实战:事件订阅为何导致GC失效及根治方案

Unity内存泄漏实战:事件订阅为何导致GC失效及根治方案

1. 从一个真实的内存泄漏案例说起 前阵子帮朋友排查一个 Unity 项目,场景是这样的:一个卡牌游戏,战斗界面反复打开关闭,每次关闭再打开,内存就往上蹿一截,打开个二三十次,低端机上直接闪退。朋友…

2026/10/3 10:54:53 阅读更多 →
DRV8818+STM32F469工业级步进电机高精度控制实战

DRV8818+STM32F469工业级步进电机高精度控制实战

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

2026/10/3 10:53:53 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 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/2 10:36:31 阅读更多 →
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/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练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/3 9:42:36 阅读更多 →