關于大模型智能體意圖識別不準確問題:function call 的缺陷
最近在研究大模型智能體也就是Agent的過程中,遇到了一個很嚴重的問題,直接影響到Agent的質量和效果;那就是意圖識別不準確,也可以說是Agent的幻覺問題。
其產生的原因就在于大模型有時無法準確識別出用戶意圖,無法準確調用相應的函數。
意圖識別不準確
現在大模型技術在應用方面,主要有兩大方向;其一就是大模型的創(chuàng)作能力,簡單來說就是內容生成方面,如生成圖片,文字,視頻,也包括RAG等。另一方向就是智能體,其目的是使大模型能夠像人類一樣,通過思考加使用外部工具的方式,能夠自動化處理一些問題。
比如說,讓大模型遇到不懂的問題,可以自己上網搜索;需要使用一些第三方工具,比如說調用高德的地圖接口或者調用美團的下單接口去自主規(guī)劃旅行路線并訂購門票,酒店等。
這就是大模型的主要應用方向——智能體。
以上是關于大模型智能體的功能介紹,下面我們從技術實現的角度來研究智能體。
從技術的角度來說,實現智能體首先大模型需要具備“思考”的能力,也就是能夠自主規(guī)劃和拆解目標,把需求變成可行性的步驟;而這就是思維鏈技術。
而要想實現智能體不僅僅需要大模型具備“思考”的能力,同時還需要大模型能夠使用外部工具,簡單來說就是第三方接口。而這個在技術上怎么實現呢?
關于大模型調用外部工具接口的技術,就叫做function call 也就是函數調用;是通過給大模型提供一個函數列表,這個函數列表中描述了每個函數的功能,參數等;比如需要看地圖就調用地圖接口,需要看天氣就調用天氣接口等等。
雖然說函數調用從技術上來看挺簡單,但等到真正操作起來卻是很復雜的一件事;比如說作者目前就遇到了一個很嚴重的問題,就是意圖識別不明確問題。
簡單來說,你想實現一個Agent智能體,然后根據功能定義了一堆函數列表;然后告訴大模型根據用戶輸入的問題,去自主判斷調用那個函數。
也就是說,你要查天氣就去調用天氣接口,你要查地址就去調用地圖接口;而不是在查天氣的時候調用地址接口或者在查地址的時候調用天氣接口,這就是意圖識別。
如果說你的智能體涉及的功能比較少,需要調用的接口也比較少;可能還不會出現這個問題,但如果當你智能體的功能比較復雜時,需要調用多個不同的接口;這時大模型可能就會偶爾抽風,出現不知道或者調用錯誤的接口。
當然,這種現象并不僅僅只是大模型的問題,我們人類同樣也有可能出現這種問題。
舉例來說,有一輛三輪車和一輛小貨車,然后我說要拉東西你去把車開過來一下;這時你應該開三輪車還是小貨車?
作為一個需求來說,如果東西比較多,可能三輪車就無法滿足你的需求;而如果東西比較少,三輪車和貨車都可以滿足你的需求;當然,在實際操作的過程中,還需要考慮東西的體積,質量,路程等等。
但對大模型來說,三輪車和小貨車都是拉貨的,這時它可能就會識別出錯,在應該使用小貨車的時候,它開了一輛三輪車過來。
而這就是智能體函數調用中可能會經常出現的問題;但應該怎么解決這個問題呢?
說實話這種問題目前還沒有一個完美的解決方案,即使放到我們人類身上偶爾也會因為溝通或理解的問題導致出錯,在大模型上這種錯誤概率更是會被無限放大。
而我們只能盡可能的去避免這種問題的出現,而具體的解決辦法大概有以下幾種:
(1) 使用準確清晰的描述
那個函數到底的干啥的,有什么具體的功能,最好使用最細致的描述,使歧義盡可能的降低
(2) 使用多輪對話
通過多次交流,使得能夠更準確的理解需求;而這也是我們平常溝通過程中經常用的的方法。
(3) 使用分類模型
說白了意圖識別問題,本質上就是一個分類問題;你的描述越模糊分類越困難,因此可以使用專業(yè)的分類模型,來讓大模型確定自己的需求。
(4) 使用規(guī)則引擎
幫助大模型設計一套規(guī)則引擎,簡單來說就是當大模型出現模糊判斷的時候,應該怎么進行兜底;比如說增加人工判斷或者重新選擇的機會等。或者使用某種規(guī)則,不管意圖什么樣,只要滿足規(guī)則需求就去執(zhí)行。
總之,大模型智能體在具體實踐和技術研究中存在較大的事實差距;我們在使用的過程中需要根據具體的場景和問題,去優(yōu)化和完善我們的解決