多智能体协作工作台:开源MyCoWork让AI团队落地真实业务
这段时间跟很多团队聊下来发现大家普遍卡在同一个地方模型能力早就够用了但真要让 AI 在业务里“干活”总觉得差了点意思。要么是对话机器人只会聊不会做要么是单点功能做出来了却跟真实的工作流对不上。直到我把多智能体框架和工作台组合起来用才真正有了“给业务装了一个 AI 团队”的感觉。现在这个项目已经开源我把它命名为 MyCoWork核心就两件事一是让多个各司其职的 AI Agent 协作处理完整任务二是把行业场景里的高频动作固化成可视化工作台。这篇文章就完整拆解一下设计与实现过程以及我怎么把它落地到真实业务流程里。1. 为什么需要“AI 团队”而不是“一个 AI”1.1 单 Agent 的瓶颈场景化的真实痛点先说一个特别常见的场景。某供应链企业在做售前方案业务人员接到客户的需求后往往要经历这么一轮流程整理需求文档、查询历史相似案例、核算初步报价、协调技术部门确认可行性、最后再产出定制化方案。以前尝试用单个智能助手来处理效果惨不忍睹。原因不复杂——单个 Agent 承担了太多互相冲突的职责既要懂业务又要懂报价还要会写方案结果每个环节都做不深。更麻烦的是上下文窗口和记忆干扰的问题。一个 Agent 在处理超长任务时前期的对话内容会不断侵蚀有效信息到了后期经常把需求细节记岔。这个问题我一开始也没当回事直到连续三次出现报价引用错误数据的情况才意识到单 Agent 长链路执行是结构性缺陷不是靠调 Prompt 能解决的。还有一个特别隐蔽的问题是失败恢复。单 Agent 在执行某个中途环节出错时往往只能整体回滚或者从头再来无法针对单步进行修复。这在业务流程中几乎不可接受——真实工作任务是可以分环节确认的技术上反而做不到。这些都是我决定转向多智能体架构的直接原因。1.2 多智能体协作的价值所在多智能体的核心思想其实特别朴素把复杂业务拆成多个单一职责的 Agent让它们像真实团队一样分工、协作、复核。比如我的 MyCoWork 中就有需求分析 Agent、方案顾问 Agent、报价计算 Agent、质量审查 Agent各自只做自己擅长的事通过编排机制串联起来。我拿一个真实跑通的流程图来说。需求分析 Agent 收到原始材料后结构化抽取关键字段并生成需求摘要方案顾问 Agent 基于摘要调用行业知识库检索类似案例报价计算 Agent 读取产品目录和成本表算出三档报价方案质量审查 Agent 最后做一致性校验把所有数据交叉比对。这个过程中每一步的产出物都能被后续 Agent 信任环节之间用标准格式传递互不干扰。实际体验下来多智能体架构带来的最大改变不是单步能力的提升而是整体可靠性和可维护性的跃升。任何一步出错可以只重试那个环节不用把整条链路推倒重来。而且业务人员可以在关键节点介入确认这就实现了“人机协同”而不是“全自动黑箱”。对比维度单 Agent多智能体架构职责清晰度全部混在一个上下文每个 Agent 单一职责长任务表现后期易丢失关键信息分段处理信息互不污染失败恢复整体回滚或从头再来单环节重试粒度可控人机协同难以在中间介入可在关键节点人工确认可扩展性修改可能引发全局熵增新增 Agent 即扩展能力2. 核心架构设计与思路拆解2.1 总体模块划分编排层、工作台层、工具层、知识层MyCoWork 的整体架构分成了四层。最底层是工具层封装了各类业务操作比如查数据库、调 API、发消息、生成文件往上是知识层接入了向量数据库和文档解析让 Agent 能随时查阅公司内部资料再往上就是 Agent 编排层这是整个框架的核心负责定义每个 Agent 的角色、能力和协作关系最顶层是行业工作台这个层面向最终用户——业务人员不用面对一堆技术概念只看到业务化的操作面板。我这样分层的原因主要是考虑团队协作场景里不同角色的诉求差异。开发人员关心 Agent 的编排逻辑和工具扩展业务人员关心工作台是否好用管理层关心数据权限和审批流程。四层架构可以各改各的互不影响这一点在后来的多次迭代中价值很明显。在技术选型上我参考了当前主流的多 Agent 编排思路但没有直接套现成框架而是用轻量级的状态机模型来做角色切换和任务流转。每个 Agent 本质上是一个有独立 Prompt 模板和工具权限的执行单元编排层通过一个共享任务队列来协调它们的调用顺序。这个设计让我在替换单个模型供应商时特别容易——不会出现牵一发动全身的情况。2.2 为什么走“行业工作台”路线说实话最早我做的只是一个多 Agent 对话后台效果也不错。但真正接触业务团队后发现一个刺眼的问题业务人员并不会用对话式的 AI 工具。你跟业务说“你可以在这里跟 AI 对话完成整个流程”他们大概率一脸茫然——因为真实行业用户习惯的是明确的操作入口而不是开放式聊天框。这就是行业工作台存在的意义。工作台把多智能体的能力封装成具体的操作模块新建需求、自动生成方案、一键报价、查看审核结果。每个模块对应业务人员熟悉的动作点击即用不要求他们理解背后是哪个 Agent 在干活。以某次给某制造业客户搭建的“售后工单处理工作台”为例我在面板上放了三个核心卡片工单自动分类、知识库检索建议、处理方案生成。业务人员只需要把客户的描述粘贴进工单系统自动完成后面的所有分类、匹配和推送。实测下来一个新手客服经过十分钟培训就能独立处理复杂工单而之前至少要学两周的系统操作。这就是工作台思维的价值把 AI 能力内嵌到业务路径上而不是让业务来迁就 AI。2.3 开源技术栈详解MyCoWork 的技术栈我特意选了成熟且学习曲线平滑的方案。后端使用 Python 的 FastAPI 框架通过异步机制支撑多个 Agent 并行调度前端工作台采用 React 加 TypeScript配合轻量级的可视化拖拽组件方便按行业场景定制面板Agent 之间的消息通信走 JSON 格式的任务定义协议不依赖特定模型供应商。模型接入层做了一个抽象接口目前支持常见的大模型 API 接入方式也能接入本地部署的开源模型。我在项目里默认配置了通用对话模型和代码/结构化输出模型分别承担不同角色的推理需求。数据存储方面业务数据用 PostgreSQL向量检索用轻量级方案尽量降低私有化部署的门槛。开源目录结构大体是core放编排逻辑和 Agent 定义workbench放前端工作台组件tools放内置工具集合knowledge放知识库加载与检索模块examples放可运行的行业案例。这样设计的意图很清楚让想二次开发的人能快速找到自己关心的部分而不是在一个巨型代码库里大海捞针。3. 实操搭建你的第一个 AI 团队3.1 快速部署与配置整个项目用 Docker Compose 就能一键拉起我实测从裸机到看到工作台界面大概需要十分钟。先克隆代码仓库然后在项目根目录执行git clone https://github.com/example/my-cowork.git cd my-cowork cp .env.example .env docker compose up -d启动后默认会拉起三个容器后端服务、前端页面、数据库。第一次启动时后端会自动初始化数据库表结构并把示例行业的 Agent 定义和工作台配置加载进去。访问http://localhost:8080就能看到登录页默认账号在.env文件里可以修改。有一点我开始没注意.env里的模型 API 地址默认指向一个模拟服务。如果你要接真实模型需要把MODEL_API_BASE、MODEL_API_KEY、MODEL_NAME三个变量改成自己的信息。改完之后重启后端容器就生效了。3.2 定义自己的行业 Agent接下来是关键步骤——定义 Agent。MyCoWork 的 Agent 配置文件是一个结构清晰的 YAML 文件每个 Agent 包含角色名称、职责说明、可调用工具列表、输出格式要求。以“售前方案顾问”为例agents: - name: demand_analyzer role: 需求分析专员 prompt_template: | 你是一名专业的业务需求分析专员。 请从用户的原始描述中提取以下字段 - 客户行业 - 核心诉求 - 预算范围 - 交付时间 以 JSON 格式输出。 tools: - text_parser - keyword_extractor output_format: json - name: solution_advisor role: 方案顾问 prompt_template: | 你是资深解决方案顾问。 基于需求摘要检索知识库中的历史案例 结合产品目录推荐最匹配的方案组合。 输出包含方案概述、匹配理由、所需资源。 tools: - knowledge_retriever - product_catalog output_format: markdown - name: quote_calculator role: 报价计算专员 prompt_template: | 你是报价计算专员。根据方案顾问推荐的 产品组合和成本表计算基础报价的 高、中、低三档价格并标注利润区间。 tools: - cost_calculator - pricing_table output_format: table配置好 Agent 后需要在编排层定义它们的协作顺序。MyCoWork 使用一个简单的workflow配置来声明谁先谁后、谁的输出作为谁的输入workflow: - step: 1 agent: demand_analyzer next: solution_advisor - step: 2 agent: solution_advisor next: quote_calculator - step: 3 agent: quote_calculator next: quality_reviewer - step: 4 agent: quality_reviewer next: workbench这里有个设计细节next: workbench表示流程的最后输出会送回工作台前端而不是继续进入另一个 Agent。这样业务人员就能在界面上看到完整结果人工确认后再一键归档或发送。3.3 创建行业工作台页面工作台配置采用一种声明式的 JSON 结构每个卡片组件绑定到一个 Agent 或工作流。以“售后工单处理”工作台为例核心配置如下{ workbench: { name: 售后工单处理台, layout: [ { id: ticket_input, type: text_area, label: 客户问题描述, bind_to: workflow.after_sale_v1, placeholder: 粘贴客户反馈内容... }, { id: auto_result, type: result_card, label: 工单分类与处理建议, bind_to: workflow.after_sale_v1.output, fields: [category, priority, solution, knowledge_refs] }, { id: manual_confirm, type: action_buttons, label: 人工确认, actions: [approve, revise, reject] } ] } }这里把“客户问题描述”绑定到一个售后工作流把输出结果绑定到“工单分类与处理建议”卡片。布局 JSON 是前后端共享的所以调整界面不需要改动后端代码业务分析师自己就能改面板排布。前端渲染组件会根据type字段动态渲染对应的交互组件。text_area就是普通多行文本输入result_card会智能渲染表格、列表或 JSON 数据action_buttons则根据绑定工作流的状态展示可用操作按钮。有一点要提醒卡片绑定的bind_to必须与后端工作流 ID 完全一致大小写都不能差。我刚开始试的时候因为一个下划线写错结果前端一直显示“工作流未配置”排查了半天才找到原因。3.4 接入行业数据与知识库Agent 再聪明没有行业数据就是空转。MyCoWork 的知识层提供了一套简易但实用的方案。支持加载常见的文本文件格式比如 PDF、Word、Markdown系统会自动切片成向量并存入知识库。以某物流仓储行业案例为例我把客户的历史异常处理记录、产品手册、标准作业流程文档全部导入了知识库。导入后在后台能看到切片数量和向量化进度等全部跑完后方案顾问 Agent 在检索时就能稳定引用这些真实数据。实测效果非常明显——原来方案里经常出现“大概需要 3-5 天”这种模糊表述接入知识库后输出已经能精确到“结合该客户的出库频率建议时效为 2.5 天”。知识库还支持动态更新。比如每个月更新一次价格表只需要把最新文档传到指定目录系统会自动检测变更并重新向量化增量部分不影响历史数据的稳定性。4. 常见问题与排查技巧实录4.1 高频问题速查表实际跑过的团队几乎都会遇到几类问题。我整理了一个高频问题速查表基本覆盖了初期使用的主要坑点。问题现象可能原因解决办法Agent 相互推诿输出空结果工作流配置中步骤衔接错误检查每个 Agent 的next字段是否指向正确 ID知识库检索结果不相关文档切片粒度太粗或范围过宽调小切片长度限定检索顶层级和文档类型工作台页面无法展示结果工作流 ID 与卡片bind_to不一致逐字符核对配置中的工作流 ID报价结果缺失成本项成本表数据结构变更导致工具调用失败升级cost_calculator工具增加空字段兜底逻辑模型调用经常报超时任务超长或并发度设置过高调低编排层max_concurrency增加模型调用超时时间人工确认后状态未更新前端未订阅工作流状态变更刷新工作台页面或检查 WebSocket 连接配置4.2 Agent 指令设计上的两个教训第一个教训是 Prompt 模板写得太宽泛。最开始我写的 Agent 职责描述是“负责处理客户需求”这个指令对模型来说约等于没说——模型不知道应该提取哪些字段、输出什么格式、做到什么程度算完成。后来我把每个 Prompt 模板都改成了“你是一个XX岗位的资深人员你需要从输入中提取哪些具体字段以什么格式输出如果字段缺失请标注Unknown”效果立刻有了质的提升。第二个教训是工具调用边界不清晰。多个 Agent 共享同一个工具池时很容易出现报价计算 Agent 去调用知识检索工具的情况虽然功能上不报错但会增加无谓的调用耗时而且可能引入不相关上下文。现在我在每个 Agent 的配置里明确列出允许调用的工具白名单越权的调用一律拒绝整体流程稳定性提升不少。4.3 避坑心得关于双人复核与业务边界多智能体落地最容易踩的坑是过度追求全自动流程。我第一次给某团队搭工作台时把整个流程做成了从需求到报价的全自动闭环结果业务负责人只用了三天就把工作台关停了。原因很直接任何一个环节出错业务人员根本不知道问题出在哪也没办法在中间修正。后来我调整了设计方案在需求确认和最终报价两个节点强制插入人工确认步骤。当需求分析 Agent 生成结构化摘要后工作台会弹出确认卡片业务人员可以修改字段再进入下一环节报价结果出来后同样需要负责人点击“确认发布”才能发送给客户。这看似让流程变慢了但实际跑下来反而更顺畅——因为没人会信任一个完全不设防的全自动过程。所以我的建议是核心决策环节一定要保留人工闸口技术的目标应该是“让人的决策更高效”而不是取代人。这个思路也在开源项目里做了默认配置。5. 扩展让 MyCoWork 适配更多行业场景5.1 金融服务业合规审查与信息采集金融行业对信息采集和合规审查的要求很严格多智能体可以在这个方向轻量化切入。我设想的场景是前端客户经理录入客户基本信息后合规审查 Agent 自动比对黑名单和风险清单资料完整性 Agent 检查必传文件是否齐全最后生成一份合规结论供人工复核。整个过程中敏感数据可以做字段级脱敏保证不出内网。5.2 电商运营竞品分析与上架准备电商行业的运营链路非常长从选品、定价、标题优化到素材准备全是重复劳动。用 MyCoWork 可以定义选品分析 Agent、竞品监控 Agent、文案生成 Agent 和合规检测 Agent。多智能体并行处理后运营人员只需要审阅产出物并做最终调整。尤其在铺货量大的团队里这套组合能大幅缩短上新周期。5.3 制造业设备维护知识助手制造业场景下知识沉淀非常重要。老师傅的维修经验往往只存在于口头新人上手困难。如果把历年维修记录、设备手册、故障代码表导入知识库再用多智能体做一个“设备维护助手”维修人员描述故障现象后诊断 Agent 会检索历史相似故障并给出排查顺序建议备件 Agent 同时算出所需备件清单和库存可用量。这类知识型工作台对制造企业来说发力点较为明确。6. 尾声和一点个人感受开源 MyCoWork 对我个人来说是一个重要的节点。从最早的“单 Agent 玩具”到现在的多智能体工作台框架中间踩过的坑、推倒重来的设计比写代码本身更有价值。让我感受最深的一点是技术架构的最终服务对象永远是业务流程中的人。多智能体可以让分工更细、自动化程度更高但只有在恰当的位置保留人的判断和确认这个系统才真正可信可用。如果你正在做类似方向的尝试我的建议是先从一个小而具体的行业场景切入定义两到三个 Agent跑通一个完整环节再慢慢扩展。不要在第一天就追求大而全的智能体矩阵——那很容易变成一堆能对话但与业务无关的玩具。MyCoWork 就是个可以随手改的起点欢迎你把它拿去用在自己的行业场景里。

相关新闻

Jetson+STM32双芯片架构:移动机器人实时控制源码包解析

Jetson+STM32双芯片架构:移动机器人实时控制源码包解析

简介:这份源码资源完整呈现了一台基于Jetson Orin NX(8GB)与STM32协同控制的移动机器人项目,面向正在入门ROS机器人开发、嵌入式运动控制或激光雷达与视觉融合应用的开发者。包内包含ROS工作空间、STM32控制逻辑、机械臂与车身运动控制相关代码&#xff…

2026/10/13 15:58:04 阅读更多 →
WebSocket实时推送实战:握手、心跳与断线重连的避坑指南

WebSocket实时推送实战:握手、心跳与断线重连的避坑指南

做过实时推送的同学,大概率都经历过这么一段:后端一把数据塞进数据库,前端为了拿到它,要么死循环轮询接口,要么用长轮询把请求挂着,延迟和服务器压力两头受罪。后来我把项目里的推送链路逐步迁到了 WebSock…

2026/10/13 15:58:04 阅读更多 →
AI-Gomoku实战:Minimax+Alpha-Beta打造可部署五子棋AI

AI-Gomoku实战:Minimax+Alpha-Beta打造可部署五子棋AI

简介:AI-Gomoku是一款面向Python初学者与AI算法爱好者的五子棋智能对弈程序,聚焦博弈搜索与轻量级AI实现,适用于算法实践、课程设计及人机对战场景。资源包共11个文件,含4个核心Python源码(如eval.py、referee.py、alg…

2026/10/13 15:57:03 阅读更多 →

最新新闻

Rust性能优化实战:五个技巧榨干硬件性能

Rust性能优化实战:五个技巧榨干硬件性能

很多人聊 Rust 性能优化,第一反应是“这语言天生就快,还用得着调?”我最初也这么想,直到接手一个用 Rust 写的日志处理服务,在单机 8 核上处理一千万条日志要跑十几秒,调完之后压缩到两秒出头,C…

2026/10/13 16:37:10 阅读更多 →
5G智慧校园解决方案:云网端架构、专网组网与评审避坑指南

5G智慧校园解决方案:云网端架构、专网组网与评审避坑指南

简介:这份PPT围绕5G智慧校园解决方案展开,面向教育信息化管理者、智慧校园规划人员及行业方案设计师,系统梳理了教育信息化从1.0“三通两平台”迈向2.0“三全两高一大”的政策背景与现实需求,并针对教学质量提升、资源优质共享、校…

2026/10/13 16:37:10 阅读更多 →
Python声纹识别实战:EcapaTdnn/ResNetSE等四大模型对比与工业部署

Python声纹识别实战:EcapaTdnn/ResNetSE等四大模型对比与工业部署

简介:本资源是一套基于PaddlePaddle实现的声纹识别系统完整工程,面向人工智能方向的学习者、语音算法初学者及高校课程设计实践者,聚焦于说话人身份验证这一典型生物特征识别任务。项目集成EcapaTdnn、ResNetSE、ERes2Net、CAM等前沿模型&…

2026/10/13 16:37:09 阅读更多 →
Rust性能优化五技巧:数据结构、内存分配与缓存友好

Rust性能优化五技巧:数据结构、内存分配与缓存友好

Rust 的性能优化,说起来很有意思。大家选 Rust 多半是冲着性能来的,但真正把程序写出来之后,你会发现“能跑”和“跑得快”之间还有很长一段路。我早期做 Rust 项目时也走过弯路,一度以为堆一些 unsafe 代码、换更高级的算法就是优…

2026/10/13 16:37:09 阅读更多 →
开源大模型本地部署四件套:环境配置、私有部署、LoRA微调与LangChain接入

开源大模型本地部署四件套:环境配置、私有部署、LoRA微调与LangChain接入

简介:本资源是一套面向AI工程师与大模型应用开发者的开源大模型全栈实践工具包,聚焦环境配置、私有化部署、LoRA微调及LangChain集成四大核心环节,助力开发者快速落地本地化大模型应用。压缩包共79个文件,涵盖45个Python脚本&…

2026/10/13 16:37:09 阅读更多 →
实习和校招到底在选什么?从简历到面试的完整求职指南

实习和校招到底在选什么?从简历到面试的完整求职指南

1. 实习和校招到底在选什么很多同学第一次接触实习和校招的时候,脑子里冒出来的第一个问题往往是“我该投哪家”“简历怎么写”“面试问什么”。这些问题当然重要,但如果只盯着这些操作层面的东西,很容易陷入一种“做了很多准备却始终不得要领…

2026/10/13 16:36:05 阅读更多 →

日新闻

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

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

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

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/13 16:22:04 阅读更多 →
影刀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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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 阅读更多 →