别急着做完整SaaS:用AI Agent快速验证产品需求
1. 为什么“先做完整 SaaS”正在变成一条弯路过去几年做产品的默认路径几乎是固定的先想清楚需求画原型搭后端做权限接支付再一点点把功能堆成一个完整的 SaaS。这套打法在移动互联网时代被验证过无数次也确实跑出过不少成功案例。但如果你最近半年真正动手做过 AI 相关的产品你会发现一个很尴尬的现实你花三个月搭出来的那套完整 SaaS可能在上线第一天就被用户问一句“能不能直接帮我做完这件事”然后你才意识到用户要的根本不是一套管理系统而是一个能替他干活的智能体。这就是标题里说的“别急着做完整 SaaS”的核心含义。不是 SaaS 没价值而是AI Agent 正在改变产品验证的顺序。以前是“先建系统再找场景”现在是“先用 Agent 跑通一个具体任务再决定要不要把它固化成系统”。这个顺序的颠倒直接决定了你是三个月烧完预算还在改需求还是两周就能拿到真实反馈。我自己踩过这个坑。去年帮一个做跨境电商的朋友搭选品工具第一版老老实实做了用户体系、权限管理、数据看板、订阅计费前后端加起来快两万行代码。结果上线后真正被高频使用的只有一个功能输入一个品类关键词自动抓取竞品评论并总结出用户痛点。其他模块几乎没人点。后来我把这个功能单独抽出来用 Agent 的方式重做三天上线用户留存反而比之前那套完整 SaaS 高出一大截。所以这篇文章想聊的不是“SaaS 要不要做”而是在 AI Agent 能力已经足够成熟的当下产品验证的先后顺序应该怎么调整。适合正在犹豫要不要投入大成本做完整系统的独立开发者、小团队技术负责人以及想用 AI 能力快速验证商业想法的人。你会看到具体的思路拆解、技术选型逻辑、实操步骤以及我在真实项目里踩过的坑。2. 核心思路拆解从“建系统”到“跑任务”的范式转移2.1 传统 SaaS 验证路径的致命延迟传统 SaaS 的验证逻辑是先假设用户需要一个系统然后把系统建出来再让用户进来用。这个链条里最要命的是反馈延迟。你从想法到能拿到真实用户反馈中间隔着需求梳理、UI 设计、前后端开发、测试、部署快则一个月慢则半年。而这半年里市场可能已经变了用户的需求也可能已经漂移了。更麻烦的是SaaS 的架构天然倾向于“大而全”。你一旦开始做用户体系就会想顺便把角色权限做了一旦做了权限就会想顺便把审计日志做了一旦做了日志就会想顺便把数据看板做了。每一个“顺便”都在增加系统的复杂度也在推迟你拿到核心反馈的时间。我见过太多团队花了四个月做出来的东西核心价值其实只占整个系统的百分之十。2.2 AI Agent 带来的“任务级验证”机会AI Agent 的出现把验证的最小单元从“系统”缩小到了“任务”。你不需要先建一个完整的 SaaS只需要让 Agent 把某一个具体任务跑通就能验证这个需求是否真实存在。比如你想验证“帮用户自动整理会议纪要”这个需求传统做法是做一个会议管理 SaaS而 Agent 做法是接一个语音转文字接口加一个总结提示词再套一个简单的对话界面一天就能跑起来。这个变化的关键在于Agent 把“能力”和“系统”解耦了。以前能力必须依附在系统上才能交付现在能力可以独立存在通过对话或简单接口直接触达用户。你验证的是能力本身有没有价值而不是系统好不好用。这就把验证周期从月级别压缩到了天级别。2.3 MCP 协议为什么是这个变化里的关键拼图说到 Agent 的能力扩展就绕不开 MCP。MCP 是软件协议不是硬件协议它的全称是 Model Context Protocol核心作用是让 AI 模型能够以标准化的方式连接外部工具和数据源。你可以把它理解成“AI 世界的 USB 接口”——以前每个模型要接一个工具都得单独写适配代码现在只要工具实现了 MCP 服务端任何支持 MCP 的模型都能直接调用。这个协议对产品验证的意义非常大。因为你在验证阶段最怕的就是“接工具”这件事本身消耗太多时间。有了 MCP你可以直接复用社区里现成的工具服务比如浏览器操作、文件读写、数据库查询不用从零写集成代码。我实测下来用 MCP 接一个浏览器自动化工具从配置到跑通大概只要二十分钟而自己写 Playwright 脚本加封装至少半天起步。注意MCP 目前生态还在快速变化不同客户端对 MCP 的支持程度差异很大。选型时一定要先确认你用的 Agent 框架或客户端是否原生支持 MCP否则可能白折腾。2.4 什么情况下仍然需要完整 SaaS当然我不是说 SaaS 没用了。当你的 Agent 验证跑通、需求被确认真实存在之后完整 SaaS 的价值就体现出来了它提供稳定性、可管理性、多人协作能力和商业化基础。Agent 适合验证SaaS 适合规模化交付。正确的顺序是先用 Agent 验证任务价值再用 SaaS 承接规模化需求。跳过第一步直接做第二步就是在赌自己的假设一定正确而这个赌注的代价往往是一到三个月的开发成本。3. 核心细节解析Agent 验证阶段的关键技术点3.1 Agent 搭建的最小可行架构验证阶段的 Agent 不需要复杂架构核心就三块模型、工具、循环。模型负责理解和决策工具负责执行具体操作循环负责让模型根据工具返回结果继续推理。用 LangChain 或 LangGraph 都能快速搭起来如果你不想写太多代码Coze、Dify 这类平台也能拖拽出可用的 Agent。我自己的习惯是用 FastAPI 加 LangGraph 搭一个最小服务因为这样后续要扩展成正式产品时迁移成本最低。具体来说一个最小的 Agent 服务大概长这样一个接口接收用户输入一个 Agent 执行器负责调度模型和工具一个工具注册表管理可用工具。代码量不大但足够跑通验证。from fastapi import FastAPI from langgraph.prebuilt import create_react_agent from langchain_openai import ChatOpenAI app FastAPI() llm ChatOpenAI(modelgpt-4o-mini) tools [search_tool, browser_tool, file_tool] agent create_react_agent(llm, tools) app.post(/run) async def run_task(payload: dict): result await agent.ainvoke({messages: [(user, payload[task])]}) return {output: result[messages][-1].content}这段代码看起来简单但它已经包含了 Agent 的核心要素。验证阶段要的就是这种“能跑就行”的架构不要一上来就搞微服务、消息队列、分布式调度。3.2 工具选型MCP 工具和自建工具怎么选工具选型是验证阶段最容易浪费时间的地方。我的原则是能用现成 MCP 工具就用现成的只有核心差异化能力才自建。比如浏览器操作Browser Use MCP 和 Playwright MCP 都能用前者更偏向自然语言驱动后者更偏向精确控制。如果你只是要验证“Agent 能不能帮用户自动填表”用 Browser Use MCP 更快如果你要验证的是“Agent 能不能精确操作某个复杂后台”Playwright MCP 更稳。工具类型代表方案适用场景上手成本浏览器操作Browser Use MCP自然语言驱动的网页任务低浏览器操作Playwright MCP精确控制的自动化流程中文件处理本地文件 MCP读写文档、整理资料低数据库查询数据库 MCP自然语言查数据中自定义业务自建工具核心差异化能力高自建工具也不是不行但一定要克制。我见过有人在验证阶段就写了十几个自建工具结果光是维护工具接口就耗掉了大部分精力反而没时间去验证核心需求。3.3 并发问题验证阶段要不要考虑热搜词里有个很有意思的问题“AI Agent 怎么扛并发”。我的答案是验证阶段基本不用考虑并发。你在这个阶段的目标是拿到十个真实用户的反馈不是支撑一千个用户同时在线。如果你一开始就纠结并发就会陷入技术优化的泥潭忘记自己本来是要验证需求的。当然如果你验证的需求本身就是高并发场景比如“帮用户批量处理数据”那另当别论。但即便如此验证阶段也可以用队列加限流的方式先扛住等需求确认了再优化。我自己的做法是验证阶段直接用单进程加异步能跑多少算多少跑不动了再说。3.4 提示词工程在验证阶段的正确用法验证阶段的提示词不需要精雕细琢但需要快速迭代。我的习惯是把提示词单独放在一个文件里每次调整都记录版本和效果。因为验证阶段你改提示词的频率会非常高如果提示词散落在代码各处改起来会很痛苦。另外验证阶段的提示词要尽量“宽”不要一上来就写几百行规则。先让 Agent 自由发挥看它在哪些地方出错再针对性地加约束。这比一开始就写死所有规则要高效得多因为很多你预想的错误场景实际根本不会发生。4. 实操过程从零到验证跑通的完整步骤4.1 第一步明确你要验证的那个“任务”这一步听起来简单但很多人做错。你要验证的不是“用户需不需要一个 XX 系统”而是“用户需不需要 Agent 帮他完成 XX 任务”。任务要具体到可以一句话描述清楚比如“帮用户从竞品评论里总结出三个改进点”而不是“帮用户做竞品分析”。我通常会用一句话模板来约束自己“让 Agent 帮 [谁] 完成 [什么任务]输出 [什么结果]”。如果这句话写不出来说明任务还不够具体需要继续拆。4.2 第二步搭建最小 Agent 环境环境搭建的目标是“两小时内能跑起来”。具体步骤选一个模型接口国内可用通义千问、智谱国外可用 OpenAI、Claude验证阶段用便宜的模型就够。选一个 Agent 框架LangGraph 或 Coze 都行看你的技术背景。接一到两个 MCP 工具优先选和你任务直接相关的。写一个最简单的入口能接收输入、调用 Agent、返回结果。这四步做完你就有了一个能跑的最小 Agent。不要在这个阶段追求完美能跑通就行。4.3 第三步设计验证指标和反馈收集方式验证阶段最怕的是“跑起来了但不知道有没有用”。所以你需要提前想清楚什么信号说明这个需求是真的。常见的信号包括用户主动重复使用、用户愿意为此付费、用户主动推荐给别人、用户提出更深入的需求。反馈收集方式可以很简单比如在返回结果后面加一句“这个结果对你有帮助吗”或者直接拉一个群让用户反馈。我自己的习惯是验证阶段一定要和用户直接聊因为文字反馈往往会丢失很多关键信息。4.4 第四步快速迭代但控制迭代范围验证阶段的迭代要快但范围要窄。每次只改一个变量比如只改提示词或者只换一个工具然后观察效果变化。如果你一次改多个地方出了问题根本不知道是哪个改动导致的。我一般会给自己定一个规则每轮迭代不超过半天连续三轮没有明显改善就换方向。这个规则帮我避免了很多“死磕一个没价值的需求”的情况。4.5 第五步判断何时从 Agent 迁移到 SaaS当你的 Agent 验证跑通并且出现了明确的规模化信号时就可以考虑迁移到 SaaS 了。规模化信号包括用户量增长导致手动处理不过来、需要多人协作、需要权限管理、需要计费。这时候你再把 Agent 的能力封装成 SaaS 功能迁移成本会低很多因为核心逻辑已经验证过了。5. 常见问题与排查技巧实录5.1 Agent 跑不通的常见原因排查问题现象可能原因排查方法Agent 不调用工具提示词没说明工具用途在系统提示里明确工具能力工具调用报错MCP 服务未启动或配置错误检查 MCP 服务日志和连接配置结果不稳定模型温度过高或提示词模糊降低温度增加输出格式约束响应太慢模型选型过大或工具链路过长换小模型减少不必要的工具调用循环调用工具返回结果模型无法理解检查工具返回格式增加终止条件5.2 MCP 配置踩坑记录MCP 配置最容易出问题的地方是客户端和服务端的协议版本不匹配。我遇到过好几次服务端明明跑起来了客户端就是连不上最后发现是版本差异导致的。解决办法是先用官方提供的测试工具验证服务端是否正常再排查客户端配置。另一个坑是权限问题。有些 MCP 工具需要访问本地文件或网络如果权限没给够调用会静默失败。建议在验证阶段先把权限放开确认能跑通后再收紧。5.3 模型选型的经验判断验证阶段不要用最贵的模型。我实测下来很多任务用中等规模的模型就能跑通效果差距没有价格差距那么大。真正需要大模型的场景往往是需要复杂推理或多步规划的任务而验证阶段的任务通常没那么复杂。另外国内模型在中文场景下往往表现更好而且调用成本更低。如果你的用户主要是中文用户优先考虑国内模型。5.4 验证阶段最容易犯的三个错误第一个错误是过早优化。看到 Agent 响应慢就想优化看到结果不稳定就想调提示词结果验证本身被搁置了。第二个错误是过度设计。明明一个 Agent 能搞定的事非要拆成多个 Agent 协作增加复杂度。第三个错误是忽略用户反馈。自己觉得跑通了但用户实际用起来完全不是那么回事。提示验证阶段的核心指标只有一个——用户是否愿意继续用。其他指标都是次要的。6. 从验证到规模化Agent 和 SaaS 的衔接策略6.1 能力封装把 Agent 逻辑抽成独立模块当你决定从 Agent 迁移到 SaaS 时第一步是把 Agent 的核心逻辑抽成独立模块。这个模块不依赖具体的交互方式既能被 Agent 调用也能被 SaaS 接口调用。这样做的好处是你不需要重写核心逻辑只需要换一层外壳。具体做法是把提示词、工具调用、结果处理这三块分别封装成函数或类然后通过统一的接口暴露出去。这样无论是 Agent 还是 SaaS调用的都是同一套逻辑。6.2 数据层设计验证阶段的数据怎么平滑迁移验证阶段的数据往往很随意可能是存在文件里也可能是存在内存里。迁移到 SaaS 时需要把这些数据整理到正式的数据层。我的建议是验证阶段就用简单的数据库比如 SQLite 或 PostgreSQL这样迁移时只需要改连接配置不需要重写数据访问逻辑。6.3 用户体系什么时候引入才合适用户体系是 SaaS 的标志性功能但引入时机很关键。我的经验是当用户开始要求“保存我的历史记录”或“和别人共享结果”时再引入用户体系。过早引入只会增加验证阶段的负担而且你很可能设计出一套用户根本不需要的权限模型。6.4 商业化Agent 阶段能不能收费能收但方式要轻。验证阶段可以按次收费或者用简单的订阅制不要一上来就搞复杂的计费系统。我见过有人在验证阶段就接了完整的支付和发票系统结果需求没验证成功这些投入全打了水漂。7. 我个人的实操体会这套“先 Agent 验证再 SaaS 规模化”的思路我在三个项目里用过效果差异很大。效果最好的那个项目从想法到拿到第一批付费用户只用了两周因为 Agent 阶段直接验证了付费意愿。效果最差的那个是因为我选的任务本身就不够具体Agent 跑起来了但用户不知道拿它干什么。踩过几次坑之后我最大的体会是验证阶段最重要的不是技术而是对任务的判断。技术问题都有解但如果你验证的任务本身是伪需求再好的技术也救不回来。所以我现在做任何新项目都会先花半天时间想清楚“这个任务到底是谁的刚需”想不清楚就不动手。另外一个小技巧是验证阶段尽量用现成的平台和工具不要自己造轮子。Coze、Dify 这些平台虽然灵活性差一些但上手快能帮你把验证周期压缩到最短。等需求确认了再考虑用代码重写核心部分。最后再分享一个判断标准如果你用 Agent 跑通任务后用户主动问“这个能不能做成一个产品”那说明需求是真的。如果用户只是说“挺有意思”那大概率只是好奇不是刚需。这个信号比任何数据指标都准。

相关新闻

openrig:统一管理Claude Code与Codex的YAML配置编排工具

openrig:统一管理Claude Code与Codex的YAML配置编排工具

1. openrig 到底在解决什么问题第一次看到 openrig 这个名字,很多人会以为是某个硬件机架项目,或者跟 rigging 动画绑定有关。但结合它周边的关键词——claude code、codex、yaml、node.js——基本可以判断,这是一个围绕 AI 编程助手做配置编…

2026/10/4 7:33:03 阅读更多 →
两千元预算本地部署Qwen3-27B:V100实战280 tok/s推理

两千元预算本地部署Qwen3-27B:V100实战280 tok/s推理

1. 两千块预算的本地AI部署,到底能跑出什么水平先说结论:两千多块钱,在二手市场上凑一套能跑Qwen3-27B级别模型、推理速度稳定超过280 tok/s的平台,这件事在2025年是完全可行的。我自己前前后后折腾了大概三周,从选卡、…

2026/10/4 7:32:02 阅读更多 →
从零构建大语言模型:AI工程全链路核心细节与实战踩坑

从零构建大语言模型:AI工程全链路核心细节与实战踩坑

提到 ai-engineering-from-scratch 这个项目名,我估计很多人在GitHub上刷到过类似的仓库。第一反应可能是:又是一个“从零造LLM”的学习repo?但如果你真打算走完这条路,或者正在带团队做类似的技术预研,你会发现它远不…

2026/10/4 7:32:02 阅读更多 →

最新新闻

OpenRig真相:Node.js+tmux+Codex CLI本地AI工具链实战指南

OpenRig真相:Node.js+tmux+Codex CLI本地AI工具链实战指南

1. OpenRig 是什么:一个被误读的开源项目名与真实技术定位OpenRig 这个词在当前中文技术社区里,正经历一场典型的“语义漂移”——它既不是某个广为人知的成熟开源项目,也不是某家大厂发布的官方工具套件,而更像是一组零散技术实践…

2026/10/4 8:03:29 阅读更多 →
A2A协议与Nacos实战:构建多Agent协作互通层

A2A协议与Nacos实战:构建多Agent协作互通层

1. 互通层:为什么单机跑通的 Agent,一上线就"失联"先说个背景。上一期我们把单个 Agent 的构建、记忆管理和工具调用都盘了一遍,很多朋友照着做完之后,本地测试一切正常,结果一放到多进程、多服务的环境里就…

2026/10/4 8:03:29 阅读更多 →
叙事泡沫的坍缩与认知地基的重构 —— 波普尔主义话语病毒、大模型结构性认知缺陷与权力‑技术耦合风险的系统性审视

叙事泡沫的坍缩与认知地基的重构 —— 波普尔主义话语病毒、大模型结构性认知缺陷与权力‑技术耦合风险的系统性审视

叙事泡沫的坍缩与认知地基的重构 —— 波普尔主义话语病毒、大模型结构性认知缺陷与权力‑技术耦合风险的系统性审视摘要生成式大模型作为当代人工智能的核心载体,已经深度介入人类知识生产、科普传播、公共思辨与价值判断活动。现有主流 AI 治理研究大多集中于算法…

2026/10/4 8:03:29 阅读更多 →
课题组私有AI落地:RAG、LoRA微调与vLLM部署实战

课题组私有AI落地:RAG、LoRA微调与vLLM部署实战

1. 课题组私有AI的落地路径拆解1.1 为什么通用大模型在课题组场景里总差一口气课题组做研究,跟企业做产品有个本质区别:数据量小、领域窄、但精度要求极高。你拿一个通用大模型去问它“这个材料的XRD衍射峰在2θ32.5对应什么晶相”,它大概率给…

2026/10/4 8:03:29 阅读更多 →
LLM Ops 评测与可观测实战(2):golden dataset 构建:线上数据的采样与标注流程

LLM Ops 评测与可观测实战(2):golden dataset 构建:线上数据的采样与标注流程

问题背景 上一篇用两组模拟数据说明了一把太小的尺子如何让 47% 的正确结论被判反,结论是评测集必须存在、规模要按可分辨差距倒推。这一篇解决"尺子上的刻度从哪来":一个跑了三个月的客服 RAG 机器人,日志里躺着八万多条真实会话&…

2026/10/4 8:03:29 阅读更多 →
TI DSP上稳跑FFT/IFFT库函数的实战要点

TI DSP上稳跑FFT/IFFT库函数的实战要点

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

2026/10/4 8:02:29 阅读更多 →

日新闻

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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →

周新闻

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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →
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/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/2 10:36:31 阅读更多 →
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/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练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/3 9:42:36 阅读更多 →