智能体Skills技能包开发实战:从结构设计到调试全解析
我研究了大半年的智能体开发今天想聊聊一个容易被忽略、但直接影响智能体上限的东西——Skills。什么是Skills在智能体生态里Skills通常被称为“技能包”它是一套标准的配置与代码集合让助手不再只会“聊”而是能真正“办事”。比如说你告诉助手“把这份Excel数据做成一页带趋势线的图表”如果没有技能包助手大概率给你一段让人自己复制的Python代码但如果挂上一个数据处理技能包它能直接完成从数据清洗、统计计算到图表渲染的全链路操作。这就是Skills存在的意义——把通用大模型的“泛能力”收敛为特定场景下的“专业能力”。这篇内容适合三类人正在做智能体应用、却感觉交互深度不够的开发者业务团队里想用自然语言驱动内部工具的运营人员以及刚接触这一概念、想搞清楚技能包和普通Prompt有什么区别的同学。我会从技能包的结构设计讲起手把手拆解制作流程再分享一些调试与排障的实战经验。这些内容基于我自己的项目实践也参考了行业内主流的技能包规范你可以直接复用到自己的场景中。1. Skills的核心思路与设计逻辑1.1 技能包到底是什么要理解Skills先看一个反例。假设你在某个智能体平台里配置了这样一段系统指令“你是一个数据分析助手当用户上传文件时请分析数据并给出结论。”听起来没问题但实际跑起来你会发现问题很多——模型不知道该调用什么工具、不知道输出格式是什么、文件编码错了也不会处理甚至可能一本正经地给出错误结论。问题不在于模型笨而在于指令太模糊缺少“可执行的结构”。技能包解决的就是这个“结构化”问题。一个标准的技能包通常包含三部分技能说明告诉模型这个技能什么时候该用、能做什么、工作流定义把任务拆成有序步骤必要时配合工具调用、参考代码与资源给模型提供可复用的实现模板。这三层组合起来相当于给智能体提供了一套“操作手册工具箱”让它面对任务时不是临场发挥而是按既定方案执行。我在实际项目里最直观的感受是技能包的工程量并不大通常几百行配置加几十行代码就能完成但它带来的效果提升非常显著。原来助手回答行业问题只有六成准确率挂上技能包之后能稳定在九成以上而且输出格式完全可控。这套思路本质上借鉴了传统软件开发里的“模块化”思想——你不必教会模型所有知识只需要让它学会调用你准备好的能力模块。1.2 为什么技能包优于堆Prompt有人可能会问既然大模型理解能力这么强为什么不把规则全部写进Prompt里我在早期就是这么做的一个系统提示词从两百字一路堆到两千字结果效果反而更差。原因有几个第一上下文窗口有限。智能体的上下文要留给对话历史和外部数据提示词占用过多会导致真正重要的信息被挤占模型容易“忘掉”中间步骤。第二Prompt是线性文本很难表达“如果出现A情况走B分支如果解析失败重试C方案”这类复杂逻辑。第三Prompt不可复用。换一个场景就得重新调教而技能包是独立文件可以像积木一样在不同智能体之间自由组合。技能包还有一个隐藏优势——它支持在代码层面做兜底。比如技能工作流允许声明“如果文件编码不是UTF-8则先尝试GBK解码”这在纯Prompt里几乎无法稳定实现但在技能包里可以通过一小段异常处理代码做到。说白了Prompt是“告诉模型应该怎么做”技能包是“确保任务能做成”两者是指导层和执行层的区别。2. 技能包的标准结构与制作流程2.1 目录结构与核心文件拆解我以常见的技能包工程结构为例展示一套可落地的组织方式。实际开发时你可以按需增减文件但下面这个骨架基本覆盖了主流场景my_skill/ ├── SKILL.md # 技能说明主文件模型感知的核心入口 ├── workflows/ │ └── main.yaml # 主工作流定义描述执行步骤 ├── scripts/ │ ├── preprocess.py # 数据预处理脚本 │ └── report.py # 报告生成脚本 ├── references/ │ └── examples.md # 输入输出示例帮助模型理解边界情况 └── assets/ └── templates/ # 报表模板、图表模板等静态资源SKILL.md是整个技能包的灵魂。它不是给人看的文档而是给模型“读”的说明书因此写作方式和传统技术文档完全不同——要直接、明确、面向触发场景。一个合格的SKILL.md至少要包含技能名称、适用的任务范围、明确的触发条件、执行步骤概览、需要调用哪些脚本、输出格式要求以及边界条件说明。我在另一个章节会专门展开这个文件怎么写。workflows/main.yaml负责定义任务流转。这里要区分两种情况如果任务可以一次性完成就用单步执行如果任务依赖前置结果可以用“顺序执行multi-step”模式前一步的产出作为后一步的输入。工作流里可以声明需要执行的命令、参数传递规则和超时时间相当于把任务的节奏控制权从模型手里接管过来。scripts和references则属于增强模块。preprocess.py这类脚本是给模型复用能力用的模型本身不直接执行代码而是生成调用命令examples.md则为模型提供了参考样例当输入数据呈现哪几种特征时分别应该走哪条处理路径。资源文件如assets/templates则解决输出标准化问题确保图表配色、报表版式符合预期。2.2 手写一个报表自动化技能的完整过程理论说多了容易飘我直接以一个“销售周报自动生成”技能为例带你完整过一遍制作流程。这个技能的输入是某个公司的销售明细表输出是一份带趋势分析和结论建议的Markdown周报。第一步编写SKILL.md的核心内容。--- name: sales_report_generator description: 根据销售明细数据自动生成周报包含销售额趋势、品类别排名和问题预警。仅用于处理销售数据相关任务。 trigger: 用户上传销售数据文件或要求生成销售周报/销售分析报告 --- 执行步骤 1. 检查上传文件格式支持csv/xlsx读取数据列与样例。 2. 调用 scripts/preprocess.py 完成数据清洗输出中间文件 temp/cleaned.csv。 3. 调用 scripts/report.py 读取清洗后数据生成销售周报。 4. 将生成的周报以Markdown表格与摘要形式返回给用户。 输出格式要求 - 必须包含总体销售额、环比变化率、品类占比Top3。 - 趋势分析需用简短段落描述禁止罗列过多原始数字。 - 如果数据量不足或字段缺失先向用户说明异常不强行生成。这里的关键是description字段要写具体。“处理销售数据任务”比“数据分析助手”触发准确率高得多。另外我在实际测试中发现模型相当擅长识别trigger字段把用户请求和技能意图做匹配所以这一步值得花时间精修。第二步定义工作流。工作流配置用YAML编写。以主流的智能体运行框架为例配置长这样name: sales_report_pipeline steps: - id: check_input type: validate_file params: allowed_types: [csv, xlsx] - id: clean_data type: command command: python scripts/preprocess.py {input_file} temp/cleaned.csv timeout: 60 - id: gen_report type: command command: python scripts/report.py temp/cleaned.csv output/report.md timeout: 120 - id: collect_result type: read_file target: output/report.md工作流的价值在于每一步的输入输出关系非常明确模型可以按步骤推理“我现在在clean_data阶段前置条件是check_input已通过”。如果某一步失败例如clean_data返回非零退出码工作流可以直接触发重试或降级方案而不至于让模型自己瞎猜下一步怎么办。第三步编写参考代码。说句实话参考代码不需要写得非常优雅但一定要覆盖常见边界情况。以preprocess.py为例我处理的重点是空值、日期格式分列、异常字符清理import pandas as pd import sys def clean_data(input_path, output_path): try: df pd.read_csv(input_path, encodingutf-8) except UnicodeDecodeError: df pd.read_csv(input_path, encodinggbk) df df.dropna(subset[销售额]) df[日期] pd.to_datetime(df[日期], errorscoerce) df df[df[日期].notna()] df df[df[销售额] 0] # 品类字段标准化防止同一品类大小写混用 df[品类] df[品类].str.strip().str.title() df.to_csv(output_path, indexFalse, encodingutf-8) print(f清洗完成保留 {len(df)} 行有效数据) if __name__ __main__: clean_data(sys.argv[1], sys.argv[2])这段代码把最常见的两个坑都填了编码识别兜底、非法日期和负值的剔除。第一次跑通之后我又陆续加了重复行去重、销售额单位统一等功能每次在真实样本上验证后才更新进技能包。第四步做边界验证。把技能包发布到测试环境然后用三组数据测试正常数据、含空值乱码的数据、完全没有销售额列的数据。第三组测试结果很有意思——模型会按照工作流里的validate_file步骤先反馈“数据缺少关键字段”而不是强行生成一份错误报告。这种“拒绝生成”的行为恰恰是专业技能包与半吊子Prompt的最大区别。3. 调试测试与体验优化让技能包从“能跑”到“好用”3.1 调试验证步骤与日志追踪技能包开发完并不代表结束它能不能稳定运行关键看这两方面一是模型识别触发条件的稳定度二是脚本与工作流配合的执行成功率。我用的调试方法分三层从粗到细逐步收敛问题。第一层是触发测试。我在测试时故意准备了十种说法从“帮我做份周报”到“分析一下上周销量下滑的原因”后者属于预警分析不走周报生成主流程看模型能不能精准判断该不该启用技能包。这一层测试发现的最大问题是——当用户请求里同时包含“周报”和“建议”两个关键词时模型会倾向于先输出一大段建议而不是去调用工作流。解决办法是在SKILL.md的trigger部分增加说明只有出现明确的数据分析动作或文件上传行为时才进入工作流仅仅咨询建议类问题不触发技能。第二层是流程调试。启用工作流的详细日志模式观察步骤的执行顺序、每一步的耗时和返回结果。比如有一次日志显示clean_data步骤明明成功了但gen_report却报错“找不到中间文件”。追查后发现是两个步骤工作目录配置不一致前一步相对路径指向了项目根目录、后一步指向了临时目录。日志就是干这个用的——能直观告诉你步骤间的接口是否匹配。第三层是边界数据审计。用大量真实脱敏文件做批量测试录制执行结果检查输出周报的数值是否准确、文件是否冲突、进程会不会卡死。这块我强烈建议做自动化回归哪怕只是每隔几天手动跑一轮也好技能包迭代时回归测试能阻止大量低级回归问题。3.2 从“能用”到“好用”的三项优化技能包跑通只是万里长征第一步真正决定体验的是三项优化响应速度、容错能力和输出精准度。响应速度这块最管用的优化是减少不必要的中间步骤。我早期设计工作流时习惯每个环节单独写一个脚本数据处理三个文件、图表生成两个脚本结果每次跑技能都要启动五六个Python进程光是启动时间就花了几秒钟。后来我把相关脚本合并数据处理和报表生成统一在一个脚本里完成有了大幅提速。另外一个技巧是为高频使用的脚本预留常驻服务模式通过网关去调用避免每次冷启动。容错能力指的是失败时的兜底策略。我的技能包在处理文件时总会面临各种非法输入比如用户上传一个损坏的压缩包或者一张只有表头的空Excel。我的做法是在工作流里配置重试逻辑和降级路径第一遍解析失败就尝试用兼容模式重读重读还失败就直接向用户反馈“文件内容无法解析”宁可拒绝执行也不出错结果。输出精准度的关键在于给模型提供清晰的输出约束。我之前遇到的问题很有趣——要求“品类占比Top3”模型会返回“Top3及百分比”但数字格式一会儿用%一会儿用小数导致下游解析出错。后来我在SKILL.md里加了一条硬性要求所有比例统一换算为百分比数值并保留一位小数。加上这条之后输出我一眼就能用脚本解析再也不用每次手工清洗结果。4. 常见问题与排查技巧实录4.1 模型不触发技能或误触发怎么办这是我在社区群里被问得最多的问题。症状很典型明明上传了数据文件模型却自顾自地回复“我无法处理文件”或者干脆把技能当普通聊天话题聊。排查方向有三个。第一查看trigger字段是否过于严苛或模糊。“当用户上传文件时触发”就是模糊写法因为“上传文件”不是唯一的触发条件。更精准的写法是结合任务动词和数据对象例如“用户要求分析数据、总结趋势、生成报表、并主动上传了数据文件”。第二检查是否有多个技能包同时加载、意图产生冲突——如果平台上同时有“销售分析”和“通用数据可视化”两个技能包模型会陷入选择困难。这种情况建议精简技能包数量或把上层意图收敛到统一入口。第三观察模型是否已经“跑偏”到计划性对话模式。如果用户连续追问、模型在漫长上下文里遗忘了技能包的存在可以在工作流开始前加一步“前置摘要流程”把技能的关键触发信息重新注入上下文。4.2 技能包执行报错的三类高频问题与处理第一类脚本路径找不到或权限错误。表现为日志里出现ModuleNotFoundError或PermissionError。处理办法是使用绝对路径或者在工作流启动阶段先打印当前项目根路径、再做路径拼接。我吃过亏的项目里脚本互相调用时__file__指向不一致导致路径错乱后来统一在脚本开头用BASE_DIR Path(__file__).resolve().parent.parent来锚定根目录问题再无出现。第二类数据格式不符合预期。用户传文件时经常改变列名比如把“销售金额”写成“销售额”或“Sales Amount”技能包里的清洗脚本一读就挂。我的处理方案是在preprocess.py里内置“字段别名映射表”把常见变体名称统一映射为标准字段映射不了的再进入异常分支提示用户补充字段含义。第三类输出内容超长导致截断。生成报表时数据量大几百行的Markdown表格瞬间把上下文窗口撑爆。解决思路是调整输出策略先让脚本生成核心摘要和TopN明细然后把完整统计结果保存为附件文件由工作流向用户说明“完整数据见附件”。这样既保证信息完整又不影响上下文容量。4.3 排查经验小手册我把自己在项目中踩过的坑整理成了排查表方便你直接对照使用。症状可能原因排查优先级技能包完全不触发trigger描述不明确/与平台指令冲突高触发但执行中断工作流步骤依赖配置错误/路径问题高执行成功但生成内容不符合要求SKILL.md输出规范太弱中输入文件多样导致脚本崩溃缺少别名映射与异常保护中响应特别慢脚本冷启动/步骤拆分过细低技能之间交叉干扰多个技能包触发条件重叠低排查建议先看技能包入口日志确认模型走的是Plan路径还是Call路径再看工作流日志判断卡在哪个步骤最后看脚本自身的报错信息。只要把三层日志链拉开绝大多数问题都能在十五分钟内定位。这里分享一个小技巧每个脚本入口加一行标准格式的日志输出——脚本名、接收参数、执行状态码这套朴素的日志就能省去无数猜测。5. 一点个人经验与技能包维护建议技能包开发得越深入我越意识到它和传统软件开发的一个共通点维护比创造更考验功夫。一个技能包上线后通常要经历三到五轮迭代才能在一个组织内部达到稳定可用的状态。迭代来源主要是真实业务反馈——用户上传的格式永远是意想不到的业务方对报表口径的要求会不断变化。我给自己的项目定了一条规矩每两周至少用一个真实数据集走一遍完整流程把暴露出来的问题记录、修复并更新到测试用例集里。还有一件事要提醒技能包不是越多越好。我曾经往智能体里接入了十来个技能包看似功能强大实际上模型在选择技能时频频出错响应准确率不升反降。后来删到只有五个核心技能包、并且明确设定了技能边界情况立刻好转。技能包讲究“少而精”每个都要贴合真实场景反复打磨。最后再分享一个值得尝试的扩展方向技能包之间的串联。比如把“数据清洗技能”和“报表生成技能”拆成两个独立技能包用工作流把它们串起来以后想要增加“自动发送邮件”甚至“推送企微通知”只需要新增一个技能包插入既有流程。这种方式比维护一个巨型技能包灵活得多也是我目前测试下来扩展性最好的架构。如果后续你有更复杂的任务编排需求这就是下一步可以深挖的方向。

相关新闻

从内容洪流到可信资产:内部内容治理与智能分发全流程解析

从内容洪流到可信资产:内部内容治理与智能分发全流程解析

“在大厂内部广泛传播的内容,谨慎传播”这话我太熟了。干过团队内容治理的人都知道,真正值钱的不是某一篇被转来转去的文章,而是把散落在群聊、收藏夹、网盘、邮件里的信息,沉淀成一套可以检索、可以分级、可以追溯的内容资产。这…

2026/10/14 3:45:39 阅读更多 →
AI已经进入数控机床,为什么工业控制仍然离不开硬实时操作系统?

AI已经进入数控机床,为什么工业控制仍然离不开硬实时操作系统?

一、从第26届中国工博会看智能机床:AI越深入制造现场,实时控制越不能掉链子2026年10月12日至16日,第26届中国国际工业博览会在上海举行。本届工博会以“智能经济,智造无界”为主题,展览面积达到31万平方米,…

2026/10/14 3:44:39 阅读更多 →
KMP  CMP 鸿蒙化 v1.1.0 发布:统一渲染、性能与稳定性全面升级

KMP CMP 鸿蒙化 v1.1.0 发布:统一渲染、性能与稳定性全面升级

KMP & CMP 鸿蒙化 v1.1.0 发布:统一渲染、性能与稳定性全面升级 本文基于 CPF-KMP-CMP/docs 社区的发布说明 KMP-v2.2.21-1.1.0 & CMP-v1.9.2-1.1.0 撰写。 一、背景:KMP/CMP 鸿蒙化是什么 Kotlin Multiplatform(KMP)与 …

2026/10/14 3:44:39 阅读更多 →

最新新闻

Dropout 正则化原理与实战:从过拟合到泛化能力提升

Dropout 正则化原理与实战:从过拟合到泛化能力提升

1. 为什么一个"随手关掉神经元"的操作能成为深度学习的基石第一次在代码里写下nn.Dropout(p0.5)的时候,我其实没太当回事——不就是训练时随机扔掉一半神经元嘛,听起来像个正则化的小把戏。直到有一次复现一篇图像分类论文,模型在训…

2026/10/14 4:24:51 阅读更多 →
从60到150 t/s:Strata推理栈与INT4量化在48G显存上的实战调优

从60到150 t/s:Strata推理栈与INT4量化在48G显存上的实战调优

1. 先说说那三秒:149.7 t/s 砸到眼前那天晚上我蹲在测试机前面,盯着终端里不断滚动的数字,一时没回过神来。屏幕上清清楚楚写着“149.7 t/s”。按标题里的说法,就是那套组合——内部代号 Strata 的推理栈,加上一个叫 q…

2026/10/14 4:24:51 阅读更多 →
Java毕设实战:基于爬虫的题库自动生成系统完整解析

Java毕设实战:基于爬虫的题库自动生成系统完整解析

简介:毕设项目-利用爬虫的题库自动生成系统 是面向计算机相关专业本科生毕业设计场景的完整工程,适用于需要快速搭建可运行题管理平台的Java开发者。针对题库建设中题目来源单一、手工录入效率低等问题,整体以Java为后端核心、Vue为管理端页面…

2026/10/14 4:24:51 阅读更多 →
机械原理课程设计洗瓶机:凸轮机构实现推头匀速回程三倍速

机械原理课程设计洗瓶机:凸轮机构实现推头匀速回程三倍速

简介:基于机械原理的洗瓶机课程设计资料面向机械专业本科生,完整呈现从功能分解、运动方案设计到执行机构选型的全过程,适合完成课程设计或复习机构学知识时参考。内容围绕瓶子推进、旋转与刷洗三大动作展开,明确了推进距离600mm、…

2026/10/14 4:24:51 阅读更多 →
旅游线路查询接口分页漂移导致数据抓取错位的排查与规避

旅游线路查询接口分页漂移导致数据抓取错位的排查与规避

1. 一个看似普通的查询需求,怎么就翻车了事情是这样的,前阵子帮一个做旅游内容聚合的朋友看他们后台的数据对账问题。他们有一个模块是抓取某旅游线路平台(就是那种典型的“黑马旅游网”风格的线路查询站点)的线路数据&#xff0c…

2026/10/14 4:24:51 阅读更多 →
西门子RPC开发实战:从通信接口到产线落地的完整路径

西门子RPC开发实战:从通信接口到产线落地的完整路径

简介:这份西门子RPC开发功能文档面向工业自动化领域的开发者、设备集成工程师与数控系统调试人员,聚焦SINUMERIK 840D/840Di/810D平台下远程过程调用的接口规范与开发方法。文档系统梳理了主机接口、PLC/NCK接口、HMI与NCK/PLC的OEM交互接口等核心模块&a…

2026/10/14 4:23:50 阅读更多 →

日新闻

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/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →