“ 总之,智能体开发的理论很简单;但其真正的难点却在具体的落地实现。”
智能体开发是目前大模型应用的主流方向之一,但由于大模型的不稳定性导致智能体开发困难重重,特别是构建能够稳定运行的智能体,更是难上加难。
今天我们就从智能体开发过程中遇到的问题出发,尝试找到企业级的智能体架构方案。
企业级智能体架构
事实上智能体的概念很简单——就是LLM(大模型) + Prompt(提示词) + Tools(工具);但在实际操作中,智能体开发却有两种模式,单智能体模式和多智能体模式。
单智能体模式就是一个LLM + Tools多个工具集;而多智能体模式就是由多个单智能体组成一个大的智能体。
这两种模式看起来好像差别不是很大,但事实上有很多注意点;对很多刚开始接触智能体开发的人来说,或许认为单智能体开发比较简单,而多智能开发的主要难点在于不同智能体之间的通讯和数据交互问题。
但实际上不论是单智能体开发还是多智能体开发,其复杂程度都远超我们的想象;毕竟实践难度要远远高于理论难度,理论谁都会说,但实际操作却不是谁人都会。
单智能体开发
可能很多人认为的单智能体开发很简单,不就是定义一个工具集,然后绑定到大模型上即可;然后让大模型根据业务需求自己去判断应该调用哪个工具,然后完成任务即可。
但实际上单智能体开发也有很多需要注意的点。
首先,平常学习智能体开发和企业级应用中的智能体开发不是一个概念;以单智能体开发来说,学习过程中可能只需要集成一两个,两三个工具即可;但在企业级应用中,可能需要给智能体配备十个,甚至二十个,三十个,甚至更多的工具。
但在实际操作中,随着工具的增多,大模型对工具准确性的判断就会降低,很多时候可能会产生幻觉问题——调用错误的工具;所以,这是一个注意点。

其次,在一些简单的任务中,智能体可能只需要调用一两个,或者很少的工具即可完成任务;但在一些复杂的任务场景中,智能体的工具调用链路可能会很长;而随着工具调用链路的增加,其提示词的长度也会不断增加,甚至可能会超过模型窗口的限制。
再有,由于工具的种类不同,不同的工具响应的数据格式,形式都会不同;而不同的数据格式或形式会导致响应处理困难;比如说有些工具返回的是json格式,有些是xml格式,或者返回一些图片,路径,二进制流等;这些格式的数据是大模型无法处理的。
所以,这时就需要大模型能够自主判断,不同格式的数据怎么处理,如果遇到处理不了的数据应该怎么办。
还有就是,工具调用可能会成功,也可能会失败;如果直接失败返回错误信息这种还好说,但如果是那种工具正常响应,但响应的内容和用户需求完全不相干,甚至是错误的;这种情况应该怎么处理?

这种情况别说是大模型,甚至人类自己都无法判断工具响应的准确性。
所以,遇到以上问题,只能通过在提示词中约束大模型的行为,让大模型能够进行自主决断,最好的方式就是增加严格的容错处理,让大模型能够根据自己的判断选择是否重试;当然,也可以在智能体运行的过程中,加入一些人为的规则验证,但这种方式会降低智能体的灵活性,所以这一点在开发过程中需要多注意。
还有一个是关于工具调用的顺序问题,因为目前有部分模型开始支持并行工具调用;也就是说给模型配置多个工具,可能会根据需求同时调用多个工具;这种情况能够提升智能体的响应速度。但其缺点也很明显,那就是如果在一些需要顺序执行工具的过程中,使用并行调用,那就只能GG思密达了。
当然,以上这些情况还只是作者在开发中遇到的,可能还有很多没有遇到的问题。
单智能体开发所面临的一些问题,其实可以通过多智能体的方式来解决;根据软件开发的单一职责原则,可以给一个智能体只配置一个或两三个很少的工具,让一个智能体只干一件事,其它的事由别的智能体去做,这样就可以尽量避免以上的几个问题。
同时,这种方式也带来了一些问题,也就是多智能体开发中的问题。

多智能体开发
上面说了单智能体存在的问题,下面再来说说多智能体;首先,多智能体是由单智能体构成的,因此单智能体中所遇到的问题,很多在多智能体中也存在,甚至会更加复杂。
多智能体开发中首要的一个问题就是,不同智能体之间的调度和通讯问题;由于不同的智能体处理的数据不一样,就导致格式也不一样;因此,我们需要有一种通用的格式来处理多智能体之间的通讯问题,比如说JSON格式;虽然说我们无法决定智能体响应的数据内容,但我们可以使用一种相对通用的数据格式来约束智能体之间的通讯问题。

而另一个关于多智能体的调度问题,多智能体与单智能体有一个很大的不同点就是:
单智能体中的模型即需要对任务进行拆分,规划和决策;同时还需要负责工具的调用和任务的具体执行;这种方式除了可能会导致提示词超长之外,还会严重增加大模型的负担,导致大模型逻辑混乱。
而在多智能体中,为了解决这个问题就需要有一个主智能体负责任务拆分,规划,决策;这个主智能体不负责任务的具体执行和工具的调用,它就像一个企业的老板,只负责任务调度,以及负责不同智能体之间的协作问题;而具体的任务执行和工具调用,则完全交由子智能体去执行。

使用这种方式即可以避免主智能体提示词超长的问题,也能防止主智能体出现“脑裂”等现象,提升多智能体系统的稳定性。
总之,智能体开发的理论很简单;但其真正的难点却在具体的落地实现。
(文:AI探索时代)