Qwen 底座 + 外企背书:Clef-Flash 大火,中文开源模型出海迎来新范本

Qwen 底座 + 外企背书:Clef-Flash 大火,中文开源模型出海迎来新范本

【免费下载链接】clef-flash项目地址: https://ai.gitcode.com/hf_mirrors/Cloudflare/clef-flash

2026 年 10 月初,Cloudflare 在一周内先后抛出两颗"炸弹":先是被社区戏称为"决策模型元年"的 Jev 带火整个赛道,随后 Cloudflare 官方博客发布开源决策模型家族Clef 与 Clef-Flash,并同步开放了一个面向企业的强化学习(RL)微调平台。其中,9B 参数的轻量版 Clef-Flash 因为"中位延迟仅 38.8ms、基于 Qwen3.5-9B 后训练、Apache-2.0 全量开源"三个标签,迅速在中文开发者社区刷屏。

这起事件值得深挖的地方不在于"又多了一个开源模型",而在于它的身份结构:一家美国基础设施巨头,把通义团队的开源底座 Qwen3.5-9B 写进了自家决策产品线的核心链路,并以企业级承诺对外提供服务。本文结合 Cloudflare 官方博客、社区评测情报与本仓库(clef-flash)真实源码,拆解这场"出海"的三个层次:底座为何被选中、决策层技术如何落地、以及它对中文开源社区的长期启示。

01 Qwen3.5-9B 成为决策底座:Cloudflare 的选型逻辑

先厘清一个背景:Clef-Flash 并不是 Cloudflare 的第一个决策模型实验。官方博客披露,早在 Jev 发布的同一周,Cloudflare 就基于 Google 的 DiffusionGemma 做过一次"把 logprobs 暴露成确定性概率"的验证性实验,并给 vLLM 提过相关 PR。但最终投入生产的是 Qwen 系底座:Clef 冻结 Qwen3.8-27B,Clef-Flash 冻结 Qwen3.5-9B,联合训练一个轻量路由头与 rank-256 的 LoRA 适配器。

为什么最终选 Qwen?把 README.md 与 config.json 对照着看,能还原出三条硬理由:

  • 多模态是刚需:决策模型要处理发票、截图、视频帧这类"状态输入",而 Qwen3.5 自带视觉编码器。config.json 中的vision_config清晰记录了这套视觉管线:patch size 16、spatial_merge_size为 2、temporal_patch_size为 2,配合Qwen3VLProcessor(见 processor_config.json),文本与图像/视频输入可以走同一条前向链路。相比之下,赛道初期的 Jev 只支持纯文本分类,这正是 Clef 系列的差异化卖点之一。
  • 上下文窗口决定"决策视野":官方口径 Clef 系列拥有 64k 上下文窗口(Jev 为 32k),允许把更长的业务状态塞进一次判断。本地 joint_schema_model.py 中encode_record默认max_length=16,384,可按需调大。
  • 推理效率适配"决策热路径":Qwen3.5 的文本主干采用了线性注意力与全注意力混合的架构。config.json 的layer_types字段显示 32 层中每 4 层插入一个full_attention,其余为linear_attention;linear_key_head_dim=128、mamba_ssm_dtype=float32等参数进一步摊薄了长序列成本。这种"便宜的长上下文"正是决策模型在 Agent 热路径上最需要的特性。

此外,底座的开放许可是产品化的前提:README.md 的 License 一节明确写着"Released under the Apache-2.0 license, following the base model Qwen/Qwen3.5-9B",即底座允许 Cloudflare 在其上做后训练并二次开源分发——这是它能被一家上市公司打包成产品的前提。

一个容易被忽略的细节是底座规模的"克制":model.safetensors.index.json 中total_parameters为 9,409,813,744(约 9.41B),bf16 权重约 18.8GB。9B 量级既能单卡 H200 部署,又保持了决策质量,这个"甜点区"的选择本身就是对 Qwen 生态成熟度的认可。

02 技术拆解:联合 Schema 头如何把"判断"变成一次前向传播

Clef-Flash 与通用 LLM 的本质区别,从仓库入口就能读出来。joint_schema_model.py 的模块 docstring 写得很直白:

A record provides astate(any JSON value), optionalimagesandvideos, andquestions. Each question has atype(noul,choice, orscore),instructions, and, forchoiceandscore,criteriadescribing the allowed options. The model returns one logit per allowed option for every question.

即:输入是一段业务状态 + 一组"带类型的题目",输出是每个题目每个合法选项的 logit,对每个题目做一次 softmax 即得概率。全程没有自由文本生成,没有输出解析。系统提示词也印证了这一点:

SYSTEM_PROMPT = ( "Read the complete state and schema. Decide every field jointly. Each answer " "must be exactly one of that field's allowed options." )

题目类型由QUESTION_TYPES = {"noul": 0, "choice": 1, "score": 2}定义,对应"是否判断 / 命名选项 / 有序评分"三类结构化问题。编码器会把每个题目的 instruction、allowed options 连同STATE:一起拼接成固定模板(encode_record中可见<|im_start|>user\nSTATE:\n与JOINT SCHEMA DECISIONS:的完整 prompt 结构),并记录每个题目与每个选项在 token 序列中的 span,供决策头按位置取向量。

真正的创新在决策头JointSchemaHead上(同样位于 joint_schema_model.py),其配置见 joint_head_config.json:hidden_size=4096、width=1024、routing_layers=2、layers=4、heads=16。前向过程分三步:

  1. 证据路由(evidence routing):EvidenceRoutingLayer让每个选项的 query 通过多头注意力从骨干网络的整段 hidden states 中检索与自己相关的证据;
  2. 联合跨字段注意力:选项汇总向量再经过 4 层 Transformer Decoder 与其他字段相互 attend,并叠加全局向量、类型 embedding;
  3. 有界打分:最后用"词法先验(lexical prior)+ 余弦相似度 + 残差打分器"输出每个选项的 logit,先验与联合项由可学习 gate 与 logit scale 动态加权。

用官方博客的话概括:prefill-only + 非自回归并行打分。骨干只做一次前向,决策头并行给所有题目、所有选项打分,这正是 38.8ms 级延迟的结构性来源,也解释了为什么它能"杜绝格式漂移、越界幻觉和无置信度问题"——因为输出空间被 Schema 物理锁死了。

训练方法同样值得一提:冻结骨干 + rank-256 LoRA 联合优化路由头,损失为"label-smoothed cross-entropy + Brier loss"用于概率校准,再以自研的RLCD(Reinforcement Learning for Calibrated Decisions)作为二阶目标——给相邻序数选项部分奖励、对完整精确的记录输出全额奖励、加参考惩罚防止分布漂移。这套组合在社区评测中被概括为"RLCD 而非 RLHF",本质上是把"校准"而非"迎合"作为强化信号。

03 性能与基准:38.8ms 中位延迟与 Decision Index 成绩单

Clef-Flash 的传播热度,一半来自架构故事,一半来自硬数字。以 README.md 中官方内部跑分的 Decision Index 0.2.1 套件(横向对比 Clef、Clef-Flash、Jev、DiffusionGemma Jev、Kev 9B、Laya)为准:

基准ClefClef-FlashJev
BFCL(case exact accuracy)98.598.895.8
API-Bank(accuracy)91.993.188.2
Home appliance simulator(case exact accuracy)83.097.752.3
ContractNLI(macro-F1)81.484.371.7
ForecastBench(Brier,越低越好)13.910.617.4
MMLU(accuracy)90.391.891.7
中位延迟(ms)209.338.8524.1
p95 延迟(ms)238.6122.4536.0

两个值得注意的结论:其一,9B 的 Clef-Flash 在 BFCL、API-Bank、ForecastBench、ContractNLI 等决策向基准上反超了 27B 的 Clef 与 Jev——模型变小、决策能力不降反升;其二,延迟优势是数量级的,中位延迟约为 Jev 的 1/13,在 Typesafe 的端到端工作流评测(Invoice processing / Customer service / Security incidents / Agent trace observability)中,客服工作流以 77.0 的 Exact actions 得分与 Clef、Jev 拉开差距。社区横评中的"Agent 判断从 8.5 秒压到 39 毫秒"正是这一优势在真实路由任务上的投射。

对工程团队更友好的是它的接入成本。仓库 README.md 给出了两条路径:本地 transformers 直接加载,以及 SGLang 服务化。本地推理示例(节选):

model, processor = load_release_model(path, device="cuda") record = { "state": {"invoice": {"vendor": "Acme", "total": 1250.0, "currency": "USD", "status": "overdue"}}, "questions": { "status": { "type": "choice", "instructions": "What is the invoice status?", "criteria": {"paid": "Invoice is paid.", "overdue": "Invoice is past due.", "draft": "Not sent."}, }, "large": {"type": "noul", "instructions": "Is the total above 1000 USD?"}, }, } encoded = encode_record(processor.tokenizer, record, processor=processor) batch = collate_records([encoded], processor.tokenizer.pad_token_id, torch.device("cuda")) with torch.inference_mode(): logits = model(batch)[0] for question, question_logits in zip(encoded.questions, logits): probabilities = question_logits.float().softmax(-1).tolist() print(question.question_id, dict(zip(question.option_ids, probabilities)))

而生产化路径是 SGLang 容器一行拉起,对外暴露与 Jev/SystemOne 完全兼容的/v1/systemone接口:

docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --ipc=host \ lmsysorg/sglang:dev-clef \ sglang serve \ --model-path Cloudflare/clef-flash \ --host 0.0.0.0 \ --port 30000

systemone()函数(joint_schema_model.py)接收POST /v1/systemone请求体,返回model / answers / usage结构:choice答案含choice、confidence与完整probabilities,score答案给出期望分值与图例,noul答案返回为真的概率。这意味着存量 Jev 用户改一行model字段即可切换底座,迁移成本趋近于零。生态侧的信号也来得很快:社区报道 Ollama v0.35.1 已原生接入 Clef / Clef-Flash,新增/decision接口并支持文本+图片共享状态输入与多问题联合评分,本地开发者可以用最熟悉的方式试玩这套决策范式。

04 从"被借鉴"到"被产品化":中文开源模型出海的新叙事

把视角拉远,Clef-Flash 最大的新闻价值不在技术,而在叙事结构的变化。

过去两年,中文开源模型出海的主流形态是"被借鉴":海外团队用 Qwen、DeepSeek、GLM 做蒸馏、做对齐、做各种"中文模型英文化"的复刻品,底座虽然被反复使用,却很少进入海外巨头的核心产品定义层。而这次完全不同:

  • 赛道由海外新锐点燃:Typesafe 的 Jev 带火了"决策模型"这个品类,Google News 情报显示,同一周内 OpenAI、AWS 相继跟进,AWS 甚至发布了 Strands Decider 2B;开源侧则密集出现了 DiffusionGemma Jev、Kev 9B、Laya 等实现,一周之内赛道迅速饱和。
  • Cloudflare 选择了 Qwen 而非自己训练:作为手握 15 年网络数据、GPU 边缘基础设施和 Workers AI 平台的巨头,Cloudflare 完全有能力自研底座,却在实验过 DiffusionGemma 之后,把生产底座押给了 Qwen3.8-27B 与 Qwen3.5-9B。这不是"没有选择的选择",而是对开源底座综合能力(多模态、上下文、推理效率、许可条款)的一次公开背书。
  • 底座被写进了真实生产链路:官方博客披露,Clef 已用于 Cloudflare 威胁情报团队的域名分类——给定域名(配合 Browser Run 渲染),2.2 秒内完成"抓取-渲染-分类",输出"95% 是时尚网站、85% 电商、<1% 钓鱼"这类带概率的多标签结论;而此前最快的通用 LLM gpt-oss-120b 在同一工作流中耗时 4.7 秒且只返回两个分类。此外,内部还在用 Clef 评估 Trust & Safety 申诉、分诊 Support 工单、在 Bot 产品中区分好爬虫与坏爬虫。"开源底座 + 外企产品化 + 内部生产验证"三者齐备,这是中文开源模型此前很少触及的出海深度。

与之配套的信任条款也值得记录:模型以 Apache-2.0 全量开源、可在 Workers AI 上托管,官方承诺不读取、不存储、不训练用户请求与响应,同时允许 BYO 权重重新部署。开源权重 + 托管服务 + 企业承诺,构成了"外企背书"的完整闭环——它不再是一个实验室项目被论文引用,而是一个上市公司愿意为之承担 SLA 的依赖项。

05 启示:底座之上还能长出多少"决策层"产品

Clef-Flash 给中文开源社区的最大启示,或许可以浓缩成一句话:模型竞赛的下一阶段,竞争发生在"底座之上的决策层"。

通用 LLM 解决的是"能说什么",决策模型解决的是"该做什么"。后者的产品化空间已经被 Clef 家族及其衍生实践画出了轮廓:

  • 业务路由:客服消息按 urgency / department / severity 一次打分,直接驱动工单分派与升级策略(README.md 中systemone示例即为此场景);
  • 票据与内容审核:发票可读性、合同条款一致性、截图内容判定——文本与图像混批(images/videos字段与encode_record的 processor 参数)让审核类任务不再需要单独接一个视觉模型;
  • 安全分诊:安全事件严重度分级、钓鱼域名识别、异常行为判定,官方博客的威胁情报用例是现成的行业样本;
  • Agent 护栏:社区已有实践用 Clef 系决策模型给 Agent 装护栏——把"是否放行、是否升级人工、是否调用工具"变成结构化概率判断,显著降低护栏的推理成本,同时与审计日志、最小权限构成纵深防御;
  • 决策层微调:Cloudflare 同步推出的 RL 微调平台(先由 FDE 团队贴身交付,再演进为自助平台,链路为 AI Gateway 采集数据 → Workers AI 生成 rollouts → Containers 做 RL 沙箱 → Trainer 更新权重 → BYO 模型重新部署)预示着一套可复制的商业闭环:开源底座 + 决策头 + 场景微调三层解耦,每一层都能长出独立的产品与商业模式。

对中文开源社区而言,Clef-Flash 验证了一条可被模仿的路径:与其在通用能力上与闭源巨头贴身肉搏,不如选择"把 Qwen 这样已被全球验证的底座接过来,在特定决策层做出工程差异与产品闭环"。底座的价值密度决定了决策层的天花板,而决策层的产品化能力决定了开源生态能否从"被消费"走向"被依赖"。

结语

回看 Clef-Flash 的走红逻辑:技术上,它用联合 Schema 头把"决策"压缩成一次前向传播,38.8ms 的中位延迟与一张漂亮的 Decision Index 成绩单构成了传播的硬核;叙事上,它是 Qwen 底座第一次被一家全球性基础设施公司正式产品化并写进生产链路——从"被借鉴"到"被产品化",中文开源模型的出海叙事就此翻篇。

仓库里的 joint_schema_model.py、config.json、README.md 都是开放的,任何人可以在单卡 H200 上复现这套"决策引擎",也可以在其上继续叠加自己的决策层产品。出海的下一个范本,或许就藏在"谁先把 Qwen 底座变成自己业务里不可替代的那一层"这个命题里。

【免费下载链接】clef-flash项目地址: https://ai.gitcode.com/hf_mirrors/Cloudflare/clef-flash

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

VS2008 C++调用GDAL实现TIFF遥感影像显示方法与避坑指南

VS2008 C++调用GDAL实现TIFF遥感影像显示方法与避坑指南

简介&#xff1a;面向GIS开发初学者的VS2008 C样例工程&#xff0c;演示如何通过GDAL库读取并显示TIFF遥感影像。工程包含完整源码与配置文件&#xff0c;涵盖GDALDataset、GDALRasterBand等核心API的调用流程&#xff0c;以及头文件路径、链接库设置和x86/x64平台匹配等关键配…

2026/10/20 5:50:18 阅读更多 →
Tableau Desktop入门指南:从数据连接到仪表板设计的完整实操

Tableau Desktop入门指南:从数据连接到仪表板设计的完整实操

做数据分析这些年&#xff0c;我最常被新同事问的一句话就是&#xff1a;“Tableau Desktop 到底怎么上手&#xff1f;” 很多人第一次打开这个工具&#xff0c;看到左侧一堆字段、右侧一片空白工作区&#xff0c;第一反应是关掉重开。其实 Tableau 的设计逻辑非常朴素&#xf…

2026/10/20 5:49:17 阅读更多 →
Java调用FFmpeg实战:视频格式转换、合并、截图与播放全解析

Java调用FFmpeg实战:视频格式转换、合并、截图与播放全解析

1. 为什么要在Java里折腾FFmpeg视频处理这件事&#xff0c;放在五年前我大概率会直接甩给前端或者专门的转码服务去做。但这两年明显感觉到&#xff0c;业务侧对"在Java服务里直接处理视频"的需求越来越硬——用户上传一个手机拍的MOV&#xff0c;后台得转成MP4才能保…

2026/10/20 5:49:17 阅读更多 →

最新新闻

HTTP POST表单提交全解析:Content-Type、编码格式与实战避坑指南

HTTP POST表单提交全解析:Content-Type、编码格式与实战避坑指南

1. 从一个被忽略的细节说起&#xff1a;为什么表单提交远不止填个action很多人第一次接触Web开发&#xff0c;接触到的第一个"能跑起来"的功能&#xff0c;大概率就是一个HTML表单。写一个<form>标签&#xff0c;配上action和method"post"&#xff0…

2026/10/20 6:25:32 阅读更多 →
自动驾驶多模态数据生成:统一传感器输出的关键技术与实践

自动驾驶多模态数据生成:统一传感器输出的关键技术与实践

自动驾驶算法做到后面&#xff0c;真正卡脖子的往往不是模型结构&#xff0c;而是数据。尤其当你同时要喂摄像头、激光雷达、毫米波雷达这几个完全不同的传感器时&#xff0c;数据稀缺和模态不一致会被放大成一个系统工程问题。OmniGen 这个名字听起来很高端&#xff0c;去掉包…

2026/10/20 6:25:32 阅读更多 →
三层网络架构冗余配置实战:VRRP、浮动路由与链路聚合详解

三层网络架构冗余配置实战:VRRP、浮动路由与链路聚合详解

前阵子搭了一套三层结构的网络实验环境&#xff0c;核心两台、汇聚两台、接入一台&#xff0c;实验目标很明确&#xff1a;把三层架构里的各路冗余手段都配上&#xff0c;然后人为制造故障&#xff0c;看流量到底能不能自己绕过去。做完最大的感受是——冗余两个字说起来容易&a…

2026/10/20 6:25:32 阅读更多 →
最新论文追踪指南:平台选择、检索技巧与自动订阅全攻略

最新论文追踪指南:平台选择、检索技巧与自动订阅全攻略

想第一时间看到领域里刚出炉的论文&#xff0c;最怕的不是搜不到&#xff0c;而是根本不知道该去哪个平台搜、用什么关键词、按什么排序。组会汇报前临时抱佛脚、开题时需要确认自己做的方向有没有人抢先发表、审稿时想查一查某篇预印本到底有没有正式见刊——这些场景我都经历…

2026/10/20 6:25:32 阅读更多 →
Web服务器Nginx与集群架构——Java开源litemall小商城项目应用实践

Web服务器Nginx与集群架构——Java开源litemall小商城项目应用实践

/* 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 6:25:32 阅读更多 →
AI大模型自动化测试实战:全流程智能测试设计与落地

AI大模型自动化测试实战:全流程智能测试设计与落地

我在一线做测试自动化和质量保障已经快十年&#xff0c;说实话&#xff0c;前八年大部分时间都花在写脚本、调框架、跟环境和用例维护作斗争上。最近这两年&#xff0c;AI大模型自动化这个方向确实改变了我的工作节奏。之前接手某个跨平台系统&#xff0c;每个版本回归要花上两…

2026/10/20 6:24:32 阅读更多 →

日新闻

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实现详解

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

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

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在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/19 2:54:50 阅读更多 →
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/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →