smolagents:讓模型自己寫程式幹活的輕量代理程式庫
摘要
一個刻意做小的代理程式庫:核心邏輯大約一千行,而全部設計只押在一個主張上——不讓模型輸出結構化的工具呼叫,而是讓它寫一小段程式,由程式庫執行再把結果交回。步驟更少、呼叫更少,原始碼短到真的讀得完。
推薦- 軟體名稱
- smolagents
- 版本
- v1.26
- 收費
- 免費
- 開源
- 開源
- 作業系統
- WindowsmacOSLinux
- 更新時間
- 2026-10-26 22:00
把大模型和「真的動手」連在一起,過去總得在框架的抽象層裡繞上好幾圈:定義節點、描述工具、設定狀態流轉。等東西真的跑起來,熱情已經少了一半。這裡要談的程式庫站在相反的位置,而那個位置就是它的全部重點:代理不需要一個框架,它需要一個能動手的辦法。
smolagents 是一個小型的開源程式庫,核心邏輯大約一千行,由那個大多數人繞著它轉的模型社群所屬團隊發布。它的核心主張是:模型不必學會一種專門用來呼叫工具的格式,讓它寫程式就好——用它本來最擅長的語言,然後把那段程式跑起來。

用程式碼思考,而不是填一張表
慣常的做法是請模型輸出一段結構化指令:呼叫哪個工具、傳什麼參數,格式固定,框架才解析得動。這裡的替代方案是請它寫一小段能跑的 Python,由程式庫執行,再把輸出交回模型繼續推理。程式天生有迴圈、條件與巢狀呼叫,於是一個原本要好幾趟結構化往返的多步任務,常常一段短腳本就講完了。
伴隨這個做法公布的數字顯示,在可比的任務上,步驟與模型呼叫大約比結構化那條路少三分之一。對於按呼叫次數計費的服務來說,這不是四捨五入的誤差,而是「可以反覆跑」與「跑不起」之間的差別。宣告一個能力也一樣樸素:一個普通函式、一段清楚的說明,代理自己決定什麼時候用。不必寫膠水程式,也不必預先編排好每一步呼叫。

模型由你決定
這個程式庫對模型保持中立,這也是它用起來比較舒服的地方之一。託管的推理服務、透過一層路由接上的商業廠商、跑在自己機器上的本機模型,從代理的角度看形狀都一樣;切換通常只是改一行初始化,而不是重寫邏輯。
模型的能力決定天花板。它越會寫程式,這種做法表現越好——這一點社群反覆提到,也值得在採用之前認真對待:一個靠寫程式行動的代理,同時繼承了它所用模型在寫程式上的長處與短處。
誰在執行,在哪裡執行
產生程式再拿去跑,馬上會碰到那個明顯的問題,而專案回答得毫不含糊:本機執行器只適合開發與除錯,它不是安全邊界。重要的任務應該在隔離環境裡跑,取得隔離有幾條路:託管的沙箱,或者你自己控制的容器,在定義代理時用一個參數選定。
另外兩道節制也很合理。產生的程式預設只能使用語言的標準模組,要用第三方套件必須明確授權,這就擋掉了隨手 import 一個會連上網路的東西。程式若出錯,代理會讀錯誤訊息、修正後重試,而嘗試次數由一個預設值很小的步數上限控制,糊塗的代理不會在你的帳單上無限打轉。

身處生態系的好處
由一個大型模型社群所屬團隊製作,帶來一個很難複製的好處:做好的工具或代理可以發布到那個社群,別人像裝依賴一樣拉下來重用;甚至可以把一個線上示範應用整個當成一個工具交給代理。在那個生態之外,來自一套開放協定與另一個熱門框架的工具也能接進來,而輸入不限於文字——影像、影片、音訊都支援。
對於想弄懂代理怎麼運作的人,最有價值的性質是可讀性。一千行短到可以靠讀原始碼診斷問題,而不是跟層層抽象搏鬥。這種尺度的透明、以程式碼行動的效率,加上模型與工具隨意替換的自由,三樣疊起來,是一個意外順手的起點。
適合誰
想一次只改一個部分、其餘固定不動的研究者;想把代理放進既有程式、而不是在它外面再長一個應用程式的開發者;以及被「抽象省下的時間比它花掉的少」的框架惹毛過的人。它免費且開源,一千行短到一個下午就能讀完。