Claude Code Skill开发实战:从50个废稿到20个精品的避坑指南
1. 从50个Skill里爬出来的血泪教训我在过去三个月里陆陆续续写了超过50个Claude Code Skill。从最开始的兴奋到中期的迷茫再到后来的顿悟整个过程像极了我第一次接触Spring Boot时疯狂堆Controller层的状态——写得多不代表写得好能跑通不代表能维护。如果你正在用Claude Code或者刚听说Skill这个概念想试试水我建议你先别急着动手。因为我踩过的坑大概率你也会踩。前30个Skill我几乎全部推翻重写了原因很简单我把Skill当成了“提示词模板”来写而它本质上是一套可组合、可复用、有明确边界的能力单元。这篇文章我会把50个Skill的迭代过程拆开讲清楚Skill到底是什么、SKILL.md该怎么写、MCP在什么场景下必须上、以及为什么你写的Skill总是“看起来能用但实际不好用”。内容偏实操代码和配置都会给到适合已经装好Claude Code、准备认真搞一套Skill体系的开发者。2. Skill到底是什么别把它当提示词2.1 从“提示词模板”到“能力单元”的认知转变我最初写Skill的思路特别朴素把一段常用的提示词存成文件用的时候让Claude Code读一下。比如“帮我写一个Spring Boot的Controller”我把这段提示词写进SKILL.md觉得这就是Skill了。结果用了不到一周就发现三个致命问题第一触发不稳定。Claude Code有时候读了这个Skill有时候不读完全看它心情。我以为是模型问题后来才发现是我没搞清楚Skill的触发机制。第二上下文污染。一个Skill里塞了太多不相关的内容导致Claude Code在执行具体任务时被无关信息干扰输出质量反而下降。第三无法组合。我想把“写Controller”和“写Service”两个Skill串起来用发现根本串不起来因为每个Skill都是孤立的提示词块没有输入输出的契约。后来我重新理解了Skill的定位它不是一个提示词文件而是一个带有明确触发条件、输入输出定义、以及执行边界的原子能力。你可以把它类比成Spring Boot里的一个Service Bean——有明确的接口定义、有依赖注入、可以被其他Bean调用而不是一个到处复制粘贴的工具类。这个认知转变之后我推翻了前30个Skill开始用“能力单元”的思路重新设计。2.2 SKILL.md的结构到底该怎么组织一个能用的SKILL.md至少包含四个部分--- name: spring-boot-controller-generator description: 根据实体类生成标准的Spring Boot Controller层代码 trigger: 当用户提到生成Controller、写一个接口、创建REST API时触发 --- ## 能力描述 根据输入的实体类定义生成符合团队规范的Controller层代码。 ## 输入 - 实体类文件路径或类名 - 基础包名 - 是否需要Swagger注解 ## 输出 - 完整的Controller类代码 - 对应的单元测试骨架 ## 约束 - 必须使用构造器注入禁止Autowired字段注入 - 统一返回ResultT包装 - 分页查询必须使用PageHelper这里有几个关键点我踩过坑trigger字段不是可有可无的。我一开始不写trigger指望Claude Code自己判断什么时候用这个Skill。实测下来触发率不到30%。后来我把trigger写清楚触发率直接拉到80%以上。trigger的写法有讲究要覆盖用户可能的各种表达方式但也不能太宽泛否则会误触发。约束部分比能力描述更重要。能力描述告诉Claude Code“能做什么”约束告诉它“不能做什么”。我吃过亏没写约束的Skill生成出来的代码风格五花八门有的用字段注入有的用构造器注入有的返回ResponseEntity有的返回自定义Result根本没法统一。输入输出要明确。这不是写给Claude Code看的是写给你自己看的。当你写到第20个Skill的时候你会忘记每个Skill的输入输出是什么没有明确的契约定义组合使用就是灾难。2.3 为什么前30个Skill都白写了回过头看前30个Skill白写的原因可以归结为三类第一类粒度太细。我写了“生成getter方法”、“生成toString方法”这种Skill实际上Claude Code本身就能做根本不需要Skill。Skill应该封装的是有团队特色、有业务逻辑、有规范约束的能力而不是通用编程能力。第二类粒度太粗。我写了一个“生成完整CRUD模块”的Skill包含了Controller、Service、Mapper、XML、DTO、VO所有内容。结果这个Skill的SKILL.md写了2000多字Claude Code读完之后反而不知道该从哪里开始输出质量极差。后来我把它拆成了6个独立Skill每个负责一层通过组合来完成完整模块的生成。第三类没有版本管理。Skill是会迭代的团队规范会变技术栈会升级。我一开始把Skill直接放在项目目录里改了就改了没有版本记录。后来发现某个Skill被改坏之后根本回不到之前的版本。现在我用Git管理Skill目录每次修改都有commit记录。3. MCP不是银弹什么时候该用什么时候不该用3.1 MCP协议解决的是什么问题MCP全称Model Context Protocol简单说就是让Claude Code能够调用外部工具和数据的协议。你可以把它理解成给Claude Code装了一个“插件系统”通过MCP ServerClaude Code可以访问数据库、调用API、读取本地文件、操作IDE等等。我一开始听说MCP的时候特别兴奋觉得什么都能干了。于是我把数据库查询、文件操作、Git操作全部通过MCP来实现。结果发现两个问题性能问题。每次MCP调用都有网络开销和协议解析开销一个简单的文件读取通过MCP走一圈比直接让Claude Code读文件慢了不止一个数量级。复杂度问题。MCP Server需要单独部署和维护调试链路变长出问题的时候排查成本很高。后来我总结出一个判断标准如果这个能力Claude Code本身就能做就不要用MCP如果这个能力需要访问Claude Code无法直接访问的外部系统才考虑MCP。3.2 Skill和MCP的配合方式Skill和MCP不是二选一的关系而是配合关系。我的实践模式是这样的Skill负责定义流程和规范MCP负责提供外部能力。举个例子我有一个“数据库表结构同步”的Skill它的SKILL.md里定义了同步的流程先读取实体类再对比数据库表结构最后生成差异SQL。但“读取数据库表结构”这个动作Claude Code本身做不到需要通过MCP来调用数据库。所以这个Skill的架构是--- name: db-schema-sync description: 同步实体类与数据库表结构 trigger: 当用户提到同步表结构、对比数据库时触发 mcp: database-mcp-server --- ## 执行流程 1. 读取指定实体类文件解析字段定义 2. 通过MCP调用database-mcp-server的getTableSchema方法获取当前表结构 3. 对比字段差异生成ALTER语句 4. 输出差异报告和SQL脚本这样Skill负责流程编排MCP负责具体的外部调用各司其职。3.3 我踩过的MCP选型坑MCP Server的选型我踩过不少坑说几个典型的坑一用了社区版MCP Server但没看维护状态。有个MCP Server最后一次更新是半年前用的还是旧版协议接进来之后各种报错。后来我养成了习惯选MCP Server之前先看三个指标最近三个月是否有commit、issue响应速度、是否有明确的版本号。坑二MCP Server的权限给太大。有个数据库MCP Server我直接给了root权限结果Claude Code在执行一个查询Skill的时候误执行了一条DELETE语句。虽然是在测试环境但也吓出一身冷汗。现在我的原则是MCP Server的权限按最小必要原则给只读操作绝不给写权限。坑三没有做MCP调用的超时和重试。MCP调用失败的时候Claude Code会一直重试导致整个Skill执行卡死。后来我在Skill的约束里明确写了超时时间和重试次数超过就报错退出。4. 一个完整Skill的实操拆解4.1 需求场景Spring Boot接口自动生成我拿一个实际在用的Skill来拆解这个Skill的功能是根据MyBatis的Mapper XML文件自动生成对应的Service层和Controller层代码。这个需求来自我们团队的实际情况Mapper XML是手写的但Service和Controller的代码结构非常固定每次都要复制粘贴改半天。用Claude Code来做这件事效率提升非常明显。4.2 SKILL.md的完整写法--- name: mapper-to-service-controller description: 根据MyBatis Mapper XML生成Service和Controller层代码 trigger: 当用户提到根据Mapper生成Service、生成Controller层、从XML生成接口时触发 version: 2.3.0 author: 团队内部 --- ## 能力描述 读取指定的MyBatis Mapper XML文件解析其中的SQL语句和参数定义 自动生成符合团队规范的Service接口、Service实现类、Controller类。 ## 输入 - Mapper XML文件路径必填 - 实体类全限定名必填 - 基础包名必填如com.example.module - 是否生成Swagger注解可选默认true ## 输出 - XxxService.java接口 - XxxServiceImpl.java实现类 - XxxController.java控制器 - 生成结果报告包含生成的文件列表和注意事项 ## 执行流程 1. 读取并解析Mapper XML提取所有select/insert/update/delete语句 2. 根据statement id推断方法名和返回类型 3. 生成Service接口方法签名与Mapper方法一一对应 4. 生成Service实现类注入Mapper实现方法委托 5. 生成Controller类根据方法类型推断HTTP方法和路径 6. 输出生成报告 ## 约束 - Service接口必须继承IServiceTMyBatis-Plus规范 - Service实现类必须继承ServiceImplM, T - Controller必须使用RestController注解 - 统一返回ResultT包装 - 分页查询必须使用PageHelper.startPage - 禁止在Controller中写业务逻辑 - 所有public方法必须有Javadoc注释 ## 示例 输入UserMapper.xml实体类com.example.entity.User 输出 - UserService.java - UserServiceImpl.java - UserController.java4.3 关键参数的计算与选择这个Skill里有几个参数是我反复调整过的方法名推断规则。Mapper XML里的statement id通常是selectByPrimaryKey、insertSelective这种但Service方法名需要更业务化。我定义了一套映射规则Mapper方法前缀Service方法名HTTP方法selectByPrimaryKeygetByIdGETselectListlistGETinsertSelectivecreatePOSTupdateByPrimaryKeySelectiveupdatePUTdeleteByPrimaryKeydeleteDELETE这套规则不是拍脑袋定的是参考了RESTful规范和团队现有代码风格。你如果有自己的规范可以替换成自己的映射表。路径生成规则。Controller的RequestMapping路径我定义为/api/{模块名}/{实体名小写复数}比如User实体在system模块下路径就是/api/system/users。这里有个细节复数形式我用了一个简单的规则以y结尾的变ies以s结尾的加es其他加s。虽然不完美但覆盖了90%的场景。返回类型推断。selectByPrimaryKey返回单个对象selectList返回Listinsert/update/delete返回int或boolean。这个推断逻辑写在Skill的执行流程里Claude Code会根据statement的resultType和SQL类型自动判断。4.4 实操过程记录我拿一个真实的UserMapper.xml来跑这个Skill记录一下完整过程。第一步准备输入。UserMapper.xml里有5个statementselectByPrimaryKey、selectList、insertSelective、updateByPrimaryKeySelective、deleteByPrimaryKey。第二步触发Skill。我在Claude Code里输入“根据UserMapper.xml生成Service和Controller实体类是com.example.entity.User包名com.example.module.system”。第三步Claude Code读取Skill按照执行流程逐步操作。这里有个细节Claude Code会先读取Mapper XML文件解析出所有statement然后按照映射规则生成方法名。第四步生成代码。Service接口生成了5个方法getById、list、create、update、delete。Controller生成了5个接口路径分别是GET /api/system/users/{id}、GET /api/system/users、POST /api/system/users、PUT /api/system/users、DELETE /api/system/users/{id}。第五步输出报告。报告里列出了生成的文件、每个文件的方法数量、以及需要注意的地方比如selectList没有分页参数需要手动添加。整个过程大约30秒如果手动写这些代码至少需要15分钟。效率提升是显而易见的。5. 常见问题与排查技巧实录5.1 Skill不触发怎么办这是最高频的问题。我总结了排查步骤第一步检查trigger字段。trigger里的关键词是否覆盖了你的实际表达比如你写的是“生成Controller”但实际输入的是“帮我写一个接口”那就触发不了。解决办法是把trigger写得更宽泛或者用更通用的关键词。第二步检查Skill文件位置。Claude Code读取Skill有固定的目录结构放错位置就读不到。我一开始把Skill放在项目根目录后来发现应该放在.claude/skills/目录下。第三步检查SKILL.md格式。frontmatter的格式必须正确---不能少字段名不能拼错。我有个Skill因为把trigger写成了triggers排查了半小时才发现。第四步检查是否有冲突。如果两个Skill的trigger关键词重叠Claude Code可能不知道该用哪个。解决办法是让trigger更具体或者在Skill里写明优先级。5.2 生成结果不符合预期怎么调生成结果不符合预期通常有三个原因约束写得太模糊。比如你写“代码要规范”Claude Code不知道什么叫规范。要写成“必须使用构造器注入”、“必须返回Result ”、“必须添加Javadoc”。示例不够具体。SKILL.md里的示例要尽可能完整最好是一个可以直接运行的代码片段。我一开始只写“输入UserMapper.xml”太模糊了。后来改成完整的输入输出示例生成质量明显提升。执行流程有歧义。流程步骤要按顺序写清楚每一步的输入输出要明确。如果某一步依赖前一步的结果要写清楚依赖关系。5.3 常见问题速查表问题现象可能原因排查方法解决方案Skill不触发trigger关键词不匹配检查trigger字段扩大关键词覆盖范围生成代码风格不统一约束不明确检查约束部分添加具体的代码规范约束执行到一半卡住MCP调用超时检查MCP Server状态添加超时和重试配置输出内容太长Skill粒度太粗检查Skill职责拆分成多个细粒度Skill多个Skill冲突trigger重叠检查所有Skill的trigger调整trigger或设置优先级版本混乱没有版本管理检查Git记录用Git管理Skill目录5.4 独家避坑技巧技巧一Skill的description要写“人话”。description不仅是给Claude Code看的也是给你自己看的。当你有了50个Skill之后你会忘记每个Skill是干什么的。description要写得像给同事介绍一样清楚。技巧二每个Skill都要有测试用例。我在Skill目录下建了一个tests/文件夹每个Skill对应一个测试文件里面记录了输入和预期输出。每次修改Skill之后跑一遍测试用例确保没有破坏已有功能。技巧三Skill的版本号要跟Git tag对应。我在SKILL.md的frontmatter里写了version字段每次修改都递增版本号同时在Git里打tag。这样出问题的时候可以快速回滚到指定版本。技巧四不要在一个Skill里做太多事。我现在的原则是一个Skill只做一件事最多不超过三个步骤。如果需要更多步骤就拆成多个Skill通过组合来完成。技巧五定期清理不再使用的Skill。我每两周review一次Skill目录把不再使用的Skill归档到archive/目录。保持活跃Skill的数量在20个以内太多会导致触发混乱。6. 从30个废稿到20个精品的迭代路径6.1 我的Skill分类体系经过50个Skill的迭代我最终把Skill分成了四类代码生成类根据输入生成代码比如Controller生成、Service生成、DTO生成。这类Skill的特点是输入输出明确约束清晰。代码审查类检查代码是否符合规范比如命名规范检查、注解使用检查、日志规范检查。这类Skill需要定义明确的检查规则。流程编排类编排多个Skill的执行顺序比如“生成完整CRUD模块”就是编排了6个代码生成Skill。这类Skill本身不生成代码只负责调度。工具集成类通过MCP调用外部工具比如数据库操作、Git操作、API调用。这类Skill需要配置MCP Server。这四类Skill的SKILL.md写法各有侧重代码生成类重约束代码审查类重规则流程编排类重顺序工具集成类重配置。6.2 哪些Skill值得保留判断一个Skill是否值得保留我用三个标准使用频率。如果一个月用不到一次基本可以归档了。我有个“生成Dockerfile”的Skill三个月用了两次后来直接删了因为Claude Code本身就能做。不可替代性。如果Claude Code本身就能做而且做得不差那就不需要Skill。比如“生成getter/setter”这种Claude Code原生就能做写Skill纯属多余。团队特色。如果这个Skill封装的是团队特有的规范或流程那就值得保留。比如我们团队的Controller必须返回Result 这个规范是团队特有的写成Skill就很有价值。6.3 后续扩展方向这套Skill体系目前还在迭代中我计划往三个方向扩展方向一Skill的自动化测试。目前测试用例是手动跑的我打算写一个脚本自动遍历所有Skill的测试用例生成测试报告。方向二Skill的依赖管理。有些Skill依赖其他Skill的输出目前是手动保证顺序的。我打算在SKILL.md里增加depends_on字段自动解析依赖关系。方向三Skill的使用统计。我想统计每个Skill的触发次数、成功率、平均执行时间用数据来指导Skill的优化方向。这三个方向都不复杂但需要时间慢慢打磨。我的原则是不追求Skill的数量追求每个Skill的质量。一个高质量的Skill抵得上十个凑数的Skill。最后分享一个我最近才想明白的道理写Skill和写代码一样可读性比聪明更重要。一个SKILL.md写得清清楚楚的Skill比一个用了各种高级技巧但没人看得懂的Skill有价值得多。因为Skill是给人用的不是给机器看的。

相关新闻

梧州DEM数据处理全流程:从坐标系检查到坡度河网提取与批量出图

梧州DEM数据处理全流程:从坐标系检查到坡度河网提取与批量出图

简介:这份资源面向地理信息、城乡规划、环境与测绘等方向的学习者和从业者,提供广西梧州市30米分辨率的DEM数字高程数据,并附带市域边界矢量文件,可用于高程提取、坡度坡向计算、排水网络模拟及灾害风险评估等分析场景。压缩包共1…

2026/10/13 10:33:12 阅读更多 →
幕墙出海挑战:结构胶与耐候密封胶选型标准与施工关键技术

幕墙出海挑战:结构胶与耐候密封胶选型标准与施工关键技术

1. 中国幕墙企业出海的敲门砖:从“把墙装上”到“把系统说清楚”从2020年前后开始,我陆续参与了一些国内幕墙企业走向海外市场的技术配合工作,接触过的项目分散在东南亚、中东、北美和欧洲。一个越来越强烈的感受是:中国幕墙行业的…

2026/10/12 11:11:09 阅读更多 →
Ponytail:用Skill插件把信息收集整理自动化

Ponytail:用Skill插件把信息收集整理自动化

第一次看到“Ponytail”这个项目名,我差点把它当成一个发型教程。直到同事甩过来一个 GitHub 链接,我才意识到,这不是扎头发的马尾辫,而是一套把散落信息扎起来的效率插件。用项目里的话说,Ponytail 是一个轻量的 Skil…

2026/10/9 13:29:27 阅读更多 →

最新新闻

问题:ubuntu与linux开发板互ping

问题:ubuntu与linux开发板互ping

一、问题原理要解决ubuntu与开发板互ping的问题,就是要使ubuntu和开发板在同一个网段上面。本次问题解决环境:开发板 和 windows 均通过wifi的方式连接网络。二、解决方法1、首先将ubuntu设置成桥接模式状态栏上方点击 虚拟机,点击 设置&…

2026/10/14 3:05:32 阅读更多 →
2026年全国3D溜溜网云渲染速度表现及选购参考指南

2026年全国3D溜溜网云渲染速度表现及选购参考指南

云渲染服务核心评估维度与行业标准当前3D设计领域数字化服务需求持续增长,云渲染服务已成为设计师提升出图效率的核心工具,不同平台的服务能力差异较大,明确统一的评估标准可帮助用户降低选型成本。对于同时承接3个家装项目、自有设备单张4K效…

2026/10/14 3:05:32 阅读更多 →
Chat2DB:开源AI数据库终端,自然语言转SQL的工程实践

Chat2DB:开源AI数据库终端,自然语言转SQL的工程实践

简介:Chat2DB是一款面向软件开发者的AI驱动型开源数据库管理工具,专为降低SQL使用门槛而设计,特别适合非数据库专家、初级开发者及数据分析师快速开展数据库查询、分析与迁移工作。资源包为项目源码压缩包(zip格式)&am…

