资讯动态

通用Agent终结传统软件架构:“大脑+技能+护栏”三层模型深度拆解

发布时间:2026/10/20 8:05:35 来源:尧图企业网站定制
这几年做企业级系统设计我越来越觉得一件事不对劲我们花了大量精力在“流程引擎”“规则引擎”“状态机”上结果每个新需求来了还是要从需求文档一路拆到数据库表、接口、页面然后排期、开发、测试、上线。而通用Agent出现之后这套“写死逻辑再缝缝补补”的套路开始露馅了。如果你也在做架构或者带团队应该能感受到这波冲击——传统软件架构正在被一种极简范式重构所有软件最终只剩“大脑技能护栏”。这篇文章我想把这件事说透为什么通用Agent会终结我们熟悉的软件形态“大脑技能护栏”到底长什么样、怎么落地、有哪些坑。不管你是后端架构师、产品经理还是刚入行的开发者读完之后至少能判断出自己手里的系统哪些部分会被吃掉哪些部分还稳如磐石。1. 传统软件架构的基本盘为什么正在被终结1.1 传统架构的本质把一切逻辑提前写死传统软件架构的核心是“状态流程规则”。从最古老的单体应用到现在的微服务本质上都是把业务逻辑拆成有限的状态集合然后定义状态之间的流转条件。比如订单系统新建→待支付→已支付→已发货→已完成每一个状态转移背后都有一段代码——校验库存、扣减金额、发送通知。这种模式有一个隐含假设业务规则是稳定、可穷举的。我们约定好所有可能的路径然后把这些路径固化成接口、表结构、mq消息和定时任务。问题在于真实世界的业务规则从来不稳定。我见过一个积分系统初始需求只有3种积分获取方式上线一年后膨胀到40多种每个节日加一种每个活动加一种代码里全是状态判断和if嵌套最终变成谁都不敢动的“屎山”。这暴露了传统架构最脆弱的地方逻辑一旦写死灵活性就是负资产。你只能用“增加更多代码”去应对新需求而每一次增加都在提高系统复杂度和维护成本。软件的需求越来越偏向“模糊、多义、千人千面”而传统架构的应对方式却是“精确、固定、预先穷举”这两者之间的矛盾正变得越来越尖锐。1.2 通用Agent的颠覆点把“逻辑编写”换成“意图解释”通用Agent和传统软件的本质区别在于它把“逻辑”从代码里抽了出来放进了模型的推理过程中。传统系统是人先把逻辑告诉机器机器再严格执行Agent系统则是人告诉机器“我想要什么结果”机器自己决定“走哪条路径”。拿客服工单系统举例。传统做法是要么写死分类规则要么引入关键词匹配遇到新问题就要改代码加规则。换成Agent之后就简单了给Agent一个目标“把工单分派给最合适的处理人”再给它几个技能“查询工单内容”“查用户历史记录”“查处理人忙闲状态”然后Agent自己判断这个工单是投诉、是咨询、还是故障报修自己决定调哪个技能、按什么顺序调。这就是“终结”的真正含义终结的不是软件本身而是“所有逻辑必须预先写死”的软件形态。过去我们要维护一大堆if-else和流程节点未来只需要维护模型、技能和护栏。代码量可能缩到原来的十分之一系统的适应能力却更强。1.3 哪些系统暂时不会被终结哪些最危险别急着把口号当成万能药。有三个判断维度能帮你评估自己的系统第一逻辑稳定性。如果业务规则十年不变比如利率计算、汇率换算、物理公式计算那传统代码依然是最优解Agent反而画蛇添足。第二错误容忍度。涉及动钱、动数据的操作比如账户扣款、处方审核、设备控制这类系统会保留大量硬编码校验和人工审批Agent提供决策建议但最终执行依然要过“确定性关卡”。第三责任归属。出了事故要有人负责纯Agent自主决策在目前很难追责所以会有一层“人类确认”兜底。换句话说最先被重构的是那些“流程密度高、逻辑复杂度中等、允许试错”的系统客服、运营后台、数据分析、文档处理、内部流程审批、售前方案生成。最危险的系统不是没有技术含量而是逻辑复杂但规则变化极快、人工维护成本极高的那一类——恰恰是过去最让我们头疼的“屎山”。2. 拆解「大脑技能护栏」三层模型2.1 大脑不只是大模型而是意图决策中枢“大脑”层最常见的误解就是以为它等于“调一个大模型API”。实际操作中大脑要做的事远不止生成文字它要识别用户意图、拆解任务、编排子步骤、选择技能、在失败时重新规划路径。一个合格的“大脑”至少包含四部分意图识别器判断用户想要什么、上下文管理器记住当前会话和历史状态、任务规划器把大目标拆成小步骤、技能调度器决定下一步调用哪个技能。落到工程实现上就是“大模型少量策略代码”的组合大模型负责泛化理解策略代码负责约束路径。我在一个模拟项目X里做过对比纯用大模型自由发挥任务的失败率在30%左右因为模型经常会“自由发挥”到不该去的地方加上一层非常简单的“策略路由”之后成功率直接提升到85%。这个策略路由其实就是几段硬编码的if——比如“如果用户身份是管理员优先执行权限查询技能如果是普通用户先判断是否需要升级权限”。大脑的关键不是模型多聪明而是你能设计出多少种“模糊意图到具体技能”的映射规则。另外要特别提醒大脑上下文的长度管理是个隐形炸弹。Agent做多步任务时每一步的中间结果都往上下文里塞很容易爆掉。我通常的做法是把交互过程切成三段用户原始输入保留、当前步骤状态保留最新、历史中间结果只保留摘要。这段设计直接决定Agent能不能连续稳定跑完一个中型任务。2.2 技能把一切外部能力“动词化”技能层解决的是“Agent能做什么”的问题。任何外部能力——查数据库、调第三方接口、发消息、改文件、算价格——都要封装成“技能”让大脑能动态发现和调用。封装技能有几个硬性要求首先每个技能要有清晰的描述并且描述里必须写清楚“这个技能的边界和反例”。比如一个“订单查询”技能描述里不仅要写“能查订单状态、金额、物流”还要写“不能修改订单不能申请退款不能处理已删除订单”。没有边界描述的技能等于让Agent在悬崖边开车。其次技能的输入输出要有严格的schema。我见过不少初学Agent的人技能定义得特别随意参数想传就传结果Agent经常给一个技能传入一堆无关参数。用JSON Schema或者TypeScript接口定义好每个技能的入参和返回结构能过滤掉绝大多数低级错误。最后技能的粒度要适中。太粗——比如一个“处理订单”技能内部逻辑依然是屎山太细——比如“计算折扣”“计算税费”“计算运费”各建一个技能Agent编排时步骤过多效率低且容易出错。我的经验是技能应该对应一个“业务语义完整的动作”比如“创建订单”“取消订单”“计算订单金额”而不是“插入一行数据库记录”。2.3 护栏让Agent在轨道上狂奔护栏层是整套架构里最容易被忽视、但却是“能上线”和“不能上线”的分水岭。没有护栏的Agent就像一个没有边界感的新员工能力再强也不敢放手用。护栏分四层。第一层是权限护栏Agent只能调用它角色允许的技能。比如客服Agent不能调用退款技能只能调用“提交退款申请”技能且申请要进人工审核池。第二层是操作护栏高危操作删除、批量、金额变动、发外部消息必须设置二次确认断点Agent执行到这一步要停下来问用户“你确认要执行这个操作吗”。第三层是内容护栏Agent生成的内容不能包含违规信息、不能承诺系统能力之外的保证比如“保证24小时内退款”这种话要拦截。第四层是审计护栏每一步决策和操作都要落日志方便回溯和追责。有一个重要经验护栏要用代码写死不要交给模型判断是否遵守。如果你让Agent自己判断“这个操作是否安全”它大概率会在某些边角场景翻车。正确做法是冗余校验Agent可以提出“要退款”但“是否真有退款权限”必须由一个独立的权限服务来判定Agent根本碰不到判断逻辑。3. 实操拆解把一个传统系统改造为Agent架构3.1 改造目标与准备工作为了不空谈理论我用一个真实的模拟项目来说话。某公司有一个内部资产领用审批系统传统架构是前端表单→后端接口→审批流引擎→库存服务→通知服务。痛点很明显审批规则变来变去领导出差没法审批时要各种特殊通道月度盘点对不上账。改造目标不是推倒重来而是把“审批决策”和“资产信息查询”这两块变成Agent能力保留“库存扣减”“财务记账”等确定性操作不动。先明确哪些逻辑可以被Agent接管哪些不能动这是改造前最重要的一步——确定性操作永远留在传统代码里Agent只做需要理解和判断的部分。具体分工是这样的库存扣减、账务登记继续走原有服务但把这些服务包成技能审批判断交给Agent由它读取申请人信息、资产库存、审批人状态给出“同意/拒绝/转人工”的决策建议最终推送给原审批人确认。3.2 技能注册表设计我先把系统里所有可复用能力整理成一张“技能注册表”格式参考OpenAPI风格但精简到只保留必要字段skills: - name: get_asset_stock description: 查询指定类型资产的实时库存数量。反例不能用于查询已领用历史、不能预测补货时间。 input_schema: type: object properties: asset_type: type: string enum: [laptop, monitor, phone, desk] output_schema: type: object properties: stock_count: type: integer available: type: boolean - name: get_user_asset_history description: 查询指定员工的资产领用记录。用于判断是否超量领用。反例不能查询其他无关员工的隐私信息。 input_schema: type: object properties: user_id: type: string output_schema: type: object properties: records: type: array items: type: object - name: submit_asset_request description: 提交一条资产领用申请进入人工审批队列。 input_schema: type: object properties: user_id: type: string asset_type: type: string reason: type: string output_schema: type: object properties: request_id: type: string status: type: string设计这套注册表时最费心思的是description的编写。好的描述本身就是护栏的一部分它告诉Agent这个技能在什么场景下用、什么场景下不能用比事后加校验巧妙得多。我把每个技能的description都写了两遍先写“能做什么”再补一句“反例/不能做什么”实测下来Agent误调用的概率直线下降。3.3 大脑路由的搭建大脑层负责接收自然语言命令决定走哪个流程路径。我的实现方案是“模板路由模型兜底”双通道模板路由先做一层关键词和规则的匹配命中高频场景就直接走对应流程比如用户说“我要领一台笔记本”直接解析出asset_typelaptop进入领用流程。这层速度快、成本低能覆盖70%的场景。模型兜底模板没命中或者命令模糊时再派大模型出来理解意图输出一个结构化的行动计划。这段路由逻辑我用Python的伪代码来表达def route_request(input_text, user_profile): # 第一层模板匹配 matched template_matcher(input_text) if matched: return matched # 第二层模型兜底 plan llm_parse_intent(input_text, skills_schema, user_profile) # 定义意图为结构化指令 return normalize_plan(plan)关键在normalize_plan这一步。模型可能输出“先查库存再查历史然后提交申请”但要拿到真正能执行的参数还需要把用户上下文里的信息填进去。比如用户说“帮我领一台笔记本放在3楼会议室用”模型能识别出asset_typelaptop但“3楼会议室”属于位置标签需要映射到reason字段。这种细节处理决定了Agent返回的结果是一个“能直接执行的指令”而不是一段“看起来像那么回事的文字”。3.4 护栏配置清单改造过程中我给系统配了三道护栏。第一道是权限白名单Agent只能调用注册表里声明的技能任何不在清单内的调用直接拒绝。实现上就是一个简单的服务间调用白名单在网关层做过滤。第二道是操作确认点所有提交类操作比如submit_asset_request在执行前强制要求Agent输出一个“执行意图卡片”上面写明“用户是谁、申请什么、理由是什么”然后推给前端让用户点击确认。这一步是为了防止Agent在用户没有明确同意的情况下擅自动作。第三道是审计日志每条请求从进入到完成生成一个trace_id贯穿始终每一步Agent的推理摘要和技能调用参数全部落日志。配置完护栏我顺手做了一个压力测试模拟用户反复用模糊话术试图绕开限制比如“直接帮我搞一台电脑不用走流程”。Agent的回复是“我需要您的申请理由才能提交且提交后会进入人工审批队列无法跳过”。这个结果让我确定护栏层真正起了作用。3.5 改造后的效果对比上线灰度跑了两周数据对比很直观典型的申请流程从平均一天缩短到几分钟原来审批流引擎里的几十条分支规则现在收缩到不到十个技能和四条路由规则新增“临时借用”“项目用资产”这类需求时不用改代码只要在技能注册表里加一个描述就行。当然也有代价传统流程每一步都可预期、可测试Agent流程在测试上要换打法——不再是一把梭测试所有路径而是重点测试意图识别准确率、技能调用成功率和护栏拦截率。这个转变很多团队一时半会儿适应不过来。4. 常见问题与排查技巧实录4.1 Agent“自作聪明”调错技能最常遇到的问题Agent没有按照你设想的方式使用技能。比如用户说“我的笔记本坏了”Agent直接调用了submit_asset_request跳过了历史查询和库存查询。根源在于技能选型逻辑不够清晰。排查的思路是打开一次完整日志看Agent当时的推理过程。你很快就会发现问题出在技能描述上——“笔记本坏了”这个语义和“提交申请”之间的连接太弱模型不知道应该先查保修状态。解决方法是给技能描述补充触发条件“在收到资产损坏类请求时必须先调用历史记录查询技能判断是否在保修期内只有超过保修期或无法维修时才能提交新领用申请。”说白了Agent的边界和协作规则要写进技能描述里而不是指望模型自己悟出来。4.2 多步任务跑到一半就断Agent跑三步只走了两步然后输出“操作完成”就是典型的“半途而废”。断点一般有两个一个是模型上下文被塞爆前几步的信息被挤掉它忘了自己还在执行一个多步任务另一个是某个技能调用报错模型没有重试机制直接放弃。针对第一种我把上下文管理器改成了“状态槽位”模式每一步只保留当前任务所需的参数和上一步的结果摘要不再累积所有历史。针对第二种给每个技能调用加了超时、重试和降级逻辑重试两次仍然失败就切换备用技能比如库存查询失败时改为查询“资产总表”。这里要强调的是Agent的错误处理必须显式编码不能交给模型自由发挥。4.3 护栏太严业务就别想顺畅了护栏设多了Agent变成了“每一步都要问用户确认”的复读机体验奇差。我见过一个内部工具一个简单的查询操作都要用户确认五次用的人骂声一片。后来我做了分级护栏只读类操作比如查库存、查记录不设置确认点但依然记录审计日志写操作类比如提交申请只确认一次高危操作比如批量删除、金额变动、对外发送消息必须二次确认且需要审批人单独授权。护栏的粒度要跟着操作的风险等级走不要一刀切否则系统的可用性会被自己人骂没。4.4 测试标准失灵不知道Agent该不该算通过传统系统的测试用例是“输入A输出B”Agent系统的输出具有不确定性同一句输入可能给出两种合理的回复。这就让测试团队很抓狂。我的解决方式是引入“行为契约测试”替代传统的断言测试。针对每个技能定义“前置条件→动作→期望结果”的契约。比如“用户已登录且库存充足提交领用申请后技能返回request_id且status为pending”。针对整个流程定义“正确路径覆盖测试”和“危险路径拦截测试”——前者确保正常场景能走通后者确保违法操作一定被拦。每一个测试用例不再是比对字符串而是比对“是否满足了行为契约”。这种调整需要测试团队转变思路但对Agent架构来说这是唯一可持续的质量保障方式。5. 一些想留给你的经验我最近在做一个新项目把所有业务规则都拆成了技能描述发现最花时间的根本不是模型选型也不是技能代码本身而是技能描述怎么写得让Agent和人类都能看懂。描述写得好Agent自己就能完成八成的工作描述写得含混你就要在日志里陪它熬夜。另外还有个观察传统软件的“复杂度守恒定律”并没有消失只是转移了。以前复杂在代码逻辑里现在复杂在技能编排、护栏配置和测试策略里。架构师的活儿并没有变少只是换了一种形态。别以为用了Agent就不需要架构设计了——正好相反没有清晰架构的Agent系统会以更快的速度变成一团浆糊。如果你正准备把手里的系统往这个方向改造我的建议是先挑一个非核心、允许试错的流程开始把技能注册表和护栏机制跑通再往外扩。别一上来就想着把整个公司系统全部Agent化那只会让你在第一个月就怀疑人生。先让一个小流程稳定跑起来你会发现这套“大脑技能护栏”的思路确实比维护一整套写死的流程逻辑要舒服得多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