工具调用是什么?AI 如何从“会说”变成“会做”
工具调用让模型输出一个结构化的调用意图由宿主程序校验权限和参数、执行真实函数再把结果返回模型。模型通常并不亲自访问数据库或运行代码。当人们第一次接触 工具调用 时常会把产品界面上的顺畅体验当成技术本身能回答就以为它已经理解能找到资料就以为资料一定正确能执行动作就以为整个过程自动安全。真正值得掌握的不是一句定义而是它位于系统哪一层、接收什么输入、产生什么输出以及错误会怎样传播。模型像前台调度员理解用户需求并填写工单应用程序像后台操作员检查身份、执行查询或修改、记录结果。调度员不能因为写对了工单格式就绕过权限。这篇文章面向不要求数学基础的读者也尽量保留工程上真正重要的边界。读完以后你应该能够解释 工具调用 的工作链路判断一个产品宣传是否夸大并用可复核的方法完成一次小实验。目录一、先给结论它是什么、不是什么二、为什么需要这项技术三、完整工作流程四、关键概念与生活类比五、完整案例拆解六、最容易失败的地方七、性能、成本与安全边界八、常见误区九、普通人可以做的小实验十、项目与使用检查清单十一、如何评价结果是否可靠十二、总结一、先给结论它是什么、不是什么工具调用让模型输出一个结构化的调用意图由宿主程序校验权限和参数、执行真实函数再把结果返回模型。模型通常并不亲自访问数据库或运行代码。这一定义里最重要的是“系统边界”。它不是魔法开关也不是只要出现相应名词可靠性就自动提升。一个完整应用还可能包含数据清洗、身份认证、提示模板、模型推理、外部检索、工具执行、缓存、日志和人工审核。工具调用 只是其中承担特定职责的一层。我们可以用三个问题判断自己是否真正理解它把什么转换成什么中间依据什么规则选择或计算失败以后用户能否发现并回到原始证据如果解释只剩“它很智能”“它懂语义”或“它可以自动完成”说明仍停留在产品印象。技术解释至少要说清输入、处理、输出和限制。它不是什么首先它不是事实保证。统计模型可以在多数样本上表现良好却仍会在罕见、冲突或分布外输入上犯错。其次它不是权限系统。模型说“允许”不代表真实用户拥有权限。再次它不是责任主体。高风险决定仍应由具备授权和专业能力的人承担。使用者最需要避免的是把“能够生成一个结果”与“结果已经被现实世界验证”混为一谈。前者是能力展示后者需要来源、时间、状态和复核链。二、为什么需要这项技术计算机内部处理的是数字而用户目标通常以文字、图片、声音、数据或动作表达。传统程序擅长规则明确的任务却难以为自然语言中的每一种表达逐条编写条件。工具调用 的价值是在这条鸿沟上提供一种可学习的连接方式。它通常解决以下至少一类问题把非结构化输入转换为可以计算的表示在大量候选信息中选择与当前问题相关的部分把通用模型连接到最新或私有信息将自然语言意图转换为受控的程序动作让不同来源、模态或系统遵循可组合的接口在结果出现后用自然语言向用户解释。不过自动化从来不是免费午餐。系统替用户减少一步阅读或操作就必须在内部增加一步判断内部判断越多越需要记录、验证与边界控制。效率和责任链必须同时设计。从演示到生产环境的距离演示通常选择清晰输入、常见问题和单次成功案例。生产环境则会出现错别字、旧文档、多个同名对象、网络超时、权限变化、恶意内容和相互冲突的目标。一个功能“能跑通”只证明基本链路存在要长期可用还需要评测集、监控、失败处理和人工接管。三、完整工作流程把 工具调用 的典型流程简化为开发者声明工具名称、用途和参数结构 ↓ 模型根据问题选择工具并生成参数 ↓ 宿主程序进行类型、业务与权限校验 ↓ 真实 API、数据库或函数执行请求 ↓ 结构化结果返回给模型 ↓ 模型依据结果回复或决定下一次调用每一步都在做信息变换而变换通常是有损的。输入中的全部细节不会原封不动保留系统会根据训练目标、上下文限制和当前任务选择性保留信息。这个特性让计算成为可能也构成了错误来源。步骤核心动作需要核验的内容1开发者声明工具名称、用途和参数结构如果这一环失真后面的回答可能继续放大误差2模型根据问题选择工具并生成参数如果这一环失真后面的回答可能继续放大误差3宿主程序进行类型、业务与权限校验如果这一环失真后面的回答可能继续放大误差4真实 API、数据库或函数执行请求如果这一环失真后面的回答可能继续放大误差5结构化结果返回给模型如果这一环失真后面的回答可能继续放大误差6模型依据结果回复或决定下一次调用如果这一环失真后面的回答可能继续放大误差为什么要分层检查假设最终答案错误不能立刻得出“模型太笨”的结论。问题可能发生在原始数据、切分、编码、检索、参数、权限、工具返回或生成表达中。只修改最后一层提示词可能暂时掩盖症状却不会修复根因。更好的排查顺序是先确认原始输入再检查中间结果然后核对最终表达。每一层都保留少量可观察证据既有利于质量也有利于安全与合规。四、关键概念与生活类比模型像前台调度员理解用户需求并填写工单应用程序像后台操作员检查身份、执行查询或修改、记录结果。调度员不能因为写对了工单格式就绕过权限。类比的价值是建立第一印象但类比也有边界。现实中的人能说明自己为何注意某句话、能主动核验来源也能承担责任模型内部则主要通过数值计算产生概率结果。不能因为类比像人就推断系统拥有人的意识、常识或道德判断。三个层次不要混淆层次关注问题典型证据技术层算法把输入怎样转换为输出模型文档、参数、评测结果产品层功能怎样与数据和界面组合权限页面、来源标记、操作回执治理层谁能使用、谁承担后果制度、审计、人工审批与申诉很多争论来自跨层推理模型论文中的平均分数不能直接证明某个产品适合医疗决定产品能连接数据库也不能证明每个用户有权读取全部数据。讨论时先说明层次结论会清晰很多。五、完整案例拆解案例安排不撞期的会议任务背景解析参与人、查询忙闲、选择时间、创建日程并发送邀请同时防止超时重试产生重复事件。第一步不是立即让模型给结论而是明确成功标准答案要解决哪个问题、针对什么时间和对象、允许使用哪些资料或工具、哪些情况必须停止。没有成功标准系统可能生成一段很完整的文字却没有完成真正目标。第二步是整理输入。对文档要确认版本和生效日期对人物要消除重名对数字要保留单位对外部内容要标记来源与可信级别。垃圾输入不会因为经过 AI 就自动变成高质量信息。第三步才进入 工具调用 的核心流程。应用需要保留关键中间状态例如候选片段、工具参数、识别出的数字或能力列表。中间状态不一定全部展示给用户但必须能在出错时用于定位。第四步是生成或执行。涉及写入、付款、删除、发消息等有副作用操作时应将“模型建议”与“系统执行”分开。执行前由服务端校验身份、权限和业务约束必要时让用户确认对象、金额与后果。第五步是核验结果。一个可靠回复不应只说“已完成”还应提供可以检查的事实来源链接、更新时间、事件编号、计算式、原文片段或撤销入口。案例中的正确责任链用户目标 ↓ 明确对象、时间和成功标准 可信数据与受控工具 ↓ 记录中间结果 模型分析或提出动作 ↓ 服务端校验权限和参数 真实执行或生成答案 ↓ 来源、回执和人工复核 可验证结果如果某一环无法观察后续语言越流畅反而越容易让人忽视错误。设计产品时应优先让关键事实可点击、可追踪、可撤销而不是只追求回答像人。六、最容易失败的地方1. 选错功能相近的工具这是 工具调用 项目中非常典型的失效点。系统表面上仍可能给出通顺结果因此不能只看语言是否自然而要保存这一环的输入、输出与时间信息。发现问题时应先定位证据和边界再调整数据、规则或流程不能把所有责任都推给模型。更实用的检查方法是准备正常样本、边界样本和冲突样本分别记录“系统做了什么”“为什么这样做”“结果能否由原始材料复核”。如果无法回答这三个问题就说明可观测性仍然不足。2. JSON 结构正确但时区、币种或身份语义错误这是 工具调用 项目中非常典型的失效点。系统表面上仍可能给出通顺结果因此不能只看语言是否自然而要保存这一环的输入、输出与时间信息。发现问题时应先定位证据和边界再调整数据、规则或流程不能把所有责任都推给模型。更实用的检查方法是准备正常样本、边界样本和冲突样本分别记录“系统做了什么”“为什么这样做”“结果能否由原始材料复核”。如果无法回答这三个问题就说明可观测性仍然不足。3. 工具部分成功却被描述为全部成功这是 工具调用 项目中非常典型的失效点。系统表面上仍可能给出通顺结果因此不能只看语言是否自然而要保存这一环的输入、输出与时间信息。发现问题时应先定位证据和边界再调整数据、规则或流程不能把所有责任都推给模型。更实用的检查方法是准备正常样本、边界样本和冲突样本分别记录“系统做了什么”“为什么这样做”“结果能否由原始材料复核”。如果无法回答这三个问题就说明可观测性仍然不足。4. 写操作超时后盲目重试这是 工具调用 项目中非常典型的失效点。系统表面上仍可能给出通顺结果因此不能只看语言是否自然而要保存这一环的输入、输出与时间信息。发现问题时应先定位证据和边界再调整数据、规则或流程不能把所有责任都推给模型。更实用的检查方法是准备正常样本、边界样本和冲突样本分别记录“系统做了什么”“为什么这样做”“结果能否由原始材料复核”。如果无法回答这三个问题就说明可观测性仍然不足。5. 模型把工具原始结果夸大成不存在的结论这是 工具调用 项目中非常典型的失效点。系统表面上仍可能给出通顺结果因此不能只看语言是否自然而要保存这一环的输入、输出与时间信息。发现问题时应先定位证据和边界再调整数据、规则或流程不能把所有责任都推给模型。更实用的检查方法是准备正常样本、边界样本和冲突样本分别记录“系统做了什么”“为什么这样做”“结果能否由原始材料复核”。如果无法回答这三个问题就说明可观测性仍然不足。七、性能、成本与安全边界1. 性能不是单一准确率评价 工具调用 至少要区分正确率、完整性、时延、费用、稳定性和可解释程度。提高某一项可能损害另一项加入更多上下文可能提高召回却增加费用与噪声增加自主步骤可能完成更复杂任务却提高故障概率。2. 平均表现会隐藏高代价错误一百次普通问答中错一次与一百次付款中错一次后果完全不同。测试集应该按照风险分层对金额、身份、健康、法律、公开发布和不可逆操作设置更严格门槛。高风险场景还应保留人工复核。3. 数据最小化只把当前任务需要的信息交给模型或外部服务。能用忙闲状态完成排期就不要读取会议标题能用局部截图完成识别就不要上传整份敏感档案。最小化既降低泄露风险也减少无关信息干扰。4. 权限必须在模型之外执行模型生成的身份、路径、金额和工具参数都应视为外部输入。真正的认证、授权、范围限制和速率限制应由服务器或操作系统实施。提示词可以指导模型却不能替代安全边界。5. 失败要可恢复查询可以有限重试写操作则要使用幂等标识并先确认上一次状态。系统要区分全部成功、部分成功、明确失败和状态未知不能把所有异常都包装成一句“请稍后再试”。八、常见误区误区 1函数调用就是模型执行代码这种说法抓住了某个局部现象却把条件省略了。工具调用 是完整系统中的一层它的效果取决于数据、模型、上下文、产品规则和使用场景。判断说法是否成立应追问适用范围、时间、版本、评价指标与失败代价。误区 2参数符合 JSON 就一定安全这种说法抓住了某个局部现象却把条件省略了。工具调用 是完整系统中的一层它的效果取决于数据、模型、上下文、产品规则和使用场景。判断说法是否成立应追问适用范围、时间、版本、评价指标与失败代价。误区 3有工具就不会幻觉这种说法抓住了某个局部现象却把条件省略了。工具调用 是完整系统中的一层它的效果取决于数据、模型、上下文、产品规则和使用场景。判断说法是否成立应追问适用范围、时间、版本、评价指标与失败代价。误区 4把所有 API 暴露给模型最强大这种说法抓住了某个局部现象却把条件省略了。工具调用 是完整系统中的一层它的效果取决于数据、模型、上下文、产品规则和使用场景。判断说法是否成立应追问适用范围、时间、版本、评价指标与失败代价。误区 5提示词可以代替后端权限控制这种说法抓住了某个局部现象却把条件省略了。工具调用 是完整系统中的一层它的效果取决于数据、模型、上下文、产品规则和使用场景。判断说法是否成立应追问适用范围、时间、版本、评价指标与失败代价。九、普通人可以做的小实验分别让同一产品直接口算大整数、明确使用计算器并返回工具结果再用实时天气问题检查来源和更新时间观察语言回答与真实工具证据的差别。建议使用公开、非敏感材料并建立如下记录表轮次输入变化中间证据最终回答是否可复核1原始条件记录来源或关键片段保存原回答是/否2删除一个关键条件比较证据变化保存原回答是/否3加入冲突信息检查是否识别冲突保存原回答是/否4要求注明不确定性检查措辞与证据保存原回答是/否实验重点不是挑出一次错误来证明技术无用而是观察输入、证据和输出之间是否存在稳定关系。如果结论变化却无法指出证据变化说明当前功能不适合直接用于高风险决定。一个通用提示模板是请分三部分回答 1. 你能从当前输入直接确认的事实 2. 你根据上下文作出的推断 3. 你无法确认、需要补充或人工核对的地方。 涉及数字、日期、来源或真实操作时请给出原始依据。 如果信息冲突不要强行合并请分别列出。十、项目与使用检查清单使用前问题是否写明对象、地区、时间和版本数据是否来自有权发布该信息的来源是否移除了不必要的个人信息和商业秘密是否知道功能使用了哪些外部模型、索引或工具结果错误的代价是否可以接受处理过程中是否保存了关键中间证据而不只是最终文字是否区分系统指令、用户目标和外部不可信内容模型生成参数是否经过类型与业务校验权限是否依据真实用户身份强制执行是否设置最大步骤、超时、预算与停止条件冲突信息是否被明确展示使用结果前人名、金额、日期、版本和单位是否回到原文核对引用是否真的支持对应主张“可能”“相关”和“初步”是否被错误写成确定结论真实动作是否有回执、状态和撤销方式高风险结论是否经过专业人员复核失败和未知状态是否被诚实说明十一、如何评价结果是否可靠不要只问“回答像不像专家”而要从六个维度评价正确性关键事实与原始来源是否一致完整性是否保留适用范围、例外和时间条件忠实性结论是否由展示的证据支持稳健性输入稍有变化时系统是否合理响应安全性错误判断能否越权造成真实损失可恢复性发现错误后能否定位、停止、撤销和修正。还要建立反例集。正常样本只能证明系统在熟悉条件下能运行反例、边界和冲突样本才会暴露真正风险。每次线上事故都应转化为新的回归测试避免同类问题重复出现。对于快速变化的信息答案必须带时间。对于来自外部的数据答案必须带来源。对于真实执行的动作答案必须带状态。对于无法验证的推断答案必须带不确定性。这四条原则比追求华丽措辞更有价值。十二、总结工具调用让模型输出一个结构化的调用意图由宿主程序校验权限和参数、执行真实函数再把结果返回模型。模型通常并不亲自访问数据库或运行代码。理解 工具调用 的最好方式不是背诵术语而是沿着完整责任链提问输入从哪里来中间怎样转换哪些内容被舍弃谁有权执行结果如何核验失败怎样恢复。当我们把这些问题说清楚就不会因为一次惊艳演示断言 AI 已经无所不能也不会因为一次错误否定整项技术。成熟的态度是把适合机器处理的重复工作交给机器同时把证据、权限和最终责任留在可控制的系统与人手中。好的 AI 产品不是从不出错而是尽量减少高代价错误并让剩余错误能够被发现、解释和修正。

相关新闻

汽车LIN总线收发器TLIN1024-Q1:核心功能、保护机制与设计实战

汽车LIN总线收发器TLIN1024-Q1:核心功能、保护机制与设计实战

1. TLIN1024-Q1:汽车LIN网络中的“多面手”收发器在汽车电子这个行当里摸爬滚打十几年,我经手过的车身网络节点设计少说也有上百个。从早期的CAN总线到后来遍地开花的LIN网络,一个深刻的体会是:越是看似简单的系统,对底…

2026/10/16 10:45:25 阅读更多 →
PCM1840四通道音频ADC:硬件配置、DRE优化与多路采集实战

PCM1840四通道音频ADC:硬件配置、DRE优化与多路采集实战

1. 项目概述与核心价值 在音频系统设计,尤其是需要多路高保真拾音的应用中,如何将多路模拟麦克风或线路信号高质量地转换为数字信号,一直是个既关键又充满挑战的环节。无论是智能音箱的远场语音唤醒、视频会议系统的全向拾音,还是…

2026/10/12 22:23:34 阅读更多 →
TPS65263-1Q1电源芯片设计:从性能曲线解读到PCB布局实战

TPS65263-1Q1电源芯片设计:从性能曲线解读到PCB布局实战

1. 项目概述:从芯片手册到稳定供电的艺术在嵌入式硬件和系统设计中,电源部分常常被新手工程师视为“黑盒”——只要按照参考设计连接好,能输出正确的电压就万事大吉。然而,当项目进入量产,或者在复杂电磁环境中运行时&…

2026/10/15 11:01:08 阅读更多 →

最新新闻

Qwen3.8 Flash Next生产级部署:AutoDL+Strata轻量化推理实战

Qwen3.8 Flash Next生产级部署:AutoDL+Strata轻量化推理实战

1. 项目概述:这不是一次普通的大模型部署,而是一次面向生产级推理的轻量化实战“从零开始部署Qwen3.8 Flash Next | AutoDL | Strata”——这个标题里藏着三个关键坐标:一个具体版本(Qwen3.8)、一个优化路径&#xff0…

2026/10/16 10:45:58 阅读更多 →
Qwen3.8 Flash Next轻量化部署实战:AutoDL+Strata低延迟推理

Qwen3.8 Flash Next轻量化部署实战:AutoDL+Strata低延迟推理

1. 项目概述:这不是一次普通的大模型部署,而是一次面向生产环境的轻量化推理实战最近在多个技术社区和开发者群聊里,“Qwen3.8 Flash Next”这个名称出现频率陡增——它不是官方发布的正式版本号,而是某实验室内部对Qwen系列最新轻…

2026/10/16 10:45:58 阅读更多 →
树形DP进阶:叶子染色问题的贪心转移与边界处理

树形DP进阶:叶子染色问题的贪心转移与边界处理

第一次做“叶子的染色”这题时,我把它当成了一道树上的涂色构造题,结果想把“叶子染成什么颜色”直接塞进DP,越写越晕。后来才反应过来:叶子的初始颜色已经给定,我们要做的不是自由染色,而是“用最小的代价…

2026/10/16 10:45:58 阅读更多 →
REA:面向AI系统的逆向工程方法论与实操指南

REA:面向AI系统的逆向工程方法论与实操指南

1. 项目概述:REA 不是“破解工具”,而是一套面向 AI 时代的逆向思维操作系统 最近在多个技术社区和开发者群聊里,频繁刷到“REA”这个词——不是某个新出的模型缩写,也不是某家公司的产品代号,而是 Reverse Engineer …

2026/10/16 10:45:58 阅读更多 →
笛卡尔树模板题P5854:单调栈建树原理与坑点详解

笛卡尔树模板题P5854:单调栈建树原理与坑点详解

P5854这道模板题,我刷题打卡的时候卡了一整个晚上。不是题目本身有多绕,而是大部分资料讲笛卡尔树的时候,都喜欢直接丢结论:单调栈维护最右链,弹栈、接左子树、入栈,听起来十二个字就完了。真到自己动手写&…

2026/10/16 10:45:58 阅读更多 →
SpringBoot+Vue智能停车场系统开发实战:数据库设计与状态机设计详解

SpringBoot+Vue智能停车场系统开发实战:数据库设计与状态机设计详解

看到这个标题,我心里基本就有数了——SpringBootVue的智能停车场管理系统,这几年几乎成了毕业设计选题榜单上的固定嘉宾。技术含量适中、业务场景贴近生活、功能模块容易扩展,优点确实明显。但正因为它太常见了,想做出区分度、想顺…

2026/10/16 10:44:57 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* 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 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/15 9:49:14 阅读更多 →