news 2026/11/3 5:00:04

从单体Agent到Multi-Agent:复杂任务下的架构演进与落地实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从单体Agent到Multi-Agent:复杂任务下的架构演进与落地实践

1. 单体 Agent 的黄金时代与真实边界

1.1 我为什么开始重新审视单体 Agent

先交代一个背景:我做了大半年 Agent 相关的开发,最开始的几个月几乎全在跟单体 Agent 死磕。所谓单体 Agent,就是把大模型、工具调用、记忆管理、任务规划全部塞进一个进程里,让它扮演“全能助理”的角色——你丢给它一个目标,它自己决定调用哪些工具、按什么顺序执行、最终给你一个结果。这个模式在解决单步骤、单领域、目标明确的任务时,效果确实惊艳。

举个例子,我最早做的“SQL 查询助手”就是个典型的单体 Agent:用户输入自然语言,Agent 负责理解意图、生成 SQL、执行查询、再把结果翻译回人话。整个链路在同一个 Agent 内部完成,没有其他 Agent 参与。当时我在本地用 LangChain 搭了一个不到 500 行的实现,配合 OpenAI 的函数调用,准确率就能达到七成以上。这种“一个模型 + 几个工具函数”的轻量架构,开发效率极高,非常适合个人项目和中小型工具。

但你有没有想过一个问题:为什么我们能在网上看到那么多“单体 Agent 翻车”的案例?明明单体架构看起来逻辑清晰、调试简单,为什么复杂任务一到手就崩?我自己的体验是,单体 Agent 在跨领域协作、长周期任务、多步骤依赖的场景下,会暴露出几乎无解的天花板。这个天花板不是模型能力不够,而是架构设计撑不起复杂度。

1.2 单体 Agent 到底能做好什么

讨论天花板之前,先给单体 Agent 一个公道:它不是不行,而是“适合的领域非常明确”。我把它总结为三类:

  • 单领域工具型任务:比如“帮我查一下数据库里上个月的订单总数”,这类任务只需要一个工具、一次调用、一个明确的输出格式。Agent 本质上只是把自然语言翻译成结构化调用,单体架构完全够用。
  • 短链路任务:从理解意图到执行操作,总步骤不超过 3-5 步,中间不需要跨系统同步。比如“给这篇文章生成三段摘要并保存到文件”,单体 Agent 可以轻松搞定。
  • 单用户、单会话场景:不涉及多角色协同、不涉及权限隔离、不涉及并发冲突。比如个人知识库问答 Agent,你问它答,它不需要跟“另一个 Agent”商量。

在这些场景里,单体 Agent 反而是最优解:开发成本低、调试方便、模型上下文利用率高。盲目上 Multi-Agent 反而会引入通信开销和一致性难题。

但问题在于,真实业务很少这么简单。一旦任务变成“帮我分析这份 CSV 数据,找出异常值,然后生成图表,再根据图表写一份周报邮件发给团队”,单体 Agent 的短板就开始浮现。你可能会说“这不就是多调几次工具吗”,实际操作过的人会知道,这里的难点远不止“多调几次工具”。

2. 单体 Agent 的天花板:四个绕不开的坎

2.1 上下文窗口与长任务失忆

单体 Agent 第一个坎,就是上下文窗口。大模型的上下文长度是有上限的,即使像目前主流模型已经支持几十万 token 的上下文,你也不可能把整个任务的中间状态全部塞进去——成本受不了,效果也下降得厉害。

我做过一个实验:让单体 Agent 完成“爬取 50 个网页、分别提炼要点、最终汇总成行业报告”的任务。前 10 个网页处理得都很顺利,但从第 15 个左右开始,Agent 会逐渐“忘记”最初的归纳要求,甚至开始把不同网页的信息混在一起。不是模型不聪明,而是早期网页的全文、中间结果、工具返回的 JSON 全堆在上下文里,注意力被稀释了。

你可以把上下文想象成一张桌子:桌子越大能放的东西越多,但你要找某个具体细节的时候,翻找的时间也会更长。单体 Agent 的所有工作都在同一张桌子上进行,任务一长,桌子就堆满了,Agent 就开始丢三落四。解决思路无非是“记忆外置”和“子任务隔离”,但这两件事一旦做起来,其实就是在往多 Agent 的方向靠了。

2.2 工具冲突与状态管理灾难

第二个坎,是工具调用之间的状态冲突。单体 Agent 往往要挂载很多工具:数据库查询、API 调用、文件读写、网页搜索、代码执行……工具一多,就需要统一的“状态管理”——比如数据库连接用哪个、临时文件存在哪、中间结果怎么传给下一个工具。

我踩过的一个很典型的坑是这样的:Agent 先调用了一个写文件的工具,把中间数据存到了/tmp/step1.json,然后又调用另一个工具读取这个文件。看起来没问题,但实际运行时,第二个工具是在独立的沙盒环境里执行的,根本读不到/tmp下的文件。我排查了半天,最后发现是工具执行环境的文件系统隔离问题。

单体架构里这种问题特别隐蔽:因为所有工具都挂在同一个 Agent 上,你天然会认为它们“共享一切”。但实际上每个工具执行器可能是独立进程、独立容器,环境隔离是常态。一旦工具之间需要传递复杂状态,你就必须引入共享存储、消息队列这些基础设施——这已经不是在“单体”层面能解决的了。

2.3 单点故障与不可并行

第三个坎,是效率问题。单体 Agent 在一个循环里工作:思考、调用工具、观察结果、再思考。这个流程决定了它只能串行处理,无法真正并行。如果是“分析 100 个文件后生成汇总报告”这种天然可并行的任务,单体 Agent 只能老老实实一个文件一个文件地过,耗时呈线性增长。

更难受的是单点故障:模型中任何一个环节出错,或者某一个工具返回异常格式,整个 Agent 就可能进入死循环——不停地重试、不停地报错,最后以agent execution terminated due to error收场。我在日志里见过不少这样的循环:Agent 发现自己调用工具失败后,并没有采取新的策略,而是不断用类似的方式重试,白白烧掉大量 token。

这其实暴露了单体架构的另一个问题:缺少“熔断机制”。在多 Agent 架构里,如果某个子 Agent 出问题,主管 Agent 可以把它替换掉、换一条路径;单体 Agent 只能自己硬扛,扛不住就崩。

2.4 角色混淆与专业度下降

第四个坎,也是我认为最根本的——单体 Agent 没办法同时扮演好多个专业角色。一个合格的“数据分析师”和一个合格的“PPT 制作师”,提示词逻辑是完全不同的。前者需要严谨的逻辑推理、数据验证;后者需要排版意识、视觉表达。把它们塞进同一个 Agent,意味着你的 system prompt 得同时包含两种完全不同的风格指令,模型的表现必然会互相干扰。

我试过在单体 Agent 里同时配置“严谨的技术审阅人”和“亲切的科普作者”两种角色,结果产出的内容四不像:既不够专业,也不够易懂。后来拆成两个 Agent,一个负责技术审阅,一个负责改写成科普风格,质量立刻上来了。这个体验让我非常直观地感受到:分工带来的专业度提升,不是靠提示词能模拟出来的。

3. 复杂任务为什么绕不开 Multi-Agent

3.1 复杂任务的三个特征

到底什么样的任务算“复杂任务”?我的判断标准有三个:

  • 需要多个领域的专业知识:比如“做一个市场调研报告”,既要懂数据分析,又要懂行业趋势,还要能把结论写成人话。一个 Agent 无法在每个环节都保持同样的专业水准。
  • 任务步骤之间存在依赖关系:后一步的输入是前一步的输出,且中间状态需要长期保存、随时回溯。比如“先收集数据,再清洗,再建模,再出报告”。
  • 需要并行处理和多方校验:比如“同时分析 10 个竞品的官网,交叉验证信息”,或者“让两个 Agent 分别写代码和审代码”。

只要命中其中两个特征,单体 Agent 就会开始吃力。这不是我个人的偏见,而是架构层面的必然:单体 Agent 把所有的认知负担放在一个上下文里,用一个决策链处理所有事情,复杂度一高,必然顾此失彼。

3.2 Multi-Agent 的本质:分工、协商、编排

Multi-Agent 不是简单地把多个 Agent 堆在一起,它的核心是三种机制:

第一是分工。每个 Agent 只负责一个明确的子任务,比如DataCollectorAgent只做数据采集,QualityCheckAgent只做数据校验,ReportGeneratorAgent只做报告撰写。每个 Agent 的 system prompt 可以写得非常纯粹,模型的注意力和行为空间都聚焦在单一职责上,输出质量自然更高。

第二是协商。Agent 之间不是简单的“你干完我再干”,而是会有信息交换和反馈。比如写完代码的 Agent 把代码交给 Review Agent,Review Agent 发现问题后返回修改意见,原 Agent 再根据意见调整。这种往返协商机制,能显著提升复杂任务的准确率。

第三是编排。多个 Agent 之间必须有一个“谁先谁后、信息怎么流动”的规则。这个规则可以是由一个中心化的 orchestrator 控制,也可以是去中心化的自由协作。编排机制决定了 Multi-Agent 系统的行为是否可控、是否可预测。

我见过最直观的一个对比:同一个小型团队,A 项目用单体 Agent 独立完成,B 项目用三个子 Agent 分工完成。A 项目的 Agent 在遇到未知错误时经常不知所措,B 项目的子 Agent 虽然单个能力稍弱,但整体稳定性和容错能力反而更强。因为即使某一个子 Agent 失败了,其他子 Agent 的结果仍然有价值,主管 Agent 可以绕过失败节点继续推进。

3.3 吴恩达 Agent 教程里的设计观

顺带提一下吴恩达那套很火的 Agent 教程,里面有一个观点我非常认同:他反复强调 planning、tool use、memory 是 Agent 的三大核心模块,而 multi-agent 协作是应对复杂任务的关键设计模式。他在课程里展示的“写论文”例子,就是拆成“搜索资料”、“写大纲”、“写正文”、“审阅修改”几个 Agent 角色,每个角色挂不同的提示词和工具,最后汇总成一篇完整内容。

这套设计观给我最大的启发是:不要从一开始就追求“一个 Agent 解决所有问题”,而是要把任务当作一个项目来管理,Agent 就是项目里各司其职的成员。项目越大,成员的专业化分工就越重要。你可以把单体 Agent 想象成一个身兼数职的创业者,Multi-Agent 则是一个职能齐全的团队。创业者在早期很高效,但业务复杂了,必须靠团队。

4. 主流 Multi-Agent 框架与编排模式

4.1 三种最常见的协作模式

Multi-Agent 的协作模式有很多种,我根据自己的实践,总结出三种最常见、最容易落地的模式。

模式一:编排者-执行者模式(Orchestrator-Worker)

这是最经典、最容易理解的一种。一个中央编排者 Agent(主管)负责接收用户请求、拆解子任务、分发给若干执行者 Agent(工人),然后汇总执行结果。主管不直接干活,只做计划和调度;工人只干活,不做整体规划。

这种模式适合任务结构相对清晰、子任务之间依赖较弱的场景。比如我做过一个“周报生成系统”:主管 Agent 负责分析用户这一周的工作记录,拆出“数据统计”、“亮点总结”、“风险提示”三个子任务,分发给三个工人 Agent 并行处理,最后统一汇总成一份周报。整个系统稳定运行了几个月,故障率很低。

模式二:流水线模式(Pipeline)

流水线模式更接近传统的数据处理流程:Agent A 的输出直接作为 Agent B 的输入,逐个环节向下传递。典型场景是“内容生产流水线”:选题 Agent 负责定方向,大纲 Agent 负责搭结构,写作 Agent 负责产出初稿,校对 Agent 负责修改润色,最后翻译 Agent 负责多语言版本。

这种模式的优点是流程清晰、每个环节质量可控;缺点是如果前面某个环节出问题,后面的环节会被连锁影响,需要额外设计“重试”和“回退”机制。

模式三:辩论/评审模式(Debate/Review)

这是这两年很火的模式:让多个 Agent 扮演不同立场,围绕同一个问题给出意见,再由一个裁决者 Agent 综合各方观点得出结论。比如代码评审场景,可以让一个 Agent 专门找 bug,一个 Agent 专门审查性能,一个 Agent 专门检查安全性,最后有个主 Agent 汇总。

这种模式能显著降低单一模型“自圆其说”的风险。我实际体验是,在需要高可靠性的决策场景下,辩论模式比单一 Agent 直接输出要稳得多。缺点是 token 消耗大概是单体模式的 3-5 倍,适合“宁可慢一点也要结果可靠”的任务。

4.2 框架选型:不要为了 Multi-Agent 而上 Multi-Agent

现在市面上的 Agent 框架很多,主流的像 LangGraph、AutoGen、CrewAI、Semantic Kernel,还有最近热度很高的各类轻量级 Agent 编排库。我的建议是:框架只是工具,不要被框架绑架。

  • LangGraph:适合需要精细控制流程、状态、条件分支的复杂场景。它的核心抽象是“图”,节点是 Agent 或工具,边是流转逻辑,可控性极强,但学习曲线也最陡。
  • AutoGen:微软出的多 Agent 框架,擅长“对话式”协作,多个 Agent 之间像聊天一样交换信息。适合探索性的、开放式任务,但工程化时要小心失控。
  • CrewAI:轻量、API 简洁,适合快速验证 Multi-Agent 想法,文档写得比较友好。
  • 手写编排:如果你的任务结构非常固定,其实不一定需要框架。我用 Python 的asyncio手写过一套极简编排器,就是维护一个任务队列,按依赖关系调度子 Agent,整个核心代码不到 400 行。

这里我要特别强调一句经验之谈:很多项目失败,不是因为框架没选对,而是因为根本不该上 Multi-Agent。如果你用一个 prompt 就能稳定解决问题,不要为了技术时髦而上多个 Agent。Multi-Agent 的通信开销、状态一致性问题、调试难度都是真实成本,必须要用“复杂度增量”去换取“能力增量”,这笔账要算清楚。

4.3 通信协议与 MCP:Agent 之间的“普通话”

多 Agent 协作的另一个关键,是 Agent 之间以及 Agent 与工具之间的通信标准。这两年特别火的 MCP(Model Context Protocol)解决了一个很实际的问题:工具接入的标准统一。以前每个 Agent 框架都要写自己的工具适配层,换个框架就要重新适配;有了 MCP,工具方提供服务端,Agent 方作为客户端统一接入,接口规范统一之后,生态就活了。

我在自己的项目里用 MCP 协议连了文件系统、数据库、HTTP API 三类工具,整体的开发体验比之前直接用函数调用要流畅很多。尤其是 Agent 之间的数据传递,如果统一用 MCP 的上下文规范,就不太容易出现“格式解析失败”这种低级错误。

当然,MCP 也不是银弹。它主要解决的是“工具连通”问题,而多 Agent 之间更深层的语义对齐、角色权限、记忆共享,目前仍然主要靠框架层面的设计来完成。选择 MCP 还是选择框架内置的通信机制,取决于你的系统边界:如果工具生态丰富,MCP 是首选;如果只是几个 Agent 之间私密协作,框架内置的消息机制反而更轻量。

5. 从单体到多体的落地实操

5.1 什么时候应该拆

讲完原理和模式,聊聊具体的落地。我给自己定了一个拆分判断清单,每一条命中就认真考虑上 Multi-Agent:

  • 单个 Agent 的 system prompt 超过 2000 字,且还在不断增加;
  • 上下文里经常要保留超过 20 轮的中间结果;
  • 工具调用数量超过 10 个,且工具之间的数据格式差异很大;
  • 任务需要多轮“生成-评审-修改”的循环;
  • 用户会反复要求修改某个中间环节,而不是只改最终结果。

如果命中三条以上,基本就可以考虑拆了。拆分的最简单起点:把“规划”和“执行”分开。一个 Planner Agent 专门拆解任务、制定计划,一个 Executor Agent 负责调用工具执行,这已经比单体 Agent 稳定很多,改动成本也最低。

5.2 任务拆分与角色定义

拆分的核心动作是两件事:定义角色、定义交接协议。

定义角色,就是给每个子 Agent 一个清晰的边界。我在实践里会写一张角色卡片,包含四个要素:

角色输入输出核心约束
Planner用户原始需求结构化任务清单不调用任何外部工具
Executor单个子任务执行结果只处理自己负责的子任务,不跨权
Reviewer执行结果审查意见不修改结果,只返回建议
Summarizer所有结果和审查意见最终输出只做汇总,不做新分析

这张表格看起来简单,但它是整个 Multi-Agent 系统的基石。角色边界一旦模糊,系统就会退化成“多个单体 Agent 互相聊天”,不仅效率低,还容易陷入无意义的循环。

定义交接协议,就是明确“上一个 Agent 的输出,用什么格式交给下一个 Agent”。我强烈建议所有 Agent 之间统一使用 JSON 格式传递数据,并且用 zod 或者 Pydantic 这类工具做 schema 校验。数据格式不一致是多 Agent 系统最常见的崩溃原因,没有之一。

5.3 一次真实的 Multi-Agent 调试记录

分享一个我印象最深的调试经历。当时我在做一个知识库问答系统,结构是:Retrieval Agent 负责检索文档,Reasoning Agent 负责根据检索结果推理答案,Safety Agent 负责检查答案是否包含不当内容。

系统上线第一天就出了一个诡异问题:Reasoning Agent 经常性“失忆”,明明 Retrieval Agent 已经传了准确的文档片段,它的回答却答非所问。我查了半天日志,发现问题出在上下文构建环节:Reasoning Agent 的历史消息里被塞进了整整 50 轮对话的检索记录,导致最新的文档片段被淹没在历史里。

解决方案很粗暴:每次新问题进来时,只保留最近一轮的检索结果,历史对话单独存到外部记忆存储里,需要时再按需检索。改完之后,准确率立刻提上来了。这个教训让我明白:多 Agent 系统的记忆管理,比模型选型更重要。

还有一次更隐晦的 bug:两个 Agent 通过共享的 JSON 文件传递状态,但其中一个 Agent 执行环境是 Docker 容器,另一个是宿主机进程,文件路径不一致,导致数据永远同步不上。后来我用统一的消息队列替换了文件传递,才彻底解决。这种“环境隔离导致状态不一致”的问题,在单体架构里几乎不会遇到,但在多 Agent 架构里是非常典型的坑。

6. 常见问题与排查技巧实录

6.1 Agent 执行终止错误:从日志里找真相

“agent execution terminated due to error”是我在日志里见得最多的报错之一。初次遇到时很容易慌,以为是模型出问题了。实际排查下来,绝大多数情况是这样的:

  • 工具抛出的异常没有结构化返回。模型把异常信息当成“正常文本”处理,继续往下走,最终走到一个死胡同。解决方法是给工具调用包一层异常捕获,任何错误都返回固定格式:{"status": "error", "code": "XXX", "message": "..."}。
  • 模型陷入了无意义重试循环。比如某个 API 返回 500,Agent 不去检查原因,而是用相同的参数重试三次。解决方法是给重试次数设置上限,超过上限就切换策略。
  • 中间结果格式不匹配。上游 Agent 给下游传的数据,下游解析失败,但失败信息没有回传。

排查思路我总结成一个顺序:先看日志里最后一次工具调用的输入输出,确认是不是工具异常;再看 Agent 的思考过程,确认是不是规划出问题;最后检查 Agent 之间的数据传递格式,确认是不是沟通出问题。90% 的“终止错误”都能在这三步里找到原因。

6.2 沙盒更新与依赖冲突

另一个高频问题是沙盒环境更新。很多 Agent 平台会在后台自动更新依赖包,但 Agent 执行时使用的是旧环境的缓存,或者反过来。我遇到过让 Agent 调用某个 Python 库,它在本地测试环境运行正常,上线到沙盒环境就报 ModuleNotFoundError。原因很简单:沙盒环境的依赖没有同步更新。

解决办法也很直接:把 Agent 的依赖锁定文件(requirements.txt 或 pyproject.toml)纳入版本管理,CI/CD 流程里强制重新构建环境,而不是复用缓存。另外,如果 Agent 要执行代码,最好在独立容器中做镜像构建,杜绝“宿主机环境差异”带来的玄学问题。

6.3 上下文调度与记忆管理

最后聊聊记忆管理。多 Agent 系统里,每个 Agent 的记忆边界如何划分,是个很微妙的问题。我的经验法则:

  • 共享记忆:全局配置、团队规范、用户偏好,这类信息可以放在共享记忆里,所有 Agent 都能访问。
  • 私有记忆:某个 Agent 的中间推理过程、子任务状态,这类信息只应该保留在对应 Agent 内部,不需要也不应该暴露给其他 Agent。
  • 临时记忆:单次任务的短暂状态,比如“当前正在调用的工具返回了什么”,用完即丢,不进长期存储。

千万不要把共享记忆设计成一个“大杂烩”。我之前犯过这个错误,所有 Agent 的对话历史都写进同一个 Redis,结果 Agent 之间的信息互相污染,A 角色的历史记录影响了 B 角色的决策。后来改成按 Agent ID 分库存储,问题才缓解。

还有一个细节:Agent 读取记忆时,要控制“读取量”。不要每次都把所有记忆全部塞进上下文。我自己常用的做法是做一个retrieve_relevant_memories(query, limit=5)的方法,按相关性取前几条,既保证信息不过载,又不丢失关键历史。

7. 踩坑之后的几点实在话

说了这么多,最后分享一点个人体会。如果你正在犹豫要不要从单体 Agent 迁到 Multi-Agent,我的建议是:先用单体 Agent 快速验证业务价值,等需求稳定了,再按照“规划/执行/评审”三个角色做最小幅度的拆分。不要一开始就画一个十几个 Agent 的宏伟蓝图,那种系统维护起来会让人怀疑人生。

另外,多 Agent 系统的调试成本极高,所以一定要从第一天就把日志做好。每个 Agent 的输入、输出、报错、耗时、token 消耗,全部结构化记录。没有日志的多 Agent 系统,出了问题基本只能靠猜。

记住:Multi-Agent 不是银弹,它是复杂度管理工具。当你的任务复杂到单体 Agent 的大脑装不下,或者单条决策链撑不起可靠性要求时,才值得引入。如果任务本身不复杂,老老实实用单体 Agent,省下来的时间和 token 都是实实在在的收益。这个分寸,是踩过坑之后才能拿捏准的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/3 4:59:12

工业相机丢帧丢包排查:巨型帧、SCPD与多相机带宽调优

简介:《工业相机丢帧丢包排查手册》面向使用海康工业相机做图像采集的开发者与现场调试人员,针对自研采集软件出现行闪、丢帧丢包而官方 MVS 正常这一典型问题,给出从硬件环境到相机参数的排查路径。包内为 1 个 PDF 文件,约 2.25…

作者头像 李华
网站建设 2026/11/3 4:59:08

vxe-table分组列头折叠功能实现与优化

1. vxe-table分组列头折叠列功能实现原理vxe-table作为一款基于Vue.js的高性能表格组件,其分组列头功能是通过嵌套的列配置结构实现的。当我们需要在表头中展示层级关系时,可以通过children属性构建树形结构的列定义。分组列头的核心数据结构如下&#x…

作者头像 李华
网站建设 2026/11/3 4:58:52

dpkg-divert工具详解:解决Debian系统文件冲突

1. dpkg-divert 工具的核心价值与应用场景在Debian系Linux系统中,dpkg-divert是一个被严重低估却极其重要的底层工具。它的核心功能是管理文件转向(diversion),这种机制允许系统管理员或软件包维护者改变文件默认安装路径。想象一…

作者头像 李华
网站建设 2026/11/3 4:58:52

Vue列表el-switch开关状态错乱:五类错误写法与完整修复方案

1. 先别急着改代码:把"全部关闭"这个现象拆开看列表里的 el-switch 出现状态显示有误、一刷新全变成关闭,这类问题在后台管理系统里出现的频率高得离谱。我第一次遇到的时候,盯着屏幕看了二十分钟,明明数据库里的字段是…

作者头像 李华
网站建设 2026/11/3 4:58:32

HarmonyOS RcTag组件开发实战:标签墙与热词交互

1. 项目背景与核心价值作为一名长期深耕移动端开发的工程师,我最近半年一直在HarmonyOS生态中探索组件化开发的最佳实践。RcTag组件作为HarmonyOS6中新增的标签系统控件,其设计理念与实现方式都体现了华为在分布式能力上的深度思考。这个实战案例将聚焦两…

作者头像 李华
网站建设 2026/11/3 4:57:41

Figma MCP实战:从设计稿到Vue页面的高效还原指南

MCP 这个词在技术圈刷屏的速度,比 Vue 发新版本还快。前阵子我接到一个需求:照着设计稿把一个数据看板页面还原成 Vue 组件。以前这种活,我都是先打开 Figma 拼命量尺寸、记颜色、导切图,一个页面下来至少要半天。这次我试着用 Fi…

作者头像 李华