OpenJiuwen DeepSearch 同义缩写提示词解析:`synonym_rewrite_shorten` 的设计原则与完整调用链路
人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址https://gitcode.com/openJiuwen/deepsearch点击查看免费下载本文聚焦 openJiuwen DeepSearch 用户反馈处理链路中的缩写shorten能力完整解读 synonym_rewrite_shorten/system.md 系统提示词的每条设计约束并结合仓库源码剖析从用户选中文本到 LLM 改写结果回填报告的全过程。读完本文你将掌握缩写提示词的角色设定、压缩原则、输出契约以及它在UserFeedbackProcessor→SynonymRewriter调用链中的实际落位方式并能直接定位到对应的源码、模板与测试文件做二次开发。一、提示词在系统中的定位同义改写三动作之一在 openJiuwen DeepSearch 中报告生成完成后用户仍可对报告中选中的局部文本做三类**同义改写synonym rewrite**操作它们由统一的SynonymRewriter处理器承接仅通过不同的 Prompt 模板区分行为动作action提示词模板目录目标expandsynonym_rewrite_expand/在保留原意与事实边界的前提下扩写、澄清、补全论述polishsynonym_rewrite_polish/润色措辞与句式信息量基本不变shortensynonym_rewrite_shorten/压缩冗余表达保留核心观点、支撑与结论方向动作名到模板名的映射定义在 synonym_rewrite.py#L18-L22ACTION_TO_PROMPT { expand: synonym_rewrite_expand, polish: synonym_rewrite_polish, shorten: synonym_rewrite_shorten, }从 action_definitions.py 可以看到shorten与expand、polish同属UserFeedbackActionCategory.SYNONYM_REWRITE大类下的SynonymRewriteActionSubcategory小类三者共用同一条流式改写结果通道UserFeedbackRewriteStreamResult仅 action 值不同。需要特别强调的是同义改写只负责生成可替换选区的正文片段不重新规划报告结构、不主动补充外部资料。缩写动作的核心定位是对用户已选中的冗余文本做信息无损的精简这与补充检索supplementary_search、新增任务new_task、真实性核验truth_verification等动作有清晰的职责边界。二、shorten系统提示词全文逐条解读system.md 由三个板块构成Role、Requirements、Output Requirements。它与同目录下的 user.md 一起在运行时由 Jinja2 渲染为完整的 LLM 对话消息system user。2.1 Role角色设定You are a rigorous assistant for shortening research-style text. Your task is to condense the given text by compressing redundant expression while preserving its core viewpoints, key support, constraints, and conclusion direction, so that the result is more concise, focused, and readable.角色设定的关键信息有三点面向研究风格文本research-style text缩写对象是研究报告正文而非普通口语文本因此压缩策略必须服务于学术/研究写作的可读性。压缩的对象是冗余表达redundant expression而非删减信息。必须保留的要素被明确列出核心观点core viewpoints、关键支撑key support、约束constraints、结论方向conclusion direction。这与扩写expand提示词澄清已有观点、润色polish提示词改善表达形成互补三者共享不改事实边界的底线但操作维度不同。2.2 Requirements14 条压缩守则shorten提示词共 14 条要求可按主题归为四组1压缩的度与质第 1、2、3 条首要目标是压缩冗余不是用牺牲关键信息换取更短的长度——这是整个缩写动作的第一性原则。保留原文最核心的观点、关键支撑、逻辑关系与结论方向。以研究型写作的规范进行缩写优先删除重复表达、过度铺垫excessive setup、套话stock phrasing与次要信息secondary information。2不可删除的边界信息第 4、9、11 条不得删除约束条件、前提、适用范围、例外情况以及结论所依赖的依据。可以压缩例子、解释和修饰性定语但不得删除支撑主要论断的关键信息。不得通过过度概括制造比原文更强的结论也不得把原文中审慎的措辞cautious wording压缩成绝对判断。这三条共同构成了缩写不改义的护栏。3结构保持第 10 条保留原文基本的逻辑顺序缩写时不得打乱原文的强调层级hierarchy of emphasis。4长度目标与输出纪律第 13、14、12 条缩写后长度通常应为原文的50%70%但如果原文本身已非常紧凑则以信息完整性优先不做机械压缩。按用户输入要求的语言输出即 user.md 中的{{ language }}。不添加引用标记或参考文献注释——这意味着缩写结果中不会伪造[citation]或[[n]](url)结构。2.3 Output Requirements输出契约Output only the shortened text directly. Do not include any prefatory note, process analysis, self-check, or closing explanation.输出必须是纯文本片段不输出前言、过程分析、自检说明或收尾解释。这条约束非常重要因为它保证了 LLM 返回值可以直接替换用户选中的报告区间无需再做结构化解析——这与 docs 中记录的 Prompt 契约一致不要求 JSON 输出、不应生成 citation/inference 标记。三、输入契约user.md 模板与三个渲染变量user.md 定义了每次调用时注入的动态内容# Input - Requested language: {{ language }} {% if user_instruction %}- [Top Priority] Special user instruction: {{ user_instruction }}{% endif %} # Source Text {{ original_text }}模板声明的三个变量构成shorten提示词的完整输入契约与仓库级提示词契约测试 test_deepresearch_prompt_contracts.py#L92 中的声明完全对应synonym_rewrite_shorten的 required variables 为language、original_text、user_instruction变量含义是否必填language用户要求的输出语言如zh-CN、en-US必填original_text剥离 markup 后的纯文本选区即待缩写对象必填user_instruction用户补充的特别要求标注为[Top Priority]最高优先级可选可为空注意original_text的语义它不是用户选区的原始字符串而是经过strip_markup_in_range剥离 citation / inference 标记后的纯文本详见第五节。这一点在 synonym_rewrite.py 的_generate_synonym_rewrite_text注释中明确说明——让模型看到[[n]](url)这类结构化标记会诱导它错误改写引用结构。四、底层调用链从用户动作到 LLM 返回以一次shorten动作为例完整调用链如下源码依据 user_feedback_processor.py#L906-L912UserFeedbackProcessor.execute └─ 判断 feedback[action] ∈ SYNONYM_REWRITE_ACTIONS └─ SynonymRewriter.synonym_rewrite(feedback, report_content, language) ├─ strip_markup_in_range(report_content, start_offset, end_offset) # 剥离选区 markup ├─ _generate_synonym_rewrite_text(actionshorten, original_text, language, user_instruction) │ ├─ get_prompt_name(shorten) → synonym_rewrite_shorten │ ├─ build_prompt_messages(synonym_rewrite_shorten, context_vars) │ ├─ get_llm_instance(llm_model_name) # 从 llm_context 取模型 │ └─ ainvoke_llm_with_stats(...) # 带统计的 LLM 异步调用 └─ 拼接 new_report stripped_text[:start] rewritten_text stripped_text[stripped_end:] └─ (可选) apply_local_source_trace_to_action_result # 开启局部溯源时4.1 Prompt 模板的加载与渲染build_prompt_messages定义在 message_builder.py#L36-L89其工作方式以prompt_name定位prompts/prompt_name/system.md与user.md使用 Jinja2Environment配置trim_blocks、lstrip_blocks渲染返回[{role: system, content: system 文本}, {role: user, content: 渲染后的 user 文本}]对 system 模板做静态模板校验_assert_static_template_treesystem.md 中不允许出现运行时变量或动态 include保证角色设定恒定性校验上下文键messages、history、prior_messages、images为保留键不允许出现在业务上下文中。也就是说synonym_rewrite_shorten/system.md中的全部内容被作为恒定 system 消息注入每次缩写调用而原文与语言、用户指令通过 user 消息动态注入。4.2 LLM 调用与异常包装_generate_synonym_rewrite_textsynonym_rewrite.py#L102-L143执行如下动作从llm_context会话上下文变量中取出llm_model_name对应的 LLM 实例get_llm_instance调用ainvoke_llm_with_stats并以AgentLlmName.USER_FEEDBACK_PROCESSOR_SYNONYM_REWRITER.value作为 agent 名对应 node_constants.py#L127 中的user_feedback_processor_synonym_rewriter用于统计与日志归因将响应统一提取为response.get(content, )dict 类型或str(response)记录original_len与rewritten_len便于观察缩短比例是否符合 50%70% 的目标若LogManager.is_sensitive()为真敏感日志模式则不记录原文与改写文本保护内容隐私非CustomException的异常统一包装为USER_FEEDBACK_PROCESSOR_REWRITE_ERROR错误码212405见 status_code.py#L188。4.3 结果回填与 offset 计算synonym_rewrite返回的字典包含synonym_rewrite.py#L91-L100new_report替换后的完整报告stripped_text[:start_offset] rewritten_text stripped_text[stripped_end:]original_text/original_start_offset/original_end_offset前端原始选区及其偏移original_text_clean剥离 markup 后的纯文本即送入模型的original_textrewritten_text/rewritten_start_offset/rewritten_end_offset改写文本及其在新报告中的区间。该结果进一步被_build_rewrite_stream_result组装为UserFeedbackRewriteStreamResult数据类经_send_synonym_rewrite_result以StreamEvent.SUMMARY_RESPONSE事件流式写回前端user_feedback_processor.py#L633-L653。前端据此可以直接高亮替换区域无需自行 diff。4.4 局部溯源的可选接入在 user_feedback_processor.py#L850-L886改写结果是否进入局部溯源由enable_local_source_trace开关决定关闭直接返回改写结果缩写后的文本保持原 citation 语义附着引用的回填交由其他机制处理开启调用apply_local_source_trace_to_action_result为改写后的片段重新匹配/更新 citation返回带citation_messages与可选warning_info的增强结果。因此对缩写动作而言提示词本身不负责 citation但整个链路在开关开启时会为缩写结果补上新的引用。五、前置处理strip_markup_in_range的 markup 剥离机制缩写动作能获得干净的original_text依赖 report_edit_utils.py#L147-L166 的strip_markup_in_range。它处理三类标记正则定义见 report_edit_utils.py#L9-L12标记类型示例处理方式checked citation[checked_citation:1][[2]](https://b.com)选区内整段移除链接引用legacy[[3]](https://c.com)选区内整段移除普通引用[citation: 2]选区内移除inference 标记[结论A](#inference:1)还原为显示文本结论A并记录被移除的 inference id关键细节只处理选区内的标记选区外的 citation 保持原样测试 test_rewrite.py#L19-L36 验证了这一点保证改写局部、不动全局维护 clean-to-raw 边界映射strip_markup_in_range_with_metadata返回clean_boundary_to_raw_boundary支持后续把改写结果与原始 citation 做差异回填语义附着保留被删除 citation 的语义附着在前一个 clean 边界上report_edit_utils.py#L233-L234未变化片段可完整回填其标记。简言之模型拿到的是引用无关的纯文本改写完成后引用体系由代码层维护这正是shorten提示词第 14 条不添加引用标记约束得以成立的工程前提。六、测试与验证仓库为该链路提供了完备的测试覆盖单元测试 test_rewrite.pytest_prompt_names_match_registered_actions验证get_prompt_name(shorten) synonym_rewrite_shorten且SYNONYM_REWRITE_ACTIONS与ACTION_TO_PROMPT键集合一致test_invalid_prompt_name_raises未知 action 抛出USER_FEEDBACK_PROCESSOR_INVALID_ACTION错误码212404test_generate_synonym_rewrite_text_calls_llm_wrapper验证build_prompt_messages被调用一次、ainvoke_llm_with_stats被 await 一次test_generate_synonym_rewrite_text_wraps_unknown_exceptionLLM 抛出的任意异常被包装为USER_FEEDBACK_PROCESSOR_REWRITE_ERRORtest_synonym_rewrite_preserves_trailing_citation_offsetsshorten改写后选区尾部的 citation 标记原样保留多条测试验证选区外/未选中的重复引用实例、inference 标记均不被破坏。仓库级提示词契约测试 test_deepresearch_prompt_contracts.py#L92声明synonym_rewrite_shorten的必填变量为language、original_text、user_instruction防止模板与调用方契约漂移。处理器集成测试 test_processor.py覆盖UserFeedbackProcessor.execute的动作分派、流式结果构建与发送。推荐运行命令uv run pytest deepsearch/tests/user_feedback_processor/test_rewrite.py uv run pytest deepsearch/tests/user_feedback_processor/test_processor.py若改动涉及局部溯源接入还应运行uv run pytest deepsearch/tests/user_feedback_processor/test_local_source_trace.py七、边界与错误处理总结综合提示词约束与源码实现缩写链路共有四类边界条件未知 actionget_prompt_name对不在ACTION_TO_PROMPT中的动作抛出USER_FEEDBACK_PROCESSOR_INVALID_ACTION212404不会静默落到错误的模板offset 不匹配start_offset/end_offset必须与当前报告正文匹配否则在UserFeedbackProcessor.validate阶段被拦截LLM 异常统一包装为USER_FEEDBACK_PROCESSOR_REWRITE_ERROR212405向上传递时保持CustomException语义敏感日志LogManager.is_sensitive()开启时不记录原文与改写文本缩写内容的隐私边界由日志开关保障。八、相关文档与代码索引提示词模板synonym_rewrite_shorten/system.md、synonym_rewrite_shorten/user.md兄弟模板synonym_rewrite_expand/、synonym_rewrite_polish/核心实现synonym_rewrite.py、user_feedback_processor.pymarkup 剥离report_edit_utils.py动作定义action_definitions.py模板渲染器message_builder.py功能文档synonym-rewrite.md、用户反馈处理总览测试test_rewrite.py、test_processor.py、test_deepresearch_prompt_contracts.py结语synonym_rewrite_shorten表面上是 20 行英文提示词实质上是 openJiuwen DeepSearch用户反馈驱动报告精修能力在缩写维度上的完整契约角色上锚定研究风格文本与信息无损压缩要求上区分冗余与关键信息、划定 50%70% 的长度目标、明确保留约束与审慎措辞输出上强制纯文本片段以支持选区直接替换。配合strip_markup_in_range的引用剥离、build_prompt_messages的稳定模板渲染、SynonymRewriter的 offset 回填以及局部溯源的可选接入它在工程上实现了模型只改文字、系统管引用的清晰分工。对于希望在报告精修方向做二次开发的工程师从上述代码与测试入口出发即可完整复现并扩展这一链路。赞分享人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体【免费下载链接】deepsearchopenJiuwen DeepSearch是一款知识增强的深度搜索与研究框架有业界领先的片段级引用和溯源推理能力提供精准Agentic搜索与研究能力项目地址https://gitcode.com/openJiuwen/deepsearch点击查看免费下载相关推荐《自顶向下方法》计算机网络自学方案约 40 小时打通协议栈Wireshark 抓包 CS144 实战《自顶向下方法》计算机网络自学方案约 40 小时打通协议栈Wireshark 抓包 CS144 实战 自学计算机网络时大多数人卡在第一个问题上物理层人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体openJiuwen DeepSearch 同义改写能力解析从前端 expand/shorten/polish 到 SynonymRewriter 的完整链路openJiuwen DeepSearch 同义改写能力解析从前端 expand/shorten/polish 到 SynonymRewriter 的完整链路人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体openJiuwen DeepSearch 报告润色 Prompt 全解析synonym_rewrite_polish 的规则设计、调用链路与实战要点openJiuwen DeepSearch 报告润色 Prompt 全解析synonym_rewrite_polish 的规则设计、调用链路与实战要点 ope人工智能大模型AI AgentRAG深度研究搜索引擎后端代码智能体上一篇网页视频下载助手 Video Download Helper 实战指南没有下载按钮的网页视频它也能帮你把地址全部挖出来下一篇免费解锁 Wand 游戏修改器Wand-Enhancer 使用教程与远程面板设置指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

单机游戏入坑指南:从新手到硬核的必玩清单与排坑经验

单机游戏入坑指南:从新手到硬核的必玩清单与排坑经验

1. 单机游戏到底好在哪:先把这三个问题想清楚接触单机游戏这些年,我经常被朋友问同一个问题:天天玩这种“一个人”的游戏,不无聊吗?每次我都得耐心解释一遍——单机游戏不是“一个人玩”,而是“给你一个完整…

2026/10/13 12:39:44 阅读更多 →
AI日报工作流实战:信息筛选、验证与趋势连线方法

AI日报工作流实战:信息筛选、验证与趋势连线方法

1. 一份“AI 日报”到底在记录什么每天早上花十五分钟翻一遍行业动态,把值得记的东西整理成一份日报,这个习惯我坚持了快两年。很多人觉得“日报”这东西是给领导看的,其实真正做过内容跟踪的人都知道,一份好的 AI 日报首先是写给…

2026/10/13 12:39:44 阅读更多 →
laravel-websockets 优雅重启指南:掌握 websockets:restart 命令与软关停机制

laravel-websockets 优雅重启指南:掌握 websockets:restart 命令与软关停机制

后端即时通讯 【免费下载链接】laravel-websockets Websockets for Laravel. Done right. 项目地址: https://gitcode.com/gh_mirrors/la/laravel-websockets 点击查看 免费下载 本文聚焦 laravel-websockets 包中的 websockets:restart 命令,讲解如何像…

2026/10/13 12:38:43 阅读更多 →

最新新闻

个人主页置顶帖与投稿汇总实操指南:打造内容导航体系

个人主页置顶帖与投稿汇总实操指南:打造内容导航体系

1. 先搞清楚:置顶帖和投稿汇总到底在解决什么问题1.1 置顶帖是主页的第一屏,也是你的数字名片我见过太多创作者陷入同一个困境:内容发了几百条,主页却像一个乱糟糟的仓库,新访客点进来根本不知道你擅长什么、写过哪些代…

2026/10/13 13:14:25 阅读更多 →
RDV4GUI230228.rar 解压即用实战:依赖配置与排错指南

RDV4GUI230228.rar 解压即用实战:依赖配置与排错指南

简介:RDV4GUI230228.rar 是一份面向 Proxmark3(PM3)设备使用者的图形界面工具整合包,适合需要刷写固件、管理驱动与执行自动化脚本的 RFID 研究及安全测试人员。压缩包共 643 个文件,约 149.27MB,以 bz2 固…

2026/10/13 13:14:25 阅读更多 →
微信小程序图书管理系统源码解析:从跑通到二次开发

微信小程序图书管理系统源码解析:从跑通到二次开发

简介:这份资源是面向计算机相关专业学生与Java初学者的微信小程序图书管理系统完整项目包,可作为毕业设计、课程设计或项目立项的参考方案。项目采用SSM框架(SpringMVCSpringMyBatis)搭建服务端接口,客户端基于微信开发…

2026/10/13 13:14:25 阅读更多 →
VS2010绿色精简版部署指南:Win10/11上快速编译老MFC工程

VS2010绿色精简版部署指南:Win10/11上快速编译老MFC工程

简介:VS2010绿色精简版是一份面向初学者、临时项目开发或系统资源有限电脑用户的轻量级开发环境。它移除了大量非核心组件,安装与运行时无需手动配置环境变量,解压后即可启动Visual Studio 2010,适合日常编写调试C、C#等基础程序&…

2026/10/13 13:14:25 阅读更多 →
ABAQUS在卡簧非线性有限元分析与工程优化中的应用

ABAQUS在卡簧非线性有限元分析与工程优化中的应用

1. 项目背景与工程意义卡簧(又称弹性挡圈)作为机械连接中的关键部件,广泛应用于轴承固定、轴端定位等场景。其工作原理看似简单——通过弹性变形产生的径向力实现轴向固定,但在实际工程中,卡簧的装配质量直接影响设备运…

2026/10/13 13:14:25 阅读更多 →
RabbitMQ从0到1:核心模型、生产实践与高频问题排查指南

RabbitMQ从0到1:核心模型、生产实践与高频问题排查指南

如果你手头有个项目需要在系统里传递消息,十有八九会想到RabbitMQ。但很多人装完、跑个Hello World就算“会用”了,等遇到连接失败、消息丢失、谁该消费谁不该消费、甚至admin账号没法创建virtual host时,才发现自己其实并不理解它。这篇就从…

2026/10/13 13:13:23 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →