AutoGen 落后 LangGraph 星标,但 LangGraph 真的更适合生产级 Agent?2026年最新选型指南揭秘!
AutoGen 有 58,000 GitHub StarsLangGraph 只有 32,000。按 Stars 排LangGraph 排名第 14连第一页都上不了。但 2026 年 LearnAgent.org 对真实生产环境的框架调研显示LangGraph 是生产级 Agent 的主流选择而 AutoGen它的官方维护者在 2026 年 4 月已经宣告进入 maintenance mode新功能开发全停了。Stars 是存量是历史热度的累积不是当前活跃度的指标。这是 2026 年 Agent 框架生态最大的认知陷阱。踩进去的代价轻则换框架重写一遍重则整个技术选型在三个月后面临迁移。我用这篇文章把这个问题说清楚4 个主流框架各自的核心定位、真实的性能数字、哪些故障模式会在生产里出现、以及最终如何选。框架替换的是编排方式不是 Agent 的能力讲各框架之前先说一件反直觉的事所有框架的内核都是同一套东西。LLM 推理 → 工具调用决策 → 工具执行 → 状态更新 → 下一轮推理。这个循环用五个模块就能手写ToolRegistry工具注册、AgentState状态管理、LLMClient模型调用、ToolExecutor工具执行、AgentLoop主循环。框架做的事是给这个循环加上封装、扩展和周边工具链。五模块中的概念LangGraphCrewAIOpenAI Agents SDKToolRegistryToolNodetools参数tools参数AgentStateTypedDict State SchemaTask contextSessionLLMClientChatModel.invoke()LLM 参数同左ToolExecutorToolNode.run()Agent._execute_toolsfunction callAgentLoopStateGraph Node EdgeCrew.kickoff()Runner.run()知道这张表你就不会被框架的概念体系绕晕。LangGraph 的图、CrewAI 的Crew、OpenAI SDK 的Handoff——本质上都是在给 AgentLoop 加不同形态的封装。这也意味着如果框架满足不了你你随时可以退回手写。代价只是多写一些代码不是什么不可能的事。四个框架各自在解决什么问题LangGraph给 Agent 装上状态机LangGraph 把 while 循环换成了有向图这一换带来的是完全可预测、可审计的 Agent 行为。核心概念只有四个StateTypedDict 定义的全局状态对象Agent 运行过程中的一切信息都在这里。add_messages是 reducer——多个节点并发更新消息列表时自动合并而不是覆盖。from typing import TypedDict, Annotatedfrom langgraph.graph import add_messagesclass CustomerServiceState(TypedDict): messages: Annotated[list, add_messages] user_id: str order_id: str | NoneNode执行具体逻辑的函数接收 State返回需要更新的字段。只需要返回变化的部分不是整个 State。Edge固定边A 执行完总是去 B和条件边根据 State 内容决定走哪条路。条件边是 LangGraph 灵活性的核心——这让 Agent 行为可以根据状态动态路由而不是死板的线性顺序。def should_continue(state: CustomerServiceState) - str: last_msg state[messages][-1] if hasattr(last_msg, tool_calls) and last_msg.tool_calls: return tools # 有工具调用 → 执行 return END # 没有 → 结束Checkpoint状态持久化这是 LangGraph 区别于其他框架最大的能力。Checkpoint 让你可以把 Agent 状态持久化到 PostgreSQL支持断点续传——Agent 跑到第 15 步崩了恢复后从第 15 步继续不用从头来。同时这也是 Human-in-the-loop 的基础在关键操作前暂停等人工确认确认后继续。from langgraph.checkpoint.postgres import PostgresSavercheckpointer PostgresSaver.from_conn_string(postgresql://...)app graph.compile( checkpointercheckpointer, interrupt_before[refund_execution], # 退款前暂停等确认)LangGraph 的代价是确实的学习曲线最陡。State Schema、add_messages reducer、条件边的写法对没有状态机背景的人不直观上手通常需要 2-4 小时代码量也比 CrewAI 多很多——你要显式定义每个节点和每条边没有任何帮你猜的魔法。生产里最常见的三个故障我见过不止一个团队踩•状态膨胀长工作流里 State 对象会无限增长消息列表每轮追加但从不清理跑到第 50 轮时序列化开销已经很可观。解决方案显式加cleanup_node每 N 轮压缩一次历史消息到摘要只保留最近 K 轮的完整消息。•循环边死锁条件边逻辑写得不完整比如should_continue只判断了tool_calls没有兜底ENDAgent 会在两个节点间永远来回。永远设置recursion_limit默认 25生产里根据业务调整。•检查点序列化失败State 里塞了datetime、Pydantic model、自定义类PostgresSaver 序列化时静默出错或直接崩。State 里只放 JSON 兼容的基础类型datetime 存 ISO 字符串复杂对象存 ID 引用。CrewAI30 分钟跑通多 AgentCrewAI 的设计假设是多 Agent 协作本质上是人类团队协作的映射。所以它的概念体系就是Crew团队→ Process流程→ Agent有角色的成员→ Task任务。这套设计在角色分工明确的场景下极其好用。一个研究员找资料、写作员出报告、审核员把关的三角组合用 CrewAI 大概是这样的from crewai import Agent, Task, Crew, Processfrom crewai_tools import SerperDevToolresearcher Agent( roleAI 研究员, goal收集关于 {topic} 的最新信息和技术进展, backstory你是 AI 领域资深研究员擅长从海量信息中提炼关键洞察, tools[SerperDevTool()], llmgpt-4o,)writer Agent( role技术写作专家, goal将研究结果整理成工程师可直接使用的实践指南, backstory你专注于把复杂技术内容转化为可操作的文章, llmgpt-4o-mini, # 写作任务用便宜的模型)research_task Task( description搜索 {topic} 最新进展重点核心技术突破、应用案例、已知局限。整理 5 个核心要点。, expected_output包含 5 个核心要点的结构化报告每个要点有具体数据支撑, agentresearcher,)writing_task Task( description基于研究结果撰写面向工程师的技术文章800-1000 字有具体代码示例, expected_output结构清晰的技术文章包含代码示例或操作步骤, agentwriter, context[research_task], # 依赖 research_task 的输出)crew Crew( agents[researcher, writer], tasks[research_task, writing_task], processProcess.sequential,)result crew.kickoff(inputs{topic: LangGraph 状态图编排})从零到跑通30 分钟是真实数字S1 实测。这是 CrewAI 最大的竞争力——也几乎是它唯一无可争议的优势。边界也很清晰不支持并行执行所有 Agent 顺序执行、状态管理有限、复杂条件分支力不从心、错误恢复没有内置机制。MCP 和 A2A 协议靠社区插件不是原生支持。这些限制在原型阶段感受不到到了生产你就会遇见它们•Manager 瓶颈Hierarchical 模式所有任务分配决策都流经 Manager Agent这个 Agent 本身是同步执行的。并发请求一多它会成为整个 Crew 的吞吐量上限。我见过有团队以为是 LLM 慢查了半天发现是 Manager 排队。•任务交接信息丢失Sequential 模式里前一个任务的expected_output就是后一个任务的输入。但如果 LLM 没有严格按expected_output格式输出下游任务收到的就是截断的或格式不对的信息——不报错只是模型没答好很难追踪。重要的任务节点加输出验证。•任务失败后无自动恢复整个 Crew 停止没有单任务重试。解决方案是在crew.kickoff()外面包 retry 逻辑但这只能重跑整个 Crew不能只重跑失败的那个 Task。OpenAI Agents SDK沙箱原生OpenAI 生态最优解OpenAI Agents SDK 是 2025 年 3 月发布的前身是 SwarmOpenAI 的实验性多 Agent 框架。它的定位是用最少的抽象层做到生产可用。六个核心原语把 Agent 系统拆解得清楚概念作用Agent定义职责边界配置 instructions toolsToolsFunction Tools / 托管工具 / MCP ToolsHandoffsAgent 之间的任务交接显式定义可以传球给谁Guardrails输入输出的约束校验在 Agent 层统一处理Tracing内建可观测性每次推理和工具调用都自动打标SandboxAgent隔离文件系统 命令执行v0.14.0 新增2026 年最值得关注的两个更新SandboxAgentv0.14.0给 Agent 一个隔离的执行环境文件操作和命令执行在沙箱里进行主机不受影响。支持快照和断点恢复——和 LangGraph 的 Checkpoint 解决的是同一个问题路径不同。适合代码生成、数据处理等需要安全执行任意代码的场景。MCP 一等公民工具注册时可以直接使用 MCP Serverschema 自动生成tracing 自动覆盖。这在 LangGraph 和 CrewAI 里还需要额外的适配层。最大的代价就一条强绑定 OpenAI。如果你的技术路线是 Anthropic 或者 DeepSeek切换成本不低。这不是技术问题是生态绑定的路线选择——选之前想清楚。Microsoft Agent FrameworkAutoGen 的官方继承者这是 2026 年变化最大的区域。2026 年 4 月微软把 AutoGen 和 Semantic Kernel 合并成Microsoft Agent FrameworkMAF正式 GA。同时原来的 AutoGen 进入 maintenance mode——官方不再开发新功能只修安全 bug并且官方建议已有用户评估迁移到 MAF。AutoGen 58K Stars 的历史问题就这样变成了一个迁移包袱。MAF 的核心竞争力•原生 A2A 支持Agent 间通信遵循 A2A 协议可以和其他厂商的 Agent 系统互联——LangGraph 和 CrewAI 对 A2A 还在讨论阶段•原生 MCP和 OpenAI Agents SDK 一样MCP 是一等公民•Cosmos DB 持久化企业级状态存储Azure 生态深度集成•企业级 telemetry 和合规这是 AutoGen 时代积累的基因适用场景很具体Azure 技术栈企业、有强合规要求、需要和外部 Agent 系统做 A2A 互联。如果你的技术栈是 AWS 或者 GCPMAF 就没有太大吸引力。性能数字说话以下数据来自 Tacavar测试场景3 Agent 5 次工具调用 2 轮修订循环这是目前最接近真实生产负载的公开基准延迟对比框架平均延迟P95 延迟LangGraph2,340 ms4,200 msCrewAI2,890 ms4,950 msAutoGen/AG23,120 ms5,800 ms成本对比GPT-4每千次工作流执行框架每千次成本Token 额外开销LangGraph15~8%CrewAI17~12%AutoGen22~15%LangGraph 延迟比 AutoGen 低约25%成本低约40%。差距的来源是架构开销AutoGen 的对话机制在 Agent 间交换的消息更多每轮都在积累 TokenLangGraph 的图结构让数据流更精确不必要的 Token 传递少。内存开销每次工作流执行LangGraph 45 MB、CrewAI 52 MB、AutoGen 78 MB。这些数字的绝对值会随你的模型、网络、工具实现变化但框架之间的相对差距在不同测试场景里基本稳定——这是架构层面的开销不会因为换个 LLM 就消失。功能矩阵性能之外的差异延迟和成本决定跑得快不快以下这张表决定能不能做你要做的事维度LangGraphCrewAIOpenAI Agents SDKMAF上手时间2-4 小时30 分钟1-2 小时中等状态持久化✅ Checkpoint⚠️ 有限✅ Session 快照✅ Cosmos DB并行执行✅❌✅✅Human-in-the-loop✅ 原生⚠️ 需自定义✅ 原生✅ 原生审批流MCP 支持⚠️ 通过 LangChain⚠️ 社区插件✅ 原生一等公民✅ 原生A2A 支持 讨论中 讨论中⚠️ 有限✅ 原生代码执行沙箱❌ 需集成❌ 需集成✅ SandboxAgent⚠️ 部分可观测性✅ LangSmith⚠️ 基础✅ 内置 Tracing✅ 企业级生产就绪度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐维护状态活跃活跃活跃OpenAI活跃微软选型决策树别用热度选框架用场景选框架你的项目在什么阶段│├─ 原型 / 验证阶段2 天内要跑通│ ├─ 多角色分工研究-写作-审核→ CrewAI│ └─ 单 Agent 工具调用 → OpenAI Agents SDK│├─ 生产阶段可靠性优先│ ├─ 需要精细流程控制 可审计 断点恢复 → LangGraph│ ├─ 需要安全代码执行隔离 → OpenAI Agents SDKSandboxAgent│ └─ Azure 技术栈 强合规 A2A 互联 → Microsoft Agent Framework│└─ 特殊场景 ├─ 主要是 RAG / 文档处理 → LlamaIndex专用 ├─ 需要复杂多轮协商研究 → AG2AutoGen 社区分支 └─ 不确定 → LangGraph生态最大社区案例最多一个反复被验证的选型路径阶段选择理由MVP1-2 天CrewAI角色分工直觉、当天看到效果生产可靠性要求上来后LangGraphCheckpoint、并行、Human-in-the-loop 全上超高可靠性金融/医疗手写五模块完全可控没有框架层的黑盒不是说 CrewAI 不好是说它的优势在快速跑通不在生产稳定性。先用 CrewAI 验证业务逻辑再用 LangGraph 重写关键路径这是很多团队实际走过的路。有技术底子的人正站在AI大模型开发的黄金入口先问自己一个问题你写了这么多年代码薪资是不是已经很久没动了面试的时候“会Spring Boot”“会Vue”会MySQL已经变成了基本操作没有人在乎了。大家都会的东西就不值钱了。但另一边有人在疯狂涨薪拉勾、BOSS直聘上“AI应用开发”“大模型开发”Agent开发的岗位数量在过去一年翻了3倍薪资中位数比同级别后端开发高出 40%-60%。不是因为他们比你聪明而是因为他们踩对了赛道。你可能觉得我又不是搞算法的大模型跟我有什么关系这就是最大的误区。AI大模型应用开发 ≠ 训练大模型说清楚一点训练大模型的是那几家大厂但用大模型做应用的是千千万万的普通企业和团队。而这些团队需要的不是PhD而是——能用大模型API搭出可用产品的应用开发者能设计Agent工作流、调用工具链的Agent工程师能把RAG、Function Calling、多轮对话落地到真实业务的AI全栈这些活儿有编程基础的你完全能干。你需要补的不是算法基础而是AI开发的技术栈和工程思维。Agent开发为什么是程序员最好的切入点因为Agent开发本质上就是用自然语言编程——而这恰恰需要你已有的工程能力你有代码功底 → 理解Function Calling、工具调用、API集成比零基础快10倍你有系统设计经验 → 设计多Agent协作架构、状态管理、错误处理逻辑一脉相承你懂工程化 → 部署、监控、性能优化这些AI项目同样需要你理解数据 → RAG系统的数据清洗、向量检索、效果调优你的DB经验直接复用说白了你已有的能力是资产不是沉没成本。差的只是AI这一层的认知和工具链。学完之后你值多少钱转型 从传统后端/前端转AI应用开发打开薪资天花板跳槽议价权拉满升职 在现有团队主导AI项目落地从写代码的变成定方向的独立 用Agent开发能力做SaaS产品、接AI外包项目技术变现多一条腿不可替代 当AI能写CRUD了你是那个用AI写代码的人而不是被AI替代的人这不是危言耸听。GitHub Copilot已经能写出70%的CRUD代码了纯执行层面的程序员价值在快速缩水。但能用AI构建AI应用的人目前严重不够用。这门课会教你什么面向有编程基础的开发者从AI大模型应用开发的工程实践出发✅ 大模型API调用与Prompt工程实战✅ RAG系统搭建从数据处理到向量检索全流程✅ Agent开发Function Calling、工具链、多步推理✅ 多Agent协作与工作流编排✅ 真实项目落地从需求到部署的完整工程链路不讲虚的全是能直接用在项目里的东西。 AI大模型应用开发课程有编程基础这就是你的下一个赛道“程序员最大的风险不是技术过时而是用旧技术赚新钱的心态。”你可能还在想再等等看——但AI这个赛道窗口期就这么长。等大模型开发变成标配技能的时候你就不是先行者了而是追赶者。你有技术底子这是你最大的优势。别浪费它。

