什么是AI Agent?
1概念
在計算機、人工智能專業(yè)技術(shù)領(lǐng)域,一般將Agent譯為“智能體”,其定義是在一定的環(huán)境中體現(xiàn)出自治性、反應(yīng)性、社會性、預(yù)動性、思辨性(慎思性)、認(rèn)知性等一種或多種智能特征的軟件或硬件實體。AI Agent則是指由LLM驅(qū)動的智能體。目前它還沒有一個被廣泛接受的定義,但我們可以把它描述成這樣一個系統(tǒng):利用LLM推理問題,能自行創(chuàng)建解決問題的計劃,會借助一系列工具來執(zhí)行計劃。
簡而言之,AI Agent是一個具有復(fù)雜推理能力、記憶力以及執(zhí)行任務(wù)能力的系統(tǒng),如下圖所示:
AI Agent由以下核心組件構(gòu)成:
- 智能體核心
中央?yún)f(xié)調(diào)模塊,管理核心邏輯和智能體行為特點,能進行關(guān)鍵決策。我們需要在這里定義以下內(nèi)容:
智能體的總體目標(biāo)智能體要達成的總體目標(biāo)和目的。
執(zhí)行工具智能體可以使用的所有工具的簡短列表(或“用戶手冊”)。
如何使用計劃模塊的解釋說明詳細(xì)說明不同計劃模塊的作用,以及在什么情況下使用。
相關(guān)記憶這是一個動態(tài)部分,填充與用戶過往對話中最相關(guān)的內(nèi)容?!跋嚓P(guān)性”是根據(jù)用戶提出的問題判斷的。
智能體個性(可選)如果要求LLM偏向于使用某些類型的工具,或者在最終響應(yīng)里展現(xiàn)某些特點,則可以將所需個性描述清楚。
下圖是一個求解用戶問題“2024財年Q1與Q2之間,利潤增長了多少?”的提示模板:
當(dāng)把提示輸入給LLM后,LLM做出的決策是需要使用搜索工具:
- 記憶模塊
記憶模塊扮演非常重要的作用,記錄了智能體內(nèi)部日志以及和用戶交互歷史。有2種類型的記憶模塊:
短期記憶智能體嘗試回答用戶提出的單個問題而經(jīng)歷的思考和行動。通常就是提示工程中的上下文,超過上下文的限制后,LLM就會忘記之前輸入的信息。
長期記憶用戶和智能體交互相關(guān)的行為和想法,包含跨度數(shù)周或數(shù)月的對話記錄。通常是一個外部的向量庫,可以幾乎無限地保留和快速取回歷史信息。
記憶模塊不僅需要基于語義相似性的檢索。通常,綜合評分由語義相似性、重要性、新近程度,以及其它特定指標(biāo)構(gòu)成。記憶模塊用于檢索特定信息。
- 工具集
工具集是定義明確的可執(zhí)行工作流,智能體使用它們來執(zhí)行任務(wù)。通常,工具集就是專門的第三方API。
例如,智能體可以使用RAG(檢索增強生成)根據(jù)上下文生成答案;使用代碼解釋器(如Python腳本解釋器)來編程求解復(fù)雜任務(wù);使用API從互聯(lián)網(wǎng)搜索信息;或者使用任何簡單的API服務(wù),如使用天氣API獲取天氣預(yù)報、使用即時消息API收發(fā)消息。
- 計劃模塊
復(fù)雜的問題,例如分析一組財務(wù)報表以回答上層業(yè)務(wù)問題,通常需要循序漸進的方法。對于由LLM驅(qū)動的智能體,計劃能力本質(zhì)是Prompt Engineering(提示工程)很多高級玩法的高級實踐??梢酝ㄟ^使用兩種技術(shù)的組合來應(yīng)對復(fù)雜問題:
任務(wù)和問題分解
復(fù)合問題或推斷信息需要某種形式的分解。例如這個問題“2024財年Q1與Q2之間,利潤增長了多少?”
該問題可以分解為多個子問題:
“Q1的利潤是多少?”
“Q2的利潤是多少?”
“上述兩項結(jié)果之間的差是多少?”
專門的AI Agent必須能主導(dǎo)這種分解,例如采用下面的提示模版:
當(dāng)填入具體問題輸入給LLM后,LLM會做出問題拆解結(jié)果的響應(yīng):
反思或批判
ReAct(推理和動作協(xié)同)、Reflexion(反思)、Chain of Thought(思維鏈)和Graph of Thought(思維圖)等技術(shù)已成為基于批判或基于證據(jù)的提示框架。它們已被廣泛用于提高LLM的推理能力和響應(yīng)能力。這些技術(shù)還可用于優(yōu)化智能體生成的執(zhí)行計劃。
例如LangChain智能體框架支持的ReAct,即Reason+Act模式,把復(fù)雜問題拆開,有些缺少的內(nèi)容通過工具從外部獲取,然后補充到問題回答里。
ReAct的提示模版一般包含這些內(nèi)容的多次重復(fù):
舉例問題“除了Apple Remote之外,還有什么設(shè)備可以控制Apple Remote原生設(shè)計用來交互的程序?”
ReAct會按如下的步驟思考和行動:
- 第1次思考:我需要找到Apple Remote原生設(shè)計用來交互的程序。第1次行動:去搜索引擎搜索【Apple Remote】。從而取得關(guān)于Apple Remote的介紹。
- 第2次思考:在結(jié)果中找到Apple Remote原生設(shè)計用來控制Front Row程序,我需要查找Front Row的信息。第2次行動:搜索【Front Row】。搜索引擎返回沒找到相關(guān)信息。
- 第3次思考:我應(yīng)該加上“軟件”重新搜索。第3次行動:搜索【Front Row(軟件)】。取得Front Row軟件的介紹。
- 第4次思考:在結(jié)果中發(fā)現(xiàn)關(guān)鍵信息:Front Row軟件可以被Apple Remote或鍵盤多功能按鍵控制。第4次行動:完成,返回用戶答案【鍵盤多功能按鍵】。
這個過程如下圖所示:
2挑戰(zhàn)
基于LLM去構(gòu)建Agent,目前也有一系列挑戰(zhàn) :
- 有限的上下文長度?
有限的上下文長度限制了對歷史信息、詳細(xì)指令、API調(diào)用上下文、API響應(yīng)的容納量。Agent的系統(tǒng)設(shè)計必須在有限的通信帶寬中工作。與之矛盾的是,像“自我反思”這種機制若想要取得更好的效果,則需要更長甚至無限的上下文窗口。雖然向量存取能提供訪問更大知識庫的能力,但它的表現(xiàn)力并不像上下文內(nèi)的注意力機制那么強大。
- 長期計劃和任務(wù)拆解能力不足?
在針對長期歷史做計劃、有效地探索解決問題時,Agent還面臨挑戰(zhàn)。LLM在面對未知錯誤時,調(diào)整計劃顯得非常艱難。和人類從失敗教訓(xùn)中學(xué)習(xí)相比,LLM還不夠強大。
- 自然語言接口不夠可靠?
當(dāng)前的Agent體系非常依賴使用自然語言作為LLM和外部組件(比如記憶和工具)的接口。然而,LLM本身的輸出是存有疑慮的,LLM經(jīng)常犯語法格式錯誤,也時常產(chǎn)生違抗表現(xiàn)(比如不遵照用戶指令)。以致于很多Agent都在解析模型輸出上花了很多功夫。
3展望
生成式AI的智能革命演化至今,人類與AI協(xié)同出現(xiàn)了三種模式:
在Agents(智能體)模式下人類設(shè)定目標(biāo)和提供必要的資源,然后AI獨立地承擔(dān)大部分工作,最后人類監(jiān)督進程以及評估最終結(jié)果。這種模式下,AI充分體現(xiàn)了智能體的互動性、自主性和適應(yīng)性特征,接近于獨立的行動者,而人類則更多地扮演監(jiān)督者和評估者的角色。Agents模式相較于Embedding(嵌入)模式、Copilot(副駕駛)模式無疑更為高效,或?qū)⒊蔀槲磥砣藱C協(xié)同的主要模式。
AI Agent是人工智能成為基礎(chǔ)設(shè)施的重要推動力?;仡櫦夹g(shù)發(fā)展史,技術(shù)的盡頭是成為基礎(chǔ)設(shè)施,比如電力成為像空氣一樣不易被人們察覺,但是又必不可少的基礎(chǔ)設(shè)施,還如云計算等。幾乎所有的人都認(rèn)同,人工智能會成為未來社會的基礎(chǔ)設(shè)施。而智能體正在促使人工智能基礎(chǔ)設(shè)施化。AI Agent能夠適應(yīng)不同的任務(wù)和環(huán)境,并能夠?qū)W習(xí)和優(yōu)化其性能,使得它可以被應(yīng)用于廣泛的領(lǐng)域,進而成為各個行業(yè)和社會活動的基礎(chǔ)支撐。
參考文獻
[1]https://arxiv.org/abs/2304.03442
[2] https://arxiv.org/abs/2210.03629
[3] https://lilianweng.github.io/posts/2023-06-23-agent/
[4] https://zhuanlan.zhihu.com/p/641322714
[5] https://developer.nvidia.com/blog/introduction-to-llm-agents/
[6] https://developer.nvidia.com/blog/building-your-first-llm-agent-application/
[7] https://zhuanlan.zhihu.com/p/676828569
[8] https://zhuanlan.zhihu.com/p/643799381
[9] https://zhuanlan.zhihu.com/p/676544930
[10] https://zhuanlan.zhihu.com/p/664281311
[11] https://python.langchain.com/docs/modules/agents/
