当前位置: 首页 > article >正文

AI工程化设计(五)Agent设计范式(3)Workflow / 状态机

Workflow / 状态机让 Agent 从“能跑”变成“可控运行”一、介绍1. 什么是 Workflow / 状态机在 Agent 设计中Workflow / 状态机是一类非常“工程化”的范式。可以用一个直观的对比来理解ReAct边查边想Plan-and-Execute先规划再执行Workflow / 状态机先把流程图画清楚再按规则运行它的核心目标不是让模型更自由而是让系统更可控、更稳定、更可审计。2. 为什么企业场景特别需要它很多真实业务本质上就不是“自由发挥”的问题而是标准流程问题比如有固定步骤有审批节点有异常分支有状态流转有明确的进入和退出条件例如报销审批工单处理订单流转故障处理发布流程这些场景的共同特点是流程本身比模型能力更重要。如果没有明确的流程约束即使模型很强也可能出现跳步骤重复执行在错误阶段做错事高风险操作没有拦截中断后无法恢复无法追溯执行过程Workflow / 状态机就是用来解决这些问题的。3. Workflow 和状态机的区别简单但关键这两个概念经常一起出现但关注点略有不同Workflow流程编排关注“事情怎么走”步骤顺序并行 / 串行关系重试机制人工审批点更像流程图、任务编排图状态机State Machine关注“对象怎么变”当前处于什么状态什么条件可以进入下一个状态哪些动作在哪些状态才允许发生哪些是终态、异常态更像订单状态、工单生命周期一句话总结Workflow 关注“流程”状态机关注“状态”。在 Agent 系统中两者通常是结合使用的。4. 优缺点放在介绍里更直观优点可控性强不会乱跑易审计每一步都有记录易测试路径是确定的支持失败恢复从状态继续易接入权限控制和人工审批适合多人协作和系统集成尤其在高风险操作中比如付款、删数据、发通知优势非常明显。缺点前期设计成本高流程设计过细会变得僵硬对变化快的任务适应性较差状态一多维护复杂度上升不适合强探索型问题可以总结为它用“控制力”换“灵活性”。二、核心原理1. 把 Agent 从“生成文本”变成“状态驱动系统”这种范式的核心变化是Agent 不再是连续生成文本而是按结构化规则推进。一个最小模型通常包含State状态当前在哪个阶段Event事件触发变化的条件Transition转移状态如何变化Action动作进入状态后执行什么Guard条件是否允许转移可以抽象为当前状态 触发事件 条件判断 → 下一个状态 → 执行动作2. 和 ReAct 的本质区别两者最大的差别在于“决策权”ReAct每一步更依赖模型临场决定状态机每一步更多由预定义规则约束换句话说ReAct 问的是“接下来我该做什么”状态机问的是“我现在在哪个状态”三、两个典型例子1. 报销审批 Agent标准状态机状态定义draftsubmittedmanager_approvedfinance_reviewingpaidrejected状态流转draft → submitted → manager_approved → finance_reviewing → paid↘ rejected每个状态可以绑定动作submitted通知主管审批finance_reviewing校验发票paid发送打款通知rejected生成退回原因这里的关键是模型不能跳状态也不能越权操作。2. 客服工单 Agent更典型的 Agent 场景状态可能包括newclassifyingwaiting_for_userresolvingescalatedclosed流程大致是新工单进入系统自动分类信息不足则等待用户补充可自动解决则处理超出能力则升级人工最终关闭这种设计带来的好处是只有特定状态允许特定动作已关闭的工单不会被再次处理升级后的工单不会被 AI 擅自处理这在企业系统里非常关键。四、实践建议与常见坑1. 状态必须“工程化存在”一个非常关键但常被忽略的点状态不能只存在于 prompt 里必须持久化到系统中。否则你得到的不是状态机而只是“模型自以为记住了状态”。真正的状态机应该是可查询可恢复可审计可回放2. 常见设计坑下面这些问题在实践中非常常见1状态和动作混在一起状态应该表示“阶段”而不是“做了什么”。❌ 错sending_email✅ 对pending_notification2转移条件模糊如果没有明确条件系统会变得不可预测。3没有异常分支只设计“成功路径”忽略失败和中断。4没有超时和重试机制现实系统一定会有失败需要设计恢复路径。5没有人工接管入口高风险或复杂场景必须允许人介入。6状态过多或过细会导致系统难以维护。3. 一个最小状态机示例可以用一个简化代码理解state newwhile state not in [closed, rejected]:if state new:classify_ticket()state classifyingelif state classifying:if info_missing():ask_user()state waiting_for_userelif can_auto_resolve():state resolvingelse:state escalatedelif state waiting_for_user:if user_replied():state classifyingelif state resolving:resolve_issue()state closedelif state escalated:handoff_to_human()break这里的核心思想是不是一直问“下一步做什么”而是先判断“当前在哪个状态”。

