尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从自动化到智能体:软件架构范式跃迁的工程实践

从自动化到智能体:软件架构范式跃迁的工程实践 做软件架构这些年我有个很深的感受自动化玩得越溜越容易看见它的天花板。你刚把一套自动化测试脚本写到覆盖率很好看的地步业务侧又来一句“规则变了”于是你又要改定位器、改断言、改数据准备脚本。这套循环我跑了将近十年从QT上位机到接口自动化从Selenium到Playwright框架换了一轮又一轮底层思路其实没变过——把人的操作固化成机器能重复执行的步骤。但这两年不一样了大模型把“执行”这件事的范式整个掀翻了。大家开始讨论的不再是怎么把步骤写得稳而是怎么让机器自己定步骤。从自动化到智能体我用了一个非常保守的词来定义它范式跃迁。这个东西不是换个工具、加个库而是整套架构思维都要跟着换——你不再写死流程而是写目标和约束让系统自己规划路径。这篇文章我想把我观察到的、以及我在实际项目中摸爬滚打出来的经验完整倒出来。适合谁看正在做自动化测试、上位机、接口自动化觉得“每天改脚本改麻了”的人也适合已经在折腾Dify、Coze、LangChain想搞清楚“这些东西和原来的自动化架构到底是什么关系”的人。看完你会明白为什么自动化经验和智能体不但不冲突反而恰好是智能体落地的地基。1. 从“自动化”到“智能体”到底跃迁了什么1.1 自动化的本质是“把人写死的流程跑稳”你回想一下这些年做过的自动化系统不管是Selenium还是Appium不管是SikuliX那种图像识别还是Playwright这种现代浏览器自动化框架它们的共同点是什么流程是你预先定义好的。元素定位失败怎么办重试。用例失败怎么办报出来等人工看。业务规则变了怎么办脚本维护者来改。整个系统里做决策的永远是人机器只是执行者。我做过一个QT上位机项目界面层、逻辑层、通信层分得清清楚楚自动化测试脚本也跟着分层走。当时觉得这架构挺漂亮后来业务加了一堆边界条件脚本半年内改了不知道多少轮。原因很简单我试图把“所有可能出现的情况”都穷举在代码里但只要需求没冻结穷举就是无底洞。1.2 智能体的本质是让机器参与决策智能体Agent和自动化的最大差别在于控制流在哪。自动化是“事件循环 条件判断 顺序执行”智能体是“目标驱动 感知环境 调用工具 根据反馈调整下一步”。用大白话说自动化是剧本智能体是演员。演员也遵循规则但面对意外情况他会自己想办法把戏演完。这里最关键的认知转变是确定性系统让位给了概率性系统。你不再追求“同一个输入必然得到同一个输出”而是追求“给定目标和环境系统能自主完成目标且结果可验收”。这一点对架构师来说非常别扭因为我们的职业习惯就是追求确定性和可预测性。但你不得不承认变化越快的业务确定性系统的维护成本就越高于收益这时候决策权前移是必然的。1.3 范式跃迁不是否定自动化而是把自动化降为基础设施我的观点一直很明确智能体不是来取代自动化的它是来做自动化的上游决策层的。原来的自动化脚本、接口封装、设备驱动、测试夹具这些东西一个字都不用改它们会成为智能体的“手脚”。智能体负责思考“下一步该做什么”自动化层负责把“想好的事”干利落。这套分层逻辑和当年我们从“面向过程”转“面向对象”是一样的感觉——不是函数没用了而是函数被封装成了对象的方法。现在我们要做的是把自动化模块封装成智能体可以调用的“工具”。从架构术语来说就是把控制反转IoC做彻底以前框架控制你的代码后来你控制框架现在模型根据上下文控制流程。2. 自动化时代的架构遗产哪些值得保留在聊智能体之前我得先帮大家把自动化的家底盘一盘。因为我发现很多人一听智能体就想着把原来的系统推翻重来这是大忌。你过去在自动化架构上踩的坑、沉淀的分层、积累的稳定模块恰恰是未来智能体系统里最难复制的那部分资产。2.1 我在QT上位机项目里沉淀的架构经验我之前做的一个典型QT上位机项目用来控制下位机设备并采集数据。前期没规划好界面代码、业务逻辑、通信协议全都耦合在一堆信号槽里。后来重构硬性拆成三层界面层只负责展示和交互业务层管状态机和数据处理通信层封装串口、TCP、Modbus协议。测试脚本独立成第四个模块模拟协议层收发数据。这个架构救了我后来很多次。当我想给这个系统接入智能体时通信层变成了一个现成的Tool接口智能体只需要“读数据”“发指令”两个工具就能接管大部分故障诊断流程。如果当初没有分层想接入模型根本无从下手。所以做上位机也好、做测试平台也好分层解耦永远是第一位的。2.2 自动化测试框架的三次演进自动化测试框架这条路我亲眼看着它走了三个阶段。第一个阶段是录制回放QTP那批工具录完就得靠人工维护基本活不长。第二个阶段是元素定位加脚本语言Selenium时代大家开始写Page Object把页面元素和业务操作封装起来维护成本降了一批。第三个阶段是数据驱动和关键字驱动测试逻辑和数据分离同一个用例用不同数据集跑。到了Playwright这批现代框架其实底层思想没变只是补齐了等待策略、多浏览器、网络拦截这些痛点。但我想提醒的是不管框架怎么进步如果测试逻辑还是写死的断言、写死的步骤那么需求变了你一样要改。所以后来我在Playwright Python pytest基础上加了一层AI语义定位允许脚本用自然语言描述“我要点击那个红色的提交按钮”通过视觉模型去定位坐标。这一步当时只是实验但它直接长出了我后来做智能体测试的雏形。2.3 接口自动化里的两个容易被忽略的架构点接口自动化相对UI自动化稳定很多因为接口契约没那么容易变。但有两个架构点做不好照样改到崩溃。一个是环境切换开发环境、测试环境、生产环境域名、账号、鉴权都不一样如果这些配置硬编码在脚本里每次换环境就是一场灾难。我后来的做法是配置外置加环境分隔符用一套模板三个环境三个占位值跑的时候按环境参数注入。另一个是数据准备。接口自动化最痛苦的不是断言而是造数据。我见过太多团队每个用例都自己去注册新用户、下单新订单跑一次用例慢得要命。后来我们做了一个数据工厂服务统一封装用户、订单、优惠券等数据生成规则用例只要说“给我一个广东地区、用微信支付、买了三件商品的订单”它自动去数据库或接口创建并返回。这件事听上去和智能体没关系但你如果做个智能体测试平台就会发现“数据准备”就是智能体最需要调用的工具之一。3. 智能体架构的关键拼图从语言模型到工具编排好了地基盘完了来看新玩意儿。我做智能体项目之前以为难点是模型真做下来才发现模型是最不愁的真正的难点是在“怎么让模型稳定地使用你的工具”。这一节我拆开讲。3.1 ReAct模式智能体的最小内核今天市面上几乎所有智能体框架核心都是ReAct模式——Reason Act推理一步行动一步再基于结果推理下一步。打个比方你让实习生去整理会议室他不会一次性把所有事情都做完他会先看看镜子在哪、线够不够长再决定先装哪个装完了再检查一次。ReAct就是这个过程模型先生成一段Thought描述当前情况和计划然后生成一个Action比如调用某个工具工具返回Observation模型看一眼结果再进入下一轮Thought。在架构上这个循环就是整个智能体的发动机。你需要维护一个循环调度器读消息、调模型、解析输出、执行工具、把结果放回上下文然后重复。我在LangGraph里做项目时这个循环被定义为图的一个节点外面再挂上状态存储、工具注册、人工审核这些旁路。3.2 工具即接口Function Calling是优雅的东西在LLM接入业务系统这件事上OpenAI的Function Calling真是帮了大忙。以前想让模型控制软件得把所有操作塞进提示词让它“猜”效果很不稳定。现在只要定义好函数的名称、参数、描述模型会在需要时以JSON格式发起调用请求你校验参数、执行函数、把结果回传整个链路干净利落。架构上要注意的是工具层必须做统一封装。我定义了一个标准工具接口每个工具包含名称、描述、输入Schema、执行函数、权限标签这五样。不管底层是调用Playwright、执行SQL、调内部接口还是控制设备对外都长一个样。这样模型只管“广播意图”系统负责路由。3.3 框架选型LangGraph、Dify、Coze到底选谁很多人问我智能体开发用LangChain好还是Dify好或者直接上Coze。我的回答通常是先分清你要做的是“开发框架”还是“平台”。LangChain和LangGraph是开发框架适合有技术团队、需要深度定制、业务逻辑复杂、要嵌入现有系统的场景。LangGraph比LangChain更进一步它把工作流建模成图节点之间可以循环、回退、交叉非常适合ReAct和多智能体编排。我目前的主力就是LangGraph。Dify和Coze是低代码平台适合快速验证概念、非工程团队做业务自动化。Dify偏开源和企业私有化Coze偏字节生态和国内模型两者都支持知识库、工作流、插件但对复杂状态管理和精细控制比较受限。维度LangGraphDifyCoze定位开发框架企业级低代码平台消费级平台上手难度高要写代码中可视化为主低模板化为主扩展性极高较高可写插件中等部署方式完全自控私有化/云端云端为主适合场景深度定制度高的业务系统企业内部应用、知识库问答、审批流营销、获客、内容生成3.4 多智能体协同从单体Agent到Agent团队单智能体撑不起复杂业务这是我自己做项目时撞出来的结论。以前我试图让一个Agent干完“解析文档、调接口、写测试、报报告”所有事情结果就是上下文爆炸、指令冲突、模型经常忘事。后来我拆成三个Agent规划者负责把目标拆成任务清单执行者负责调工具干活检查者负责验证结果。Checked by 第三个Agent以后错误率直接降了一个档次。架构上这个叫多智能体系统RMSrole-based multi-agent system。每个Agent拥有自己的System Prompt、可用工具列表和退出条件。它们之间通过共享内存或者消息总线通信。LangGraph里实现起来很清晰给图加节点每个节点是一个Agent节点间连边就是消息流。另外社区里有个很经典的参考实现叫Hermes目标是把这套东西做成端侧通用智能体核心就是一组循环调度工具加注册机制我建议你把源代码翻出来读一遍读完对多智能体的理解会上一个档次。3.5 给智能体加上刹车可观测性与人工审批智能体最让人不放心的就是“失控”。模型毕竟偶尔会抽风它会调用一个你没预料到的工具或者做一个成本很高的操作。所以架构上必须做护栏。护栏分三层。第一层是权限壳工具层必须带权限标签模型请求用哪个工具、动哪些数据先过鉴权。第二层是审批阀高风险操作发邮件、删除数据、执行支付必须暂停转入人工审批节点。第三层是可观测性每轮ReAct的Thought、Action、Observation全部落到日志里能做时间线追踪否则出了问题你连复盘都做不到。这三件事是我觉得所有智能体项目必须优先保证的架构约束别等出事了再加加的成本会高出数倍。4. 两个实战智能体如何改造传统自动化系统理论堆了一堆来两个我能直接讲透的实战案例。这两个案例都是我在热词清单里看到的高频方向一个是自动化测试一个是跨境电商工作流恰好也是我认为智能体最能立刻见效的两块地。4.1 案例一用智能体重构自动化测试平台传统接口自动化测试的痛点很典型写用例费人、维护用例烦、环境切换累、失败分析还得人肉看日志。我做了一版“自动化测试智能体”思路很简单先梳理出现有测试平台的能力封装成三个工具执行指定用例、查询用例历史结果、拉取接口日志。然后定义一个“测试调度Agent”它接收一个自然语言目标例如“验证订单模块下单流程在测试环境是否正常”。Agent拿到目标后第一步从用例仓库里搜出相关用例第二步根据当前环境注入正确的鉴权和配置第三步执行用例第四步如果失败自动拉取接口日志和链路追踪尝试判断是环境问题还是代码问题最后生成一份包含失败原因分析的HTML报告。整个链路里执行用例还是用原来的pytest和Playwright那一套Agent只做调度和诊断。实测下来最大的提升不是“写用例”变快了而是失败排查效率上来了。以前每次失败都要人手动去翻日志现在Agent帮我把上下文聚齐了我能直接看到“请求参数和返回结果是这个可能是mock数据过期”这种结论。这里要注意的是临时结论不能被当作最终结论Agent的分析只是辅助最后的决策权还得在人手里。4.2 案例二跨境电商多平台订单抓取智能体工作流跨境电商运营有个脏活累活每天要登录各个平台后台把新订单捞出来同步到ERP或者Excel再通知仓库发货。平台一多页面改版一多固定脚本就崩。热词里那个“WorkBuddy自动化工作流”说的就是这个场景。我用智能体重写了一版工作流定义了一个“订单同步Agent”它有一张工具表浏览器自动化工具基于Playwright、Excel读写工具、消息通知工具、异常上报工具。Agent每天定时醒来按顺序登录平台A、平台B、平台C对每个平台执行“打开订单列表、识别新订单、读取订单详情、写入统一的订单表”。关键点在这里原来固定脚本只要页面结构一变就挂而智能体版的浏览器控制是通过“语义描述”来定位元素的——模型看到页面截图直接判断“右上角那个橙色按钮是导出”并不依赖CSS选择器。所以页面小改版它基本不受影响大改版也只是时间慢一点不会直接报错退出。这个项目的架构收益很直观维护成本从“每条链路都要改代码”变成“只看目标是否达成”。我只需更新工具定义和验收规则剩下的让Agent自己摸索路径。当然前提还是要做好数据校验每条写入Excel的订单我都在入库前跑一个格式校验函数不合法就进异常队列等人工处理。4.3 迁移路径五个步骤渐进式落地如果你也想把手里的自动化系统往智能体方向升级我给你一个务实的五步路径别一上来就搞大平台。第一步盘点存量能力清单把现有自动化模块、脚本、接口全列出来标清楚输入输出和依赖。第二步挑一个“变动频繁且规则明确”的流程做试点比如测试失败分析或订单同步别挑核心结算流程风险太高。第三步把存量能力封装成标准工具接口挂上权限标签和Schema。第四步用一个轻量编排层优先LangGraph把这些工具串成一个ReAct循环先以人工审批模式跑一阵。第五步积累运行日志迭代工具描述和提示词等准确率稳定了再把人工审批改成自动放行。这五步走下来方向不会偏。最忌讳的是为了用Agent而用Agent本来稳定的一批自动化脚本非要把里面逻辑改成模型自由发挥那是自己给自己挖坑。5. 智能体架构落地的避坑清单这一章务必收藏是我真金白银砸出来的经验。智能体项目我听过的、做过的失败案例太多了多数不是模型不够强而是工程问题。5.1 框架版本与模型迭代的坑LangChain这框架老用户都懂版本升级经常破坏性变更API说改就改。我有一次从一个旧版本升上来几十个节点全部要改写法光是理顺依赖就花了整个周末。所以我的建议是生产项目一律锁版本升级必须走完整的回归测试另外核心编排逻辑尽量少用框架的“魔法”方法多用裸函数和显式状态不然框架一换全盘重写。模型方面的坑也很经典同一个PromptGPT-4和GPT-4o的输出风格、JSON格式、工具调用倾向都不一样。所以你不能“换模型不换提示词”。更稳妥的做法是所有模型交互都走一个适配层模型有变动时只改适配层参数。5.2 上下文窗口与Token成本控制智能体跑起来最费钱的不是推理本身而是“上下文膨胀”。ReAct循环每一次工具返回都会往上下文里塞内容跑上几十轮Token消耗指数级上升。我见过一个订单抓取Agent跑一次消耗掉十几万Token的账单感人。解决办法有几个。第一工具返回要裁剪只保留关键字段能返回“成功”、“数量”、ID这种摘要就别把整个HTML塞回去。第二历史消息要压缩超过N轮就做摘要用“之前完成了这些步骤”代替逐字记录。第三能并行的地方别串行多个独立确认步骤合并成一次工具调用省掉多轮对话。第四高频率简单任务优先用便宜的小模型只有复杂决策才走大模型这就是模型路由。5.3 不稳定性和回归保护概率性系统的宿命就是不稳定。同一个问题今天跑能过明天跑可能就有不同路径。我的经验是要建立“双保险”机制一层是结果校验器在Agent的出入口跑规则校验比如订单表必须字段完整、测试报告必须有关键指标、SQL执行结果必须符合预期。另一层是版本化回归集把过去所有成功案例固化成回归样本每次改了Prompt、工具、模型以后批量跑一遍看通过率有没有下降。通过率低于阈值就不允许上线。这套机制和自动化测试里的回归测试思路一模一样等于用自动化的方法治理智能体。5.4 权限、安全与审计让模型控制浏览器、执行SQL、调支付接口权限给小了不好用给大了就是事故。我现在的规范是最小权限原则每个工具只开放完成任务所需的最小Scope敏感操作双人复核所有调用链可审计每个Agent的每步操作都落库。这样即使模型傻了造成的破坏也可控、可回滚、可追责。6. 我的个人体会说了这么多回到开头那个词范式跃迁。我做了十几年软件架构经历过从单机到服务化、从服务化到容器化的两次转型但这次从自动化到智能体的转型给我的冲击最大。前两次转型换的是技术组件思维方式没变——都是想方设法把“确定的东西”做得更快更稳这次转型换的是分工本身你从“写流程的人”变成了“定目标和边界的人”身份变了心态就得跟着变。有一次调试那个订单抓取Agent我看着它在一个页面布局完全改版的网站上自己调整策略找到了导出按钮那一瞬间我心里挺复杂的。一方面为它解决了长期痛点而高兴另一方面也意识到我过去引以为傲的“什么都写成稳定脚本”的能力正在变成一件退居二线的事情。但后来我想通了脚本能解决的问题永远只是问题的一小部分真正有价值的是理解业务、拆解目标、设计约束这些恰恰是模型永远替代不了的部分。最后再分享一个小技巧。如果你准备在团队里推智能体架构先别急着定技术栈找一条最痛的业务线用两周时间做一个最小闭环拿结果说话。当业务方看到“这个Agent自己能处理八成异常只需要人工处理那两成”的时候根本不需要你讲什么范式跃迁他们会主动来问你下一步怎么推广。智能体的价值永远是做出来让人看见的不是规划出来的。
返回列表