關于Agent在實際開發過程中遇到的問題記錄 原創
?“ 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探索時代??? 作者:DFires
