解碼通用 AI Agent:七步構建你的智能系統 原創
編者按: 如何才能打造一個能夠靈活應對多樣場景、高效執行復雜任務的通用智能體系統?傳統的硬編碼流程已經無法滿足快速變化的需求,而簡單的提示詞模板又顯得過于僵化和脆弱。
本文作者詳細闡述了從零構建通用 LLM Agent 的七個關鍵步驟,為讀者提供了一個從模型選擇、控制邏輯設計到工具集構建、規劃后續行動的完整路徑。這套方法論不僅僅來自理論推演,更凝聚了作者在實際項目中的寶貴經驗。通過對模型能力、行為模式、內存管理等關鍵環節的深入剖析,本文為讀者呈現了一個真實的、可落地的通用 AI 智能體構建藍圖。
作者 | Maya Murad
編譯 | 岳揚
LLM Agent 高層次概述(圖片由原文作者提供)
為什么要構建通用 Agent?因為這是一個很好的工具,可以為我們的目標使用場景提供原型,并為設計我們自己的定制 Agent 架構奠定基礎。
在我們繼續深入之前,先快速介紹一下 LLM Agent。如果您已經了解,可以跳過這部分。
01 什么是 LLM Agent?
LLM Agent 是一種程序,其執行邏輯由底層模型控制。
從獨立的 LLM 到具備 Agent 功能的系統。(圖片由原文作者提供)
LLM Agent 與簡單的少量樣本提示(few-shot prompting)或預設工作流程的不同之處在于,它能夠制定并調整執行用戶查詢所需的步驟。 當擁有諸如代碼執行或網絡搜索等工具集的訪問權限時,Agent 能夠自主決定使用何種工具、如何使用,并依據輸出結果進行迭代優化。這種靈活性使得系統能夠以極低的配置需求應對多樣化的場景。
LLM Agent 架構譜系。(圖片由原文作者提供)
Agent 架構存在于一個連續的變化范圍內,從固定工作流程的可靠性到 autonomous agents 的高度靈活性。例如,像檢索增強生成(RAG)[1]這樣的預設流程,可以通過加入自我反思循環(self-reflection loop)來提升改進,使得程序在初次響應不充分時能夠進行改進。另一方面,ReAct[2] Agent 可以配備預設流程作為其工具之一,實現一種既靈活又有條理的處理方式。架構的選擇最終應根據具體應用場景以及可靠性與靈活性之間的平衡需求來決定。
想要更全面的了解,請觀看此視頻[3]。
02 讓我們從頭開始打造一款通用 LLM Agent
第一步:挑選合適的 LLM
挑選合適的模型是實現預期性能的關鍵。在決策時,需考慮多個因素,如版權許可、成本和語言支持。對于構建 LLM Agent 來說,最關鍵的考慮因素是模型在核心任務上的表現,例如編程、調用工具和邏輯推理。以下是一些評估標準:
- 大規模多任務語言理解(MMLU)[4](用于推理能力評估)
- 伯克利大學的函數調用排行榜[5](用于工具的選擇與調用能力評估)
- HumanEval[6] 和BigCodeBench[7] (用于編程能力評估)
此外,模型的處理窗口大小也非常重要。Agent 的工作流程可能會消耗大量 token —— 有時甚至超過 10 萬個 —— 因此,更大的處理窗口將大大提高處理效率。
當前值得關注的模型(本文撰寫時)包括:
- 前沿模型:GPT4-o[8],Claude 3.5[9]
- 開源模型:Llama 3.2[10],Qwen 2.5[11]
一般來說,模型越大,性能越優越。但能夠在本地運行的小型模型也是一個不錯的選擇。小型模型通常適用于較為簡單的場景,并且可能只能與一到兩個基礎工具對接。
第二步:設定智能體的控制邏輯(亦稱為通信結構)
單智能體(single Agent)架構圖示。(圖片由原文作者創作)
簡單大語言模型(LLM)與智能體(Agent)之間的核心差異,主要體現在系統提示詞上。
就 LLM 而言,系統提示詞[12]是指在模型開始處理用戶查詢前,提供給模型的一系列指令和背景信息。
我們可以通過系統提示詞來編碼大語言模型應展現的智能體行為。
以下是一些常見的智能體行為模式,它們可以根據您的具體需求進行調整:
- 工具運用:智能體判斷何時應將問題轉交給適當的工具處理,或是依賴自身知識庫。
- 自我反思:智能體在回復用戶前,會審視并修正自己的答案。大多數 LLM 系統也可以加入這一反思過程。
- Reason-then-Act(ReAct):智能體通過反復推理來確定解決問題的方法,執行操作,觀察結果,并決定是否需要進一步行動或直接給出回答。
- Plan-then-Execute:智能體通過將任務細分為多個子步驟(如有必要)來進行事前規劃,然后逐一執行這些步驟。
在構建通用單智能體時,ReAct 和 Plan-then-Execute 這兩種模式通常是起步的最佳選擇。
常見智能體行為模式概覽。(圖片由原文作者創作)
為了有效地實現這些行為模式,我們需要對提示詞進行精心設計。可能還需要采用結構化生成技術[13],這意味著會調整 LLM 的輸出,使其符合特定的格式或架構,從而確保智能體的回復與我們所追求的溝通風格保持一致。
舉例:下面是 Bee Agent Framework[14] 中一個 ReAct 風格智能體的系統提示詞片段。
第三步:設定智能體的核心指令
我們往往會想當然地認為,大語言模型(LLMs)一開箱就能提供一系列功能。雖然其中某些功能非常出色,但并非所有功能都能滿足我們的具體需求。要想實現期望的性能表現,就需要在系統提示詞中詳細列出應該包含以及不應該包含的功能。
這可能涉及以下指令:
- 智能體的名稱與職責:智能體的命名及其預期執行的任務。
- 語言風格與簡潔性:智能體在交流時應該保持的正式或隨意程度,以及信息傳達的簡潔性。
- 工具使用時機:確定何時應該利用外部工具,何時依賴模型自身的知識庫。
- 錯誤處理:當工具使用或流程執行出現問題時,智能體應采取的行動。
示例:以下摘錄自 Bee Agent Framework[14] 的操作指南部分。
第四步:定義并優化核心工具集
工具就是賦予智能體超能力的魔法。只需一套定義明確的工具,就能實現廣泛的應用功能。重要的工具包括代碼執行、網絡檢索、文檔讀取和數據解析等。
對于每一項工具,都需要定義以下信息,并將其融入系統提示詞之中:
- Tool Name:為這項功能起一個獨特且具描述性的名稱。
- Tool Description:清晰地闡述該工具的作用及其使用時機。這有助于智能體判斷何時選用合適的工具。
- Tool Input Schema:這是一個框架,它規定了必需和可選的參數、參數類型以及所有約束條件。智能體根據用戶的提問,利用這個框架來填充所需的輸入。
- 提供一個指示或者指南,告訴用戶或者開發者這個工具應該在哪里以及如何被運行。
例如:以下是從 Langchain 社區摘錄的 Arxiv 工具實現片段[15],需要 ArxivAPIWrapper[16] 的支持。
在某些場景下,為了達到預期的性能,我們需要對工具進行優化。這可能需要通過微調工具名稱或描述來進行提示詞工程,設置高級配置來處理常見問題,或是過濾、篩選工具的輸出結果。
第五步:確立內存管理策略
大語言模型(LLMs)受限于它們的上下文窗口大小 —— 也就是它們一次性能夠“記下”的 tokens 數量。在多輪對話中,過往互動、工具輸出的長文本或者是 Agent 所依賴的額外上下文信息,都可能迅速占滿內存空間。因此,制定一個有效的內存管理策略是非常重要的。
在這里,所謂的“內存”是指智能體(Agent)存儲、調用并利用歷史交互信息的能力。這種能力使得智能體能夠持續跟蹤對話上下文,基于之前的對話來優化回答,從而提供更加定制化的用戶體驗。
常見的內存管理策略包括:
- Sliding Memory:只保留最近 k 輪對話的記憶,較早的對話則被舍棄。
- Token Memory:只記下最近 n 個 tokens,其余的則被遺忘。
- Summarized Memory:每輪對話后,使用 LLM 對對話內容進行總結摘要,并丟棄原始信息。
另外,我們還可以利用 LLM 來識別關鍵信息(key moments),并將其存儲在長期記憶中。這樣,智能體就能“記住”用戶的重要信息,使用戶體驗更加個性化。
我們目前所討論的五個步驟為創建智能體奠定了基礎。那么,如果在這個階段我們通過 LLM 處理用戶查詢,會發生什么呢?
答案是:你會得到一段未經處理的文本輸出。(圖片由作者提供)
示例如下:
此時,智能體會生成一段原始的文本輸出。那么,我們如何確保智能體能夠執行后續操作呢?這就需要引入解析和編排機制了。
第六步:解析智能體(Agent)的原始輸出
解析器的作用是將原始數據轉換成應用程序能夠識別和使用的數據格式(例如,帶有特定屬性的對象)。
對于我們正在構建的智能體,解析器必須能夠辨認出我們在第二步中設定的通信結構,并將其轉換成結構化數據輸出,例如 JSON 格式。這樣做可以讓應用程序更加便捷地處理和執行智能體的后續動作。
備注:某些模型供應商,例如 OpenAI,可以默認提供可直接解析的輸出。而對于其他模型,尤其是那些開源模型,可能需要額外進行解析配置。
第七步:規劃智能體的后續行動
最后一步是建立編排邏輯。這一邏輯決定了 LLM 輸出內容結果之后的處理流程。依據輸出內容,系統將執行以下任一操作:
- 執行工具調用,或者
- 給出回應—— 這可能是對用戶查詢的直接回答,也可能是為了獲取更多信息而提出的后續問題。
擴展的單智能體架構圖示。(圖片由原文作者提供)
如果觸發了工具調用,工具的輸出信息會被送回 LLM(作為其工作記憶的一部分)。LLM 將據此決定如何利用這些新數據:是繼續進行工具調用,還是直接向用戶返回答案。
以下是在代碼中實現這種編排邏輯的一個示例:
大功告成!現在,你已經有了一個能夠應對多種場景的智能體系統 —— 無論是進行競爭分析、深入研究,還是實現復雜工作流程的自動化。
03 多智能體(multi-agent)系統在什么情況下派上用場?
盡管當前 LLM 的表現令人印象深刻,但它們在處理海量信息時卻顯得力不從心[17]。一旦上下文過多或工具使用過雜,模型便可能不堪重負,導致性能下滑。面向多種用途的單智能體系統最終會觸及這一上限,尤其是在它們對 token 的消耗量之大已是眾所周知。
對于某些使用場景,部署多智能體系統或許更為合適。通過將任務分攤給多個智能體,可以有效避免單一 LLM Agent 的上下文負載過重,從而提高整體的執行效率。
盡管如此,通用的單智能體系統仍然是原型開發的一個極好起點。它能幫助我們迅速驗證使用場景,并發現系統何時開始出現故障。在這個過程中,你將能夠:
- 洞察哪些任務環節確實能通過 Agent 模式得到優化。
- 確定可以作為獨立流程分離出來,成為更大工作流程中一環的部分。
- 從單智能體起步,這樣能夠獲得他人寶貴的經驗、見解,以便在構建更復雜系統時調整和優化策略。
04 如何開始上手?
已經迫不及待想要開始構建智能體了嗎?使用框架是快速測試和迭代智能體配置的好方法。
- 如果你打算使用 Llama 3 這樣的開源模型,不妨試試 Bee Agent Framework[18] 提供的初始模板[19]。
- 如果你打算使用 OpenAI 這樣的前沿模型,試試 LangGraph[20] 提供的教程[21]可能會給你帶來幫助。
Thanks for reading!
Hope you have enjoyed and learned new things from this blog!
About the authors
Maya Murad
Interdisciplinary techie currently tinkering with LLM agents. I write about AI, innovation ecosystems, and my creative coding experiments.
END
本期互動內容 ??
?你在構建通用智能體(general-purpose agents)方面積累了哪些經驗?歡迎在評論區留言分享你的心得!
??文中鏈接??
[1]??https://research.ibm.com/blog/retrieval-augmented-generation-RAG??
[2]??https://www.promptingguide.ai/techniques/react??
[3]??https://www.youtube.com/watch?v=F8NKVhkZZWI&t=1s??
[4]??https://paperswithcode.com/sota/multi-task-language-understanding-on-mmlu??
[5]??https://gorilla.cs.berkeley.edu/leaderboard.html??
[6]??https://evalplus.github.io/leaderboard.html??
[7]??https://huggingface.co/spaces/bigcode/bigcode-models-leaderboard??
[8]??https://platform.openai.com/docs/models#gpt-4o??
[9]??https://www.anthropic.com/news/claude-3-5-sonnet??
[10]??https://huggingface.co/collections/meta-llama/llama-32-66f448ffc8c32f949b04c8cf??
[11]??https://huggingface.co/collections/Qwen/qwen25-66e81a666513e518adb90d9e??
[12]??https://promptengineering.org/system-prompts-in-large-language-models/??
[13]??https://python.langchain.com/v0.1/docs/modules/model_io/chat/structured_output/??
[14]??https://github.com/i-am-bee/bee-agent-framework/blob/main/src/agents/bee/prompts.ts??
[17]??https://arxiv.org/html/2410.18745v1??
[18]??https://github.com/i-am-bee/bee-agent-framework??
[19]??https://github.com/i-am-bee/bee-agent-framework-starter??
[20]??https://langchain-ai.github.io/langgraph/??
[21]??https://langchain-ai.github.io/langgraph/how-tos/react-agent-from-scratch/??
原文鏈接:
??https://towardsdatascience.com/build-a-general-purpose-ai-agent-c40be49e7400??
