自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng) 原創(chuàng)

發(fā)布于 2024-12-23 10:33
瀏覽
0收藏


編者按: 如何才能打造一個(gè)能夠靈活應(yīng)對(duì)多樣場(chǎng)景、高效執(zhí)行復(fù)雜任務(wù)的通用智能體系統(tǒng)?傳統(tǒng)的硬編碼流程已經(jīng)無(wú)法滿足快速變化的需求,而簡(jiǎn)單的提示詞模板又顯得過(guò)于僵化和脆弱。

本文作者詳細(xì)闡述了從零構(gòu)建通用 LLM Agent 的七個(gè)關(guān)鍵步驟,為讀者提供了一個(gè)從模型選擇、控制邏輯設(shè)計(jì)到工具集構(gòu)建、規(guī)劃后續(xù)行動(dòng)的完整路徑。這套方法論不僅僅來(lái)自理論推演,更凝聚了作者在實(shí)際項(xiàng)目中的寶貴經(jīng)驗(yàn)。通過(guò)對(duì)模型能力、行為模式、內(nèi)存管理等關(guān)鍵環(huán)節(jié)的深入剖析,本文為讀者呈現(xiàn)了一個(gè)真實(shí)的、可落地的通用 AI 智能體構(gòu)建藍(lán)圖。

作者 | Maya Murad

編譯 | 岳揚(yáng)

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

LLM Agent 高層次概述(圖片由原文作者提供)

為什么要構(gòu)建通用 Agent?因?yàn)檫@是一個(gè)很好的工具,可以為我們的目標(biāo)使用場(chǎng)景提供原型,并為設(shè)計(jì)我們自己的定制 Agent 架構(gòu)奠定基礎(chǔ)。

在我們繼續(xù)深入之前,先快速介紹一下 LLM Agent。如果您已經(jīng)了解,可以跳過(guò)這部分。

01 什么是 LLM Agent?

LLM Agent 是一種程序,其執(zhí)行邏輯由底層模型控制。

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

從獨(dú)立的 LLM 到具備 Agent 功能的系統(tǒng)。(圖片由原文作者提供)

LLM Agent 與簡(jiǎn)單的少量樣本提示(few-shot prompting)或預(yù)設(shè)工作流程的不同之處在于,它能夠制定并調(diào)整執(zhí)行用戶查詢所需的步驟。 當(dāng)擁有諸如代碼執(zhí)行或網(wǎng)絡(luò)搜索等工具集的訪問(wèn)權(quán)限時(shí),Agent 能夠自主決定使用何種工具、如何使用,并依據(jù)輸出結(jié)果進(jìn)行迭代優(yōu)化。這種靈活性使得系統(tǒng)能夠以極低的配置需求應(yīng)對(duì)多樣化的場(chǎng)景。

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

LLM Agent 架構(gòu)譜系。(圖片由原文作者提供)

Agent 架構(gòu)存在于一個(gè)連續(xù)的變化范圍內(nèi),從固定工作流程的可靠性到 autonomous agents 的高度靈活性。例如,像檢索增強(qiáng)生成(RAG)[1]這樣的預(yù)設(shè)流程,可以通過(guò)加入自我反思循環(huán)(self-reflection loop)來(lái)提升改進(jìn),使得程序在初次響應(yīng)不充分時(shí)能夠進(jìn)行改進(jìn)。另一方面,ReAct[2] Agent 可以配備預(yù)設(shè)流程作為其工具之一,實(shí)現(xiàn)一種既靈活又有條理的處理方式。架構(gòu)的選擇最終應(yīng)根據(jù)具體應(yīng)用場(chǎng)景以及可靠性與靈活性之間的平衡需求來(lái)決定。

想要更全面的了解,請(qǐng)觀看此視頻[3]。

02 讓我們從頭開(kāi)始打造一款通用 LLM Agent

第一步:挑選合適的 LLM

挑選合適的模型是實(shí)現(xiàn)預(yù)期性能的關(guān)鍵。在決策時(shí),需考慮多個(gè)因素,如版權(quán)許可、成本和語(yǔ)言支持。對(duì)于構(gòu)建 LLM Agent 來(lái)說(shuō),最關(guān)鍵的考慮因素是模型在核心任務(wù)上的表現(xiàn),例如編程、調(diào)用工具和邏輯推理。以下是一些評(píng)估標(biāo)準(zhǔn):

  • 大規(guī)模多任務(wù)語(yǔ)言理解(MMLU)[4](用于推理能力評(píng)估)
  • 伯克利大學(xué)的函數(shù)調(diào)用排行榜[5](用于工具的選擇與調(diào)用能力評(píng)估)
  • HumanEval[6] 和BigCodeBench[7] (用于編程能力評(píng)估)

此外,模型的處理窗口大小也非常重要。Agent 的工作流程可能會(huì)消耗大量 token —— 有時(shí)甚至超過(guò) 10 萬(wàn)個(gè) —— 因此,更大的處理窗口將大大提高處理效率。

當(dāng)前值得關(guān)注的模型(本文撰寫(xiě)時(shí))包括:

  • 前沿模型:GPT4-o[8],Claude 3.5[9]
  • 開(kāi)源模型:Llama 3.2[10],Qwen 2.5[11]

一般來(lái)說(shuō),模型越大,性能越優(yōu)越。但能夠在本地運(yùn)行的小型模型也是一個(gè)不錯(cuò)的選擇。小型模型通常適用于較為簡(jiǎn)單的場(chǎng)景,并且可能只能與一到兩個(gè)基礎(chǔ)工具對(duì)接。

第二步:設(shè)定智能體的控制邏輯(亦稱為通信結(jié)構(gòu))

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

單智能體(single Agent)架構(gòu)圖示。(圖片由原文作者創(chuàng)作)

簡(jiǎn)單大語(yǔ)言模型(LLM)與智能體(Agent)之間的核心差異,主要體現(xiàn)在系統(tǒng)提示詞上。

就 LLM 而言,系統(tǒng)提示詞[12]是指在模型開(kāi)始處理用戶查詢前,提供給模型的一系列指令和背景信息。

我們可以通過(guò)系統(tǒng)提示詞來(lái)編碼大語(yǔ)言模型應(yīng)展現(xiàn)的智能體行為。

以下是一些常見(jiàn)的智能體行為模式,它們可以根據(jù)您的具體需求進(jìn)行調(diào)整:

  • 工具運(yùn)用:智能體判斷何時(shí)應(yīng)將問(wèn)題轉(zhuǎn)交給適當(dāng)?shù)墓ぞ咛幚?,或是依賴自身知識(shí)庫(kù)。
  • 自我反思:智能體在回復(fù)用戶前,會(huì)審視并修正自己的答案。大多數(shù) LLM 系統(tǒng)也可以加入這一反思過(guò)程。
  • Reason-then-Act(ReAct):智能體通過(guò)反復(fù)推理來(lái)確定解決問(wèn)題的方法,執(zhí)行操作,觀察結(jié)果,并決定是否需要進(jìn)一步行動(dòng)或直接給出回答。
  • Plan-then-Execute:智能體通過(guò)將任務(wù)細(xì)分為多個(gè)子步驟(如有必要)來(lái)進(jìn)行事前規(guī)劃,然后逐一執(zhí)行這些步驟。

在構(gòu)建通用單智能體時(shí),ReAct 和 Plan-then-Execute 這兩種模式通常是起步的最佳選擇。

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

常見(jiàn)智能體行為模式概覽。(圖片由原文作者創(chuàng)作)

為了有效地實(shí)現(xiàn)這些行為模式,我們需要對(duì)提示詞進(jìn)行精心設(shè)計(jì)。可能還需要采用結(jié)構(gòu)化生成技術(shù)[13],這意味著會(huì)調(diào)整 LLM 的輸出,使其符合特定的格式或架構(gòu),從而確保智能體的回復(fù)與我們所追求的溝通風(fēng)格保持一致。

舉例:下面是 Bee Agent Framework[14] 中一個(gè) ReAct 風(fēng)格智能體的系統(tǒng)提示詞片段。

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

第三步:設(shè)定智能體的核心指令

我們往往會(huì)想當(dāng)然地認(rèn)為,大語(yǔ)言模型(LLMs)一開(kāi)箱就能提供一系列功能。雖然其中某些功能非常出色,但并非所有功能都能滿足我們的具體需求。要想實(shí)現(xiàn)期望的性能表現(xiàn),就需要在系統(tǒng)提示詞中詳細(xì)列出應(yīng)該包含以及不應(yīng)該包含的功能。

這可能涉及以下指令:

  • 智能體的名稱與職責(zé):智能體的命名及其預(yù)期執(zhí)行的任務(wù)。
  • 語(yǔ)言風(fēng)格與簡(jiǎn)潔性:智能體在交流時(shí)應(yīng)該保持的正式或隨意程度,以及信息傳達(dá)的簡(jiǎn)潔性。
  • 工具使用時(shí)機(jī):確定何時(shí)應(yīng)該利用外部工具,何時(shí)依賴模型自身的知識(shí)庫(kù)。
  • 錯(cuò)誤處理:當(dāng)工具使用或流程執(zhí)行出現(xiàn)問(wèn)題時(shí),智能體應(yīng)采取的行動(dòng)。

示例:以下摘錄自 Bee Agent Framework[14] 的操作指南部分。

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

第四步:定義并優(yōu)化核心工具集

工具就是賦予智能體超能力的魔法。只需一套定義明確的工具,就能實(shí)現(xiàn)廣泛的應(yīng)用功能。重要的工具包括代碼執(zhí)行、網(wǎng)絡(luò)檢索、文檔讀取和數(shù)據(jù)解析等。

對(duì)于每一項(xiàng)工具,都需要定義以下信息,并將其融入系統(tǒng)提示詞之中:

  • Tool Name:為這項(xiàng)功能起一個(gè)獨(dú)特且具描述性的名稱。
  • Tool Description:清晰地闡述該工具的作用及其使用時(shí)機(jī)。這有助于智能體判斷何時(shí)選用合適的工具。
  • Tool Input Schema:這是一個(gè)框架,它規(guī)定了必需和可選的參數(shù)、參數(shù)類型以及所有約束條件。智能體根據(jù)用戶的提問(wèn),利用這個(gè)框架來(lái)填充所需的輸入。
  • 提供一個(gè)指示或者指南,告訴用戶或者開(kāi)發(fā)者這個(gè)工具應(yīng)該在哪里以及如何被運(yùn)行。

例如:以下是從 Langchain 社區(qū)摘錄的 Arxiv 工具實(shí)現(xiàn)片段[15],需要 ArxivAPIWrapper[16] 的支持。

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

在某些場(chǎng)景下,為了達(dá)到預(yù)期的性能,我們需要對(duì)工具進(jìn)行優(yōu)化。這可能需要通過(guò)微調(diào)工具名稱或描述來(lái)進(jìn)行提示詞工程,設(shè)置高級(jí)配置來(lái)處理常見(jiàn)問(wèn)題,或是過(guò)濾、篩選工具的輸出結(jié)果。

第五步:確立內(nèi)存管理策略

大語(yǔ)言模型(LLMs)受限于它們的上下文窗口大小 —— 也就是它們一次性能夠“記下”的 tokens 數(shù)量。在多輪對(duì)話中,過(guò)往互動(dòng)、工具輸出的長(zhǎng)文本或者是 Agent 所依賴的額外上下文信息,都可能迅速占滿內(nèi)存空間。因此,制定一個(gè)有效的內(nèi)存管理策略是非常重要的。

在這里,所謂的“內(nèi)存”是指智能體(Agent)存儲(chǔ)、調(diào)用并利用歷史交互信息的能力。這種能力使得智能體能夠持續(xù)跟蹤對(duì)話上下文,基于之前的對(duì)話來(lái)優(yōu)化回答,從而提供更加定制化的用戶體驗(yàn)。

常見(jiàn)的內(nèi)存管理策略包括:

  • Sliding Memory:只保留最近 k 輪對(duì)話的記憶,較早的對(duì)話則被舍棄。
  • Token Memory:只記下最近 n 個(gè) tokens,其余的則被遺忘。
  • Summarized Memory:每輪對(duì)話后,使用 LLM 對(duì)對(duì)話內(nèi)容進(jìn)行總結(jié)摘要,并丟棄原始信息。

另外,我們還可以利用 LLM 來(lái)識(shí)別關(guān)鍵信息(key moments),并將其存儲(chǔ)在長(zhǎng)期記憶中。這樣,智能體就能“記住”用戶的重要信息,使用戶體驗(yàn)更加個(gè)性化。

我們目前所討論的五個(gè)步驟為創(chuàng)建智能體奠定了基礎(chǔ)。那么,如果在這個(gè)階段我們通過(guò) LLM 處理用戶查詢,會(huì)發(fā)生什么呢?

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

答案是:你會(huì)得到一段未經(jīng)處理的文本輸出。(圖片由作者提供)

示例如下:

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

此時(shí),智能體會(huì)生成一段原始的文本輸出。那么,我們?nèi)绾未_保智能體能夠執(zhí)行后續(xù)操作呢?這就需要引入解析和編排機(jī)制了。

第六步:解析智能體(Agent)的原始輸出

解析器的作用是將原始數(shù)據(jù)轉(zhuǎn)換成應(yīng)用程序能夠識(shí)別和使用的數(shù)據(jù)格式(例如,帶有特定屬性的對(duì)象)。

對(duì)于我們正在構(gòu)建的智能體,解析器必須能夠辨認(rèn)出我們?cè)诘诙街性O(shè)定的通信結(jié)構(gòu),并將其轉(zhuǎn)換成結(jié)構(gòu)化數(shù)據(jù)輸出,例如 JSON 格式。這樣做可以讓?xiě)?yīng)用程序更加便捷地處理和執(zhí)行智能體的后續(xù)動(dòng)作。

備注:某些模型供應(yīng)商,例如 OpenAI,可以默認(rèn)提供可直接解析的輸出。而對(duì)于其他模型,尤其是那些開(kāi)源模型,可能需要額外進(jìn)行解析配置。

第七步:規(guī)劃智能體的后續(xù)行動(dòng)

最后一步是建立編排邏輯。這一邏輯決定了 LLM 輸出內(nèi)容結(jié)果之后的處理流程。依據(jù)輸出內(nèi)容,系統(tǒng)將執(zhí)行以下任一操作:

  1. 執(zhí)行工具調(diào)用,或者
  2. 給出回應(yīng)—— 這可能是對(duì)用戶查詢的直接回答,也可能是為了獲取更多信息而提出的后續(xù)問(wèn)題。

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

擴(kuò)展的單智能體架構(gòu)圖示。(圖片由原文作者提供)

如果觸發(fā)了工具調(diào)用,工具的輸出信息會(huì)被送回 LLM(作為其工作記憶的一部分)。LLM 將據(jù)此決定如何利用這些新數(shù)據(jù):是繼續(xù)進(jìn)行工具調(diào)用,還是直接向用戶返回答案。

以下是在代碼中實(shí)現(xiàn)這種編排邏輯的一個(gè)示例:

解碼通用 AI Agent:七步構(gòu)建你的智能系統(tǒng)-AI.x社區(qū)

大功告成!現(xiàn)在,你已經(jīng)有了一個(gè)能夠應(yīng)對(duì)多種場(chǎng)景的智能體系統(tǒng) —— 無(wú)論是進(jìn)行競(jìng)爭(zhēng)分析、深入研究,還是實(shí)現(xiàn)復(fù)雜工作流程的自動(dòng)化。

03 多智能體(multi-agent)系統(tǒng)在什么情況下派上用場(chǎng)?

盡管當(dāng)前 LLM 的表現(xiàn)令人印象深刻,但它們?cè)谔幚砗A啃畔r(shí)卻顯得力不從心[17]。一旦上下文過(guò)多或工具使用過(guò)雜,模型便可能不堪重負(fù),導(dǎo)致性能下滑。面向多種用途的單智能體系統(tǒng)最終會(huì)觸及這一上限,尤其是在它們對(duì) token 的消耗量之大已是眾所周知。

對(duì)于某些使用場(chǎng)景,部署多智能體系統(tǒng)或許更為合適。通過(guò)將任務(wù)分?jǐn)偨o多個(gè)智能體,可以有效避免單一 LLM Agent 的上下文負(fù)載過(guò)重,從而提高整體的執(zhí)行效率。

盡管如此,通用的單智能體系統(tǒng)仍然是原型開(kāi)發(fā)的一個(gè)極好起點(diǎn)。它能幫助我們迅速驗(yàn)證使用場(chǎng)景,并發(fā)現(xiàn)系統(tǒng)何時(shí)開(kāi)始出現(xiàn)故障。在這個(gè)過(guò)程中,你將能夠:

  • 洞察哪些任務(wù)環(huán)節(jié)確實(shí)能通過(guò) Agent 模式得到優(yōu)化。
  • 確定可以作為獨(dú)立流程分離出來(lái),成為更大工作流程中一環(huán)的部分。
  • 從單智能體起步,這樣能夠獲得他人寶貴的經(jīng)驗(yàn)、見(jiàn)解,以便在構(gòu)建更復(fù)雜系統(tǒng)時(shí)調(diào)整和優(yōu)化策略。

04 如何開(kāi)始上手?

已經(jīng)迫不及待想要開(kāi)始構(gòu)建智能體了嗎?使用框架是快速測(cè)試和迭代智能體配置的好方法。

  • 如果你打算使用 Llama 3 這樣的開(kāi)源模型,不妨試試 Bee Agent Framework[18] 提供的初始模板[19]。
  • 如果你打算使用 OpenAI 這樣的前沿模型,試試 LangGraph[20] 提供的教程[21]可能會(huì)給你帶來(lái)幫助。

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

本期互動(dòng)內(nèi)容 ??

?你在構(gòu)建通用智能體(general-purpose agents)方面積累了哪些經(jīng)驗(yàn)?歡迎在評(píng)論區(qū)留言分享你的心得!

??文中鏈接??

[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??

[15]??https://github.com/langchain-ai/langchain/blob/master/libs/community/langchain_community/tools/arxiv/tool.py??

[16]??https://github.com/langchain-ai/langchain/blob/master/libs/community/langchain_community/utilities/arxiv.py??

[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??

?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請(qǐng)注明出處,否則將追究法律責(zé)任
標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