前言很多技术文章会直接说Agent就是用工作流编排大模型。不少开发者会产生误解工作流是AI Agent独有的技术。但实际上工作流、状态机、流程引擎在传统业务系统早已大规模落地OA审批、订单流转、售后工单都是典型工作流。LangGraph这类Agent框架底层本质依旧是状态机技术同源但解决的核心矛盾、风险点、设计目标完全不一样。大量资料把普通业务工作流和LLM Agent工作流混为一谈导致开发者对Agent特有的State状态污染、提示注入绕过流程、死循环风险理解不到位。本文对比传统业务工作流与Agent工作流厘清拓扑结构、运行时路径、条件分支的本质差异同时给出生产环境安全最佳实践。一、普通业务系统工作流OA/订单状态机代表场景订单状态流转、企业审批流。核心特点1. 输入、规则全部由开发者预先写死流转逻辑、分支条件全部硬编码每一步去往哪个节点由程序赋值的结构化状态字段驱动。示例流转待付款 → 已付款 → 已发货 → 已完成提交申请 → 经理审批 → 总监审批 → 通过/驳回分支判断示例if(status PAID){...}全部为业务代码。状态字段由程序赋值外部输入无法直接修改状态控制流程跳转。2. 不确定性极少异常来源大多是网络异常、数据库异常等系统层面故障业务流转路径是可穷举的。3. 核心目标编排已经写好的业务步骤负责状态持久化、事务回滚、任务重试执行人类预先定义完备的业务逻辑。简单概括规则人写死引擎只负责执行。二、LLM Agent工作流LangGraph StateGraph底层依旧是状态机工作流引擎但是引入了一个不可控的参与者LLM大模型黑盒。AI工作流的本质给不可控的大模型行为套上笼子实现动态决策、自我修正、强制收敛。Agent工作流独有的痛点传统业务几乎遇不到1. LLM输出不稳定需要运行时循环自我修正大模型会幻觉、回答不全、输出错误。业务期望调用工具补全信息 → 重新生成内容 → 审核校验 → 不合格就修订循环迭代直到输出合格结果。传统业务代码出错属于Bug需要修改代码修复不会在运行时自动循环修正自身输出。2. 部分决策逻辑交给LLM不再全部硬编码传统工作流所有if分支全部写死在代码Agent工作流支持把分支判断交给大模型输出结果驱动。风险随之而来State状态不再只有业务代码可以写入LLM也可以写入状态字段由此诞生Agent特有漏洞状态污染提示注入绕过流程节点。传统业务工作流不会把状态写权限交给黑盒外部组件几乎不存在这类安全问题。3. 运行路径无法预先完全枚举循环次数未知OA审批流程路径固定可数但是用户提问千变万化有的问题直接回答有的需要搜索有的需要多轮修订。编码阶段无法预知会循环多少次框架必须提供最大轮次保护防止LLM逻辑异常造成死循环。4. 混合编排代码节点 LLM节点共存代码节点Java实现工具调用、数据库读写、业务计算LLM节点大模型生成、模型判断工作流统一处理两类节点异常捕获、退避重试、状态持久化、断点恢复。三、误区澄清为什么AI Agent需要工作流❌错误观点工作流是AI专属技术。✅正确观点普通业务系统早已广泛使用工作流/状态机。但是LLM输出不确定、存在幻觉、部分决策由模型输出驱动给AI系统带来额外刚需循环迭代修正、动态条件分支、最大轮次防死循环、状态隔离校验、失败重试、断点续跑。仅靠普通顺序代码 if‑else 手写循环很难妥善处理LLM带来的不确定性。反例不使用LangGraph手写Java实现修订循环// 伪代码手写Agent revise‑review循环String answer llm.generate(query);for(int i 0; i MAX_ROUND; i){boolean pass llm.review(answer);if(pass) break;answer llm.revise(answer);}return answer;看起来实现了修订循环但工程上坑非常多需要自行实现中间状态持久化服务中断之后无法断点恢复LLM调用的超时、限流退避、异常重试全部自己封装业务复杂之后多层嵌套循环代码迅速臃肿难以维护安全风险循环判断flag由LLM输出控制极易被Prompt注入直接break跳过审核逻辑手写很难实现每一条分支出口的白名单校验。LangGraph这类框架就是标准化解决上述通用问题状态持久化、条件边、分支校验、最大轮次限制、节点重试、断点续跑。四、关键概念区分图拓扑结构 VS 运行时执行路径很多开发者混淆这两个概念这是理解Agent不确定性的核心。对象是否确定说明工作流图拓扑节点、边、跳转目标✅完全确定代码定义死有哪些节点、循环跳转到哪个目标节点运行时不会新增节点运行时行为是否走循环、循环多少次、选择哪条分支❌不确定由LLM运行时输出决定举个例子定义拓扑generate → reviewreview条件边不通过跳回revise修订节点通过直接结束。拓扑是写死的不通过就必须回到revise跳转目标固定。但是运行时用户问题简单review一次直接结束模型幻觉严重revise‑review来回循环3次问题极难循环触达最大轮次阈值强制退出。Agent不是无约束自由跳转流转被锁死在预先定义好的图拓扑之内不确定性体现在在允许的路径集合里由LLM动态选择走哪条分支、循环多少轮。和普通while循环本质区别普通Java while/for循环也可以做到不确定循环次数。核心差异不在于循环语法本身而在于条件判断的数据来源。1. 普通业务循环条件来源于业务代码计算boolean ok codeCheck(answer); // 纯业务代码逻辑不受黑盒输入污染while(!ok){ ... }判断逻辑完全可控不存在幻觉、提示注入风险。2. Agent典型循环条件判断来自LLM黑盒输出boolean ok llmJudgeReview(answer); // 判断结果来自大模型输出while(!ok){ ... }LLM是不可控黑盒会幻觉、会被提示注入篡改判断结果甚至篡改State路由字段绕过关键节点。因此框架必须配套最大轮次防死循环、状态路由白名单校验、LLM调用重试。五、LangGraph条件边两种模式LLM判断 vs 纯代码判断addConditionalEdges是LangGraph实现分支跳转的核心API框架本身不强制使用LLM做判断两种模式可以独立使用也可以混合。模式1交给LLM做条件判断典型Agent场景带来安全风险条件边内部调用大模型由模型输出决定下一个节点。workflow.addConditionalEdges(review,edge_async(state - {// 条件判断交给LLM黑盒String llmJudge llm.call(state.get(answer));if (不通过.equals(llmJudge)){return revise;}else{return end;}}),Map.of(revise,revise, end, END));风险点LLM幻觉输出错误判断Prompt注入场景模型输出伪造结果跳过审核直接结束流程若设计为LLM直接把next_node写入State风险会进一步放大。模式2纯Java代码做条件判断等价传统业务状态机条件边完全不调用大模型全部逻辑手写代码没有Agent特有安全漏洞。workflow.addConditionalEdges(review,edge_async(state - {// 纯Java业务逻辑无任何LLM调用int errorCount state.value(error_count).orElse(0);if(errorCount 3){return end;}else{return revise;}}),Map.of(revise,revise, end, END));模式3生产常用混合模式LLM做业务判断代码做安全兜底LLM负责业务语义层面判断Java代码负责强制约束、安全兜底这是生产环境推荐写法。workflow.addConditionalEdges(review,edge_async(state - {// 1. LLM输出业务标记Boolean llmNeedRevise llm.judge(state);// 2. Java强制兜底最大循环轮次防止死循环int round state.value(round).orElse(0);if(round 5){return end;}if(llmNeedRevise){return revise;}else {return end;}}),Map.of(revise,revise, end, END));六、生产安全最佳实践规避State状态污染风险根源LangGraph本身框架不带安全漏洞风险来自我们把路由判断权力交给LLM黑盒。❌禁止让LLM直接输出节点ID(next_node)写入State状态条件边读取该字段直接跳转。✅推荐LLM只输出业务语义标记例如need_revise:true/false路由跳转决策逻辑保留在Java代码层。✅Java层增加多重防护最大循环轮次强制限制杜绝LLM异常导致死循环对读取到的路由标记做白名单校验只允许配置内的节点跳转State字段做权限隔离区分「LLM可写入字段」和「代码独占的路由控制字段」敏感路由字段不开放给LLM写入。条件分支优先代码兜底LLM输出仅作为业务参考依据不要作为唯一判断依据。七、总结普通业务工作流规则全部由人编码定义工作流只负责执行风险来自系统故障。LLM Agent工作流底层依旧是状态机图拓扑结构确定运行时路径不确定工作流核心作用是约束、驯化、收敛大模型带来的不确定性。Agent独有的State污染、提示注入绕过流程漏洞根源不是LangGraph框架本身而是将分支判断能力交给不可控的LLM黑盒。生产实践LLM输出业务信号代码掌握最终路由决策权做好兜底校验是规避Agent流程安全问题的核心方案。
阅读完成 · 觉得有帮助?