相关新闻

掌握co-wechat-api多进程部署:全局token维护与分布式应用实践

掌握co-wechat-api多进程部署:全局token维护与分布式应用实践

掌握co-wechat-api多进程部署:全局token维护与分布式应用实践 【免费下载链接】co-wechat-api Wechat API. Support Async Functions 项目地址: https://gitcode.com/gh_mirrors/co/co-wechat-api 在构建高可用的微信公众平台应用时,多进程部署是…

2026/10/8 12:18:23 阅读更多 →
2026年AI全栈开发者养成路线:从调API到造Agent,附完整教程清单和代码,零基础3-4个月速成!

2026年AI全栈开发者养成路线:从调API到造Agent,附完整教程清单和代码,零基础3-4个月速成!

不是算法工程师,也能做AI应用开发。 2026年,AI应用开发岗位的招聘量同比增长了340%,但80%的求职者卡在同一个地方——能聊原理,但做不出东西。 身边很多后端、前端、产品经理都涌入了这个赛道,踩的坑出奇一致&#xff…

2026/10/9 2:50:09 阅读更多 →
深入解析TMS320F28002x SCI/LIN模块:从UART基础到LIN协议硬件实现

深入解析TMS320F28002x SCI/LIN模块:从UART基础到LIN协议硬件实现

1. 项目概述:从UART到LIN的嵌入式通信基石在嵌入式系统开发,尤其是汽车电子和工业控制领域,设备间的可靠、低成本通信是项目成败的关键。我们常常会接触到UART(通用异步收发器),它简单、通用,是…

2026/10/10 1:44:00 阅读更多 →

最新新闻

UCINET数据导入实战:格式规范、Excel整理与高频排错

UCINET数据导入实战:格式规范、Excel整理与高频排错

1. 先搞清楚UCINET到底在等什么数据很多人在UCINET上栽的第一个跟头,不是不会跑算法,而是数据根本喂不进去。明明Excel里填得工工整整,一点Import却报错,或者导进去之后变成一团乱麻,节点对不上、值全错位。这些问题的…

2026/10/13 4:57:19 阅读更多 →
上班族碎片时间做小红书:工位运营全攻略,高效副业不焦虑

上班族碎片时间做小红书:工位运营全攻略,高效副业不焦虑

开头作为一个常年白天在公司坐班、晚上回家还想搞点副业的运营人,我发现周围越来越多同事开始把小红书当成一个“工作之外的第二战场”。但很多人卡在同一个地方:不是不会写文案,也不是不懂拍照,而是总觉得“没时间”——上班忙成…

2026/10/13 4:57:19 阅读更多 →
InterviewGuide 力扣刷题笔记:80. 删除排序数组中的重复项 II——原地去重的双指针通用解法

InterviewGuide 力扣刷题笔记:80. 删除排序数组中的重复项 II——原地去重的双指针通用解法

文档教程知识库 【免费下载链接】InterviewGuide 🔥🔥「InterviewGuide」是阿秀从校园->职场多年计算机自学过程的记录以及学弟学妹们计算机校招&秋招经验总结文章的汇总,包括但不限于C/C 、Golang、JavaScript、Vue、操作系统、数据结…

2026/10/13 4:57:19 阅读更多 →
AnyPS5:PS5存储扩展、外设兼容与网络优化全攻略

AnyPS5:PS5存储扩展、外设兼容与网络优化全攻略

说实话,一开始想做“AnyPS5”这个项目的动机挺简单的:我自己手头有几台不同批次、不同使用时长、甚至连摆放环境都完全不一样PS5主机。有朋友来家里玩,都会问同样的问题——为什么我这台开游戏就是快一点?为什么他那台插个手柄总是…

2026/10/13 4:57:19 阅读更多 →
Hermes Agent入门:轻量级协议语义翻译器实战指南

Hermes Agent入门:轻量级协议语义翻译器实战指南

1. 为什么“Hermes Agent”突然被大量开发者同时提及?最近两周,我在几个技术交流群和内部项目复盘会上,连续听到不同背景的开发者提到同一个词:Hermes Agent。不是Hermes引擎、不是React Native的Hermes JS引擎,而是带…

2026/10/13 4:57:19 阅读更多 →
Android ANR问题全链路分析:从判定机制到测试解决方案

Android ANR问题全链路分析:从判定机制到测试解决方案

我最早接触ANR,是线上用户反馈一个列表页“点了没反应”,过一会儿系统弹窗“进程无响应”。当时拿着一个logcat日志,翻来覆去只能看到一行“ANR in”,完全不知道怎么下手。后来带测试团队、又参与线上性能治理,踩了无数…

2026/10/13 4:56:18 阅读更多 →

日新闻

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

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

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

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 阅读更多 →