驚現(xiàn)狠人手搓Agent心經(jīng)!LLM的Tool Use邏輯曝光!簡單到爆炸:僅9行代碼!網(wǎng)友直呼:難以相信!難點(diǎn)是LLM循環(huán)幾次!
原創(chuàng) 精選作者 | 云昭
一款 Agent 究竟是怎樣讓大模型具備“Tool Use”,即工具調(diào)用的能力?
今天,有一位正在創(chuàng)建編碼 Agent 的狠人出來曝光了這個(gè)算法邏輯。
這位狠人,名為 Philip Zeyliger,過去幾個(gè)月,他和他的團(tuán)隊(duì)一直在開發(fā)一款名為“Sketch”的 AI 編程助手。然后,他寫了幾篇博客,總結(jié)了開發(fā)過程中的經(jīng)驗(yàn)。
其中最讓 Zeyliger 震驚的是:其實(shí)大模型在搭配“Tool Use”使用時(shí),根本沒我們想象的復(fù)雜!
它的主循環(huán)邏輯,竟然超級簡單直白,其實(shí)就 9 行代碼!
def loop(llm):
msg = user_input()
whileTrue:
output, tool_calls = llm(msg)
print("Agent: ", output)
if tool_calls:
msg = [ handle_tool_call(tc) for tc in tool_calls ]
else:
msg = user_input()
這 9 行代碼,理解起來也非常簡單??梢哉f是讓大模型具備工具調(diào)用能力,核心思想就濃縮在這 9 行里面。
ps:當(dāng)然,為了讓上述代碼真正跑通,還有不少「儀式感」需要補(bǔ)齊。
完整腳本見這里:https://philz.dev/blog/agent-loop/。
1.9 行代碼搞懂大模型的 Tool Use,這其實(shí)也是個(gè) Agent 循環(huán)
其中,函數(shù) `llm()` 負(fù)責(zé)把系統(tǒng)提示詞、歷史對話和用戶輸入一起發(fā)送給 LLM API。
而所謂的“工具使用(Tool Use)”,聽起來高大上,其實(shí)就是:LLM 輸出一些結(jié)構(gòu)化格式,符合預(yù)定義的 schema。
這方面,在完整腳本里有寫具體的邏輯,通過系統(tǒng)提示詞和工具說明,告訴 LLM 它可以訪問 bash。
不要小看這樣一個(gè)簡單的函數(shù),Zeyliger 很興奮地發(fā)現(xiàn),僅僅是這樣一個(gè)看似沒什么特別的“常規(guī)操作”,當(dāng)前的模型(Zeyliger 自己在用 Claude 3.7 Sonnet)就能解決許多問題,有些用例甚至可以一發(fā)入魂,精準(zhǔn)命中。
舉個(gè)實(shí)際例子,Zeyliger 表示,“過去,我需要查找某個(gè)冷門的 git 命令,然后復(fù)制粘貼;現(xiàn)在,我直接問 Sketch?!痹俦热?,之前改個(gè)類型之后,都得一個(gè)一個(gè)手動修正類型檢查錯(cuò)誤(或者老實(shí)說,用 `perl -pie` 這種“魔法”),但現(xiàn)在他讓自己參與研發(fā)的 Sketch 來搞定。
有經(jīng)驗(yàn)的朋友可能會問,LLM + Tool Use,這不就是 Agent 嗎?
沒錯(cuò),其實(shí)這 9 行代碼就可以理解成是個(gè) agent 循環(huán)。
而且,只要提示詞寫得合適,這個(gè) agent 循環(huán)還能保持持續(xù)對話狀態(tài)。你機(jī)器上缺少某個(gè)工具?它就會試著安裝。你本地 `grep` 的命令參數(shù)跟預(yù)期不一樣?它會適配。
當(dāng)然,它也可能令人抓狂!比如它會說:“哦,這個(gè)測試過不了……那我們就跳過好了。”
這時(shí)候,你聽了肯定想拍桌子。
2.只需要幾個(gè)小工具,這段腳本性能飛速提升
Agent 是未來,正在成為業(yè)界共識。同時(shí),在很多工作流中,Agent 工具還會呈現(xiàn)「專精化」的趨勢。
Zeyliger 及其團(tuán)隊(duì)后來發(fā)現(xiàn),只要多加幾種小工具,他們開發(fā)的能顯著提升效果、加快迭代,也更符合開發(fā)者的真實(shí)使用習(xí)慣。
這是因?yàn)楸旧泶竽P鸵泊嬖谧陨淼哪芰吔?,比?nbsp;Zeyliger 就對“ LLM 正確修改代碼文本”的能力存疑,并沒有他想象中那么好。
“看到它在處理 `sed` 的一行命令時(shí)頻頻出錯(cuò),反而讓我重新感嘆:可視化編輯器(而非命令行)真的是奇跡般的存在?!?/p>
所以,這時(shí)候,就應(yīng)該乖乖地讓大模型調(diào)用更擅長的工具?;诖?,Agent 工具專精化將是一個(gè)越來越明顯的趨勢。
3.大量的輕量型、臨時(shí)的 Agent 腳本即將涌現(xiàn)
此外,作為親身體驗(yàn)了 Agent 開發(fā)和使用的老炮兒,Zeyliger 已經(jīng)完全確信這一點(diǎn): 這段 9 行核心邏輯的 agent 循環(huán)將越來越多地被用于日常的自動化任務(wù),尤其是那些過去既不適合通用工具,又過于復(fù)雜難以傳統(tǒng)自動化的部分。
對于開發(fā)者而言,進(jìn)而就意味著——未來我們會在項(xiàng)目的 `bin/` 目錄中,看到越來越多定制、臨時(shí)、即棄(throw-away)型的 LLM Agent 腳本。
4.Agent 本身沒什么秘密武器
不要把 Agent 想得多么高大上。
就拿各種Coding Agents 為例。表面看起來百家爭鳴,國外的 Claude Code、Windsurf、Cursor、Cline、Copilot、Aider、Codex,國內(nèi)的通義靈碼、Codemate、小浣熊、CodeBuddy……大家都在做 coding agent,但其實(shí)背后,更主要還是 LLM 自身的驅(qū)動能力集中爆發(fā)的結(jié)果。
本質(zhì)上,沒有“秘密武器”,主要是 LLM 本身的能力、加上 loop 與 tool-use 框架的廣泛適配。
正如 Zeyliger 所說,未來將涌現(xiàn)出更多“輕量級、即拋式、項(xiàng)目內(nèi)的臨時(shí) Agent”。
5.網(wǎng)友:確實(shí),但關(guān)鍵是Agent究竟應(yīng)該循環(huán)幾次
這個(gè) 9 行代碼說清楚 Agent 循環(huán)構(gòu)建的文章,快速引起了HackerNews網(wǎng)友的關(guān)注和討論。
其中一位網(wǎng)友對于 Zeyliger 的“大模型不合理的”Tool Use能力的解釋大為贊同,更是直接甩出了一篇“如何從零構(gòu)建一個(gè) coding agent”的文章,感興趣的朋友不妨去讀一讀:https://ampcode.com/how-to-build-an-agent
這篇文章實(shí)證了 LLM+工具調(diào)用循環(huán)的強(qiáng)大能力。
圖片
甚至網(wǎng)友更進(jìn)一步討論起來了,這 9 行代碼中最難把握的問題,即:我們并不能精準(zhǔn)清楚大模型能做什么,究竟讓他們自己做幾次循環(huán),然后才由人來重新控制它?
圖片
另一位網(wǎng)友則表示認(rèn)同。他認(rèn)為,代理的主要問題在于它們沒有反思自身的表現(xiàn),也沒有主動暫停執(zhí)行并向人類尋求幫助。代理在很多情況下可以成功運(yùn)行 20 多次迭代,但在某些情況下,每次迭代后都需要人工指導(dǎo)。
“這就像一個(gè)初級人員沒有意識到自己已經(jīng)超出了自己的能力范圍,應(yīng)該尋求幫助?!?/p>
直白點(diǎn)理解,就是LLM有點(diǎn)缺乏“自知之明”。對于這個(gè)問題,其實(shí)還沒有達(dá)成共識解:
有位網(wǎng)友提出,用另一個(gè) “監(jiān)督 LLM” 來判斷 agent 是否卡殼,并在人類介入前終止循環(huán)。
不過很快就有網(wǎng)友提出了不同的意見:一位名為suninsight的網(wǎng)友表示他們的公司(NonBioS.ai)已經(jīng)在實(shí)踐中實(shí)現(xiàn)了這種機(jī)制。
而另一位則認(rèn)為甚至不需要單獨(dú)監(jiān)督者,agent 自身每一步都可以嘗試進(jìn)行「進(jìn)展判斷 + 請求幫助」的邏輯判斷。
看來這個(gè)問題,只能具體問題具體分析了。
6.寫在最后:Agent沒有那么神秘,可以手搓起來了
不過目前可以確認(rèn)兩點(diǎn):
- 大模型自身就可以很容易實(shí)現(xiàn)調(diào)用工具,實(shí)現(xiàn)并不難;
- 但是,LLM agent 循環(huán)存在“跑偏”的可能,可靠性仍是問題,尤其在多輪執(zhí)行中。即便可以實(shí)現(xiàn) 90% 的成功率,但最后 10% 的精度上依舊沒有很好的解法。
正如網(wǎng)友所說,目前還做不到完全無人監(jiān)督地持續(xù)運(yùn)行超過幾次循環(huán)。
其實(shí)這也反過來說明,LLM agent 循環(huán)機(jī)制本身也是一個(gè)非常有誘惑力的研究領(lǐng)域,潛力和局限性都有待AI開發(fā)者們親自研究一番。
那么問題來了,大家準(zhǔn)備手搓一個(gè)“Agent”火蓮了嗎?再把這 9 行代碼的完整腳本的鏈接貼給大家,請諸位自行把玩——https://sketch.dev/blog/agent_loop.py
參考鏈接:https://philz.dev/blog/agent-loop/