工作流我们听得多,Agent最近也听得耳原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。朵起茧,把Agent当节点构建Agent【原创内容,转载请注明出处】【作者:唐霜】工作流也常见,但是我今天要向你展示的是,【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】用Agent作为底层框架来开发工作流。这著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】是一种新的开发模式,通过本文的探索,你会【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net看到一种新的开发范式的出现,并且你会在将【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】来对此习以为常。
【本文受版权保护】【版权所有,侵权必究】【转载请注明来源】本文作者:唐霜,转载请注明出处。传统工作流开发【关注微信公众号:wwwtangshuangnet】
本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】当我们讨论工作流时,往往会考虑业务流程。转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】当我们用代码堆出一大堆难以维护的业务逻辑【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】代码之后,迭代变得难以维系,此时我们就会【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net诉诸于工作流来解决我们的开发困境。从概念【转载请注明来源】著作权归作者所有,禁止商业用途转载。上讲,工作流(特别是业务流程)在于将复杂【转载请注明来源】本文版权归作者所有,未经授权不得转载。的业务逻辑显式地拆解为一系列预定义的、线【本文受版权保护】原创内容,盗版必究。性的或基于条件的步骤,并且用标准的统一语著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】言(Ubiquitous Languag著作权归作者所有,禁止商业用途转载。【转载请注明来源】e)来进行表达,并在最终落地为一套有流程【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.net图界面可供操作的系统。
【本文首发于唐霜的博客】【本文首发于唐霜的博客】【原创内容,转载请注明出处】【本文受版权保护】【本文首发于唐霜的博客】在我所经历过的几个工作流项目中,存在着这【原创内容,转载请注明出处】【本文受版权保护】样一对矛盾:业务团队希望所开发的工作流可【原创不易,请尊重版权】【本文首发于唐霜的博客】以完美适配团队业务现状,开发团队希望所开原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。发的工作流可以完美应付任何业务场景,而往【本文受版权保护】本文作者:唐霜,转载请注明出处。往业务团队和开发团队是一批人,他们总会在【转载请注明来源】未经授权,禁止复制转载。这对矛盾间纠结,以至于工作流系统开发进度【本文首发于唐霜的博客】【转载请注明来源】不及预期。
著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】【作者:唐霜】在所有标准工作流模式中,BPMN最为典型【未经授权禁止转载】未经授权,禁止复制转载。和知名,但除了BPMN以外还有一种也比较本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net知名的可用于构建业务流程模型的语言/符号【版权所有】唐霜 www.tangshuang.net【转载请注明来源】。它们主要有:
原创内容,盗版必究。本文作者:唐霜,转载请注明出处。【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。- BPMN(Business Proces【本文受版权保护】【作者:唐霜】s Model and Notation【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。,业务流程模型和符号):提供了一套标准化【未经授权禁止转载】【作者:唐霜】的图形符号,用于描绘流程中的活动(Act【本文受版权保护】【版权所有】唐霜 www.tangshuang.netivity)、网关(Gateway,如分【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。支或合并点)、事件(Event)和流向(本文版权归作者所有,未经授权不得转载。【作者:唐霜】Sequence Flow)。开发人员的【本文首发于唐霜的博客】原创内容,盗版必究。首要任务是与业务分析师一起,将现实世界的未经授权,禁止复制转载。【原创内容,转载请注明出处】业务逻辑转化为严谨的、可执行的BPMN图【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。。 【原创不易,请尊重版权】【原创内容,转载请注明出处】【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。
- 状态机(State Machine): 【本文受版权保护】【转载请注明来源】对于核心是实体状态转换的简单流程(例如文【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net档审批生命周期:草稿 -> 待审核【作者:唐霜】本文作者:唐霜,转载请注明出处。 -> 已拒绝/已批准),状态机模【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。型更为高效和直观。许多轻量级工作流框架(本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。如PHP生态中的Symfony Work本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。flow)正是基于有限状态自动机(FSM【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。)实现的。 【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】【转载请注明来源】
- UML活动图(UML Activity 未经授权,禁止复制转载。【原创内容,转载请注明出处】Diagram): 在软件工程领域,UM【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】L活动图常用于描述软件内部的控制流和数据【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】流,它在概念上与业务流程图相似,但更侧重转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】于程序行为而非跨部门的业务协作。 【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.net
- 事件驱动流程链(EPC,Event-Dr【版权所有,侵权必究】【作者:唐霜】iven Process Chain):【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net 尤其是在欧洲和SAP相关的环境中,EP【转载请注明来源】转载请注明出处:www.tangshuang.netC是一种早于BPMN的流程建模标准,它以【原创内容,转载请注明出处】【原创内容,转载请注明出处】事件(Event)和功能(Functio【访问 www.tangshuang.net 获取更多精彩内容】【版权所有,侵权必究】n)交替驱动流程的推进。 本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net
无论采用哪种建模方式,传统模式的共同点是【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】:流程结构必须在代码实现之前被预先定义、固化【本文受版权保护】,且运行中不可动态修改。著作权归作者所有,禁止商业用途转载。
【原创不易,请尊重版权】【未经授权禁止转载】【转载请注明来源】本文作者:唐霜,转载请注明出处。【未经授权禁止转载】知名的工作流引擎有 Activiti、F转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.netlowable 和 Camunda。这些原创内容,盗版必究。本文作者:唐霜,转载请注明出处。引擎负责解析BPMN模型、管理流程实例的【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。状态、执行任务分配(Task Assig原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.netnment)、以及持久化流程数据。基于这【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。些引擎,我们常常是把工作流系统和业务系统转载请注明出处:www.tangshuang.net【未经授权禁止转载】分开的,工作流系统独立部署,由开发人员与未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net业务人员一起发布各个流程图,发布之后,通原创内容,盗版必究。【本文首发于唐霜的博客】过订阅发布的形式与业务系统进行通信。一般【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】来说,工作流系统本身并不侵入业务系统,也【本文受版权保护】原创内容,盗版必究。不为业务系统提供特殊的业务逻辑,业务系统【未经授权禁止转载】【原创不易,请尊重版权】则把工作流系统作为第三方依赖,触发和订阅未经授权,禁止复制转载。【转载请注明来源】流程,从而实现自身业务状态的变化。但是,本文版权归作者所有,未经授权不得转载。【转载请注明来源】实际上,一般来说,这两套系统都是同一个开【版权所有,侵权必究】转载请注明出处:www.tangshuang.net发团队在管理,开发团队要为工作流系统的稳【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。定性负责,如果因为工作流系统挂掉了,导致原创内容,盗版必究。未经授权,禁止复制转载。业务出现故障,那么责任自己扛。
【访问 www.tangshuang.net 获取更多精彩内容】【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】作为前端,我常用的框架主要是bpmn2.转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net0和xstate这两个。从广义上讲,我们转载请注明出处:www.tangshuang.net【作者:唐霜】用的DevOps工作流也是符合这个范畴,转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。我在腾讯的时候,参与过早期的公司层面的D原创内容,盗版必究。原创内容,盗版必究。evOps工作流开发,后来这个项目逐渐演未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】变成了蓝盾和腾讯流水线。现在,一个非常知【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】名的工具N8N已经占据了整个工作流大半市【未经授权禁止转载】【作者:唐霜】场,而在AI创作领域,ComfyUI则是著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net绝对的不二选择。
本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。工作流这种模式,优势在于流程的可视化、可【转载请注明来源】转载请注明出处:www.tangshuang.net审计性强和执行可靠。然而,它的主要弊端在本文作者:唐霜,转载请注明出处。【作者:唐霜】于僵硬性和高昂的维护成本。流程中的任何微未经授权,禁止复制转载。【本文首发于唐霜的博客】小变动——无论是业务规则的调整、外部AP【本文受版权保护】【关注微信公众号:wwwtangshuangnet】I的变更还是新步骤的加入——都需要经历“【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net重新建模 -> 重新编译部署后端服本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。务 -> 重新修改前端代码”的漫长本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net周期。这使得传统工作流在面对快速变化的业著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】务需求或非结构化、需要灵活决策的动态场景【原创不易,请尊重版权】【本文首发于唐霜的博客】时,显得过于笨重和迟缓。
本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】因此,将显式的、预定义的流程,转化为自组【本文受版权保护】【版权所有,侵权必究】织、自适应的协作网络,这种新的工作流开发【原创不易,请尊重版权】未经授权,禁止复制转载。模式悄然崛起。
【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。【转载请注明来源】Agent驱动的工作流开发模式【关注微信公众号:wwwtangshuangnet】
【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netAgent驱动的工作流开发模式并非简单地【本文受版权保护】本文作者:唐霜,转载请注明出处。将Agent视为BPMN图中的一个“服务【作者:唐霜】转载请注明出处:www.tangshuang.net节点”,而是将其视为工作流的底层框架(F本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.netoundation),甚至是流程本身的运未经授权,禁止复制转载。【未经授权禁止转载】行时(Runtime)。这种范式从根本上【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net颠覆了“先建模,后执行”的传统思维,迈向【作者:唐霜】【本文受版权保护】了“先定义目标,后自组织执行”的新境界。
【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】【原创不易,请尊重版权】更为贴近现实写代码的角度的讲,这种模式彻著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.net底颠覆我们开发工作流的过程。你要把Age【转载请注明来源】【版权所有】唐霜 www.tangshuang.netnt当作底层的框架,类似Activiti著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】、Flowable那样的带有代码写作范式原创内容,盗版必究。【原创内容,转载请注明出处】的东西,也就是说,写代码的方式都会发生翻本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net天覆地的变化。利用Agent来重构业务流【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net程,作为开发者而言,可能需要做非常大的心未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。理建设。因为,我们以前那一套业务梳理、领原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。域模型、状态管理等等方法论,现在统统都不原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。需要了,它就像一个黑盒,但是是非常聪明且【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】准确率高的离谱的黑盒,像似里面住了一个巫未经授权,禁止复制转载。未经授权,禁止复制转载。师,你把你的业务规则和当前状态丢进去,它著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.net就能给你返回你下一步应该执行的函数名与参【原创不易,请尊重版权】未经授权,禁止复制转载。数,然后你运行这个函数即可,至于它的内部【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。怎么做到的,现在,地球上无人能知。但是,著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。作为开发者,我不管你能不能接受这种模式,【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。我想它都会重溯整个行业。
原创内容,盗版必究。转载请注明出处:www.tangshuang.net【转载请注明来源】在很多时候,我们创建Agent,都是“应【转载请注明来源】未经授权,禁止复制转载。用心态”,也就是以创建应用的心态去创建A本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。gent,一个Agent可以解决一类问题本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net。但是,现在,我们把Agent放到更底层【作者:唐霜】【关注微信公众号:wwwtangshuangnet】去,它不是应用层面的,而是开发框架、第三本文版权归作者所有,未经授权不得转载。【转载请注明来源】方类库层面的。
【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。如何接入此类工作流?未经授权,禁止复制转载。
【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。【原创内容,转载请注明出处】【作者:唐霜】现在先让我们来看一下,这类工作流,在开发著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】层面,是如何工作的。也即,开发者是怎么写转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。代码接入实际业务的。有了这个相当于“快速【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】开始”的感观之后,后面你就好理解了。
原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net【本文受版权保护】原创内容,盗版必究。第一步,我们需要在一个单独的地方,定义工本文作者:唐霜,转载请注明出处。【作者:唐霜】作流节点和工作流描述。
著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】【转载请注明来源】本文作者:唐霜,转载请注明出处。- 工作流节点,包含名称、描述、参数及其描述著作权归作者所有,禁止商业用途转载。【本文受版权保护】,其中描述非常重要,它将向AI展示自己的【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。功能、特性、条件等等,让AI能够在正确的【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。时间和正确的状态下选择运行它 【作者:唐霜】【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。【本文受版权保护】原创内容,盗版必究。
- 工作流描述,对整个工作流的描述,包含工作未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net流的业务背景、业务规则等,也可以包含工作【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。流节点之间的顺序、依赖关系等,用于限定A【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。I在选择节点运行时有一个约束性 未经授权,禁止复制转载。【作者:唐霜】著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。
- 节点具体实现,就是用代码把节点实现一遍,【未经授权禁止转载】【未经授权禁止转载】名称和参数要与描述中的一一对应,另外要有著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。可被阅读的返回结果,禁止返回一些运行时的【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net类实例 【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】【作者:唐霜】【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】
第二步,实例化这个Agent,并且向Ag本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】ent发送消息。然后等Agent返回结果原创内容,盗版必究。【本文受版权保护】之后,把结果解析为JSON对象,完成后续未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net逻辑。
【访问 www.tangshuang.net 获取更多精彩内容】【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。【作者:唐霜】结束。原创内容,盗版必究。
本文版权归作者所有,未经授权不得转载。【本文受版权保护】【原创不易,请尊重版权】【原创内容,转载请注明出处】以上就是业务侧的整个开发流程,有没有很意【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。外,看上去如此简单。没有与第三方的通信和【原创不易,请尊重版权】【版权所有,侵权必究】回调,似乎就是调用了一个黑箱接口一样。没【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。错,基于Agent来实现工作流,完全免除著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。了搭建部署工作流系统的所有成本。这让我想【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。起以前在业务团队搭建 flowable 【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】后端时的造孽心理,当时负责这件事的同事,【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net为此做了非常多的研究,还凭借这些研究完成【本文首发于唐霜的博客】未经授权,禁止复制转载。了晋级。如今回头看看,都有些感慨。
【原创内容,转载请注明出处】未经授权,禁止复制转载。【未经授权禁止转载】如何对原有业务逻辑代码进行重构?【转载请注明来源】
本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net【本文受版权保护】传统的业务逻辑代码主要通过条件分支来实现【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。数据分流,复杂一点就会用到FSM对状态进【本文首发于唐霜的博客】【未经授权禁止转载】行管理,再复杂就会上流程图系统。但我们认【转载请注明来源】【原创内容,转载请注明出处】真思考一下,工作流的本质是什么?是现实业未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。务,本质上就是人。不同开发团队在不同业务著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net中的位置各有侧重,有的业务团队比较保守,【访问 www.tangshuang.net 获取更多精彩内容】【版权所有,侵权必究】要求系统必须照搬现实工作流程,代码为业务【版权所有,侵权必究】【转载请注明来源】服务,而有的业务团队比较激进,试图让研发【转载请注明来源】原创内容,盗版必究。团队用技术提供新的工作流程模式来提升工作【本文首发于唐霜的博客】【版权所有,侵权必究】效率。
【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】我以前所在的腾讯投资业务就是保守与激进兼【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。而有之,当听到业务团队要求必须怎样怎样的【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。时候,就比较痛苦和抗拒,当听到产品经理说原创内容,盗版必究。原创内容,盗版必究。我们用什么功能来代替原有工作时,就比较亢本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。奋。
【作者:唐霜】【本文受版权保护】【转载请注明来源】以投资工作中的文件签署流程为例,从资方与【转载请注明来源】原创内容,盗版必究。创业团队的接触开始,到与团队谈妥,再到打【本文首发于唐霜的博客】【本文受版权保护】钱,再到后来的退出,这个过程中要签署各种【本文受版权保护】【访问 www.tangshuang.net 获取更多精彩内容】文件,而每次签署文件的流程又或各有不同,原创内容,盗版必究。【版权所有,侵权必究】最终形成了一套极为复杂的工作流系统。如果【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】用最原始的办法实现,就是理清业务,按照业【转载请注明来源】【本文受版权保护】务流程的逻辑,不同的进行逻辑分支。但随着本文作者:唐霜,转载请注明出处。【转载请注明来源】代码层级的层层下钻,逻辑就会越来越难掌握【版权所有,侵权必究】【原创内容,转载请注明出处】。
本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。那么,如何用Agent驱动的工作流重构这本文作者:唐霜,转载请注明出处。【本文受版权保护】类已有的工作流程呢?
未经授权,禁止复制转载。【版权所有,侵权必究】【作者:唐霜】首先,我们需要重新整理整个业务。这需要产【原创内容,转载请注明出处】【本文首发于唐霜的博客】品经理、业务人员、开发团队,一起对已有的【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。业务流程进行梳理,并形成严谨的业务流程文【原创内容,转载请注明出处】未经授权,禁止复制转载。档。这里非常关键的是业务规则,也就是代码【转载请注明来源】本文作者:唐霜,转载请注明出处。层面的逻辑分支。只有详细的规则,才能获得【原创不易,请尊重版权】【转载请注明来源】准确。
本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】【作者:唐霜】其次,对不同的业务场景进行区分。以单次业【转载请注明来源】【本文受版权保护】务为单元,列出所有业务场景。这会让我们从【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.net原来通用的业务代码中又重新跳脱出来,形成【转载请注明来源】原创内容,盗版必究。全部一个一个多特殊业务点。
本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。接着,以单个业务点为一个流程Agent,【原创内容,转载请注明出处】【本文首发于唐霜的博客】为这个业务点建立规则。
【本文受版权保护】转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net原创内容,盗版必究。最后,建立一个大的类似路由的Agent,本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。将各个业务点点Agent统一起来,当逻辑著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】进入该部分之后,由这个统一的Agent来【未经授权禁止转载】【原创内容,转载请注明出处】调度使用哪一个子Agent来运行。
【作者:唐霜】本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。【原创不易,请尊重版权】【作者:唐霜】而在重构后的实际体验上,业务团队的人员,【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net就不需要从原本一个巨大的流程页面进去找到本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】自己当前所在的阶段,然后再去操作,而是直著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。接告诉Agent我要做什么操作,并且把自本文作者:唐霜,转载请注明出处。原创内容,盗版必究。己的文件上传上去,由Agent自己来完成【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。调度。当然,我们也可以完全保留原来的操作【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】界面,使两者可以统一到一起。
【原创内容,转载请注明出处】【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.net与传统工作流引擎相比有哪些不同?著作权归作者所有,禁止商业用途转载。
【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。【本文受版权保护】【本文受版权保护】用Agent作为底层驱动来去构建业务流程【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。,虽然会大大的节省开发量,但是也没有玄乎【未经授权禁止转载】转载请注明出处:www.tangshuang.net到程序员什么都不用干,没有到不写代码的地【作者:唐霜】【访问 www.tangshuang.net 获取更多精彩内容】步。这需要和Vibe Coding区分开原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】来。
【原创不易,请尊重版权】【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。Vide Coding是由多个Agent【原创内容,转载请注明出处】【本文受版权保护】协同完成编程任务,目标是写代码,至于具体【版权所有,侵权必究】未经授权,禁止复制转载。的业务流程,需要通过vibe的形式,让A【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】gent写成固化的代码,一旦写好后,工作【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net流就是静态的固定的。而我们现在所讲的Ag未经授权,禁止复制转载。原创内容,盗版必究。ent工作流,是由人来写好代码,在实际业未经授权,禁止复制转载。【本文受版权保护】务运行时AI参与其中。两者有着巨大的区别【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】。
【版权所有】唐霜 www.tangshuang.net【本文受版权保护】【关注微信公众号:wwwtangshuangnet】原创内容,盗版必究。先不管这种开发模式好不好,有没有优势,是【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】不是更符合业务降本增效的主旋律,我们先来转载请注明出处:www.tangshuang.net【版权所有,侵权必究】看一看Agent工作流模式与传统工作流模本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。式的区别,再从中得到自己的一些体悟。
【转载请注明来源】【作者:唐霜】【作者:唐霜】【版权所有,侵权必究】参数自组织著作权归作者所有,禁止商业用途转载。
【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net【本文受版权保护】传统工作流引擎也需要定义节点,可以用DS【关注微信公众号:wwwtangshuangnet】【原创内容,转载请注明出处】L来定义工作流程,从这些方面来说,基于A本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.netgent驱动的工作流在“工作流”概念的本本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】质上没有颠覆。但是,基于AI的推理总结能转载请注明出处:www.tangshuang.net【原创内容,转载请注明出处】力,在新模式下,我们不需要因为节点之间的【未经授权禁止转载】【版权所有,侵权必究】数据传递太过操心,AI可以自己从上下文(【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。当前的和以往的)中提炼节点参数,从而大大著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】的节省了我们在实现节点时的复杂度。
【转载请注明来源】【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。举一个例子,我们的某一个节点,在运行时,【未经授权禁止转载】【本文首发于唐霜的博客】需要传入“用户所选的币种”,但是这个节点原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】其实位于位置比较靠后的地方,而用户是在一【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。开始提交的币种信息,这个操作可能是在5天未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】前。传统的做法是要么要求用户在当前也传入著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。当时选的币种,要么是在业务系统一侧通过数转载请注明出处:www.tangshuang.net【未经授权禁止转载】据库查询之后再把币种信息连同用户提交一起【原创不易,请尊重版权】未经授权,禁止复制转载。传入要执行的节点。这在传统开发模式下,非【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。常自然,毫无争议。但是如果是基于Agen【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。t的工作流,则不需要在此时关心币种问题,【原创不易,请尊重版权】未经授权,禁止复制转载。因为Agent有一个“上下文”的概念,我未经授权,禁止复制转载。【原创不易,请尊重版权】们会通过“上下文工程”去构建上下文,而作未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。为用户提交的信息,往往都在上下文中,虽然【未经授权禁止转载】【原创不易,请尊重版权】当前用户并没有提供币种信息,业务侧代码也原创内容,盗版必究。【未经授权禁止转载】没有去查,但是Agent在构造当前节点的【未经授权禁止转载】未经授权,禁止复制转载。入参时,由于我们构建的上下文中包含了用户【作者:唐霜】转载请注明出处:www.tangshuang.net提交的早期信息,AI会自动识别到这个信息著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。,并把它构造到参数里面去。
【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】【本文受版权保护】光靠文字可能比较难理解,你现在就可以去做本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】一个实验,在deepseek中发起一个新【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。会话,然后在一开始提供一个币种信息,并在【本文受版权保护】未经授权,禁止复制转载。多轮会话之后,要求它构造一个JSON对象著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。,并提供一个JSON Schema描述,【关注微信公众号:wwwtangshuangnet】【本文受版权保护】其中一个字段就描述说是币种,那么它几乎一【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】定会把你最早提供的币种信息填到这个JSO本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netN里返回给你。
【版权所有,侵权必究】【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。这就是基于Agent的工作流的参数自组织本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】特性,它包含两个点:
【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】- 无需在工作流中用代码去进行上下游节点数据【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。传递的mapping,AI会自己根据JS【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。ON Schema的描述构造正确格式的参【本文首发于唐霜的博客】【本文首发于唐霜的博客】数(包括数据类型和格式统一等等) 【作者:唐霜】原创内容,盗版必究。【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】
- 无需处理跨节点数据传递问题,AI会自动从【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】上下文(历史数据)中拿到对应的值作为参数 【原创内容,转载请注明出处】【原创不易,请尊重版权】【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】
有了这个特性之后,开发者不再需要关注工作原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】流与实际业务的强关联性,而是可以专注于某著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。个节点的具体实现,不需要考虑说上游节点给未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。的数据对不对,自己的返回数据格式可不可以未经授权,禁止复制转载。【原创不易,请尊重版权】等等问题,只要专注于把自己的逻辑实现清楚【转载请注明来源】原创内容,盗版必究。。
著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net【本文受版权保护】上下文自感知本文版权归作者所有,未经授权不得转载。
【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net其实上面说的“跨节点数据传递”就是上下文【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。自感知的一种。你不需要明确的告诉Agen著作权归作者所有,禁止商业用途转载。【本文受版权保护】t要从哪里去拿数据,Agent有自己的推【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】理能力,能根据你的输入,理解出当前工作流著作权归作者所有,禁止商业用途转载。【本文受版权保护】的领域概念,并且按照业务的常见模式去提取原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。、汇总、转换。
【本文首发于唐霜的博客】【本文首发于唐霜的博客】【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。举一个小例子,比如你的流程里面提供了多用原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】户在某个节点的输入,比如搬家的一个流程,【未经授权禁止转载】【未经授权禁止转载】搬家公司可能要分两批完成你们办公室的用品原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】搬迁,那么这就涉及到两批人的协作。比如A【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】批录入了125件物品,B批录入了240件转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net,那么搬完之后,流程就进入到下一阶段,验【关注微信公众号:wwwtangshuangnet】【作者:唐霜】收阶段。此时有一个工作节点需要验证物品数本文作者:唐霜,转载请注明出处。【未经授权禁止转载】量是否符合。如果是传统实现,就必须将A和未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】B各自录入的数据都查出来,然后相加之后传【本文受版权保护】【原创不易,请尊重版权】入节点。但是,用Agent则不需要,因为【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.netAI有简单的数学知识,它自己可以感知总共转载请注明出处:www.tangshuang.net【本文受版权保护】件数是365件,而无需人为去数据相加。
【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。同样的道理,当一个用户在中午12点在某一【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net个节点上完成了操作,在后续节点上要求只统未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net计2小时以内的数据时,AI能感知这个中午本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。12点的操作是否属于统计的范畴(当然前提本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。是AI得知道当前的确切时间)。
本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。【本文首发于唐霜的博客】未经授权,禁止复制转载。以上举的这两个例子都是非常简单的推理场景【原创内容,转载请注明出处】【作者:唐霜】,简单的数字加减和时间比较,AI几乎都不【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net会出错。
【版权所有,侵权必究】【未经授权禁止转载】【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。这种上下文自感知的特性,让Agent工作未经授权,禁止复制转载。未经授权,禁止复制转载。流在开发时有了更多的灵活性。不过归结起来【原创不易,请尊重版权】未经授权,禁止复制转载。还是,开发者只需要把精力集中在节点本身的未经授权,禁止复制转载。【版权所有,侵权必究】实现上,而无需太为工作流的全盘过度操心。
【作者:唐霜】【本文受版权保护】未经授权,禁止复制转载。无固定edge流程,以实现业务为目标【本文首发于唐霜的博客】
著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】节点与节点的连线即edge(边),表示节【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】点的先后顺序和依赖关系,也表示着数据的流【作者:唐霜】未经授权,禁止复制转载。向。而Agent驱动的工作流弱化了强制性著作权归作者所有,禁止商业用途转载。【转载请注明来源】edge设计,即弱化了流程“编排”这件事【转载请注明来源】本文作者:唐霜,转载请注明出处。。传统的工作流编程,必然面临节点编排的复【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。杂实现。
【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。【本文受版权保护】我曾在腾讯参与节点与边DSL的设计,我们【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】最初希望通过一套简单的符号描述来代表ed【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。ge,但是在经过多轮的验证后,发现现实中本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】工作流的编排太复杂了,稍有一个例外案例出【未经授权禁止转载】【未经授权禁止转载】现,就会打乱原有设计的美好初衷。
未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。复杂的工作流系统,往往都有一套独立的编排【版权所有】唐霜 www.tangshuang.net【本文受版权保护】体系,前端通过bpmn.js或其他流程图【转载请注明来源】【原创内容,转载请注明出处】UI库来承载,同时前后端在数据结构上要形未经授权,禁止复制转载。【本文受版权保护】成统一,在这套统一的数据结构上,后端以这【转载请注明来源】【原创内容,转载请注明出处】份数据作为配置,去理解配置中各个阶段的顺原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。序、守护条件、并串行逻辑、延时等等各种工【本文首发于唐霜的博客】【版权所有,侵权必究】作流里面的专有逻辑。
本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。【本文首发于唐霜的博客】这样一整套的东西,归根到底就是为了解决e本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。dge的问题,即数据的流转问题。
本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net而基于Agent驱动的工作流,则没有这种【本文受版权保护】【访问 www.tangshuang.net 获取更多精彩内容】编排。用来执行的节点选择,或者说数据的流【访问 www.tangshuang.net 获取更多精彩内容】【本文受版权保护】转,靠的是Agent对业务规则的理解和对【原创内容,转载请注明出处】未经授权,禁止复制转载。当前整个上下文中数据、状态的判断,由Ag【原创内容,转载请注明出处】【转载请注明来源】ent来决策接下来应该执行哪个工作节点。
【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.net不过这并不意味着准确的业务流程不重要。相【作者:唐霜】本文作者:唐霜,转载请注明出处。反,由于AI具有一定的幻觉,如果你所提供【转载请注明来源】【关注微信公众号:wwwtangshuangnet】的系统提示词不够准确,流程跑错的可能性还转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。是有的,因此,对业务的精确描述就更加重要【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。。当然,由于我们还可以在Agent实现时【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。加上Plan、ReAct等模式,可以打压【未经授权禁止转载】【未经授权禁止转载】它执行错误的概率。看上去这种模式多了很多原创内容,盗版必究。本文作者:唐霜,转载请注明出处。不确定性,然而实际上,它是跳过繁琐,直指【版权所有,侵权必究】未经授权,禁止复制转载。业务核心,只要实现了业务目标,走哪条“路【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net”并不重要。
【转载请注明来源】【原创不易,请尊重版权】未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。正是因为有了这一特性,基于Agent的工【本文受版权保护】【关注微信公众号:wwwtangshuangnet】作流就没有编排系统。你可以说,你的产品业【版权所有,侵权必究】【版权所有,侵权必究】务文档就是编排系统。
原创内容,盗版必究。【原创内容,转载请注明出处】著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。无需从固定节点开始执行【关注微信公众号:wwwtangshuangnet】
【原创内容,转载请注明出处】【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】传统的工作流必须有一个起点,也就是“开始本文作者:唐霜,转载请注明出处。【作者:唐霜】”节点。在一个工作流实例化之后,它的执行【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。顺序是固定的,虽然可能有很多分支,但是每【本文受版权保护】【作者:唐霜】条分支的入参和返回值,都是有强烈约束的。【本文受版权保护】转载请注明出处:www.tangshuang.net但Agent工作流不一定非得从某个节点开【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。始。
【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】得益于强大的上下文工程,我们可以在系统上【版权所有】唐霜 www.tangshuang.net【转载请注明来源】下文中,塞入很多有用的信息,而在这些信息本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net的驱使下,Agent相当于有了很多前置信未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。息,当这些前置信息覆盖了某些节点的输出(转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】也就是这些节点就是为了得到这些信息)时,【未经授权禁止转载】【本文首发于唐霜的博客】Agent就可能跳过执行这些节点。
【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net作为程序员,其实我们可以理解这种模式。在著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】我们的编程中也存在着两种模式,一种是“激【作者:唐霜】本文作者:唐霜,转载请注明出处。发模式”,一种是“收集模式”。所谓激发模【本文受版权保护】转载请注明出处:www.tangshuang.net式就是我不断的产生数据,然后把数据传入进【原创内容,转载请注明出处】未经授权,禁止复制转载。去,通过了它的验证,它就会开始运行,这就本文作者:唐霜,转载请注明出处。【本文受版权保护】是激发。而收集模式则是反过来,它在不停的【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。收集可用的数据,一旦收集齐全了自己需要的【本文首发于唐霜的博客】【作者:唐霜】数据,就会主动运行。这两种模式各有好处,【访问 www.tangshuang.net 获取更多精彩内容】【版权所有,侵权必究】不过我们大多数情况下都是采用激发模式,相原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net对来说,收集模式理解起来和实现起来都更难【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】。
著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。而基于Agent来实现收集模式则异常简单【原创内容,转载请注明出处】原创内容,盗版必究。,因为你不需要去通过编程实现依赖收集,A未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。I大模型自己可以提炼相关信息。这也就是说原创内容,盗版必究。未经授权,禁止复制转载。,对于工作流中的节点,它们其实不是被某一【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】个东西推着走,而是在入参满足的情况下,被【本文受版权保护】【原创内容,转载请注明出处】Agent运行,而适当的工作流流转描述,【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net就可以跳过那些流程中靠前的为后续节点生成转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。数据的节点,从而大大提升业务流转的效率。
【作者:唐霜】未经授权,禁止复制转载。【作者:唐霜】【本文受版权保护】更强的通用性和向下兼容【关注微信公众号:wwwtangshuangnet】
【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】【本文首发于唐霜的博客】就像我们开发自己的工作流平台或框架一样,【未经授权禁止转载】转载请注明出处:www.tangshuang.net一旦一个框架成型发布,那么就可以复用到其【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。他很多业务中。同样的道理,一款好的Age【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。nt工作流框架也可以复用到其他业务中。而【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.net由于当下Agent开发模式的特殊性,这种原创内容,盗版必究。【本文受版权保护】框架的通用性更好,比如现在流行的编程Ag【原创内容,转载请注明出处】【原创不易,请尊重版权】ent(如claude code),它可【原创不易,请尊重版权】原创内容,盗版必究。以复用到很多场景中。特别是一些通用Age【本文受版权保护】本文作者:唐霜,转载请注明出处。nt,可以完成跨领域的任务。
【本文首发于唐霜的博客】【作者:唐霜】【原创不易,请尊重版权】未经授权,禁止复制转载。由于一套业务系统中,各个业务模块往往具有本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】极强的相关性,因此,在一个业务中为了提升本文作者:唐霜,转载请注明出处。【作者:唐霜】效率而研发的Agent工作流框架,可以几本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】乎非常容易的接入到其他业务模块中。特别是【原创不易,请尊重版权】【原创不易,请尊重版权】新业务模块,几乎无需做流程开发,就可以复著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】用原有的框架,快速搭好业务流程。
原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】另外还有一个点,就是基于Agent的工作转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】流,可以和老系统兼容,甚至共存。之所以会【本文首发于唐霜的博客】【作者:唐霜】出现这样的情况,是因为AI对数据格式的不【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net敏感,你是xml的也好,JSON的也罢,原创内容,盗版必究。【原创不易,请尊重版权】就是纯文本它也不挑。因此,你可以在老系统本文作者:唐霜,转载请注明出处。【作者:唐霜】继续运行的基础上,搞一个旁路,用Agen本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。t工作流完成和老系统一模一样的能力,但是【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】提供一个聊天+表单融合的界面,操作更简单【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。,要提交的数据也更少,让关系比较好的业务【作者:唐霜】著作权归作者所有,禁止商业用途转载。团队成员试用,反馈不错的情况下,再推广到【本文首发于唐霜的博客】【原创不易,请尊重版权】整个业务团队使用,然后把老系统的入口进行原创内容,盗版必究。【版权所有,侵权必究】切换(不是下架,只是隐藏,因为还可以继续本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。用)。
本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。工具的丰富生态【访问 www.tangshuang.net 获取更多精彩内容】
本文作者:唐霜,转载请注明出处。【本文受版权保护】【原创内容,转载请注明出处】原创内容,盗版必究。【原创不易,请尊重版权】其实也不算太丰富,但是只要有上游接口,用【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。起来也很方便。例如,如果按照传统的开发模【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net式,如果想要接入一个第三方服务,比如说某本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net个发界面很漂亮邮件的服务,往往需要我们在本文作者:唐霜,转载请注明出处。【作者:唐霜】原有的业务系统中,新增一些代码来完成接入【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。。但是,用Agent的开发模式就不需要,【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】你只需要自己开发一个mcp的npm包,发【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】布到公司内部的npm仓库,然后在你的Ag【访问 www.tangshuang.net 获取更多精彩内容】【作者:唐霜】ent配置文件中,把这个mcp serv【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。er的配置信息加进去,在无需修改业务代码转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。的情况下,就可以增加工具调用。(当然,前原创内容,盗版必究。【原创不易,请尊重版权】提是你为你的Agent预留了无需重启服务原创内容,盗版必究。【原创内容,转载请注明出处】就可以添加mcp server的能力。)【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。这特别时候用在那种不是核心业务节点,而是本文作者:唐霜,转载请注明出处。【转载请注明来源】一些旁路的节点,例如通知类、信息收集总结【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。类、数据统计类等节点。
【原创内容,转载请注明出处】未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。构建Agent驱动的工作流框架的核心概念
本文版权归作者所有,未经授权不得转载。【作者:唐霜】【作者:唐霜】【原创内容,转载请注明出处】本来我想要写如何实现一个Agent驱动的原创内容,盗版必究。原创内容,盗版必究。工作流框架的,但是由于时间原因,以及篇幅未经授权,禁止复制转载。【原创不易,请尊重版权】所限,我打算下次再写一篇单独的实战篇来写【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net。到时候再把写好的框架开源,就可以让更多【作者:唐霜】转载请注明出处:www.tangshuang.net的小伙伴一起来体验这种新的工作流开发模式【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net。
【转载请注明来源】【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.net在构建Agent驱动的工作流之前,我们首【关注微信公众号:wwwtangshuangnet】【原创内容,转载请注明出处】先需要掌握Agent的构建。当然,这里的本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。掌握是指核心能力,也就是会话、工具调用的【作者:唐霜】【作者:唐霜】能力,毕竟如果啥都掌握了,那还要人家那些本文版权归作者所有,未经授权不得转载。【本文受版权保护】构建Agent的创业公司干啥。因此,我们本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。先从最核心的开始,只要一个Agent能够【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】按照常规的Agent模式跑起来,那么我们本文作者:唐霜,转载请注明出处。【转载请注明来源】就可以开始构建自己的工作流框架。
原创内容,盗版必究。本文作者:唐霜,转载请注明出处。原创内容,盗版必究。【未经授权禁止转载】转载请注明出处:www.tangshuang.netAgent核心组件与角色原创内容,盗版必究。
【本文受版权保护】转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】一个Agent不仅仅是一个大型语言模型(【原创不易,请尊重版权】【转载请注明来源】LLM)的调用接口,它是一个具备以下要素【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。的自主执行单元:
本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net- 感知与推理(LLM Core): 利用L【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。LM强大的上下文理解和推理能力,理解用户【本文受版权保护】【关注微信公众号:wwwtangshuangnet】目标、流程状态和环境反馈。 原创内容,盗版必究。【转载请注明来源】【关注微信公众号:wwwtangshuangnet】【作者:唐霜】本文版权归作者所有,未经授权不得转载。
- 工具与行动(Tools & Ac【转载请注明来源】【版权所有,侵权必究】tions): Agent被赋予了执行特【原创不易,请尊重版权】【原创不易,请尊重版权】定任务的工具集(Tools),例如调用企本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。业API、查询数据库、发送邮件或运行自定【本文受版权保护】著作权归作者所有,禁止商业用途转载。义代码块。这些工具取代了传统工作流中的“本文作者:唐霜,转载请注明出处。【转载请注明来源】服务任务”(Service Task)。 【未经授权禁止转载】【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】
- 记忆与经验(Memory): 保持短期记本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】忆(上下文)和长期记忆(历史流程、最佳实原创内容,盗版必究。本文作者:唐霜,转载请注明出处。践),从而在复杂、长周期的流程中保持连贯【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。性。 【版权所有】唐霜 www.tangshuang.net【本文受版权保护】著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。
- 规划与修正(Planner): 根据当前【原创内容,转载请注明出处】【未经授权禁止转载】目标和状态,Agent可以自主生成、评估著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】和动态调整其执行计划,这取代了传统BPM【原创不易,请尊重版权】未经授权,禁止复制转载。N中固定的、预定义的流程路径。 【原创内容,转载请注明出处】【作者:唐霜】转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】
传统工作流开发模式中,流程路径是外置的(【原创内容,转载请注明出处】【版权所有,侵权必究】存储在BPMN图中);Agent模式中,本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。流程路径是内置的(由Agent的规划器动【作者:唐霜】【访问 www.tangshuang.net 获取更多精彩内容】态生成)。虽然我们可以利用Agent来动【作者:唐霜】本文作者:唐霜,转载请注明出处。态规划流程,但是我们最好还是能够在系统提【转载请注明来源】【转载请注明来源】示词中把我们本来的业务流程写清楚,而不是【版权所有,侵权必究】【作者:唐霜】完全让Agent来自由发挥,毕竟连人在理原创内容,盗版必究。【版权所有,侵权必究】解业务上都会存在偏差,更何况AI理解我们未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。的复杂业务呢?
本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。作为初学者,我们不需要一上来就各种Age【转载请注明来源】【关注微信公众号:wwwtangshuangnet】nt框架来一堆,我们完全不要什么Agen本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。t框架,我们直接自己手撸代码。这些高大上【关注微信公众号:wwwtangshuangnet】原创内容,盗版必究。的“执行单元”,本质上不过是各种调用。除【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。了调用工具,就是调用LLM API接口,转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。说起调用,谁能比我们这些CRUD程序员们【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。更厉害呢?只要我们理清楚了Agent的工【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】作原理,那么用一个文件就可以手撸一个Ag【作者:唐霜】本文版权归作者所有,未经授权不得转载。ent,连MCP都给你接上。
本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net一些干货,Agent的记忆就是存数据库,【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。什么数据库都行,我们不需要做什么记忆压缩转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net、筛炼之类的,存起来,然后读取出来,稍加本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net筛选和处理,就可以作为上下文了。核心目标【本文受版权保护】【转载请注明来源】是跑起来。每一个节点的输出,直接转化为J【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。SON字符串存,因为AI完全可以读这种信【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。息,你甚至不需要把它转回Object对象【作者:唐霜】【原创内容,转载请注明出处】,就是字符串丢给AI。还有就是Agent转载请注明出处:www.tangshuang.net【未经授权禁止转载】可以是无状态的,如果你的系统不需要长连接【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】,不需要多人同时协作,就是一个独占进程的【转载请注明来源】著作权归作者所有,禁止商业用途转载。业务处理的类型的,那么就是要运行的时候,【本文受版权保护】【原创不易,请尊重版权】启动一个Agent实例(给它一个ID),【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。然后把它的记忆(数据)从数据里读出来,塞【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net进去作为上下文,然后再向它发送这个请求的【本文受版权保护】本文版权归作者所有,未经授权不得转载。数据就行了,超级简单。
【版权所有,侵权必究】原创内容,盗版必究。未经授权,禁止复制转载。未经授权,禁止复制转载。原创内容,盗版必究。一切皆工具调用未经授权,禁止复制转载。
【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】【原创内容,转载请注明出处】在Agent中,虽说什么规划、反思之类都【本文首发于唐霜的博客】【本文首发于唐霜的博客】很重要,但是所有的一切,都要落到“工具调【未经授权禁止转载】【转载请注明来源】用”这4个字上。而Agent工作流,实际【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net上就是“工具调用”+“流程控制”,如果我原创内容,盗版必究。原创内容,盗版必究。们激进一点,我们干掉流程这个概念,我们所著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】做的一切工作,本质上就是利用Agent的【转载请注明来源】著作权归作者所有,禁止商业用途转载。工具调用能力,干掉了原来复杂的流程图系统本文作者:唐霜,转载请注明出处。【转载请注明来源】。那么什么是工具?这是一个占据了99%心著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。智重要性的问题。
【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。【作者:唐霜】在Agent中,所谓工具,就是一段被执行【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。的代码,而往往,这段代码还具有非常高的统【本文首发于唐霜的博客】原创内容,盗版必究。一格式,以至于我们只要按照这个格式开发全转载请注明出处:www.tangshuang.net【未经授权禁止转载】部工具,就可以让这个Agent拥有无限力【本文受版权保护】【版权所有】唐霜 www.tangshuang.net量。在大模型中,有一个Function 本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.netCall的能力,这个能力是一切的基础。有【原创内容,转载请注明出处】【作者:唐霜】了它,我们可以与MCP Server结合【未经授权禁止转载】转载请注明出处:www.tangshuang.net,构建出一个可动态注册的,固定运行逻辑的【本文受版权保护】原创内容,盗版必究。通用Agent框架。而正如前文所说,你的【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】业务团队在业务上关联性很大,所以这个通用著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.netAgent有很大可能,可以覆盖你们团队的【转载请注明来源】转载请注明出处:www.tangshuang.net全部需求,就像万金油一样,哪里有需求就往【转载请注明来源】原创内容,盗版必究。哪里贴。而有了MCP之后,这个Agent原创内容,盗版必究。【作者:唐霜】框架还可以做到随时随地增加工具,甚至可以本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】修改系统提示词来增加功能。而,我们还可以著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】把业务封装为MCP Server,一个新【转载请注明来源】【转载请注明来源】业务逻辑上线,变得非常易插拔,都不用动正未经授权,禁止复制转载。【原创不易,请尊重版权】在运行的老系统。
著作权归作者所有,禁止商业用途转载。【本文受版权保护】本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net此外,还有一个更有意思的点,就是你还可以本文作者:唐霜,转载请注明出处。【作者:唐霜】把另外一个Agent当作工具来接入当前的【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.netAgent,同样也是基于MCP协议来实现【原创内容,转载请注明出处】【本文受版权保护】热插拔。也就是说,我们可以让两个业务串联未经授权,禁止复制转载。【原创内容,转载请注明出处】起来,比如你所在的某个销售系统和财务是完【作者:唐霜】本文版权归作者所有,未经授权不得转载。全隔绝的两个系统,现在,有了Agent+【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.netMCP,你可以在销售系统里把财务系统中的【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net某个能力作为你业务流程里面的一个环节,而【版权所有,侵权必究】【原创不易,请尊重版权】无需财务系统做任何改造(如果他们有API著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】的话)。
【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。【作者:唐霜】而流程,落到最后,就是何时何地以何参数调【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.net用工具的过程。前面说到Function 【作者:唐霜】著作权归作者所有,禁止商业用途转载。Call的能力,实际上,Function【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net Call可以多轮调用,大模型可以分批次【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。的执行工具,通过上一批次的执行结果,来自未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。主决策这一批次可以调用的工具,而如果没有【原创内容,转载请注明出处】【原创不易,请尊重版权】可调用的工具,它就会返回空。这对我们执行原创内容,盗版必究。【本文受版权保护】工作流来说,又把开发难度降低了,传统模式著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】下,我们需要解析流程图中edge的各种内著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。在意思,按规则执行,但是在Agent模式未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net下,只需要来一个自循环(可以是while未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。(true)也可以是递归),就可以做到以原创内容,盗版必究。【原创内容,转载请注明出处】前要有个庞大的流程引擎才能做到的事。实在原创内容,盗版必究。【作者:唐霜】是太神奇了!
本文作者:唐霜,转载请注明出处。【未经授权禁止转载】原创内容,盗版必究。结语【转载请注明来源】
【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】【版权所有,侵权必究】本文介绍了一种基于Agent驱动的工作流【作者:唐霜】【未经授权禁止转载】开发模式,它和传统工作流开发模式有着非常【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net大的范式差异。它不仅简化了数据传递、参数转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。构造、流程编排等一系例问题,而且还为不同【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。系统之间的融合保留了非常大的想象空间。更【未经授权禁止转载】转载请注明出处:www.tangshuang.net重要的,我认为是它既结合了AI时代的便利本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net性,又不完全脱离现有系统的代码实现,找到【版权所有,侵权必究】【版权所有,侵权必究】了一种并行两种范式的可能性。能够做到这种【原创内容,转载请注明出处】【转载请注明来源】包容性的根源,在于Agent+MCP这对【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】双胞胎组合,它们可以让一个系统的可扩展性【原创内容,转载请注明出处】【版权所有,侵权必究】变得极为广阔。这也意味着,这种编程模式,转载请注明出处:www.tangshuang.net【作者:唐霜】不仅局限于工作流的开发,即使在业务系统的著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。开发中,也可以尝试,通过MCP协议来代替【本文受版权保护】未经授权,禁止复制转载。各种模块化、微服务化等传统开发模式,也是转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】有很大可行性的。好了,今天就聊到这里,如原创内容,盗版必究。【版权所有,侵权必究】果你有什么想法,可以在下方留言,我们一起本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】探讨!
著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】
【未经授权禁止转载】本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。【版权所有,侵权必究】

