开源大模型本地部署实战:从环境搭建到能力验证全流程解析
这类开源大模型项目最值得关注的往往不是“参数规模”这个数字而是它到底能不能在你的本地环境里跑起来以及跑起来之后能做什么、不能做什么。Kimi K3 的 2.8 万亿参数听起来很震撼但对我们一线开发者来说核心问题就三个我的机器能跑吗怎么跑起来跑起来之后能稳定处理什么任务很多人容易被“开源”和“大参数”吸引一上来就想部署结果卡在环境、依赖、显存或者一个莫名其妙的报错上。这篇文章不会复述那些营销话术我会直接从一个需要本地部署和测试的开发者视角拆解 Kimi K3 这个项目。重点放在环境准备、最小化部署验证、核心参数理解、常见任务测试以及必然会遇到的坑点排查上。如果你手头有 GPU 资源哪怕是消费级卡并且想实实在在地评估一个开源大模型而不是只看新闻那这篇经验会帮你省下大量折腾时间。1. 先别被“2.8万亿参数”吓到关键看部署形态和硬件门槛看到“2.8万亿参数”第一反应可能是需要一堆 A100/H100 集群。但实际上对于开源项目我们需要先搞清楚它的发布形态和最低可运行要求。1.1 模型发布的常见格式与加载方式一个模型开源通常不会给你一个 2.8T 参数的单一文件。常见的发布格式包括完整权重Full Weights通常是多个巨大的.bin或.safetensors文件。这是最“重”的格式需要完整加载到 GPU 显存或内存中才能进行推理。量化版本Quantized如 GPTQ、AWQ、GGUF 等格式。通过降低权重精度如从 FP16 降到 INT4大幅减少模型体积和显存占用是消费级显卡运行大模型的关键。分片Sharded将权重文件切分成多个小块便于下载和加载也支持多卡并行。Hugging Face 集成如果项目方提供了transformers库的模型卡Model Card那部署起来会方便很多直接from_pretrained即可。对于 Kimi K3第一步是去它的官方仓库例如 GitHub查看模型发布页面。你需要确认有没有提供量化版本是 GPTQ 还是 GGUF这直接决定了你需要多少显存。模型文件总大小是多少这决定了你的硬盘空间和下载时间。官方推荐的推理框架是什么是vLLM、llama.cpp、Transformers还是TGI(Text Generation Inference)这决定了你的技术栈。注意不要一上来就下载最大的、最全的版本。先从最小的、量化程度最高的版本如 4-bit 量化开始测试确保流水线能打通。1.2 硬件需求估算从“能跑”到“跑得舒服”参数规模是理论值实际资源消耗取决于模型架构如 MoE、量化精度、上下文长度和批处理大小。这里给一个非常粗略的估算逻辑以量化版为例显存GPU Memory这是最大的瓶颈。一个 70B 参数的 4-bit 量化模型加载后显存占用可能在 40GB 左右。Kimi K3 是 MoE 架构激活的参数量可能小于总参数量但依然庞大。如果你的单卡显存小于 24GB如 RTX 4090运行完整的 K3 模型几乎不可能。你需要寻找更小的量化版本或者使用vLLM的 PagedAttention 等优化技术或者使用多卡。内存RAM如果使用llama.cpp的 CPU 推理或者 GPU 显存不足时系统会使用内存交换那么你需要巨大的内存可能 64GB 甚至 128GB 以上。速度会慢很多。磁盘模型文件本身可能就有数百 GB确保有足够的 SSD 空间。CPU对于初始加载、数据预处理和某些后端多核 CPU 有优势。行动建议在开始下载任何文件之前先用nvidia-smi和df -h看看自己的硬件。如果显存不足 24GB心理预期要调整你可能只能运行一个极度量化的版本或者只做模型权重下载和格式转换的测试无法进行流畅推理。2. 从零开始搭建可复现的测试环境跳过环境准备直接跑模型是绝大多数错误的根源。我们需要一个干净、可复现的环境。2.1 创建隔离的 Python 环境强烈建议使用conda或venv。这里以conda为例# 创建新环境指定 Python 版本以3.10为例需根据项目要求调整 conda create -n kimi_k3_test python3.10 -y conda activate kimi_k3_test隔离环境可以避免与系统或其他项目的包版本冲突。2.2 安装基础依赖与推理框架根据你选择的推理框架安装。假设我们选择vLLM因其对长上下文和吞吐优化较好和Transformers作为备选。# 安装 PyTorch (根据 CUDA 版本选择) # 例如CUDA 11.8 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装 vLLM pip install vllm # 安装 Transformers, accelerate 等 pip install transformers accelerate sentencepiece protobuf # 安装其他可能需要的工具 pip install huggingface-hub # 用于从 Hugging Face 下载模型如果项目有明确的requirements.txt优先使用它。2.3 模型下载与准备如果模型在 Hugging Face 上可以使用snapshot_download或git lfs。from huggingface_hub import snapshot_download model_name “meetkai/your-kimi-k3-model-id” # 替换为实际ID local_dir “./models/kimi_k3” snapshot_download(repo_idmodel_name, local_dirlocal_dir, local_dir_use_symsFalse)如果模型文件在别处可能需要用wget或 aria2 手动下载。务必核对文件的 MD5/SHA256 校验和大文件容易下载损坏。3. 核心实战启动推理引擎并完成首次对话环境就绪后目标是用最少的代码发起一次成功的推理请求看到模型的文本输出。3.1 使用 vLLM 启动 OpenAI 兼容 API推荐vLLM可以快速启动一个本地 API 服务这便于后续用标准方式测试。# 在终端中启动服务指定模型路径、端口和 tensor 并行度多卡时使用 python -m vllm.entrypoints.openai.api_server \ --model ./models/kimi_k3 \ --served-model-name kimi-k3 \ --port 8000 \ --tensor-parallel-size 1 # 单卡设为1如果一切正常你会看到服务启动日志包括加载进度、分配的显存等信息。3.2 发送测试请求另开一个终端或使用 Python 脚本测试。import openai # 需要安装 openai 包: pip install openai client openai.OpenAI( api_key“token-abc123”, # 随便填vLLM 不验证 base_url“http://localhost:8000/v1 ) response client.chat.completions.create( model“kimi-k3”, messages[ {“role”: “user”, “content”: “你好请介绍一下你自己。”} ], max_tokens100, temperature0.7, ) print(response.choices[0].message.content)如果返回了连贯的自我介绍恭喜你最核心的部署流程通了。3.3 直接使用 Transformers 加载推理如果不想启动 API 服务也可以直接使用Transformers管道。但这通常对显存要求更高且长上下文处理效率可能不如vLLM。from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline import torch model_path “./models/kimi_k3” tokenizer AutoTokenizer.from_pretrained(model_path, trust_remote_codeTrue) model AutoModelForCausalLM.from_pretrained( model_path, torch_dtypetorch.float16, # 或 bfloat16 device_map“auto”, # 自动分配 GPU/CPU trust_remote_codeTrue # 如果模型有自定义代码需要此参数 ) pipe pipeline(“text-generation”, modelmodel, tokenizertokenizer) result pipe(“你好请介绍一下你自己。”, max_new_tokens100) print(result[0][‘generated_text’])关键参数解释torch_dtype模型加载的数据类型。float16省显存bfloat16在某些硬件上性能更好。量化模型可能已指定类型。device_map“auto”让accelerate库自动决定将模型的每一层放在哪个设备GPU/CPU上。这是应对显存不足的常用策略但会引入 CPU-GPU 通信开销。trust_remote_codeTrue这是一个安全提示也是常见坑点。如果模型定义使用了自定义的modeling_xxx.py文件必须设置此参数。但只在你完全信任该模型代码时才使用。4. 深入参数与配置理解模型行为的关键旋钮模型跑起来只是第一步要让它按照你的预期工作必须理解几个核心参数。4.1 生成参数控制输出内容这些参数在每次调用 API 或管道时设置。参数含义典型值影响max_tokens/max_new_tokens生成的最大 token 数。512, 1024, 2048限制回答长度。设太小可能回答不完整设太大会浪费资源。temperature采样温度。0.1 ~ 1.0值越低如0.1输出越确定、保守、重复。值越高如0.9输出越随机、有创意、可能胡言乱语。对于事实性问答建议较低值0.1-0.3对于创意写作可用较高值0.7-0.9。top_p(nucleus sampling)核心采样概率。0.5 ~ 1.0与temperature配合使用。只从概率累积和达到top_p的最小 token 集合中采样。通常设 0.9-1.0。top_k采样时只考虑概率最高的 k 个 token。10 ~ 100另一种控制随机性的方法。与top_p二选一即可。repetition_penalty重复惩罚。1.0 ~ 1.2大于1.0时降低已出现 token 的概率减轻重复。stop停止序列。[“\n\n”, “Human:”]生成遇到这些字符串时停止。用于格式化对话。4.2 模型加载与服务器参数影响性能和稳定性这些参数在启动服务或加载模型时设置。参数/配置含义典型值影响--tensor-parallel-size(vLLM)张量并行大小。1, 2, 4, 8多卡并行必备。等于使用的 GPU 数量。需要正确配置 NCCL。--gpu-memory-utilization(vLLM)GPU 显存利用率。0.9控制 vLLM 块管理器使用显存的比例。如果遇到 OOM可以调低如0.8。--max-model-len(vLLM)模型支持的最大上下文长度。根据模型设定如果模型宣称支持 128K但这里设小了长文本能力无法发挥。torch_dtype(Transformers)加载模型的精度。float16,bfloat16,float32精度越低显存占用越小但可能损失少量精度。load_in_4bit/load_in_8bit(Transformers)量化加载。True/False使用bitsandbytes库进行即时量化极大减少显存占用但可能影响速度和质量。device_map(Transformers)设备映射策略。“auto”,“balanced”,“sequential”“auto”是省事策略“balanced”尝试平衡多卡负载“sequential”按顺序填充设备。4.3 针对 Kimi K3 可能需要的特殊参数根据其技术报告或代码Kimi K3 作为 MoE 模型可能有一些独特参数专家路由参数可能控制有多少专家被激活如num_experts_per_tok。这直接影响计算量和效果。长上下文参数如果它使用了类似YaRN、NTK-aware等外推或缩放位置编码的技术可能需要指定rope_scaling等参数来激活长上下文能力。自定义注意力机制如果有加载时trust_remote_codeTrue必须开启。如何找到这些参数最可靠的方法是阅读项目的config.json文件和模型定义代码 (modeling_xxx.py)。不要只看宣传要看代码里实际实现了什么。5. 从单次对话到生产化测试验证真实能力一次“你好”的成功回复远不能证明模型可用。你需要设计一套测试集。5.1 基础能力测试清单事实问答“中国的首都是哪里” “谁写了《红楼梦》” —— 检验基础知识准确性。逻辑推理“如果所有 A 都是 B有些 B 是 C那么有些 A 是 C 吗” —— 检验逻辑能力。代码生成“用 Python 写一个快速排序函数。” —— 检验代码能力和格式。指令跟随“请将以下句子翻译成英文并总结成三个要点‘……’” —— 检验复杂指令理解。长上下文理解输入一篇长文章比如10K token然后问一个关于文章细节的问题。这是 Kimi 宣称的强项必须重点测试。你可以用vLLM的--max-model-len参数来测试。中文能力作为国产模型其中文理解、成语、诗歌、文化相关问题的回答质量是重点。5.2 压力与边界测试重复请求连续发送 100 个简单的问答请求观察服务是否稳定显存是否泄漏使用nvidia-smi监控。超长输入尝试输入接近最大上下文长度的文本观察生成速度和质量是否急剧下降。非法/对抗输入输入空字符串、大量乱码、带有特殊标记的文本观察模型是否会崩溃或输出有害内容。并发请求使用类似locust或wrk的工具模拟多个用户同时请求测试 API 服务的并发能力。5.3 量化评估如果条件允许如果你有标准测试集如 MMLU, C-Eval, GSM8K可以跑分进行量化对比。但这通常需要编写额外的评测脚本并确保测试条件一致如 few-shot 设置。6. 避坑指南部署大型开源模型常见问题排查问题一定会出现。以下是按优先级排序的排查清单。6.1 模型根本加载不起来症状CUDA out of memory或Killed。排查这是显存不足。立即检查你下载的是否是量化版本如果不是去找量化版。尝试用load_in_4bitTrue(Transformers) 或更低的精度加载。使用vLLM并调整--gpu-memory-utilization。使用多卡 (--tensor-parallel-size)。如果还不行考虑使用llama.cpp的 CPURAM 模式但速度会慢。症状ModuleNotFoundError: No module named ‘xxx’或Unknown argument: --some-arg。排查依赖版本不匹配或推理框架不支持该模型。仔细阅读项目的README.md确认官方支持的推理框架和版本。创建全新的虚拟环境严格按照官方要求安装指定版本的库。如果使用trust_remote_codeTrue确保自定义模块的代码能正常导入。6.2 服务启动了但请求失败或返回乱码症状API 返回404或Model not found。排查检查--served-model-name和请求中的model参数是否一致。检查 API 端点是否正确 (/v1/chat/completions)。症状返回乱码、重复或无意义文本。排查首先检查temperature和top_p参数。大概率是temperature设得太高比如 1.0导致采样过于随机。先把它设成 0.1 再试。检查输入文本的编码和格式。确保没有不可见字符。可能是 tokenizer 不匹配。确保加载模型和 tokenizer 用的是同一个路径。6.3 长上下文测试效果不佳症状输入长文本后模型似乎“忘记”了前面的内容或者生成速度极慢。排查确认服务启动时--max-model-len参数设置得足够大且不超过模型宣称的能力。MoE 模型在长上下文时专家路由的计算开销可能很大。观察 GPU 利用率。可能是位置编码外推失效。查阅模型技术报告看是否需要启用特殊的rope_scaling配置。6.4 性能不达预期症状生成速度很慢Tokens per second (TPS) 很低。排查使用vLLM通常比原生Transformers管道快。检查是否在使用 CPU 进行解码。确保模型主要部分在 GPU 上。对于流式响应检查网络延迟。使用vLLM的--disable-log-stats和--disable-log-requests关闭详细日志可能提升少许性能。考虑使用更激进的量化如 AWQ 量化版本。7. 总结理性看待“开源巨兽”聚焦自身需求部署像 Kimi K3 这样的超大模型更像是一次基础设施的压力测试而不仅仅是模型能力的测试。整个过程下来你最大的收获可能不是模型本身有多聪明而是你对自己硬件资源的掌控、对深度学习工具链的熟悉、以及排查复杂问题的能力。对于大多数个人和小团队我的建议是明确目标你到底是想评测模型能力还是想集成到自己的应用里如果只是评测可以想方设法在云端租用高显存实例跑一次。如果是集成必须严肃考虑成本、延迟和稳定性一个 2.8T 参数的模型在可预见的未来都很难在消费级硬件上提供可用的服务。从小开始与其死磕最大的模型不如从该项目可能提供的较小尺寸的版本如 7B, 14B开始。它们的架构和特性通常与巨模型相似但部署难度呈数量级下降。关注生态一个模型是否真正“可用”除了权重还要看其工具链支持是否容易量化、是否被主流框架支持、社区活跃度Issues 是否有人回复是否有衍生项目和文档完整性。生产慎用在生产环境中引入一个刚开源、参数规模巨大的模型风险极高。你需要考虑模型许可证、持续维护、安全审计、版本更新等一系列问题。对于关键应用经过充分验证的、有商业支持的模型通常是更稳妥的选择。最终技术浪潮中的每一个“巨兽”都值得我们去了解、去测试这是保持技术敏感度的好方法。但真正的工程决策必须落在实实在在的硬件条件、项目需求和维护成本上。跑通 Kimi K3 的 demo 是一次很棒的学习经历但让它创造价值还有很长的路要走。

相关新闻

Python+AI实战教程:从零基础到部署AI应用的完整学习路径

Python+AI实战教程:从零基础到部署AI应用的完整学习路径

如果你正在寻找一套从零开始、系统学习 Python 和 AI 的教程,却发现网上资料要么太散、要么太旧、要么只讲理论不落地,那么这篇文章就是为你准备的。 我们不是在讨论又一个“Python入门”或“AI简介”的普通课程。今天要拆解的,是一个被许多…

2026/10/12 0:23:53 阅读更多 →
完全不会写开题报告,有哪些 好用的AI写论文工具推荐?

完全不会写开题报告,有哪些 好用的AI写论文工具推荐?

毕业季一到,开题报告就成了很多同学的“第一道坎”:选题定不下来、研究背景和意义分不清、文献综述无从下手、研究方法和技术路线逻辑混乱,盯着空白文档发愁好几天也写不出完整框架。尤其是零基础、在职读研或者跨专业的学生,对高…

2026/10/7 18:13:44 阅读更多 →
AI写论文工具最全盘点:语法+润色+降AI率,一篇全搞定

AI写论文工具最全盘点:语法+润色+降AI率,一篇全搞定

论文写完了,但总觉得哪里不对劲?别急,AI 工具能帮你把初稿打磨成合格的终稿。每年毕业季,后台总有人问:“论文写完怎么改才能过审?”作为一个曾经被查重率吓到发抖、最后靠工具才顺利毕业的过来人&#xff…

2026/9/29 9:22:38 阅读更多 →

最新新闻

gRPC从入门到实战:跨语言微服务通信与Python并发避坑指南

gRPC从入门到实战:跨语言微服务通信与Python并发避坑指南

我真的是太爱学习了——这种念头冒出来的时候,通常不是因为刚学会了一个妙招,而是因为刚被一个不算难的框架折腾到凌晨一点。最近这个对象就是 gRPC。很长一段时间里,我提到 gRPC 都是能躲就躲:要写 .proto、要装 protoc、跨语言还…

2026/10/12 8:44:35 阅读更多 →
从人耳到算法:MFCC梅尔倒谱系数原理与实战调参指南

从人耳到算法:MFCC梅尔倒谱系数原理与实战调参指南

1. 从人耳到算法:为什么需要梅尔倒谱系数做语音相关项目的人,迟早会撞上MFCC这个词。不管你是做语音识别、声纹比对、情感计算,还是只是想做个简单的关键词唤醒,翻开源码或者论文,MFCC几乎无处不在。但很多人第一次看到…

2026/10/12 8:44:35 阅读更多 →
2025制造业AI落地实战:视觉质检、预测性维护与排程优化

2025制造业AI落地实战:视觉质检、预测性维护与排程优化

1. 制造业AI落地的真实图景:从概念狂欢到车间实战2025年过半,我跑了十几个城市的制造企业,从年产值几十亿的汽车零部件龙头到只有百来号人的精密加工厂,聊下来最大的感受是:制造业对AI的态度已经彻底变了。前两年大家还…

2026/10/12 8:44:35 阅读更多 →
3个爆火Claude Code工具深度解析:TaoToken统一Key下如何选对赛道

3个爆火Claude Code工具深度解析: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/12 8:44:35 阅读更多 →
一站式接入Kimi K3:OpenAI协议兼容的零改造迁移方案

一站式接入Kimi K3:OpenAI协议兼容的零改造迁移方案

1. 项目概述:为什么“一站式接入Kimi K3”突然成了刚需?最近两周,我陆续收到七八位不同背景的朋友咨询——有做教育类SaaS产品的技术负责人,有独立开发AI助教工具的自由开发者,还有某高校实验室带学生做对话系统课题的…

2026/10/12 8:44:35 阅读更多 →
OpenAI DevDay 2026:dots、Spaces与GPT-6.1 Sol的工程化落地指南

OpenAI DevDay 2026:dots、Spaces与GPT-6.1 Sol的工程化落地指南

1. 这不是发布会速记,而是一份开发者视角的“技术落地可行性评估报告”OpenAI DevDay 2026 这个标题本身已经释放出强烈的信号:它不再是一场面向大众的炫技秀,而是一次明确指向工程实践边界的深度技术校准。我全程参与了线上直播与会后48小时…

2026/10/12 8:43:30 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →