簡介
AI代理代表了生成式AI的一個令人興奮的發展,使大型語言模型(LLMs)從助手演變為能夠採取行動的代理。AI代理框架使開發者能夠建立應用程式,讓LLMs能夠訪問工具和狀態管理。這些框架還增強了可見性,使用戶和開發者能夠監控LLMs計劃的行動,從而改善體驗管理。
這節課將涵蓋以下領域:
- 理解什麼是 AI Agent - AI Agent 到底是什麼?
- 探索四種不同的 AI Agent 框架 - 它們有什麼獨特之處?
- 將這些 AI Agent 應用於不同的使用案例 - 我們應該何時使用 AI Agent?
學習目標
完成這節課後,你將能夠:
- 解釋什麼是 AI 代理以及它們如何使用。
- 了解一些流行的 AI 代理框架之間的差異,以及它們的不同之處。
- 了解 AI 代理如何運作,以便使用它們建構應用程式。
什麼是 AI 代理?
AI代理是一個在生成式AI世界中非常令人興奮的領域。隨著這種興奮,有時會出現術語和其應用的混淆。為了保持簡單並包含大多數提到AI代理的工具,我們將使用這一定義:
AI Agents 允許大型語言模型(LLMs)透過提供狀態和工具來執行任務。
讓我們定義這些術語:
大型語言模型 - 這些是本課程中提到的模型,例如 GPT-3.5、GPT-4、Llama-2 等。
狀態 - 這指的是LLM正在工作的上下文。LLM使用其過去行動的上下文和當前上下文,指導其後續行動的決策。AI代理框架允許開發人員更容易地維護此上下文。
工具 - 為了完成使用者請求的任務以及 LLM 所規劃的任務,LLM 需要訪問工具。一些工具的範例可以是資料庫、API、外部應用程式甚至是另一個 LLM!
這些定義希望能在我們了解它們如何實現時,為你打下良好的基礎。讓我們來探索幾個不同的 AI Agent 框架:
LangChain Agents
LangChain Agents 是我們上述定義的實現。
要管理狀態,它使用一個名為 AgentExecutor
的內建函式。這個函式接受定義的 agent
和可用的 tools
。
Agent Executor
也儲存聊天記錄以提供聊天的上下文。
LangChain 提供一個工具目錄,可以匯入到您的應用程式中,LLM 可以存取這些工具。這些工具由社群和 LangChain 團隊製作。
然後你可以定義這些工具並將它們傳遞給 Agent Executor
。
可見性是討論 AI 代理時另一個重要方面。應用程式開發人員需要了解 LLM 使用的是哪種工具以及為什麼。為此,LangChain 團隊開發了 LangSmith。
AutoGen
下一個我們將討論的 AI Agent 框架是 AutoGen。AutoGen 的主要焦點是對話。Agents 既是可對話的也是可定制的。
Conversable - LLMs 可以啟動並繼續與另一個 LLM 的對話以完成任務。這是通過建立 AssistantAgents
並給予它們特定的系統訊息來完成的。
autogen.AssistantAgent( name="Coder", llm_config=llm_config, ) pm = autogen.AssistantAgent( name="Product_manager", system_message="Creative in software product ideas.", llm_config=llm_config, )
可自訂 - Agent 不僅可以定義為 LLMs,也可以是使用者或工具。作為開發者,你可以定義一個 UserProxyAgent
,負責與使用者互動以獲取完成任務的反饋。這些反饋可以繼續執行任務或停止它。
user_proxy = UserProxyAgent(name="user_proxy")
狀態和工具
為了改變和管理狀態,助手代理生成Python程式碼來完成任務。
這裡是一個過程的範例:
定義 LLM 的系統訊息
system_message="對於天氣相關的任務,只使用提供給你的函式。任務完成後回覆 TERMINATE。"
此系統訊息指導此特定 LLM 哪些函式與其任務相關。請記住,使用 AutoGen 時,您可以有多個具有不同系統訊息的 AssistantAgents。
聊天由使用者發起
user_proxy.initiate_chat( chatbot, message="我計劃下週去紐約旅行,你能幫我選擇穿什麼嗎?", )
此訊息來自 user_proxy (人類) 是啟動代理探索應執行的可能函式的過程。
函式被執行
聊天機器人 (to user_proxy):
***** 建議的工具呼叫: get_weather ***** 參數: {"location":"New York City, NY","time_periond:"7","temperature_unit":"Celsius"} ******************************************************** --------------------------------------------------------------------------------
>>>>>>>> 執行函式 get_weather... user_proxy (to 聊天機器人): ***** 呼叫函式 "get_weather" 的回應 ***** 112.22727272727272 EUR ****************************************************************
一旦初始聊天處理完成,代理將發送建議的工具來呼叫。在這種情況下,它是一個名為 get_weather
的函式。根據您的配置,這個函式可以由代理自動執行和讀取,或者可以根據用戶輸入來執行。
你可以找到AutoGen 程式碼範例來進一步探索如何開始建構。
Taskweaver
接下來我們將探討的代理框架是 Taskweaver。它被稱為「程式碼優先」代理,因為它不僅僅是嚴格地與 strings
一起工作,它還可以與 Python 中的 DataFrames 一起工作。這對於資料分析和生成任務變得非常有用。這可以是建立圖表或生成隨機數等事情。
狀態和工具
為了管理對話的狀態,TaskWeaver 使用了 Planner
的概念。Planner
是一個 LLM,它接收用戶的請求並規劃出需要完成的任務,以滿足這些請求。
為了完成任務,Planner
會接觸到稱為 Plugins
的工具集合。這可以是 Python 類別或一般的程式碼解釋器。這些插件被儲存為嵌入,以便 LLM 能夠更好地搜尋正確的插件。
這裡是一個處理異常檢測的插件範例:
類別 AnomalyDetectionPlugin(Plugin): def __call__(self, df: pd.DataFrame, time_col_name: str, value_col_name: str):
程式碼在執行前會被驗證。Taskweaver 中管理上下文的另一個功能是 experience
。Experience 允許將對話的上下文長期存儲在 YAML 檔案中。這可以配置,使得 LLM 隨著時間的推移在某些任務上有所改進,前提是它接觸到先前的對話。
JARVIS
最後我們將探討的代理框架是 JARVIS。JARVIS 的獨特之處在於它使用 LLM 來管理對話的 state
,而 tools
是其他 AI 模型。每個 AI 模型都是專門的模型,執行某些任務,例如物件檢測、轉錄或圖像標註。
LLM 作為一個通用模型,接收來自使用者的請求並識別特定任務及完成任務所需的任何參數/資料。
[{"task": "物件-detection", "id": 0, "dep": [-1], "args": {"image": "e1.jpg" }}]
LLM 然後以專門的 AI 模型能夠解釋的方式格式化請求,例如 JSON。一旦 AI 模型根據任務返回其預測,LLM 便會接收回應。
如果需要多個模型來完成任務,它還會解釋這些模型的回應,然後將它們整合起來生成對用戶的回應。
範例如下顯示當使用者請求描述和計算圖片中的物件時,這將如何運作:
作業
為了繼續學習可以使用 AutoGen 建構的 AI 代理:
- 一個模擬教育初創公司不同部門商務會議的應用程式。
- 建立系統訊息,引導LLM理解不同角色和優先事項,並使使用者能夠提出新的產品創意。
- 然後,LLM應從每個部門生成後續問題,以完善和改進提案和產品創意。
學習不止於此,繼續旅程
完成本課程後,請查看我們的生成式 AI 學習集合以繼續提升您的生成式 AI 知識!