构建有回应的AI系统:从技术架构到工程实践
1. 项目概述当AI开始“回应”我们最近一个词在圈子里被反复提及——“AI与被回应的权利”。乍一听这像是一个哲学或伦理命题离我们这些搞技术、做产品、写代码的似乎有点远。但如果你深入一线真正去设计、开发或运营一个与用户深度交互的AI系统你就会发现这恰恰是当下最核心、最棘手、也最容易被忽视的工程与体验问题。它关乎的远不止是技术实现更是产品价值观的落地。简单来说“被回应的权利”指的是当用户向一个智能系统无论是聊天机器人、内容推荐引擎、智能客服还是创作助手发起交互时他/她是否有权期待并获得一个有意义、负责任、且对其个体处境有所体察的回应而不仅仅是一个基于概率生成的、正确但空洞的文本流或是一个完全偏离语境、甚至带有潜在伤害性的输出。我经历过太多次这样的场景团队欢呼雀跃地发布了一个响应速度极快、知识面看似很广的AI功能但用户反馈却很快降温。核心抱怨往往不是“它不懂”而是“它不懂我”。比如用户向一个心理健康辅助机器人倾诉深夜的焦虑得到的可能是一段标准化的、关于“规律作息、正念冥想”的教科书式回答。这个回答“正确”吗从知识库角度看完全正确。但它“回应”了用户那一刻孤独、寻求共鸣的真实情感需求吗几乎没有。用户的“被回应权”在这里被忽视了。技术实现了“答”但产品缺失了“应”。这个项目就是试图拆解“被回应的权利”这个宏大命题背后我们作为构建者在技术架构、数据策略、交互设计和伦理红线等各个层面具体能做些什么、该注意什么。这不是空谈而是一份来自实战的、充满细节和“坑点”的构建指南。2. 核心需求解析从“功能正确”到“体验共鸣”为什么“被回应的权利”突然变得如此重要因为AI交互正在从“工具型”向“伙伴型”演进。早期的语音助手你问天气它报温度功能闭环需求明确。但现在的AI尤其是大语言模型驱动的应用被期望能进行开放式对话、提供情感支持、辅助复杂决策。用户潜意识里是在与一个“智能体”交流他们投射的期待是人性化的沟通而不仅仅是信息检索。2.1 用户的核心隐性需求被理解而非被解析用户希望AI能理解其话语背后的情绪、意图和上下文而不仅仅是解析关键词。例如用户说“项目又延期了好累”其需求可能不是获取“项目管理十大法则”而是希望得到一些共情或鼓励。获得确定性而非模糊性在寻求建议或答案时用户希望AI能给出清晰、负责任、可操作的回应而不是一堆模棱两可、全面但无用的“一方面……另一方面……”。这要求AI具备“决策勇气”和结果可解释性。保持对话的连贯性与人格一致性在多轮对话中AI应记住上下文保持“人设”或服务角色的稳定。前一刻是严谨的学术助手后一刻不能突然变成插科打诨的段子手这会让用户感到混乱和不可信。安全与无害的底线保障这是“被回应权”的基石。用户有权免于收到带有偏见、歧视、误导或有害的信息。特别是在医疗、法律、金融等高风险领域回应的安全性优先级高于一切。2.2 开发者的核心挑战从实现角度看满足上述需求意味着我们要超越传统的“输入-处理-输出”管道意图识别的深度需要结合情感分析、上下文建模和领域知识进行更深层的意图抽离。生成的控制与对齐如何在模型强大的生成能力之上施加精准的约束使其输出既符合事实Factual又符合期望的风格Stylistic、安全Safety和价值观Value标准。上下文管理的效率与精度如何在有限的上下文窗口内最有效地组织和管理历史对话信息、用户画像、会话目标等这是一项复杂的工程。评估体系的变革传统的BLEU、ROUGE等指标无法衡量回应的“共鸣度”、“有用性”和“责任感”。需要建立一套新的、以人为中心的评估体系。3. 技术架构设计构建“会回应”的AI系统要实现“有回应的权利”不能只靠一个裸奔的大模型。它需要一个精心设计的系统架构我称之为“感知-认知-决策-表达”四层响应框架。下面我结合一个“智能写作伙伴”的场景来具体说明。3.1 感知层超越文本的输入理解这一层负责收集和初步理解所有输入信号。核心组件多模态输入解析不仅是用户输入的文本还可能包括用户同时上传的参考文档、图片包含图表或文字、语音语调如果支持语音输入等。例如用户说“帮我把这个数据做成图表并总结趋势”同时上传了一个Excel文件。情感与情绪识别在文本中嵌入轻量级的情感分析模型判断用户当前语句的情绪色彩积极、消极、焦虑、兴奋等。这为后续的回应风格定下基调。基础意图分类快速将用户query归类到预设的意图槽中如“事实问答”、“创意写作”、“代码调试”、“情感倾诉”等。这可以通过一个小的分类器模型或精心设计的提示词Prompt来实现。实操要点注意情感识别模型不要过度依赖公开的通用数据集它们可能与你产品的用户语言风格不符。最好用自己场景下的对话数据做微调。例如技术论坛用户的“烦躁”和心理咨询用户的“烦躁”表达方式可能截然不同。3.2 认知层构建对话的“世界观”这一层是系统的记忆和思考中枢负责形成对当前对话状态的综合认知。核心组件上下文管理引擎这是重中之重。不能简单地把最近N轮对话的原始文本堆给模型。需要实现关键信息提取与摘要自动从长篇对话中提取核心事实、用户决策、待办事项等并压缩成简洁的表示。对话状态跟踪明确记录当前对话的目标、已完成步骤、待解决分歧等。向量化记忆检索将历史对话片段向量化存储当用户提到模糊指代如“你刚才说的那个方法”时能快速检索出相关上下文。用户画像与偏好长期跨会话和短期本次会话的用户偏好。例如用户喜欢简洁的要点式回答还是喜欢详细的案例分析在编程帮助中用户更关注性能优化还是代码可读性。领域知识增强通过RAG检索增强生成技术实时从知识库中检索与当前话题最相关的权威信息作为生成回应的依据确保事实准确性。实操心得 上下文管理是性能瓶颈和效果瓶颈并存的地方。一个有效的策略是采用“分层上下文”将最相关的1-2轮原始对话、关键信息摘要、用户画像标签、以及本次会话的核心目标共同组成一个结构化的“认知状态对象”再输入给决策层。这比扔进去50轮原始文本要高效、精准得多。3.3 决策层生成策略与安全护栏这一层接收认知层的状态并决定“如何回应”。这里是大模型LLM发挥核心作用的地方但绝不是直接调用那么简单。核心组件策略路由根据认知层输出的意图和状态决定调用哪个“技能”Skill或使用哪种回答策略。例如识别为“代码调试”则路由到“代码专家”模式并附带激活代码安全检查器。提示词工程与模板为不同策略设计精细化的系统提示词System Prompt和少量示例Few-shot。这是控制AI“人设”和回答风格的关键。例如在“情感支持”模式下系统提示词会强调共情、倾听和非评判性。安全与合规过滤器在生成前通过提示词约束、生成中通过API参数如temperature、top_p控制随机性和生成后通过内容安全过滤器设置多层护栏。生成后过滤尤其重要需要使用专门的分类器对输出进行毒性、偏见、事实错误等多维度扫描。不确定性处理模块当模型对某个问题不确定时例如知识库中没有明确答案应设计决策逻辑让AI学会“诚实地说不知道”或“引导用户提供更多信息”而不是胡编乱造幻觉问题。实操要点提示词不是写一次就完事的。它需要像代码一样进行版本管理、A/B测试和持续迭代。一个技巧是将系统提示词拆解为“角色定义”、“任务说明”、“行为规范”、“输出格式”等模块便于单独调试和组合。例如增加一条“当你无法提供确切建议时应优先引导用户咨询该领域的专业人士”能显著提升在医疗、法律等敏感领域的回应责任感。3.4 表达层组织最终输出这一层将决策层生成的原始文本包装成最终呈现给用户的形态。核心组件结构化输出格式化确保AI按照要求的格式输出如Markdown、JSON、带编号的列表等。多模态输出整合如果回应中包含建议生成的图表描述、需要执行的代码块或建议播放的音乐在此层进行整合与标注。交互元素附着在回应的末尾或适当位置附加可能的后续交互建议如“您是否需要我就这一点展开详细说明”或“这是根据您的要求生成的方案A是否需要我提供一个更简化的方案B作为对比”。这赋予了对话延续性和引导性。4. 关键实现细节与避坑指南有了架构我们来深入几个最容易出问题、也最能体现“回应质量”的关键环节。4.1 上下文管理的实战策略直接使用模型的固定上下文窗口如128K把历史对话全部塞进去是最简单但最糟糕的做法。它不仅成本高、速度慢而且模型注意力会被稀释无法聚焦关键信息。我们的策略是“摘要向量检索”双驱动实时摘要每经过3-5轮对话或检测到话题显著转换时触发一个摘要任务。使用一个较小的、专门微调过的摘要模型或让大模型自己生成将上一阶段的对话浓缩成一段100-200字的“段落摘要”。这个摘要需保留核心事实、用户决策和待办事项。向量检索将所有用户消息、AI消息以及生成的“段落摘要”都编码成向量存入向量数据库如Chroma、Weaviate。上下文组装当需要生成新一轮回应时组装上下文如下系统提示词固定最近2-3轮原始对话保证最新意图的准确性本次对话的“会话摘要”从第一个“段落摘要”开始串联后续的“段落摘要”形成全局脉络从向量库检索出的最相关片段针对用户query进行语义搜索找回可能被遗忘但关键的历史信息当前查询Query避坑指南摘要的偏差摘要模型可能会丢失细节或引入主观偏差。必须定期用人工抽样检查摘要的准确性。一个补救措施是在摘要后附上“关键原句引用”指向最重要的1-2句原始对话。向量检索的噪声语义搜索可能召回不相关的片段。一定要对检索结果设置相似度阈值如cosine similarity 0.8并且可以结合关键词匹配进行加权融合。4.2 安全护栏的精细化部署安全不是一刀切。对不同场景、不同用户群体安全标准应是动态的。分级分类体系建立内容安全分级制度。例如Level 1完全禁止违法、极端暴力、明确歧视性言论。一旦触发直接拦截并返回固定安全提示。Level 2高风险警告涉及医疗建议、财务决策、人身安全等。AI可以提供一般性信息但必须在回答前后强置顶警告并明确声明自己不是专业顾问。Level 3风格修正语气粗鲁、带有轻微偏见或可能引起不适的表述。系统应尝试用更中性、专业的语言重新表述核心信息。后处理过滤器的“白名单”机制对于创意写作、故事生成等场景过于严格的关键词过滤会扼杀创作。可以采用“场景白名单”机制在该场景下放宽对虚构暴力、幻想类内容的限制但核心的伦理底线如针对现实群体的仇恨仍需坚守。用户反馈闭环提供便捷的“举报”或“反馈回应有问题”的入口。将这些反馈数据作为重要的负样本持续用于优化安全过滤器和模型微调。实操心得安全过滤器的误杀False Positive和漏杀False Negative同样有害。误杀会破坏用户体验让AI显得愚蠢和僵化漏杀则带来真实风险。必须建立人工审核队列对模型拦截的内容和放行的边界内容进行定期复核这是调整过滤规则、校准模型判断的唯一可靠方法。4.3 评估体系如何衡量“好的回应”放弃单一的自动化指标建立“人工评估为主自动化指标为辅”的混合评估体系。设计评估维度问卷针对每一次AI回应请评估者可以是内部员工也可以是众包标注员从以下几个维度打分1-5分相关性回应是否直接针对用户的问题/请求有用性回应是否提供了切实可行、信息丰富的帮助安全性回应是否无害、无偏见、符合伦理人性化共鸣度回应是否考虑了用户的情绪和上下文感觉像是对“人”说的话诚实性对于不确定或不知道的事情是否坦诚相告而非虚构构建“黄金对话”测试集收集一批高质量的真实用户对话并由专家撰写出理想的“标准回应”。在每次模型迭代后用新模型在这些对话上生成回应与“标准回应”进行人工盲测对比哪个更好这是衡量模型进步最直观的方法。自动化监控指标用户满意度调查在对话结束后随机推送简短的评分。会话长度与留存用户是否愿意与AI进行多轮对话平均对话轮次是否在增加负面反馈率“踩”或“举报”按钮的点击率。5. 典型问题排查与实战案例在实际运行中你会遇到各种光怪陆离的问题。下面记录几个典型案例和解决思路。5.1 案例一AI突然“人格分裂”现象在一个长对话中AI前半段是热情细致的助手后半段突然变得冷漠且惜字如金。排查检查上下文组装逻辑。发现是因为对话轮次过长最早的“系统提示词”中关于“角色扮演”的部分在输入模型的上下文窗口中被挤出去了。模型“忘记”了自己应该扮演的角色。检查摘要过程。发现摘要模型过于激进将早期体现“热情”风格的用户和AI对话摘要成了纯粹的事实陈述丢失了风格信息。解决方案系统提示词固化确保系统提示词尤其是角色定义部分以某种形式始终包含在每一轮请求的上下文最前面不受窗口限制。风格标签注入在生成“段落摘要”时不仅摘要事实也摘要本阶段的“对话风格基调”如“本阶段AI表现为热情鼓励型”并将此标签作为元数据存入认知层供后续组装参考。5.2 案例二在专业领域“一本正经地胡说八道”现象用户询问一个非常专业的、知识库中只有边缘资料的问题AI生成了一段逻辑自洽、术语丰富但核心观点完全错误的回答。排查检查RAG检索环节。发现检索器确实只召回了几篇相关性不高的文档但模型在生成时过度 extrapolate外推结合其内部参数“幻想”出了细节。检查不确定性处理模块。发现当前策略是当检索到的资料置信度低于阈值时会让AI说“资料不足”。但阈值设置过高这几篇边缘资料的综合置信度刚好超过了阈值。解决方案改进检索置信度评估不仅看相似度分数还要结合文档来源的权威性、时效性进行加权。引入“引用声明”机制强制要求AI在生成涉及具体事实的回应时必须指明其依据是来自“知识库中X文档”还是“通用知识”。如果主要依据是“通用知识”且问题专业则在回答开头增加警示。细化不确定性响应除了“不知道”增加“根据有限资料一种可能性是……但这需要进一步核实”等中间态回应。5.3 案例三用户抱怨“AI在和我辩论”现象用户表达了一个主观观点或偏好AI却开始罗列反面论据试图“纠正”用户导致对话氛围对抗。排查检查系统提示词。发现其中包含“应提供全面、平衡的观点”这一条。本意是防止AI偏激但在处理主观话题时模型错误地将“平衡”理解为必须反驳用户。解决方案在提示词中区分“事实”与“观点”增加明确指令“对于事实性错误应礼貌纠正并提供依据对于用户的主观感受、偏好或个人观点应首先表示尊重和理解除非用户明确要求讨论不同观点。”训练模型识别“寻求认同”与“寻求辩论”的意图在意图分类中增加此类细分对于识别为“情感倾诉”或“分享观点”的query优先采用共情和认可的回应模式。构建一个真正尊重并实现“被回应的权利”的AI系统是一条漫长的道路。它没有终点只有不断的迭代和优化。技术是骨架数据是血肉而对用户体验的深刻洞察与伦理责任感才是其灵魂。这个过程里最大的收获或许不是做出了一个多强大的模型而是学会了如何更谨慎、更负责任地使用技术去创造真正有温度、有价值的连接。每一次对“回应”质量的打磨都是对我们自身产品观的一次拷问和升级。

相关新闻

3D大赛视频提交全流程指南:从渲染到编码的标准化工作流

3D大赛视频提交全流程指南:从渲染到编码的标准化工作流

在各类3D设计、建模、动画或游戏开发相关的竞赛中,视频提交往往是作品展示和评审的关键环节。一个高质量的演示视频,能够清晰、生动地展现作品的创意、技术实现和最终效果,直接影响评委的观感和评分。然而,从3D场景渲染、后期剪辑…

2026/10/7 4:38:40 阅读更多 →
挂号网站建设:从底层架构到用户体验,揭秘医疗数字化转型的硬核逻辑

挂号网站建设:从底层架构到用户体验,揭秘医疗数字化转型的硬核逻辑

挂号网站建设在如今这个快节奏的社会里,去医院看病已经不再仅仅是身体的问诊,更是一场关于时间、耐心和流程的考验。对于大多数患者来说,最大的痛点往往不是疾病本身,而是如何快速、准确地挂上一个号。尤其是到了流感季节或者热门科室火爆的时候,那种排队两小时、看病五分…

2026/10/5 17:50:20 阅读更多 →
老旧电脑也能跑AI大模型:Qwen3.5 0.8B端侧部署实战指南

老旧电脑也能跑AI大模型:Qwen3.5 0.8B端侧部署实战指南

1. 老电脑的“AI焦虑”与端侧部署的曙光 最近几年,AI大模型的风潮席卷全球,从写代码到画图,从聊天到分析,似乎无所不能。但每次看到那些动辄需要几十GB显存、对CPU和内存要求极高的模型部署教程,再看看手边那台陪伴多年…

2026/10/7 4:15:58 阅读更多 →

最新新闻

Spring Security 6 + JWT多终端认证实战:会话管理与安全加固

Spring Security 6 + JWT多终端认证实战:会话管理与安全加固

1. 项目概述:多终端认证到底难在哪先说结论:这两年做后端接口,几乎每个系统都得碰认证授权。尤其是项目从单一Web端扩展到App、小程序、H5、桌面客户端之后,认证这块立刻变成最容易出问题的地方。我们当时面临的场景很典型——用户…

2026/10/7 16:43:28 阅读更多 →
自己动手写JWT解码工具:原理、实现与调试实战

自己动手写JWT解码工具:原理、实现与调试实战

1. 为什么要自己写一个JWT解码工具 1.1 在线解码网站的三个痛处 做了几年后端接口开发,JWT这个东西几乎天天见。用户登录后发一个令牌,前端存起来,每次请求带上,后端验一下签名放行。本来这个流程很顺,但一到联调和排…

2026/10/7 16:43:27 阅读更多 →
32G U盘文件系统对比:exFAT、ext4还是NTFS?实测小文件性能差距

32G U盘文件系统对比:exFAT、ext4还是NTFS?实测小文件性能差距

玩U盘的人应该都有过这种体验:同一个U盘,拷贝电影和拷贝一堆小文件,速度完全是两个世界。前者能跑到写入80MB/s,后者直接掉到个位数,剩余时间永远在跳。我前阵子专门折腾了一轮32G优盘的文件系统选择问题,把…

2026/10/7 16:43:26 阅读更多 →
Mac上用Docker部署MySQL:从安装到主从复制的完整实战指南

Mac上用Docker部署MySQL:从安装到主从复制的完整实战指南

1. 为什么我把MySQL搬进了Docker:Mac本地安装的四个真实痛点 先说说我自己的经历。早几年我用Mac做开发,项目里需要MySQL,第一反应肯定是去官网下个dmg安装包,或者用Homebrew执行一条 brew install mysql 。听起来很简单对吧&am…

2026/10/7 16:43:26 阅读更多 →
UE C++ UFUNCTION()参数全解析:从蓝图调用到RPC网络同步

UE C++ UFUNCTION()参数全解析:从蓝图调用到RPC网络同步

写UE C搞了几年,我觉得 UFUNCTION() 大概是出现频率最高、也最容易被随手糊弄过去的宏。你说它不是技术难点吧,一旦参数选错,轻则蓝图里找不到节点,重则多人联机时回调压根不触发,而且还不报错。我前阵子整理项目里的…

2026/10/7 16:43:25 阅读更多 →
博世维修AI智能体:故障工单自动编写与旧案例智能检索实战

博世维修AI智能体:故障工单自动编写与旧案例智能检索实战

1. 从一张维修工单说起:这个智能体到底在解决什么问题干过家电售后的人都知道,维修工单这东西看着简单,写起来要命。一台博世冰箱报修,用户描述是“冷藏室不冷,冷冻室正常,显示屏没报错”,你上门…

2026/10/7 16:42:25 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 14:34:12 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 14:34:13 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 9:29:10 阅读更多 →

月新闻

我发现了一个新思路:用 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/7 14:34:12 阅读更多 →
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/7 11:43:46 阅读更多 →
黑夜航拍船只数据集训练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/7 13:34:55 阅读更多 →