2026/10/14 3:05:32 阅读更多 →
MySQL索引优化:从B+树原理到慢查询实战

MySQL索引优化:从B+树原理到慢查询实战

做后端开发这几年,最常被拉到群里去救火的场景,十有八九是数据库慢查询。系统跑得好好的,突然某天接口变慢、CPU飙高,一看日志全是SELECT走了全表扫描,几百万行的表一次查询几秒钟才回来。这种时候,十次里有…

2026/10/14 3:05:32 阅读更多 →
RGF_CJ 全局函数全解析:从应用生命周期、系统定时器到窗口与指针互操作

RGF_CJ 全局函数全解析:从应用生命周期、系统定时器到窗口与指针互操作

图形学桌面应用 【免费下载链接】RGF_CJ RGF是仓颉Windows系统下的通用渲染框架(兼应用开发框架)。RGF仓颉版(后续简称"RGF")基于RGF(C/C版)封装优化而来。RGF为开发者提供轻量化、安全、高性能以及高度一致性的2D渲染能…

2026/10/14 3:05:32 阅读更多 →
Python爬虫实战:手机APP数据抓取与解析全流程

Python爬虫实战:手机APP数据抓取与解析全流程

简介:这份PDF资料面向具备Python基础、对网络请求与爬虫开发感兴趣的技术爱好者与研发工程师,围绕手机APP数据传输的抓取与解析展开,重点讲解如何借助Fiddler抓包定位登录与话题接口,再通过urllib2构造HTTP请求、携带Header与表单…

2026/10/14 3:04:31 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

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

周新闻

流感时间序列预测实战: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 阅读更多 →