MiMo-V2.5-DFlash:基于block-diffusion推测解码的大模型推理加速实践
在生成式 AI 领域推理速度是决定模型能否投入实际应用的关键瓶颈之一。传统的自回归生成方式虽然保证了质量但其逐词输出的特性严重制约了吞吐量。小米最新开源的 MiMo-V2.5-DFlash 模型通过引入 block-diffusion 推测解码技术在保持生成质量的同时显著提升了推理效率。这项技术并非简单地替换模型架构而是对解码过程进行了一次精巧的算法级优化。对于需要部署大语言模型进行实时交互的应用开发者而言理解 block-diffusion 和推测解码的工作原理意味着能够更合理地评估模型性能、进行资源规划甚至在自定义模型上借鉴其思想。本文将深入解析 MiMo-V2.5-DFlash 的核心机制并通过 HuggingFace 平台的实际调用示例展示如何利用这一技术提升生成速度。1. 理解推测解码与 block-diffusion 的基本原理1.1 为什么自回归解码会成为瓶颈在 Transformer 架构成为主流的今天大多数文本生成模型都采用自回归方式生成内容。简单来说模型根据已生成的上文预测下一个最可能的词然后将其作为新的上文的一部分继续预测下一个词。这个过程可以表示为第1步输入今天天气模型输出很 第2步输入今天天气很模型输出好 第3步输入今天天气很好模型输出。这种串行生成方式确保了每个新词都与前文保持连贯但代价是必须等待前一个词生成完成后才能开始下一个词的生成。当序列长度增加时总生成时间几乎线性增长这在对话系统、代码生成等需要快速响应的场景中成为了主要性能瓶颈。1.2 推测解码如何实现并行预测推测解码的核心思想是先大胆猜测再谨慎验证。它引入了一个相对较小的草稿模型来快速生成多个候选词即一个候选块然后由主要的目标模型一次性验证整个候选块的合理性。具体流程分为三个步骤草稿生成使用计算量较小的草稿模型快速生成一个长度为 K 的候选词序列。并行验证将整个候选序列一次性输入目标模型让模型并行计算每个位置的条件概率。接受判断比较草稿模型和目标模型生成的概率分布从第一个不匹配的位置开始丢弃后续所有候选词只保留匹配的前缀。这样在理想情况下即草稿模型的猜测大部分正确一次前向传播就能生成多个词而不是一个词。block-diffusion 在此基础上将这种思想应用于扩散模型的生成过程通过预测和验证整个文本块而非单个词来加速生成。1.3 block-diffusion 在 MiMo-V2.5-DFlash 中的实现特点MiMo-V2.5-DFlash 中的 block-diffusion 并非传统意义上的图像扩散模型而是将扩散过程中的去噪思想应用于文本生成的序列优化。其关键创新点包括块级注意力机制模型能够同时处理一个文本块内的多个词而不是局限于单个词的上下文窗口。多粒度验证在不同粒度上验证生成的块确保从词级别到语义级别的连贯性。自适应块大小根据输入内容和模型置信度动态调整块大小在速度和准确性之间实现平衡。这种设计使得模型在生成长文本时能够减少前向传播次数从而显著降低延迟。2. 环境准备与依赖配置2.1 硬件与基础软件要求要运行 MiMo-V2.5-DFlash 模型需要确保环境满足以下基本要求组件最低要求推荐配置GPU 内存12GB24GB 或以上系统内存16GB32GBPython 版本3.83.9PyTorch 版本1.12.02.0.0CUDA 版本11.311.8对于大多数实验和开发目的配备 RTX 309024GB或类似规格的 GPU 已经足够。如果只有 CPU 环境虽然可以运行但推理速度会大幅下降不适合实际应用。2.2 创建隔离的 Python 环境为了避免依赖冲突建议使用 conda 或 venv 创建独立环境# 使用 conda 创建环境 conda create -n mimo-dflash python3.9 conda activate mimo-dflash # 或者使用 venv python -m venv mimo-dflash-env source mimo-dflash-env/bin/activate # Linux/Mac # mimo-dflash-env\Scripts\activate # Windows2.3 安装核心依赖包MiMo-V2.5-DFlash 主要通过 HuggingFace 的 Transformers 库进行调用需要安装以下依赖# 安装 PyTorch根据 CUDA 版本选择 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安装 HuggingFace 相关库 pip install transformers accelerate sentencepiece protobuf # 可选安装优化库提升性能 pip install flash-attn --no-build-isolation其中flash-attn是可选依赖但如果能成功安装可以进一步优化注意力计算速度特别是在长序列生成场景下。2.4 模型下载与缓存配置由于模型文件较大通常几个GB建议提前配置缓存路径并确保有足够空间# 设置 HuggingFace 缓存路径可选 export HF_HOME/path/to/your/cache或者直接在代码中指定缓存目录from transformers import AutoTokenizer, AutoModelForCausalLM import os # 设置缓存路径 os.environ[TRANSFORMERS_CACHE] /path/to/your/model/cache3. 使用 HuggingFace 加载和运行 MiMo-V2.5-DFlash3.1 基本模型加载方式MiMo-V2.5-DFlash 在 HuggingFace 模型库中的标识符通常是Xiaomi/MiMo-V2.5-DFlash。以下是加载模型的基本代码from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 加载 tokenizer 和模型 model_name Xiaomi/MiMo-V2.5-DFlash tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, # 使用半精度减少内存占用 device_mapauto, # 自动分配设备 trust_remote_codeTrue # 信任自定义代码 ) # 将模型设置为评估模式 model.eval()这里有几个关键参数需要特别注意torch_dtypetorch.float16使用半精度浮点数能在几乎不损失精度的情况下大幅减少内存使用。device_mapauto让 Transformers 库自动将模型层分配到可用的 GPU 上支持多卡推理。trust_remote_codeTrue由于 MiMo-V2.5-DFlash 可能包含自定义实现需要此参数才能正确加载。3.2 文本生成基础示例下面是一个完整的文本生成示例展示如何使用 MiMo-V2.5-DFlash 进行基本的对话生成def generate_response(prompt, max_length200): # 编码输入文本 inputs tokenizer(prompt, return_tensorspt) # 将输入转移到模型所在设备 inputs {k: v.to(model.device) for k, v in inputs.items()} # 生成参数配置 generation_config { max_length: max_length, num_return_sequences: 1, temperature: 0.7, do_sample: True, top_p: 0.9, pad_token_id: tokenizer.eos_token_id, } # 执行生成 with torch.no_grad(): # 禁用梯度计算减少内存占用 outputs model.generate(**inputs, **generation_config) # 解码生成结果 response tokenizer.decode(outputs[0], skip_special_tokensTrue) return response # 测试生成 prompt 请解释一下人工智能的基本概念 result generate_response(prompt) print(模型生成结果) print(result)3.3 启用 block-diffusion 推测解码要充分利用 MiMo-V2.5-DFlash 的加速特性需要显式启用推测解码功能。以下是优化后的生成函数def generate_with_speculative_decoding(prompt, max_length200, draft_length5): inputs tokenizer(prompt, return_tensorspt) inputs {k: v.to(model.device) for k, v in inputs.items()} # 针对推测解码优化的生成配置 generation_config { max_length: max_length, num_return_sequences: 1, temperature: 0.7, do_sample: True, top_p: 0.9, pad_token_id: tokenizer.eos_token_id, use_cache: True, # 启用 KV 缓存加速 speculative_decoding: { draft_length: draft_length, # 草稿生成长度 threshold: 0.8, # 接受阈值 } } try: with torch.no_grad(): outputs model.generate(**inputs, **generation_config) response tokenizer.decode(outputs[0], skip_special_tokensTrue) return response except Exception as e: print(f推测解码失败回退到标准生成: {e}) # 回退到标准生成方式 generation_config.pop(speculative_decoding, None) with torch.no_grad(): outputs model.generate(**inputs, **generation_config) return tokenizer.decode(outputs[0], skip_special_tokensTrue)4. 性能测试与效果对比4.1 速度测试方案设计为了客观评估 block-diffusion 推测解码的效果需要设计合理的测试方案。以下是一个简单的性能测试脚本import time from transformers import set_seed def benchmark_generation(prompt, num_runs10, use_speculativeTrue): set_seed(42) # 设置随机种子确保结果可复现 times [] for i in range(num_runs): start_time time.time() if use_speculative: result generate_with_speculative_decoding(prompt) else: result generate_response(prompt) end_time time.time() times.append(end_time - start_time) if i 0: # 只打印第一次的结果内容 print(f生成内容长度: {len(result)} 字符) avg_time sum(times) / len(times) tokens_per_second len(result) / avg_time # 粗略估算 print(f平均生成时间: {avg_time:.2f}秒) print(f估算生成速度: {tokens_per_second:.1f}字符/秒) return avg_time, tokens_per_second # 测试提示词 test_prompt 请写一篇关于机器学习在医疗领域应用的短文内容包括诊断辅助、药物研发和个性化治疗等方面。4.2 标准生成与推测解码对比在实际测试中可以明显观察到两种模式的性能差异print( 标准生成模式 ) std_time, std_speed benchmark_generation(test_prompt, use_speculativeFalse) print(\n 推测解码模式 ) spec_time, spec_speed benchmark_generation(test_prompt, use_speculativeTrue) print(f\n 性能对比 ) speedup std_time / spec_time print(f速度提升: {speedup:.2f}x) print(f时间减少: {(1 - 1/speedup)*100:.1f}%)典型测试结果可能显示在合适的文本生成任务上推测解码能够带来 1.5-2.5 倍的速度提升具体数值取决于提示词复杂度、生成长度和硬件配置。4.3 质量评估方法速度提升不能以牺牲质量为代价。以下是一个简单的质量评估方案def evaluate_quality(prompt, reference_outputNone): 评估生成质量的基本方法 speculative_result generate_with_speculative_decoding(prompt) standard_result generate_response(prompt) print(推测解码结果:) print(speculative_result) print(\n标准生成结果:) print(standard_result) # 简单的一致性检查 speculative_tokens len(tokenizer.encode(speculative_result)) standard_tokens len(tokenizer.encode(standard_result)) print(f\n长度对比 - 推测解码: {speculative_tokens} tokens, 标准生成: {standard_tokens} tokens) # 可以加入更复杂的质量评估指标如困惑度计算等 return speculative_result, standard_result5. 实际应用场景与参数调优5.1 不同场景下的参数配置建议block-diffusion 推测解码的效果高度依赖于任务类型。以下是根据不同应用场景的配置建议应用场景draft_lengthtemperaturetop_p注意事项技术文档生成3-50.3-0.50.85需要准确性降低随机性创意写作5-80.7-0.90.95可接受更高随机性代码生成2-40.2-0.40.8需要严格遵循语法对话系统4-60.6-0.80.9平衡一致性和多样性5.2 长文本生成优化策略对于长文本生成任务需要特殊优化以避免内存溢出和质量下降def generate_long_text(prompt, total_length1000, chunk_size200): 分段生成长文本的策略 current_text prompt generated_length 0 while generated_length total_length: # 使用上一段生成的内容作为新的提示词 chunk_result generate_with_speculative_decoding( current_text, max_lengthlen(current_text) chunk_size ) # 只取新生成的部分 new_content chunk_result[len(current_text):] current_text chunk_result generated_length len(new_content) print(f已生成 {generated_length} 字符...) # 检查终止条件 if tokenizer.eos_token in new_content: break return current_text5.3 批量处理优化在实际生产环境中通常需要处理多个请求。以下是如何优化批量生成的示例def batch_generate(prompts, batch_size4): 批量生成优化 results [] for i in range(0, len(prompts), batch_size): batch_prompts prompts[i:ibatch_size] # 批量编码 batch_inputs tokenizer( batch_prompts, return_tensorspt, paddingTrue, truncationTrue ) batch_inputs {k: v.to(model.device) for k, v in batch_inputs.items()} with torch.no_grad(): batch_outputs model.generate(**batch_inputs, max_length200) # 批量解码 batch_results tokenizer.batch_decode(batch_outputs, skip_special_tokensTrue) results.extend(batch_results) return results6. 常见问题排查与解决方案6.1 内存不足错误处理在资源受限的环境中运行大模型时经常会遇到内存不足的问题。以下是一些应对策略def memory_efficient_generation(prompt): 内存优化的生成方案 try: return generate_with_speculative_decoding(prompt) except RuntimeError as e: if out of memory in str(e).lower(): print(检测到内存不足尝试优化策略...) # 策略1: 清理缓存 torch.cuda.empty_cache() # 策略2: 使用更保守的参数 conservative_config { max_length: 100, # 减少生成长度 draft_length: 2, # 减少草稿长度 } return generate_with_speculative_decoding(prompt, **conservative_config) else: raise e6.2 生成质量不稳定问题推测解码有时可能导致生成质量波动以下是识别和解决方法问题现象可能原因解决方案生成内容前后矛盾draft_length 设置过大减小 draft_length 到 3-5重复性内容增多temperature 过低适当提高 temperature 到 0.7-0.9生成过早终止接受阈值过高降低 threshold 到 0.6-0.8内容偏离主题top_p 设置不当调整 top_p 到 0.85-0.956.3 模型加载失败问题处理由于 MiMo-V2.5-DFlash 可能依赖特定版本的库或自定义组件加载时可能遇到问题def robust_model_loading(model_name, fallback_modelNone): 健壮的模型加载方案 try: tokenizer AutoTokenizer.from_pretrained(model_name) model AutoModelForCausalLM.from_pretrained( model_name, torch_dtypetorch.float16, device_mapauto, trust_remote_codeTrue ) return tokenizer, model except Exception as e: print(f加载 {model_name} 失败: {e}) if fallback_model: print(f尝试加载备用模型: {fallback_model}) return robust_model_loading(fallback_model) else: raise e # 使用示例 try: tokenizer, model robust_model_loading( Xiaomi/MiMo-V2.5-DFlash, fallback_modelXiaomi/MiMo-V2.5 # 备用模型 ) except Exception as e: print(f所有模型加载尝试均失败: {e})7. 生产环境部署最佳实践7.1 性能监控与日志记录在生产环境中部署时需要建立完善的监控体系import logging from datetime import datetime # 配置日志 logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(mimo_deployment.log), logging.StreamHandler() ] ) def monitored_generation(prompt, user_idNone): 带监控的生成函数 start_time time.time() try: result generate_with_speculative_decoding(prompt) end_time time.time() # 记录性能指标 generation_time end_time - start_time result_length len(result) logging.info( f生成成功 - 用户: {user_id}, f时间: {generation_time:.2f}s, f长度: {result_length}字符 ) return result except Exception as e: logging.error(f生成失败 - 用户: {user_id}, 错误: {str(e)}) raise e7.2 资源管理与自动扩展对于高并发场景需要实现资源管理策略class ModelResourceManager: 模型资源管理器 def __init__(self, max_concurrent4): self.semaphore asyncio.Semaphore(max_concurrent) self.active_requests 0 async def generate_with_limits(self, prompt): 带并发限制的生成 async with self.semaphore: self.active_requests 1 try: # 在线程池中运行生成任务避免阻塞事件循环 loop asyncio.get_event_loop() result await loop.run_in_executor( None, generate_with_speculative_decoding, prompt ) return result finally: self.active_requests - 1 # 使用示例 manager ModelResourceManager(max_concurrent2)7.3 安全与内容过滤在生产环境中必须加入内容安全机制def safe_generation(prompt, max_attempts3): 带安全过滤的生成 # 输入验证 if not prompt or len(prompt.strip()) 0: raise ValueError(输入不能为空) if len(prompt) 1000: # 限制输入长度 raise ValueError(输入过长) # 敏感词检查简化的示例 sensitive_keywords [暴力, 违法, 侵权] # 实际应使用更完善的词库 if any(keyword in prompt for keyword in sensitive_keywords): raise ValueError(输入包含敏感内容) for attempt in range(max_attempts): try: result generate_with_speculative_decoding(prompt) # 输出内容检查 if any(keyword in result for keyword in sensitive_keywords): logging.warning(f第 {attempt 1} 次生成结果包含敏感内容重试...) continue return result except Exception as e: logging.error(f第 {attempt 1} 次生成失败: {e}) if attempt max_attempts - 1: raise e raise Exception(所有生成尝试均失败)block-diffusion 推测解码技术代表了生成式 AI 在推理效率优化方向上的重要进展。在实际应用中关键是要根据具体任务特性调整参数在速度和质量之间找到最佳平衡点。对于需要实时交互的应用场景这种技术能够显著改善用户体验降低服务成本。下一步可以探索将类似思想应用于多模态生成任务如图文生成、语音合成等领域的加速优化。

相关新闻

空间智能技术:从原理到工业应用的演进与实践

空间智能技术:从原理到工业应用的演进与实践

1. 空间智能技术发展概述十年前我第一次接触空间智能这个概念时,它还是个实验室里的新鲜玩意儿。当时的研究人员需要花费数周时间才能让机器人完成简单的空间认知任务,而今天,这项技术已经渗透到我们生活的方方面面。从手机里的AR导航到智能家…

2026/10/16 3:04:26 阅读更多 →
振幅调制电路的设计与仿真

振幅调制电路的设计与仿真

多种振幅调制电路的仿真与设计第2章 振幅调制基本原理2.1 振幅调制的数学本质振幅调制属于线性频谱搬移技术,其核心是通过低频调制信号控制高频载波的振幅,使载波振幅随调制信号的瞬时值线性变化,从而将低频信号的频谱搬移到高频载波两侧&…

2026/10/16 0:52:39 阅读更多 →
最好用的AI文献综述工具推荐:高效助力科研写作的实用工具盘点

最好用的AI文献综述工具推荐:高效助力科研写作的实用工具盘点

链接链接刚进实验室,你可能认为找文献就是打开知网或Google Scholar,输入关键词,然后一篇篇下载、阅读。如果这是你主要的科研方式,那么一个隐形的天花板已经形成:你的认知深度和广度,将被你使用的工具牢牢…

