關于智能體 Agent 的實現技術之思維鏈和函數調用 (function call) 的思考
Agent技術也被業界稱為智能體技術,本質上是使得大模型具備獨立思考和解決問題的能力;被廣泛應用于各種應用場景,而且也被稱為是實現通用人工智能的一種技術手段。
但在此之前對于智能體的理解比較膚淺,而今天突然發現原來智能體沒我們想象中的那么簡單,也沒想象中的那么復雜。
今天我們就從Agent的兩個實現技術之思維鏈和函數調用來重新理解智能體。
智能體和思維鏈以及函數調用
在之前對于智能體的理解僅僅停留在問題表面,那就是可以使用思維鏈技術?函數調用的方式實現一個智能體;但沒有真正理解什么是智能體,也沒有真正理解思維鏈技術和函數調用技術,甚至很多時候把它們混為一談。
今天我們來更加深入的理解一下智能體,思維鏈和函數調用這三個概念,以及其中的區別與聯系。
1. 智能體
首先在關于智能體的概念有一個經典的結構圖,如下圖所示,智能體具備工具,記憶,規劃和行動的能力。
其實從本質上來說,就是讓智能體能夠像真正的人類一樣去處理問題,具備獨立思考,使用工具并付諸行動的能力;而由于大模型不具備記憶的能力,因此記憶也是智能體中很重要的一環。
所以簡單來說,就是智能體就是讓基于大模型構建的具有獨立思考和規劃并且能夠調用外部攻擊去執行任務的一個集合體。
所以,我們不要被表象所迷惑,智能體沒有任何標準的形態,也沒有任何標準的形式,其實現過程也是千奇百怪;而目的只有一個,那就是能夠獨立解決問題,即使僅僅只是某個領域內的問題。
但大模型怎么才能具備思考能力,以及調用外部工具的能力呢?
這就用到了以下兩種技術,思維鏈和函數調用。
思維鏈使得大模型具備獨立思考的能力,而函數調用使得大模型具備使用外部工具的能力;要知道人和動物的根本區別就是是否會制造和使用工具。
2. 思維鏈技術
思維鏈技術說起來很高大上,其實簡單來說就是我們平常面對復雜問題的拆解和規劃能力。
思維鏈是指模型在解決問題時,通過生成中間推理步驟(類似于人類的思考過程)來逐步推導出最終答案。這種方法特別適合解決復雜問題,如數學題、邏輯推理等。
面對復雜的問題,我們一般不可能做到一步到位,因此常見的做法就是把問題拆解成多個具備可行性的子任務,然后一步一步地去完成。
而這就是思維鏈技術產生的基本思想,而具體操作起來還有zero-shot和few-shot等,也就是零樣本提示和少量樣本提示。
而目的只有一個,就是讓大模型能夠更好地推理和拆解任務。
當然,思維鏈技術經過這幾年的發展又有了新的理論和實踐,比如思維樹等;但本質上思維鏈的目的就是獨立思考,任務拆解。
3. 函數調用
函數調用其實是一項獨立的技術和大模型并沒有直接關系,而且市面上有些模型集成了函數調用的能力,而有些模型并沒有集成此能力。
而函數調用從技術的角度來說就是接口調用,只不過是讓大模型自己根據函數的定義,使用思維鏈的方式去規劃和調用相應的函數,以此來解決實際的問題。
這玩意就相當于給大模型集成了一個網絡請求的功能,然后讓大模型根據具體的需求自己去選擇和組裝請求參數,并解析結果。
當然,智能體在具體的開發過程中還存在各種各樣的問題,而這也直接導致智能體在應用過程中的安全性問題;比如說大模型理解偏差無法準確調用相應的函數;比如查詢天氣的時候,調了一個地圖函數接口。
智能體技術是人工智能技術應用的一個重要方向,但由于大模型意圖識別不準確的問題,也給智能體的應用帶來了很大的技術挑戰;雖然說一些模型服務商提供了一些解決方案,但具體來說還是擁有一些潛在的風險。
當然,智能體不僅僅只依靠思維鏈和函數調用技術,還有一些其它技術的使用;如工作流,通過配置工作流的方式來降低模型犯錯的概率;典型的就是字節跳動的coze扣子平臺。
扣子地址:https://www.coze.cn/open/docs/guides
最后再遺留一個問題,讓大家思考一下。思維鏈技術是怎么實現的,它和NLP有直接關系嗎?如果有其關系是什么?與神經網絡又有什么關系?以及大模型是怎么具備函數調用能力的呢?
所以,你現在理解NLP,神經網絡,思維鏈,函數調用和Agent 智能體的聯系和區別了嗎?