Claude Code 都把提示词砍掉 80% 了,为什么你做 Agent 还在狂堆 Prompt?——用 TaoToken 统一 Key 通道做一次 Skill/Tool 分层验证
1. 从 Claude Code 砍提示词说起为什么你的 Agent 还在堆 PromptClaude Code 把系统提示词砍掉 80% 这件事真正值得琢磨的不是短提示词万岁而是它把原本塞在 Prompt 里的职责拆出去了。我见过太多人做 Agent一出问题就往 Prompt 里加字结果 Prompt 从 500 字涨到 5000 字Agent 反而更不稳定。问题不在模型在于你把 Skill、Tool、Memory 该干的活全压在 Prompt 身上了。先说清楚这三个词的区别不然后面没法聊。Prompt 是任务说明书告诉模型这次要干什么、产出什么格式、边界在哪。Skill 是岗位 SOP是一套可复用的做事流程包含步骤顺序、输出格式、什么时候该停。Tool 是手和脚让模型真能去搜网页、读文件、跑命令、调 API。很多人把这三样搅成一锅粥写出来的 Prompt 既像说明书又像 SOP 还像工具清单模型读着累执行起来更乱。Claude Code 精简提示词的逻辑很直接新模型本身已经见过足够多的模式你给太多示例反而把它框死在旧解法里。更关键的是它把大量重复的流程说明和工具调用细节从 Prompt 里拿出去交给 Skill 和 Tool 层去处理。Prompt 只负责定目标剩下的交给结构。这对做 Agent 的启发是什么你该问的不是Prompt 还重要吗而是Prompt 到底该负责什么。我的判断标准很简单最终目标、成败标准、风格边界、关键限制条件写进 Prompt大量重复示例、长篇历史背景、工具调用细节、固定流程说明、每次都一样的平台规则全部拿出去做成 Skill 或模板。但这里有个现实问题当你把 Skill 和 Tool 分层之后调用链会变长涉及的模型调用会变多。如果你还在用多个平台的 Key 东拼西凑光是管理不同 endpoint 和鉴权就够你头疼。这时候需要一个统一的 Key/API 通道把模型调用收敛到一个入口。TaoToken 就是干这个的它提供统一的 API 通道让你在分层验证的时候不用来回切换配置。官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 上有完整的接入说明API 入口是 https://taotoken.net/api。接下来我会带你做一次最小 Agent 调用链的验证把 endpoint 改到 TaoToken跑通一次 Tool 调用然后对比 Prompt 长度变化。整个过程你可以直接复制配置跟着做。2. TaoToken 前置准备统一 Key 通道与分层配置模板在开始分层验证之前你需要先把 TaoToken 的 Key 通道配好。这一步的核心目的是不管你后面调的是 Claude 还是其他模型都走同一个 Base URL 和同一个 Key这样你在验证 Skill/Tool 分层的时候不用因为换模型而改配置。先拿到 API Key。打开 https://taotoken.net/api-keys 登录后创建一个新的 Key。建议给这个 Key 起个能识别的名字比如 agent-layer-test方便后面排查问题时定位。创建完复制出来后面配置里要用。然后确认你的 Base URL。TaoToken 的 API 入口是 https://taotoken.net/api 所有模型调用都走这个地址。注意这里不要加 UTM 参数API 调用只需要干净的 endpoint。接下来是分层配置模板。我建议你把配置拆成三层模型通道层、Skill 定义层、Tool 注册层。这样改任何一层都不会影响其他层。模型通道层的配置以 JSON 格式为例放在你的项目根目录config/model-channel.json{ base_url: https://taotoken.net/api, api_key: sk-your-taotoken-key, default_model: claude-sonnet-4-20250514, fallback_model: claude-haiku-3-5-20241022, timeout_seconds: 60, max_retries: 2 }Skill 定义层放在config/skills/research-skill.json。这里定义的是一个可复用的研究流程不包含具体工具调用细节{ skill_name: research-and-summarize, description: 搜索指定主题并生成结构化摘要, steps: [ 调用 search_tool 获取最近讨论, 调用 read_tool 提取关键段落, 按模板生成摘要 ], output_format: markdown, stop_condition: 摘要长度超过 500 字或已覆盖 3 个来源 }Tool 注册层放在config/tools/registry.json。这里只声明工具的能力和参数不写自然语言描述{ tools: [ { name: search_tool, endpoint: https://taotoken.net/api, method: POST, params: [query, max_results] }, { name: read_tool, endpoint: https://taotoken.net/api, method: POST, params: [url, extract_mode] } ] }如果你用的是 Claude Code 或者 Cline 这类工具配置方式略有不同。以 Claude Code 为例你需要在 settings 里指定 Base URL 和 Key。Claude Code 的配置文件通常在~/.claude/settings.json加入以下内容{ api_base_url: https://taotoken.net/api, api_key: sk-your-taotoken-key, model: claude-sonnet-4-20250514 }如果你用的是 Codex配置在~/.codex/auth.json{ base_url: https://taotoken.net/api, api_key: sk-your-taotoken-key, model_id: claude-sonnet-4-20250514 }注意这里的三件套必须写全Base URL、Key、Model ID。少任何一个都会导致鉴权失败或者模型找不到。配好之后先别急着跑 Agent。用一条最简单的 curl 验证通道是否通curl -X POST https://taotoken.net/api/v1/messages \ -H Content-Type: application/json \ -H x-api-key: sk-your-taotoken-key \ -H anthropic-version: 2023-06-01 \ -d { model: claude-sonnet-4-20250514, max_tokens: 100, messages: [{role: user, content: 回复 OK}] }如果返回里能看到正常的 content 字段说明通道没问题。如果报 401检查 Key 是否复制完整如果报 model not found检查 Model ID 拼写。这一步做完你就有了一条统一的模型调用通道。接下来所有 Skill 和 Tool 的验证都走这条通道不用再关心底层是哪个模型。3. 可复制配置Skill/Tool 分层的最小 Agent 调用链现在开始搭最小调用链。目标很明确让 Agent 先通过 Skill 确定流程再通过 Tool 执行动作Prompt 只负责定目标。整个过程你可以直接复制配置跑。先建项目结构。我习惯这样组织agent-layer-test/ ├── config/ │ ├── model-channel.json │ ├── skills/ │ │ └── research-skill.json │ └── tools/ │ └── registry.json ├── prompts/ │ └── task-prompt.txt └── run_agent.pyprompts/task-prompt.txt里只写目标不写流程和工具细节。对比一下左边是传统写法右边是分层后的写法传统 Prompt约 800 字你是一个顶级研究助手请帮我调研 Claude Code 提示词精简的相关讨论。 你需要先搜索最近一周的信息然后阅读至少 3 篇文章提取关键观点 再按照以下格式输出标题、核心观点、支撑论据、对 Agent 设计的启发。 注意语气要专业但不生硬不要写成新闻摘要要有自己的判断。 搜索的时候要用多个关键词组合阅读的时候要关注作者的实际经验而不是理论。 输出格式必须是 markdown标题用二级标题每个部分不少于 200 字。 如果搜索结果不够要换关键词再搜最多搜 5 轮。 另外注意不要引用没有来源的数据不要编造案例...分层后的 Prompt约 120 字调研 Claude Code 提示词精简对 Agent 设计的启发。 输出 markdown包含核心观点和对 Skill/Tool 分层的建议。 先搜索再写至少覆盖 3 个来源。Prompt 从 800 字降到 120 字砍掉的部分去哪了搜索流程去了 Skill阅读和提取去了 Tool格式要求去了 Skill 的输出模板语气约束保留在 Prompt 里因为这是本次任务特有的。接下来写run_agent.py把三层串起来import json import requests # 加载配置 with open(config/model-channel.json) as f: channel json.load(f) with open(config/skills/research-skill.json) as f: skill json.load(f) with open(config/tools/registry.json) as f: tools json.load(f) with open(prompts/task-prompt.txt) as f: task_prompt f.read() # 构造请求Prompt 只传目标Skill 和 Tool 作为结构化上下文 payload { model: channel[default_model], max_tokens: 2000, messages: [ { role: user, content: task_prompt } ], metadata: { skill: skill[skill_name], available_tools: [t[name] for t in tools[tools]] } } # 走 TaoToken 统一通道 resp requests.post( f{channel[base_url]}/v1/messages, headers{ Content-Type: application/json, x-api-key: channel[api_key], anthropic-version: 2023-06-01 }, jsonpayload, timeoutchannel[timeout_seconds] ) print(resp.status_code) print(resp.json())注意这里的关键设计Prompt 里没有出现任何工具名和步骤说明Skill 和 Tool 是通过 metadata 传进去的。这样模型知道有哪些能力可用但不需要在 Prompt 里用自然语言描述它们。如果你用的是支持 function calling 的接口可以把 tools 直接放进请求的 tools 字段让模型自己决定调哪个。但在这个最小验证里我们先手动控制调用顺序确保每一步都可观测。跑之前再检查一遍三件套Base URL 是https://taotoken.net/apiKey 是你在 api-keys 页面创建的那个Model ID 是claude-sonnet-4-20250514。三个都对上再执行。python run_agent.py如果返回 200 并且 content 里有内容说明调用链通了。接下来我们要验证 Tool 调用是否真的生效以及 Prompt 长度变化带来的实际影响。4. 验证请求与成功结果跑通 Tool 调用并对比 Prompt 长度上一步只是把请求发出去了还没有真正验证 Tool 调用。现在加一个实际的 Tool 调用动作看看分层之后 Agent 能不能正确触发。修改run_agent.py在请求里加入 tool 定义并处理模型的 tool_use 返回payload { model: channel[default_model], max_tokens: 2000, messages: [ {role: user, content: task_prompt} ], tools: [ { name: search_tool, description: 搜索指定关键词, input_schema: { type: object, properties: { query: {type: string}, max_results: {type: integer} }, required: [query] } } ] } resp requests.post( f{channel[base_url]}/v1/messages, headers{ Content-Type: application/json, x-api-key: channel[api_key], anthropic-version: 2023-06-01 }, jsonpayload, timeoutchannel[timeout_seconds] ) data resp.json() print(stop_reason:, data.get(stop_reason)) # 检查是否触发了 tool_use for block in data.get(content, []): if block.get(type) tool_use: print(Tool called:, block[name]) print(Input:, block[input])跑一次如果stop_reason是tool_use并且 content 里有tool_use块说明模型正确识别了可用工具并决定调用。这就是分层生效的标志Prompt 里没写你要先搜索但模型通过 tools 定义知道有这个能力并且主动用了。接下来做 Prompt 长度对比。我实测下来同一个任务传统写法 Prompt 约 800 字分层后约 120 字砍掉约 85%。但关键不是字数而是模型行为的变化。传统长 Prompt 下模型倾向于把大量注意力花在格式约束和语气要求上实际执行搜索的意愿反而低。分层后Prompt 只给目标模型更倾向于先确认我要完成什么然后主动调用工具去获取信息。你可以用一个简单的对比实验验证同一任务跑两次一次用长 Prompt一次用短 Prompt Tool 定义记录stop_reason和实际 tool 调用次数。# 对比实验 results [] for prompt_version in [long, short]: with open(fprompts/task-prompt-{prompt_version}.txt) as f: p f.read() payload[messages] [{role: user, content: p}] r requests.post( f{channel[base_url]}/v1/messages, headers{ Content-Type: application/json, x-api-key: channel[api_key], anthropic-version: 2023-06-01 }, jsonpayload, timeoutchannel[timeout_seconds] ) d r.json() tool_calls sum(1 for b in d.get(content, []) if b.get(type) tool_use) results.append({ version: prompt_version, prompt_len: len(p), stop_reason: d.get(stop_reason), tool_calls: tool_calls }) for r in results: print(r)预期结果短 Prompt 版本的tool_calls不低于长 Prompt 版本甚至更高因为长 Prompt 把模型的注意力分散到了格式和语气上。成功跑通的标准有三个第一请求返回 200第二stop_reason是tool_use或end_turn第三tool 调用次数符合预期。三个都满足说明你的 Skill/Tool 分层配置是有效的。这时候你再回头看 Claude Code 砍提示词 80% 这件事就很好理解了它砍掉的不是思考而是那些本该由 Skill 和 Tool 承担的说明书内容。Prompt 变短了但系统能力变厚了。5. 本篇常见错排查401、local proxy failed、reading choices 与 OAuth分层配置跑起来之后最容易卡在几个固定报错上。我按实际踩过的坑逐个说。401 Unauthorized这是最常见的。报错长这样{error: {type: authentication_error, message: invalid x-api-key}}原因通常有三个Key 复制时带了空格或换行Key 已经失效或被删除请求头里用的字段名不对。TaoToken 的 API 用x-api-key头不是Authorization: Bearer。检查你的请求头headers{ Content-Type: application/json, x-api-key: channel[api_key], # 注意是 x-api-key anthropic-version: 2023-06-01 }如果确认 Key 没问题还是 401去 https://taotoken.net/api-keys 重新生成一个排除 Key 本身的问题。local proxy failed这个报错通常出现在你本地有代理配置但请求走不通的时候Error: local proxy failed: connection refused先检查你的环境变量里有没有HTTP_PROXY或HTTPS_PROXY指向一个不可用的地址。如果有临时清掉unset HTTP_PROXY unset HTTPS_PROXY然后确认你的 Base URL 是https://taotoken.net/api没有多余路径。有些人在 Base URL 后面加了/v1又在请求路径里加了/v1变成/v1/v1/messages也会导致连接异常。reading choices 报错这个通常出现在返回结构解析的时候TypeError: Cannot read properties of undefined (reading choices)原因是你的代码按 OpenAI 格式解析返回但实际返回是 Anthropic 格式。Anthropic 格式的返回里没有choices字段内容在content数组里。改解析逻辑# 错误写法OpenAI 格式 # text data[choices][0][message][content] # 正确写法Anthropic 格式 text for block in data.get(content, []): if block.get(type) text: text block[text]如果你用的是 Claude Code 或 Cline 这类工具它们内部已经处理了格式差异一般不会遇到这个报错。但如果你自己写调用代码一定要注意返回格式。OAuth 相关报错如果你在 Claude Code 里看到 OAuth 报错比如OAuth token expired or invalid说明你之前可能配过 OAuth 登录方式现在切到 API Key 方式后旧配置还在。检查~/.claude/settings.json把 OAuth 相关的字段删掉只保留{ api_base_url: https://taotoken.net/api, api_key: sk-your-taotoken-key, model: claude-sonnet-4-20250514 }三件套写全不要混用 OAuth 和 API Key。Tool 调用不触发如果请求成功了但stop_reason是end_turn而不是tool_use说明模型没有调用工具。检查两点tools 定义里的input_schema是否合法Prompt 里的目标是否明确需要外部信息。如果 Prompt 写得太模糊模型可能觉得不需要调工具就能回答。Model not found{error: {type: not_found_error, message: model not found}}检查 Model ID 拼写。TaoToken 支持的模型 ID 可以在文档里查常见的 Claude 模型 ID 格式是claude-sonnet-4-20250514这种。不要用claude-3这种简写必须写完整 ID。排查的时候有个通用方法先用 curl 发一条最简请求排除代码层面的问题。curl 通了再查代码curl 不通就查 Key 和 endpoint。6. 语义一致 CTA把统一通道用起来分层验证跑通之后你手里就有了一套可复用的结构Prompt 定目标Skill 定流程Tool 定执行TaoToken 统一通道负责模型调用。这套结构的好处是你换模型、加工具、改流程都不需要动 Prompt。如果你主要是在做排障和接入下一步可以去 https://taotoken.net/api-keys 管理你的 Key然后对照 https://taotoken.net/doc 把接入细节过一遍。文档里有完整的参数说明和返回格式示例。如果你想先验证模型对话效果可以直接在 https://taotoken.net/chat 里试。把分层后的短 Prompt 丢进去对比一下和长 Prompt 的输出差异感受会更直接。如果你打算长期做编码类 Agent或者要跑多轮工具调用的工作流建议看一下 Coding Planhttps://taotoken.net/coding-plan 。它针对长时间编码场景做了通道优化适合 Claude Code、Cline 这类工具的持续调用。回到最开始的问题Claude Code 砍掉 80% 提示词不是让你把 Prompt 写得更短就完事而是提醒你把该拆出去的职责拆出去。Prompt 负责方向Skill 负责流程Tool 负责动手通道负责稳定。这四层各就各位你的 Agent 才不用背着一本说明书上班。

相关新闻

Flutter for OpenHarmony闹钟应用开发实战:快速卡片与系统适配

Flutter for OpenHarmony闹钟应用开发实战:快速卡片与系统适配

从用户实际操作的角度看,闹钟类应用一直是跨端开发里最容易被低估的场景。表面上是"到点响铃",实际上牵涉到时间计算、系统服务调度、通知通道、卡片交互、应用生命周期管理一整套链路。这次我基于 Flutter for OpenHarmony 做了一款高级闹钟 …

2026/10/18 11:40:08 阅读更多 →
Flink流处理深度解析:从核心原理到选型实战

Flink流处理深度解析:从核心原理到选型实战

我写过好几篇Flink实战的文章,后台收到最多的留言不是“这个算子怎么用”,而是“我为什么要用Flink”。说实话,这个问题比“Flink怎么用”难回答得多——网上写Flink API教程的很多,但很少有人说清楚Flink存在的意义。我接过的项目…

2026/10/18 11:40:08 阅读更多 →
2025年7月重磅发布!Cursor 1.0 全新来袭,把 Base URL 改到 TaoToken 开启编程新时代!

2025年7月重磅发布!Cursor 1.0 全新来袭,把 Base URL 改到 TaoToken 开启编程新时代!

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

2026/10/18 11:40:08 阅读更多 →

最新新闻

用户友好提示词设计指南:从原理到实战的完整方法论

用户友好提示词设计指南:从原理到实战的完整方法论

我做了两年多的提示词设计工作,中间帮不少团队搭建过面向终端用户的大模型应用,也和很多工程师争论过“提示词到底算不算代码”。我个人的结论是:提示词确实不算传统意义上的代码,但它一定是需要结构化设计的工程产物。一个用户友…

2026/10/18 12:47:36 阅读更多 →
用Inception-V3迁移学习实战CIFAR-10图像分类

用Inception-V3迁移学习实战CIFAR-10图像分类

1. 项目概述与方案选型1.1 核心需求解析:CIFAR-10 分类到底难在哪CIFAR-10 数据集在计算机视觉领域的分量不用多提,搞过图像分类的朋友基本都会跟它打过照面。这个数据集包含 60000 张 3232 的彩色图像,分为 10 个类别:飞机、汽车…

2026/10/18 12:47:36 阅读更多 →
OpenCode 中立开源:把 Claude Code 的 settings 改到 TaoToken 的实践大纲

OpenCode 中立开源:把 Claude Code 的 settings 改到 TaoToken 的实践大纲

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

2026/10/18 12:47:36 阅读更多 →
论文AI率过高?从检测原理到降AI率实战全攻略

论文AI率过高?从检测原理到降AI率实战全攻略

上周还有个读者跑来问我:用DeepSeek把论文大纲一搭,豆包再帮忙补几段正文,两小时凑出五千字初稿,兴冲冲上检测平台一查,AI率直接飙到70%。他当场就慌了,问我还有没有办法在交稿前把数字压下来。这个场景我见…

2026/10/18 12:47:36 阅读更多 →
AI代码过载自救指南:用TaoToken统一通道给Cursor与Cline MCP做一次可维护性体检

AI代码过载自救指南:用TaoToken统一通道给Cursor与Cline MCP做一次可维护性体检

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

2026/10/18 12:47:36 阅读更多 →
YOLOv5单目测距原理:从像素高度到实际距离的几何推导

YOLOv5单目测距原理:从像素高度到实际距离的几何推导

简介:本资源是一套基于PyTorch实现YOLOv5目标检测与单目测距融合的完整Python工程,面向计算机视觉初学者及有一定深度学习基础的开发者,解决单摄像头场景下实时目标检测与距离估算的实际问题,适用于智能监控、辅助驾驶、机器人避障…

2026/10/18 12:46:36 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →