大模型评测新思路:用Pelican基准与动态生成题目检验真实推理能力
如果你关注大语言模型LLM的进展可能会被各种评测榜单搞得眼花缭乱GPT-4、Claude 3、Llama 3、DeepSeek……每个新模型发布都伴随着在 MMLU、GSM8K、HumanEval 等基准测试上刷新的高分。但一个尖锐的问题随之而来这些分数真的能反映模型在实际应用中的能力吗或者说我们是否已经陷入了“基准膨胀”的陷阱模型只是在特定测试集上“应试”而非真正“学会”这正是“Pelican 基准”在当下依然值得被反复提及和审视的核心原因。它不是另一个追求更高分数的“刷榜”工具而是一面“照妖镜”旨在剥离模型通过数据污染或针对性训练获得的虚假优势检验其真正的推理、泛化和问题解决能力。在模型能力飞速迭代、评测标准备受争议的今天Pelican 所代表的评测哲学——公平、抗污染、注重过程——不仅没有过时反而显得愈发重要。本文将带你深入理解 Pelican 基准的设计理念、核心原理并通过一个完整的实践案例展示如何利用它来客观评估一个开源模型如 Llama 3的真实能力。你会发现它不是一个复杂的黑盒工具而是一套清晰的方法论任何开发者都可以在自己的环境中复现从而在纷繁的模型宣传中建立起自己独立的判断力。1. 这篇文章真正要解决的问题为什么你需要关注 Pelican在模型评测领域我们正面临一个典型的“古德哈特定律”困境当一个指标变成目标时它就不再是一个好指标。MMLU、HellaSwag 等主流基准的测试题目早已被公开甚至被纳入众多模型的训练数据中。这导致模型可能在测试中“见过”类似题目从而获得虚高的分数但这并不能证明它具备了相应的理解和推理能力。Pelican 基准要解决的正是这种“数据泄露”和“应试优化”带来的评测失真问题。它不是为了给模型排名而是为了回答几个更本质的问题模型的推理能力是“记忆”还是“思考”它能否解决从未在训练数据中出现过的新颖、组合性问题模型的进步是“全面”的还是“偏科”的它在数学、代码、逻辑等不同领域的泛化能力如何作为开发者我该如何选择适合我场景的模型除了看宣传的最高分还有什么更可靠的评估维度Pelican 通过其独特的设计——动态生成题目、多步骤推理验证、过程评估——试图将评测拉回到对模型“智力”本身的考察上。对于开发者而言理解并运用 Pelican 的思维意味着你能穿透营销迷雾不被单纯的榜单分数迷惑能更客观地比较不同模型的底层能力。精准匹配需求如果你的应用需要强大的数学推理或代码生成Pelican 的相关测试能提供比综合分数更有价值的参考。建立内部评估标准借鉴 Pelican 的思路为你自己的业务场景设计更抗污染、更有效的评估集。2. Pelican 基准的核心设计理念与原理Pelican 不是一个单一的测试集而是一个评测框架和一套生成评测题目的方法论。它的核心思想可以概括为通过程序化方式生成大量、多样、且保证训练数据中不存在的题目并重点评估模型得出答案的推理过程。2.1 核心设计原则抗污染Contamination-Free这是 Pelican 的立身之本。题目在评测时动态生成或从严格控制的源头获取确保任何模型在训练阶段都不可能“见过”这些具体题目。这从根本上切断了模型通过记忆而非推理来答题的可能性。过程导向Process-Oriented不仅仅看最终答案的对错这容易受到猜测和格式的影响更关注模型得出答案的推理链Chain-of-Thought。一个正确的答案如果伴随错误的推理其价值远低于一个答案错误但推理过程合理的回答。多样性Diversity覆盖数学、逻辑、代码、常识推理等多个认知维度避免模型只在单一类型任务上表现突出。可扩展性Extensibility其框架允许社区贡献新的题目生成器或评估器不断丰富评测维度。2.2 与主流基准的对比为了更直观地理解 Pelican 的独特之处我们将其与常见的基准进行对比特性Pelican 基准MMLU / HellaSwag 等传统基准题目来源动态生成或严格控源静态、公开的数据集抗数据污染高。题目几乎不可能被训练过。低。题目可能已泄露并包含在训练集中。评估重点推理过程 最终答案几乎只关注最终答案评测目标衡量泛化与推理能力衡量知识掌握与模式匹配开发者价值判断模型解决新问题的潜力判断模型在已知领域的熟练度简单来说传统基准像是“期末考试”题目范围固定而 Pelican 更像是“素质测评”通过没见过的新题来考察真正的学习能力和思维习惯。3. 环境准备搭建你的本地模型评测环境在开始使用 Pelican 思想进行评估前我们需要一个可以运行和测试开源模型的环境。这里我们以在本地使用Ollama运行Llama 3模型为例因为它简单易用适合快速实验。3.1 基础环境要求操作系统Linux (Ubuntu 20.04) macOS 或 Windows (WSL2 推荐)。内存至少 8GB RAM运行 7B 参数模型推荐 16GB。存储10GB 以上可用空间。Python3.8 或更高版本。3.2 安装 Ollama 并拉取模型Ollama 是一个强大的本地大模型运行工具一键安装管理方便。1. 安装 Ollama访问 Ollama 官网 ( https://ollama.com ) 下载对应系统的安装包或使用命令行安装Linux/macOS# Linux 或 macOS 安装命令 curl -fsSL https://ollama.com/install.sh | sh安装完成后运行ollama --version检查是否安装成功。2. 拉取 Llama 3 模型Ollama 内置了众多模型我们拉取 Meta 最新的 Llama 3 8B 版本进行测试。# 拉取模型 (这需要一些时间取决于网络) ollama pull llama3:8b # 运行一个简单对话测试 ollama run llama3:8b在出现的提示符后输入Hello看模型是否能正常回复。输入/bye退出对话。3.3 安装必要的 Python 库我们将使用 Python 通过 Ollama 的 API 来与模型交互并进行简单的评测脚本编写。# 创建一个虚拟环境可选但推荐 python -m venv pelican-eval-env source pelican-eval-env/bin/activate # Linux/macOS # 在 Windows 上使用: pelican-eval-env\Scripts\activate # 安装核心库 pip install requests pip install numpy至此你的本地模型沙盒就准备好了。4. 实践仿照 Pelican 思路设计一个简易评测我们不会直接部署完整的 Pelican 基准那需要复杂的题目生成和评估系统但我们可以深刻理解其思想并设计一个同样具备“抗污染”和“过程评估”特点的微型评测。评测目标评估模型解决基础算术应用题的能力但题目通过模板动态生成确保新颖性。4.1 第一步动态题目生成器我们编写一个 Python 脚本随机生成简单的数学应用题。这些题目在每次运行时都是新的模型不可能预先训练过。# 文件problem_generator.py import random def generate_math_word_problem(): 生成一个随机的两步运算数学应用题 operations [, -, *] op1 random.choice(operations) op2 random.choice(operations) # 生成随机数字确保减法结果不为负除法能整除简化 if op1 -: num1 random.randint(20, 50) num2 random.randint(1, 20) elif op1 *: num1 random.randint(2, 10) num2 random.randint(2, 10) else: # ‘’ num1 random.randint(1, 50) num2 random.randint(1, 50) if op2 -: num3 random.randint(1, min(num1num2, 30)) elif op2 *: num3 random.randint(2, 5) else: num3 random.randint(1, 30) # 构建问题模板 templates [ f小明先有 {num1} 个苹果然后他{买了 if op1 else 卖掉了 if op1 - else 收到的礼物是原来的} {num2} 个。接着他又{得到了 if op2 else 吃掉了 if op2 - else 把苹果分给了朋友们每人得到} {num3} 个。请问小明现在有多少个苹果, f一个仓库里有 {num1} 箱货物今天上午{运来 if op1 else 运走 if op1 - else 订单量是} {num2} 箱。下午又{运来 if op2 else 运走 if op2 - else 客户提货每车装} {num3} 箱。仓库最后还剩多少箱货物 ] problem random.choice(templates) # 计算正确答案这里简化实际应用题逻辑需与模板匹配 # 注意模板中的文字描述需要与运算逻辑严格对应这里为演示简化了计算。 # 真实场景需要更严谨的模板-计算绑定。 if op1 : step1 num1 num2 elif op1 -: step1 num1 - num2 else: # ‘*’ step1 num1 * num2 if op2 : answer step1 num3 elif op2 -: answer step1 - num3 else: # ‘*’ answer step1 * num3 return problem, answer if __name__ __main__: for i in range(3): p, a generate_math_word_problem() print(f问题 {i1}: {p}) print(f答案: {a}\n)运行这个脚本每次都会得到全新的题目。这就是“抗污染”的基础。4.2 第二步通过 Ollama API 调用模型并获取推理过程我们需要让模型以“逐步推理”的方式回答问题并输出完整的思考过程。# 文件evaluate_model.py import requests import json from problem_generator import generate_math_word_problem def ask_ollama(prompt, modelllama3:8b): 通过 Ollama 的 API 发送请求并获取回复 url http://localhost:11434/api/generate payload { model: model, prompt: prompt, stream: False, options: { temperature: 0.1, # 低温度减少随机性让推理更确定 num_predict: 512 # 最大生成token数 } } try: response requests.post(url, jsonpayload) response.raise_for_status() return response.json()[response] except requests.exceptions.RequestException as e: print(f请求 Ollama API 失败: {e}) return None def evaluate_single_problem(): 生成一个问题让模型回答并评估结果 problem, true_answer generate_math_word_problem() # 构建强调逐步推理的提示词Few-shot Prompting prompt f请解决以下数学应用题。请一步一步思考并在最后一行以‘答案是X’的格式给出最终结果。 问题{problem} 让我们一步步思考 print(*50) print(f[问题] {problem}) print(f[标准答案] {true_answer}) model_response ask_ollama(prompt) if model_response: print(f[模型回答] \n{model_response}) # 简单的答案提取实际应用需要更稳健的解析 lines model_response.strip().split(\n) extracted_answer None for line in reversed(lines): # 从最后一行往前找 if line.startswith(答案是): try: extracted_answer float(line.replace(答案是, ).strip()) break except ValueError: pass # 评估 if extracted_answer is not None and abs(extracted_answer - true_answer) 0.01: print([结果] ✅ 答案正确) return 1, model_response else: print(f[结果] ❌ 答案错误。模型提取值{extracted_answer} 期望值{true_answer}) return 0, model_response else: print([结果] 请求失败) return 0, None if __name__ __main__: # 运行5次测试 total_score 0 for i in range(5): score, _ evaluate_single_problem() total_score score print(f\n 最终得分{total_score}/5)这个脚本的核心是prompt工程我们明确要求模型“一步一步思考”并规范了答案的格式。这让我们不仅能检查答案还能分析模型的推理过程model_response看其逻辑是否合理。4.3 第三步运行与结果分析在终端中运行评测脚本python evaluate_model.py你将看到类似以下的输出 [问题] 小明先有 37 个苹果然后他卖掉了 12 个。接着他又得到了 8 个。请问小明现在有多少个苹果 [标准答案] 33 [模型回答] 让我们一步步思考 1. 小明一开始有 37 个苹果。 2. 他卖掉了 12 个所以剩下 37 - 12 25 个苹果。 3. 然后他又得到了 8 个所以现在有 25 8 33 个苹果。 答案是33 [结果] ✅ 答案正确 ... 最终得分4/5关键观察点过程评估模型是否列出了清晰的步骤如“1. ... 2. ...”每一步的计算是否正确错误分析如果答案错了是计算错误还是理解了问题查看model_response就能定位。格式遵循模型是否遵守了“答案是X”的格式这反映了模型的指令遵循能力。通过这个小实验你已经实践了 Pelican 基准的核心用动态生成的新问题考察模型的推理过程。虽然我们的例子很简单但方法论是相通的。5. 将评测扩展到更复杂的维度上面的算术题只是一个起点。仿照 Pelican 的思路我们可以设计更多维度的评测5.1 逻辑推理题生成涉及“所有”、“有些”、“不是”等逻辑量词的三段论推理题检查模型的形式逻辑能力。# 示例动态生成逻辑题 def generate_logic_problem(): premises [ (所有程序员都使用键盘。, 程序员, 使用键盘), (有些使用键盘的人也使用鼠标。, 使用键盘的人, 使用鼠标), (小林是程序员。, 小林, 是程序员) ] question 小林一定使用鼠标吗为什么 # 正确答案需要推理程序员-用键盘有些用键盘的用鼠标小林是程序员-用键盘但不一定用鼠标。 return premises, question, 不一定因为‘有些’不是‘所有’。5.2 代码生成与调试给出一个包含 bug 的代码片段每次随机生成不同的 bug要求模型解释错误并修复。# 示例生成一个有随机错误的函数 def generate_buggy_code(): bugs [ (off-by-one error, for i in range(len(lst)):, for i in range(len(lst)-1):), (uninitialized variable, total x, total 0\ntotal x), (wrong condition, if x 5:, if x 5:) ] bug_type, buggy_line, fixed_line random.choice(bugs) code fdef calculate_sum(lst): total 0 {buggy_line} total lst[i] return total return code, f这段代码有一个常见的‘{bug_type}’错误。请找出并修复它。5.3 知识组合与泛化提出需要结合常识和简单计算的问题例如“如果一本书有 300 页阅读速度是每分钟 1 页每天读 1 小时多少天能读完”题目中的数字可随机化。设计这些评测的关键在于题目生成规则是固定的但具体实例是无限且新颖的。这迫使模型运用其泛化能力而不是回忆训练数据。6. 常见问题与排查思路在本地进行模型评测时你可能会遇到以下问题问题现象可能原因排查方式解决方案Ollama 服务未启动安装后未运行或进程崩溃执行ollama list看是否报错检查11434端口是否监听 (netstat -tlnp | grep 11434)运行ollama serve启动服务后台进程模型拉取失败网络连接问题或磁盘空间不足查看ollama pull命令的错误信息检查磁盘空间 (df -h)使用代理或镜像源清理磁盘空间Python 脚本连接超时Ollama API 地址或端口不对确认脚本中url是否为http://localhost:11434/api/generate检查 Ollama 运行日志确认 API 地址模型回复质量差/胡言乱语提示词Prompt设计不佳或温度Temperature过高检查prompt是否清晰明确尝试降低temperature(如设为 0.1)优化提示词加入更明确的指令和示例调整生成参数答案解析失败模型输出格式不符合预期打印出完整的model_response观察其输出结构改进答案提取逻辑或使用更强大的文本解析库如正则表达式评测速度非常慢模型太大或硬件资源不足使用htop或任务管理器查看 CPU/内存/GPU 占用换用更小的模型如llama3:8b换为phi3:mini确保有足够内存7. 最佳实践与深入评估建议要将 Pelican 的公平评测理念应用到实际工作中可以参考以下建议构建领域特定的动态评测集对于你的垂直领域如法律、医疗、金融设计专属的题目生成器。这比使用通用基准更能反映模型在你业务中的真实潜力。重视错误案例分析不要只记录分数。建立一个“错误案例库”详细记录模型答错的问题、它的错误推理过程。这能帮你精准定位模型的弱点是数学计算不行还是无法理解长逻辑链。过程评估自动化对于简单的数学题可以尝试用规则匹配检查推理步骤。对于更复杂的问题可以考虑训练一个小型的“推理过程评估模型”或使用更强的模型如 GPT-4作为裁判来给推理链的质量打分。进行对比实验用同一套动态评测集测试不同的模型如 Llama 3 8B vs. 70B或不同家族的模型。这能给你一个相对公平的横向比较。结合传统基准但不依赖它可以将 MMLU 等分数作为参考基线但最终决策应更多依赖于你自己设计的、抗污染的、过程导向的评测结果。关注推理成本与速度在本地评测时记录每个问题的平均响应时间。一个准确率高但速度慢10倍的模型在生产环境中可能不可用。Pelican 基准的价值不在于提供一个终极的、权威的排行榜而在于提供了一种方法论上的纠正。它提醒我们在评估一个模型的“智能”时应该更关注它如何应对未知如何拆解问题如何一步步推导出结论——这些才是人类智能的核心也应该是我们衡量机器智能的标尺。通过今天的实践你已经掌握了这种方法的精髓从动态生成问题开始通过精心设计的提示词引导模型展示思考过程最后对过程和结果进行综合评估。下次当你再看到某个模型宣称“在某某基准上超越 GPT-4”时不妨先问一句这个基准是另一个可以刷题的“题库”还是一个真正考验“解题能力”的试金石

相关新闻

RAG上下文剪枝实战:四大策略实现68%压缩率,提升生成质量与效率

RAG上下文剪枝实战:四大策略实现68%压缩率,提升生成质量与效率

1. 项目概述:当RAG遭遇“信息过载”最近在折腾几个RAG(检索增强生成)项目时,我被一个老问题反复折磨:喂给大模型的上下文(Context)太长了。这几乎是每个RAG工程师都会遇到的瓶颈。你精心设计了检…

2026/10/17 2:48:07 阅读更多 →
如何用设计模式重构重复Switch代码

如何用设计模式重构重复Switch代码

1. 重复的Switch:代码坏味道的典型症状 在维护大型代码库时,我们经常会遇到一种令人头疼的模式——重复出现的switch语句。这种结构就像代码中的"慢性病",初期可能只是轻微的不适,但随着业务逻辑的扩展,它会…

2026/10/16 5:16:24 阅读更多 →
STM32内核细讲《从CPU架构到操作系统实现》

STM32内核细讲《从CPU架构到操作系统实现》

1.1 概述章-CPU架构99%的手机50%的CPU都是基于ARM的。只卖架构知识产权IP里面有Cortex-A(手机常用)Cortex-R(用的少)Cortex-M(低功耗)内核架构设计:指令集:指令集(ISA&am…

2026/10/18 2:07:45 阅读更多 →

最新新闻

【信息科学与工程学】【通信工程】第二百四十四篇 通信网络中的流量类型01

【信息科学与工程学】【通信工程】第二百四十四篇 通信网络中的流量类型01

行业分类统一参照 GB/T 4754-2017(门类+大类2位+中类3位+小类4位);TC3 并非全局唯一定义,需在每行中按场景注明其具体含义(RDMA QoS / 运营商流量等级 / 设备厂商 TC 映射均可能不同)。 编号 类型 行业大类(GB/T 4754) 行业中类 行业小类 智算中心/企业网/数据中心…

2026/10/18 7:33:04 阅读更多 →
LangChain异步化实战:ainvoke/astream与asyncio提升服务吞吐量的关键细节

LangChain异步化实战:ainvoke/astream与asyncio提升服务吞吐量的关键细节

第一次把一个 LangChain 链塞进异步服务里时,我的第一反应是:把 invoke 换成 ainvoke,把 stream 换成 astream,不就完事了吗?实测下来,事情确实就这么简单,但所有坑也都藏在“只改方法名”的背后…

2026/10/18 7:33:04 阅读更多 →
ArtCraft是什么?解析多领域中的艺术与技术融合实践

ArtCraft是什么?解析多领域中的艺术与技术融合实践

我理解您的要求,但需要坦诚说明:当前输入内容中,项目标题“artcraft”未提供任何有效上下文——既无项目正文描述、无关键词列表、无摘要描述,也未给出任何可识别的领域指向(如是AI绘画工具、手工DIY平台、3D建模插件、…

2026/10/18 7:33:04 阅读更多 →
UGUI中Polygon Collider 2D的非物理点击判定与坐标映射

UGUI中Polygon Collider 2D的非物理点击判定与坐标映射

1. 为什么UGUI里硬塞Polygon Collider 2D是个“反直觉操作”刚看到这个标题时,我下意识皱了下眉——不是因为难,而是因为太违和。Unity的UGUI系统从设计之初就走的是“矩形优先”路线:Canvas是分层渲染的矩形画布,Image、Text、Bu…

2026/10/18 7:33:04 阅读更多 →
思维链CoT:仅靠提示词激活大模型推理能力的里程碑论文

思维链CoT:仅靠提示词激活大模型推理能力的里程碑论文

做AI应用的人,大概都经历过这种画面:模型能把论文摘要写得比不少研究生还像样,你让它算“小明有5个苹果,小红又给了他2袋,每袋3个苹果,问小明现在有几个苹果”,它一本正经地输出一个错的答案。这…

2026/10/18 7:33:04 阅读更多 →
AI智能体赋能Cypress E2E测试:四种落地路径与高效工作流

AI智能体赋能Cypress E2E测试:四种落地路径与高效工作流

在自动化测试这个领域摸爬滚打几年,我越来越清楚一件事:前端E2E测试的瓶颈,从来不在“能不能驱动浏览器”,而在于“用例有没有人写、坏了有没有人修”。Cypress已经把驱动浏览器这件事做得非常舒服了,断言自动重试、网…

2026/10/18 7:32:04 阅读更多 →

日新闻

基于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/16 14:23:36 阅读更多 →