相关文章:

AI工程化设计(五)Agent设计范式(3)Workflow / 状态机

Workflow / 状态机:让 Agent 从“能跑”变成“可控运行”一、介绍1. 什么是 Workflow / 状态机在 Agent 设计中,Workflow / 状态机是一类非常“工程化”的范式。可以用一个直观的对比来理解:ReAct:边查边想Plan-and-Execute&#…...

终极指南:text-generation-webui特殊标签与数学公式完美渲染技巧

终极指南:text-generation-webui特殊标签与数学公式完美渲染技巧 【免费下载链接】textgen The original local LLM interface. Text, vision, tool-calling, training. UI API, 100% offline and private. 项目地址: https://gitcode.com/GitHub_Trending/te/te…...

Go语言的runtime.MemProfile中的分析可视化

Go语言作为一门高效且现代化的编程语言,其内存管理机制一直是开发者关注的焦点。runtime.MemProfile作为Go语言内置的内存分析工具,能够帮助开发者深入了解程序的内存使用情况,而分析可视化则进一步提升了内存问题的诊断效率。本文将围绕runt…...

Oracle数据库里如何给中文做MD5加密?一个函数解决字符集转换的坑

Oracle数据库中文MD5加密的终极解决方案:彻底解决字符集陷阱 当我们在Oracle数据库中处理中文数据时,MD5加密可能会变成一个令人头疼的问题。想象一下这样的场景:你在Oracle中加密了一个中文字符串,然后在Java或Python中加密同样…...

Redis客户端连接监控终极指南:Redisson CLIENT LIST命令深度解析

Redis客户端连接监控终极指南:Redisson CLIENT LIST命令深度解析 【免费下载链接】redisson Redisson - Valkey & Redis Java client. Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and services: S…...

Qwen3-ASR-1.7B实战:一键部署Web界面,上传音频秒出文字

Qwen3-ASR-1.7B实战:一键部署Web界面,上传音频秒出文字 1. 模型概述与核心能力 Qwen3-ASR-1.7B是阿里云通义千问团队推出的开源语音识别模型,作为ASR系列的高精度版本,在识别准确率和多语言支持方面表现突出。相比前代0.6B版本&…...

保姆级教程:在Ubuntu 20.04上搞定Intel Realsense D435i驱动与ROS Noetic节点(含常见错误排查)

保姆级教程:Ubuntu 20.04 ROS Noetic环境下Intel Realsense D435i全流程配置指南 刚拿到Intel Realsense D435i时,你可能既兴奋又忐忑——这款集成了RGB、深度和IMU的相机能为机器人项目带来无限可能,但驱动安装和ROS集成过程中的各种"…...

终极小米社区自动化任务指南:免费解放双手的完整教程

终极小米社区自动化任务指南:免费解放双手的完整教程 【免费下载链接】miui-auto-tasks 一个自动化完成小米社区任务的脚本 项目地址: https://gitcode.com/gh_mirrors/mi/miui-auto-tasks 小米社区自动化任务工具是一款专为米粉设计的智能脚本,能…...

别再死记硬背了!用Python的combinations函数玩转数据组合,从抽奖到密码生成都能搞定

用Python的combinations函数解锁数据组合的无限可能 在数据处理和分析中,组合操作是一个常见但容易被低估的工具。Python标准库中的itertools.combinations函数提供了一种高效的方式来生成所有可能的组合,而无需手动编写复杂的嵌套循环。这个看似简单的函…...

OpenLayers 加载天地图服务踩坑记:手把手解决 EPSG:4490 坐标系与 axisOrientation 的 ‘enu/neu‘ 之谜

OpenLayers 加载天地图服务踩坑记:手把手解决 EPSG:4490 坐标系与 axisOrientation 的 enu/neu 之谜 作为一名长期与 WebGIS 打交道的开发者,最近在对接国内天地图服务时,遇到了一个令人抓狂的问题:明明已经按照标准流程注册了 CG…...

Simulink Autosar开发:手把手教你配置PortParameter实现参数通信(附ARXML解析)

Simulink Autosar开发:手把手教你配置PortParameter实现参数通信(附ARXML解析) 在汽车电子软件开发中,AUTOSAR标准已经成为行业通用架构。其中,参数通信机制是软件组件(SWC)间数据交互的核心功能之一。本文将深入探讨基…...

从分页计算到金额处理:盘点C#取整函数在真实项目里的5个高频应用场景

从分页计算到金额处理:C#取整函数的5个实战应用场景 在开发电商后台时,我发现一个有趣的现象:当用户浏览商品列表时,系统显示"共37件商品,每页10条,当前第4页"。这个简单的分页功能背后&#xff…...

【Flink实战指南】基于Table API与SQL Client的Catalog统一管理实践

1. 为什么需要统一管理Catalog? 在Flink的实际应用中,我们经常会遇到这样的场景:数据分散在不同的存储系统中,比如Hive、MySQL、Kafka等。每次操作这些数据时,都需要手动指定对应的连接信息,不仅效率低下&a…...

星穹铁道抽卡数据分析:3步掌握你的欧气规律

星穹铁道抽卡数据分析:3步掌握你的欧气规律 【免费下载链接】star-rail-warp-export Honkai: Star Rail Warp History Exporter 项目地址: https://gitcode.com/gh_mirrors/st/star-rail-warp-export 想知道你的抽卡运气到底怎么样吗?星穹铁道跃迁…...

番茄小说下载器终极指南:3步打造你的永久离线图书馆

番茄小说下载器终极指南:3步打造你的永久离线图书馆 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader fanqienovel-downloader 是一款强大的开源工具,专门用于下载番茄…...

如何通过游戏化编程轻松掌握代码技能?CodeCombat完全指南

如何通过游戏化编程轻松掌握代码技能?CodeCombat完全指南 【免费下载链接】codecombat Game for learning how to code. 项目地址: https://gitcode.com/gh_mirrors/co/codecombat 你是否曾经觉得学习编程就像破解一个复杂密码,枯燥的语法和抽象的…...

Docker技术入门与实战【2.0】

11.3 TomcatTomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下普遍使用,是开发和调试JSP程序的首选。Tomcat最初是由Sun的软件构架师詹姆斯邓肯戴维森开发的。后来在他的…...

Phi-3.5-mini-instruct快速验证:3条shell命令确认vLLM服务健康状态与可用性

Phi-3.5-mini-instruct快速验证:3条shell命令确认vLLM服务健康状态与可用性 1. 模型简介 Phi-3.5-mini-instruct 是一个轻量级的开放模型,属于Phi-3模型家族。它基于高质量的训练数据构建,包括合成数据和经过筛选的公开网站数据&#xff0c…...

Obsidian中完美播放B站视频的终极解决方案:Media Extended B站插件完整指南

Obsidian中完美播放B站视频的终极解决方案:Media Extended B站插件完整指南 【免费下载链接】mx-bili-plugin 项目地址: https://gitcode.com/gh_mirrors/mx/mx-bili-plugin 你是否厌倦了在Obsidian笔记中只能粘贴B站链接而无法直接播放视频的困扰&#xff…...

DOCA-OFED:高性能网络堆栈的进化与实战指南

