【 别再把逻辑全塞给LLM:后端做Agent的架构决策方法论】 📅 2026/7/19 3:16:40 注文中TCC指我们日常用的动态配置中心。在刚入行做后端开发的时候的黄金准则核心稳定、不怎么变的逻辑老老实实写死在代码里比如参数校验、权限拦截、接口调用逻辑经常要改、运营产品天天调的规则全扔TCC配置中心里比如活动规则、流控阈值、黑白名单、提示文案这套「代码TCC配置」的二分法我一直在用写过活动规则配过限流降级开关搞过风控敏感词拦截从来没翻过车——直到最近我业余时间自己折腾写个小Agent玩被按在地上摩擦了大半个月。一、自己造Agent玩我两周改了5版最近闲下来想写个自己用的代码审查小助手输入我写的代码片段自动帮我找bug、给优化建议、补注释还能帮我写单测不追求实用性只为了尝试一下agent开发我下意识就按老经验拆分了硬编码层代码解析逻辑、单测生成的固定模板、工具调用逻辑全部写死在代码里TCC配置层把代码审查规则全放里面比如SQL语句必须加参数占位符“循环里不能查数据库”诸如此类测试使用我寻思这和之前做活动规则配置没区别啊以后想到新的审查规则直接加配置就行不用改代码重启。结果调了两天就发现不对我写了个Go的goroutine泄露的代码配置里我只配了协程要加WaitGroup没配channel未关闭会导致泄露小助手直接返回代码没有问题我自己看了半天才发现漏了规则。立马补上这条规则过两天写Python代码的时候又卡壳配置里都是Java的规则Python的缩进问题、GIL锁相关的问题它完全不知道我又得往配置里堆Python规则堆了几十条还是漏。后来我破罐子破摔把配置里的规则全删了让LLM自己想怎么审查结果更离谱我写了个正常的工具类它给我扯了一堆分布式事务、微服务治理的优化建议完全不沾边甚至有时候还会把我正确的业务逻辑改错说我写的不符合阿里Java开发规范根本不管我写的是脚本。那段时间我白天上班写业务晚上回家改Agent两周提交了5个版本越改越混乱要么规则配不全覆盖不了场景要么全交给LLM就瞎给建议。我摸鱼的时候想破头这套我用了两年的黄金准则怎么自己写个小玩具都不好使了二、用了两年的二维模型为什么突然失灵了我翻了之前做过的所有项目突然发现之前的方法之所以好用是因为所有场景都满足一个我从来没意识到的前提输入可穷举、流程可预定义、Schema是封闭的。不管是做活动规则还是风控拦截我在写代码/配TCC的时候总能把所有可能出现的情况列出来活动规则无非就是满减、折扣、优惠券几种组合字段固定判断逻辑固定风控敏感词无非就是提前录入的词库匹配到就拦截输入输出都是固定的我们常用的SPI扩展点、策略模式、规则引擎本质上都是这个逻辑不管你怎么扩展、怎么配置接口是提前定义好的输入字段是提前写死的能处理的场景是开发者提前想到的——我把这种灵活叫做「假灵活」灵活的范围早就被圈死了。但我自己写这个代码审查Agent面对的场景完全不一样输入是开放的我可能给它传Java、Go、Python、Shell甚至是SQL代码可能是业务逻辑、可能是工具类、可能是并发代码我就算想破头也不可能在配置里枚举完所有语言、所有场景的审查规则流程是动态的审查并发代码要重点看锁、协程泄露审查数据库代码要重点看SQL注入、索引命中审查工具类要重点看兼容性审查步骤根本没法提前画好固定流程图输出是不固定的有时候要给bug修复建议有时候要补注释有时候要写单测有时候要做性能优化根本没法提前固定输出格式我之前一直用两个维度做决策复杂度逻辑难不难出问题影响大不大变更频率逻辑改得勤不勤发版成本高不高但这个二维模型有个致命缺陷它区分不了两类完全不同的逻辑一类是复杂但死板比如TCC配置的解析逻辑、订单状态机流转实现起来难风险也高但流程100%固定半分都不能变一类是复杂且灵活比如代码审查的判断逻辑、自然语言意图理解哪怕逻辑看起来简单你也永远枚举不完所有可能的情况之前做公司业务的时候后一类逻辑占比不到5%靠人工兜底就过去了我从来没意识到需要单独把它拎出来但自己做Agent的时候这类逻辑占了一半以上二维模型彻底不够用了——我缺了第三个维度。三、第三维度灵活度我把这第三个维度叫做「灵活度」定义很简单这块逻辑能不能处理我开发时根本没预想到的未知场景。三个维度的边界非常清晰完全不重叠复杂度是静态属性逻辑本身难不难出问题影响有多大变更频率是时间属性逻辑多久改一次改的成本高不高灵活度是行为属性能不能适配没见过的新场景要不要动态做决策我之前最大的认知误区就是把复杂度和灵活度划等号后来才发现这俩完全是两回事高复杂极低灵活之前做过TCC配置中心的推送逻辑优化前前后后写了半个月要考虑网络抖动、顺序一致性、灰度放量复杂到爆炸但流程100%固定半分都不能灵活乱序就可能导致配置错推引发故障低复杂极高灵活我给Agent加的闲聊功能逻辑简单到就调一下大模型接口但用户可以和它聊任何内容从问代码问题到问今天吃什么根本不可能枚举完所有回复还有个反常识的点高灵活的系统一点也不简单。我之前以为把逻辑扔给LLM就完事了结果复杂度只是从「写固定审查规则」转移到了「防幻觉、做边界兜底、校验输出格式、控制建议范围」上一点也不比写硬编码轻松这也是我踩了无数坑才明白的道理。为了方便判断我把灵活度分成了三级拿到任何一块逻辑问三个问题就能定级L0 低灵活开发的时候能100%枚举完所有输入、路径、输出比如参数校验、TCC规则解析没什么好说的L1 中灵活输入枚举不完但执行路径、输入输出Schema是固定的比如多语言代码解析、不同类型单测的模板生成靠插件/策略就能覆盖L2 高灵活输入完全开放执行路径要动态生成输出也不固定比如代码问题识别、优化建议生成、多轮对话答疑根本没法提前枚举完四、三维决策矩阵写代码、配配置还是交给LLM踩坑踩多了也就总结了一套决策表复杂度变更频率灵活度应该用什么方案日常场景举例任意任意L0硬编码代码解析逻辑、输出格式校验、配置文件解析、工具调用封装、高危操作拦截低高L0/L1配置/规则引擎通用审查规则、敏感词、提示词模板、黑名单、默认兜底话术中中L1插件/策略模式/工作流多语言解析器、不同类型代码的固定检查流程、单测模板生成任意任意L2LLM/Agent动态推理代码问题识别、优化建议生成、自然语言理解、多轮对话答疑我后来用这套方法把我的代码审查小助手重构了一遍三层逻辑拆得明明白白硬编码层L0代码解析封装、输出Markdown格式强制校验、工具调用逻辑、越权操作拦截——这部分改完之后到现在一个多月没动过配置层L0/L1通用代码规范规则、禁止生成的危险代码片段、不同语言的基础提示词模板、功能开关——我自己随时改配置文件就行不用动核心代码LLM动态层L2识别代码语言和类型、动态选择适用的审查规则、生成针对性的优化建议、回答我关于代码的疑问——这部分完全交给大模型自由发挥不做硬限制但是有硬编码层兜底绝不会出现乱改正确逻辑、给无关建议的情况。重构之后效果特别明显之前两周改8版现在一个多月只改了2次核心逻辑审查建议的准确率从最开始的50%多升到了90%以上再也没出现过给分布式事务这种离谱建议的情况。这里特别想说一个做Agent最核心的原则我踩了无数坑才明白灵活度必须被锁在硬边界里。不管LLM怎么推理绝对不能绕过配置里写的禁止危险代码规则绝对不能跳过输出格式校验不符合要求就直接重试或者返回兜底结果——没有任何一个能用的Agent是100%灵活的三层配合才是真的稳。五、几个踩过的坑我这大半个月踩的坑比之前半年写业务都多列几个最容易踩的大家自己玩Agent的时候别再走弯路别过度灵活别什么逻辑都扔给LLM该硬编码的地方绝对不要省固定规则比大模型靠谱多了。别灵活不足也别啥都想往配置里塞我最开始想把所有可能的代码问题都枚举成规则配到文件里配了一百多条发现永远有新问题累到吐血还覆盖不全。别模糊边界一定要把三层边界划清楚LLM绝对不能碰硬编码层的逻辑比如不能直接修改我的代码文件不经过备份校验。灵活度不是越高越好每一级灵活都有代价硬编码最稳最快成本最低配置化次之LLM推理速度慢、API花钱、还有幻觉风险。涉及到文件修改、数据写入这类操作哪怕再需要灵活也必须加硬编码校验稳永远是第一位的。六、总结硬编码不会被替代配置也不会被替代LLM更不会替代谁三者是叠加的关系硬编码保核心稳定配置化提迭代效率LLM扛那些之前靠人工想、没法穷举的开放场景。之前mt教我写代码只需要判断「这块逻辑写代码还是配TCC」现在我自己写小玩具多问一句「这块逻辑灵活度是多少要不要交给大模型动态处理」写出来的东西就稳多了。AI从来不是来颠覆我们这些普通后端的它就是给我们工具箱里多添了一把锤子而已——别拿着锤子看什么都是钉子该用螺丝刀的时候还是得用螺丝刀。我也还在踩坑学习中这套方法肯定有不完善的地方欢迎大家一起交流~