2026/10/17 6:25:55 阅读更多 →

最新新闻

Vue3+Node.js 从零搭建企业级能耗监测管理系统(多租户架构 完整落地实战)

Vue3+Node.js 从零搭建企业级能耗监测管理系统(多租户架构 完整落地实战)

一、前言很多工业厂区、产业园区、商业物业都会遇到能耗管理的痛点:人工抄表费时费力还容易出错、能耗数据滞后没法及时发现跑冒滴漏、想做节能改造却没有数据支撑、环保合规上报缺完整台账。 市面上成熟的工业能耗平台动辄十几万起,定制周期长&#xff…

2026/10/17 6:57:01 阅读更多 →
Tomcat 7 Windows安装配置全攻略:JDK匹配、环境变量与故障排查

Tomcat 7 Windows安装配置全攻略:JDK匹配、环境变量与故障排查

简介:Apache Tomcat 7.0.108 的 Windows x64 版本是一份面向 Java Web 开发者的 Servlet 容器部署包,专为 64 位 Windows 环境优化,可充分利用内存资源。该版本支持 Servlet 3.0、JSP 2.2 等 Java EE 6 规范,适用于本地开发测试、…

2026/10/17 6:57:01 阅读更多 →
Unity导弹追踪算法全解析:比例导引、纯追踪与提前量

Unity导弹追踪算法全解析:比例导引、纯追踪与提前量

简介:面向Unity开发者的导弹追踪算法演示项目,以军事模拟与飞行射击类游戏为典型场景,重点讲解目标预测与路径规划的具体实现路径。项目完整覆盖目标检测、运动轨迹分析、发射参数求解、飞行过程PID持续校正及末端碰撞判定等关键环节&#xf…

2026/10/17 6:57:01 阅读更多 →
C# Winform日志输出例程源码解析:从缓冲队列到文件滚动

C# Winform日志输出例程源码解析:从缓冲队列到文件滚动

简介:面向 C# WinForm 初学者的日志输出例程,解决桌面程序中运行日志的实时显示与持久化记录问题。程序会捕捉启动、关闭等系统事件及日常操作行为,一方面在窗口同步展示,另一方面按日期追加写入后台日志文件;每天生成…

2026/10/17 6:57:01 阅读更多 →
C# WinForms + SQL Server 库存管理系统实战:从建表到出库完整落地

C# WinForms + SQL Server 库存管理系统实战:从建表到出库完整落地

简介:这份资源是一套基于C#与C/S架构的库存管理系统源码,面向正在学习C#桌面开发、希望动手实践数据库与界面交互的初学者和进阶者。系统围绕商品入库、出库、库存盘点与预警等核心业务展开,客户端负责图形界面交互,服务端处理数据…

2026/10/17 6:57:01 阅读更多 →
前端RSA加密实战:分段加密解决长文本与中文乱码问题

前端RSA加密实战:分段加密解决长文本与中文乱码问题

1. 前端加密到底在解决什么问题前端做加密这件事,很多刚接触的人第一反应是“前端代码都是明文的,加密有什么意义”。这个疑问很合理,但忽略了一个关键场景:数据在网络上传输的过程中,经过的每一层节点都可能被截获。前…

2026/10/17 6:56:01 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →