從零拆解一款爆火Agent智能體,四步學(xué)會(huì)設(shè)計(jì)自主決策Agent
以前我們開發(fā)的大多數(shù)智能體是固定的工作流模式,很少有按照下面的框架,開發(fā)具有自主決策和自主使用工具的智能體。
圖片
前兩天,我分享了一款可以自動(dòng)使用瀏覽器完成簡(jiǎn)單任務(wù)的開源Agent——browser-use。
圖片
上面演示的是它自動(dòng)搜索 ‘渡碼’,并打開了我的博客。
browser-use 是一款開源 Agent,在 GitHub 上有 1.5w star,一條命令就可以在本地安裝使用,門檻非常低。
圖片
自從上次分享完之后,我的職業(yè)病就犯了,總想拆解一下看看是怎么實(shí)現(xiàn)的,所以就有了今天這篇文章。
browser-use 只用了一條提示詞完成了上面第一張圖中 Agent 的四個(gè)模塊——Memory、Planning、Tools和Action。
這條提示詞在源文件 prompts.py 中,有130行。
圖片
雖然提示詞有點(diǎn)長(zhǎng),但不用擔(dān)心,按照上面四個(gè)模塊拆解完就會(huì)發(fā)現(xiàn)如此清晰、簡(jiǎn)單。
上面這段提示詞是對(duì)四個(gè)模塊的定義,下面我們一個(gè)一個(gè)來(lái)說(shuō)。
Memory(記憶) - 記錄已經(jīng)完成的任務(wù)和接下來(lái)要進(jìn)行的任務(wù)。
"memory": "Description of what has been done and what you need to remember until the end of the task",
我把上面‘打開博客’案例的執(zhí)行過(guò)程記錄了下來(lái),可以看到 Memory 實(shí)際的栗子
'memory': "Baidu is open, ready to search for '渡碼'."
Planning(規(guī)劃)- 根據(jù)當(dāng)前頁(yè)面(網(wǎng)頁(yè))判斷上一步執(zhí)行是否成功,生成接下來(lái)應(yīng)該執(zhí)行的任務(wù)。
"evaluation_previous_goal": "Success|Failed|Unknown - Analyze the current elements and the image to check if the previous goals/actions are successful like intended by the task. Ignore the action result. The website is the ground truth. Also mention if something unexpected happened like new suggestions in an input field. Shortly state why/why not",
"next_goal": "What needs to be done with the next actions"
這里包含兩部分,第一步是 evaluation_previous_goal 判斷之前任務(wù)是否成功,之前的任務(wù)是什么,可以在記憶中獲取,這就解釋了為什么第一張圖中 Memory 有一條虛線指向 Planning。
之前任務(wù)狀態(tài)決定了下一個(gè)任務(wù)的規(guī)劃,如果之前任務(wù)失敗則重試,如果成功則規(guī)劃新任務(wù)。
實(shí)際的栗子:
'evaluation_previous_goal': 'Success - Baidu was successfully opened in a new tab.',
'next_goal': "Input '渡碼' into the search box and submit the search."
Tools(工具)- browser-use 定義了15個(gè)可以操作網(wǎng)頁(yè)的工具。
圖片
工具的定義會(huì)放在提示詞中,以便大模型選擇。每一個(gè)工具都有對(duì)應(yīng)的代碼用于完成具體的任務(wù)。
圖片
Action(行動(dòng))- 根據(jù) Planning 生成一系列具體的行動(dòng)
直接上栗子:
'action': [{'input_text': {'index': 12, 'text': '渡碼'}}, {'click_element': {'index': 13}}]
這個(gè)例子中,有兩個(gè)行動(dòng),第一步,在頁(yè)面元素標(biāo)號(hào)12的地方(搜索框)輸入‘渡碼’;第二步,在頁(yè)面元素標(biāo)號(hào)13的地方(搜索按鈕)點(diǎn)擊,完成搜索。
只不過(guò)巧合的是,在 browser-use 中所有 Action 都是用 Tools 完成。
有些朋友可能會(huì)有疑問,這些標(biāo)號(hào)是怎么來(lái)的。
browser-use 是通過(guò)分析頁(yè)面 HTML 代碼,識(shí)別出頁(yè)面中的組件(元素),并給每個(gè)組件設(shè)置一個(gè)標(biāo)號(hào)。
圖片
在這個(gè)頁(yè)面中,可以看到五顏六色的標(biāo)記框和框上的標(biāo)號(hào),這就是 browser-use 識(shí)別的。
最終這些信息會(huì)轉(zhuǎn)成 ‘1[:]<a name="tj_settingicon">設(shè)置</a>’ 這種格式的文本,追加到提示詞中,送入大模型
圖片
這樣,大模型就能知道頁(yè)面長(zhǎng)什么樣,從而可以規(guī)劃任務(wù)。
我覺得這個(gè)思路非常值得學(xué)習(xí),正是由于大模型具備強(qiáng)大的理解能力,才能用幾行文本就代替一個(gè)復(fù)雜的頁(yè)面,將一件看似復(fù)雜的事情大大簡(jiǎn)化。
browser-use 在實(shí)現(xiàn)上還有一些其他值得學(xué)習(xí)的細(xì)節(jié),比如:有些 Action 執(zhí)行后可能導(dǎo)致頁(yè)面變化,這時(shí)候會(huì)中斷任務(wù),重新生成新 Action。
再比如,支持視覺大模型,上傳整個(gè)網(wǎng)頁(yè)截圖,可以讓大模型更好理解頁(yè)面,從而更好地規(guī)劃任務(wù)。感興趣的朋友可以下載源碼繼續(xù)研究。
另外,最近看到智能體一個(gè)新趨勢(shì)——主動(dòng)學(xué)習(xí)。依賴這項(xiàng)能力,Genius智能體僅用10%的數(shù)據(jù)和2小時(shí)訓(xùn)練就在經(jīng)典游戲Pong中超越頂尖人類玩家和其他AI模型。
我在工作中搭建智能體也深有體會(huì),由于工作中是私有場(chǎng)景,智能體不理解你的業(yè)務(wù),所以就無(wú)法給你做出正確的 Planning,這時(shí)候智能體自主學(xué)習(xí)能力就很有必要了。
最后,發(fā)放一波紅包封面,是的,你沒猜錯(cuò),用AI生成的。