1. 从MLNX_OFED到DOCA-OFED:网络堆栈的进化之路在数据中心和云计算领域,网络性能的优化一直是技术演进的核心课题。记得我第一次接触InfiniBand网络时,MLNX_OFED(Mellanox OpenFabrics Enterprise Distribution)作为行…...

避坑指南:UE5 Cesium加载本地3D Tileset时,模型位置跑偏了怎么办?

UE5 Cesium加载本地3D Tileset位置校正实战指南 当你在UE5项目中兴奋地导入精心准备的倾斜摄影模型,却发现它们像迷路的孩子一样散落在错误的地理位置时,这种挫败感我深有体会。去年在重建某历史街区数字孪生项目时,我们团队就曾为此耗费了两…...

如何利用AFL++进行高效模糊测试:发现软件漏洞的终极指南

如何利用AFL进行高效模糊测试:发现软件漏洞的终极指南 【免费下载链接】AFLplusplus The fuzzer afl is afl with community patches, qemu 5.1 upgrade, collision-free coverage, enhanced laf-intel & redqueen, AFLfast power schedules, MOpt mutators, un…...

告别虚拟机!手把手教你用WSL2+SDL在Ubuntu上跑通LVGL 9.0模拟器

告别虚拟机!手把手教你用WSL2SDL在Ubuntu上跑通LVGL 9.0模拟器 在嵌入式GUI开发领域,LVGL(Light and Versatile Graphics Library)凭借其轻量级特性和丰富的组件库,已成为许多开发者的首选。但对于Windows平台的开发者…...

Cesium标绘进阶:从静态Entity到动态Primitive的性能优化指南

Cesium标绘进阶:从静态Entity到动态Primitive的性能优化指南 当你的Cesium场景开始加载成千上万的动态标绘对象时,是否遇到过明显的性能下降?帧率骤降、交互卡顿、内存占用飙升——这些常见问题往往源于对Entity API的过度依赖。本文将带你深…...

ChanlunX缠论插件:让复杂的技术分析变得简单直观

ChanlunX缠论插件:让复杂的技术分析变得简单直观 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否曾为缠论分析的复杂性而头疼?面对密密麻麻的K线图,手动识别顶底…...

h5maker:3步搭建专业级H5页面,零代码实现营销创意

h5maker:3步搭建专业级H5页面,零代码实现营销创意 【免费下载链接】h5maker h5编辑器类似maka、易企秀 账号/密码:admin 项目地址: https://gitcode.com/gh_mirrors/h5/h5maker 还在为快速制作H5页面而烦恼吗?营销活动需要…...

告别“单车智能”瓶颈:用V2X技术让你的车“看见”红绿灯和行人(附国内试点城市清单)

V2X技术:让自动驾驶突破单车智能的感知边界 清晨七点半的上海内环高架上,一辆开启自适应巡航的轿车正以60公里时速行驶。突然,前方施工区域出现临时变道,传统雷达系统因视野遮挡未能及时识别——这是单车智能的典型困境。而在三公…...

你的手机能看Netflix高清吗?一个App快速查询Widevine L1/L2/L3等级

你的手机能看Netflix高清吗?一个App快速查询Widevine L1/L2/L3等级 每次打开Netflix准备追剧,却发现画面糊得像打了马赛克?这可能是你的手机Widevine等级在作祟。作为流媒体画质的隐形守门人,Widevine DRM的三个等级直接决定了你能…...

大数据平台的数据治理质量监控与元数据管理

大数据平台的数据治理质量监控与元数据管理 在数字化转型的浪潮中,大数据平台已成为企业核心竞争力的重要支撑。随着数据量的爆炸式增长,数据治理的复杂性和挑战性也日益凸显。数据治理质量监控与元数据管理作为保障数据价值的关键环节,直接…...

从面试官视角拆解:什么样的科研项目陈述能让导师眼前一亮?(附遥感/GIS/地信案例)

科研项目陈述的艺术:如何让导师在面试中记住你的研究价值 当二十多位面试者依次完成自我介绍后,导师们往往只对其中两三个人的项目陈述留有印象——这种现象在保研夏令营和考研复试中屡见不鲜。不同于简历上静态的文字描述,面对面的项目陈述是…...