“ Agent智能体技术理论和实际操作完全是两码事,这也是为什么市场一直有人说还看不到大模型的应用价值。”
最近在做基于Agent的数据分析功能,主要使用大模型和工具来实现;通过大模型自主分析的能力获取数据的分析结果,然后调用工具来进行绘图;开发框架使用的是Langchain和Langgraph。
但是本来以为是一个很简单的事情,但等到真正操作起来时才发现;其过程远比自己想象中的要复杂得多。果然是纸上得来终觉浅,绝知此事要躬行。
Agent实际开发中存在的问题
Agent智能体技术,可以说是一个入门特别简单,但真实落地特别复杂的一门技术;在真正使用Agent技术之前,本以为不过是定义几个函数,然后让大模型自己去调用就行了。
但在实际的业务场景中,Agent的使用远比理论要复杂;技术真的是一个实践性很强的东西。
以这次做数据分析遇到的问题来说,使用Langchain官方提供的pandas工具来实现数据分析功能;然后使用第三方开源的MCP服务做绘图工具。
如果单纯的使用pandas工具进行数据分析,虽然因为模型的原因其分析效果可能并不是很准确,但至少表面上看起来还有个分析的样子,也能给出一个看起来比较合理的结果。
但等到把pandas分析工具和绘图工具结合起来之后其效果就明显差了不少,甚至生成的结果和给出的数据完全无关;
如下图所示,但提供的数据源明明是自己手动模仿的一个班级成绩表,而结果和学生一点关系都没有。

所以这里遇到的第一个问题就是,虽然大模型+工具可以实现Agent的功能,而且可以使用Langchain提供的Langsmith监控Agent的执行过程;但从根本上来说,Agent的执行过程是完全不可控的,特别是这个Agent的功能比较复杂的时候。
因此,由于单个复杂Agent的执行过程不可控,且效果不太好;因此,就只能换个思路,把一个Agent拆分成多个Agent,比如说第一个Agent不添加绘图工具,只实现数据分析的功能;然后再用另一个Agent实现绘图的功能。
这样两个Agent虽然实现起来更复杂一点,但从执行过程上来看其相对是可控的;即使其中某个Agent的效果不好或有什么问题,那么可以随时换成另一个;而这也刚好符合软件设计中的解耦思想。
虽然从理论上来说,把一个Agent拆分成两个或多个Agent使得执行过程更加可控,且也能达到相同的效果。

但等到真正把Agent拆分之后又发现了一个新的问题,那就是多个Agent之间怎么协同;从执行逻辑上来看,应该是先调用数据分析Agent,然后再调用绘图Agent;但这里就有一个问题,怎么控制其执行顺序。
虽然可以通过硬编码的方式让两个Agent顺序执行,但这同样会面临一个问题。如果需求突然不需要绘图工具了怎么办,或者说需要根据用户的语义判断是否需要生成图表,这时硬编码的方式就不合适了。
其次,在多个Agent执行过程中,数据怎么进行流转,使用硬编码的方式,还是其它方式?
虽然在Langgraph中提供了状态图,可以用来控制数据的流转;但并不是每个Agent输出的都是格式化的数据,特别是在具体需求不明的情况下,需要根据用户的需求生成不同格式化的数据;这时数据的格式化就成了一个难题。

虽然可以让大模型自己解析上层Agent输出的数据,但大模型本身就是不可控;这也意味着整个系统的稳定性是不可控的。
所以,在这种相对复杂的应用场景下,使用单个或多个Agent实现业务功能都存在各种各样的问题;而遇到这种问题应该怎么解决?
说实话遇到这种问题作者也没什么好的解决方案;只能尽量保证每个环节达到最优解,最后得到整体最优解。
(文:AI探索时代)