如果您是建立代理商的新手,請務必先閱讀 代理商簡介 和 smolagents 導覽.
代碼代理商 #
多種 研究 文件 已證明讓 LLM 以程式碼寫出它的動作(工具呼叫),比目前工具呼叫的標準格式要好得多,而目前的標準格式在業界是深淺不一的「將動作寫成工具名稱和要使用的參數的 JSON」。
為什麼程式碼比較好?嗯,因為我們特別精心設計了我們的程式碼語言,讓它能夠很好地表達電腦執行的動作。如果 JSON 片段是更好的方式,這個套件就會用 JSON 片段寫成,而魔鬼也會嘲笑我們。
程式碼只是一種在電腦上表達行動的更好方式。它有更好的:
- 可組合性: 您是否可以將 JSON 動作相互嵌套,或定義一組 JSON 動作以便日後重複使用,就像定義 python 函式一樣?
- 物件管理: 如何儲存動作的輸出,例如
產生影像
在 JSON 中? - 一般性: 代碼的建立是為了表達任何您可以讓電腦做的事情。
- LLM 訓練語料中的表達: 為什麼不好好利用 LLM 訓練語料庫中已包含大量優質訴訟的上天眷顧呢?
下圖說明了這一點,取自 可執行代碼動作引發更好的 LLM 代理.

這就是為什麼我們著重於提出程式碼代理程式,在這種情況下就是 python 代理程式,這意味著我們要花更大的心力來建立安全的 python 解譯器。
本機 python 解譯器 #
預設值為 CodeAgent
在您的環境中執行 LLM 產生的程式碼。這個執行不是由普通的 Python 解譯器完成的:我們重新建立了一個更安全的 LocalPythonInterpreter
從基礎開始。本解譯器是為了安全而設計的,藉由:
- 將輸入限制為使用者明確傳送的清單
- 設定操作次數上限,防止無限循環和資源膨脹。
- 不會執行任何未預先定義的操作。
我們已經在許多案例中使用過,從未發現對環境造成任何破壞。
然而,此解決方案並非萬無一失:可以想像在某些情況下,針對惡意動作微調的 LLM 仍然會傷害您的環境。例如,如果您允許一個無害的套件如 枕頭
來處理影像,LLM 可能會產生數以千計的影像儲存檔,使您的硬碟變得臃腫。如果您自己選擇了 LLM 引擎,這當然不太可能,但也有可能發生。
因此,如果您想要格外謹慎,可以使用下面描述的遠端程式碼執行選項。
E2B 代碼執行器 #
為了獲得最大的安全性,您可以使用我們與 E2B 的整合,在沙箱環境中執行程式碼。這是一種遠端執行服務,可在隔離的容器中執行您的程式碼,使程式碼無法影響您的本機環境。
為此,您需要設定您的 E2B 帳戶,並設定您的 E2B_API_KEY
在您的環境變數中。前往 E2B 的快速入門文件 以獲得更多資訊。
然後用 pip install e2b-code-interpreter python-dotenv
.
現在您已準備就緒!
若要將代碼執行器設定為 E2B,只需傳送旗標 use_e2b_executor=True
初始化您的 CodeAgent
.請注意,您應該在 額外的授權進口
,以便執行器安裝它們。
複製
from smolagents import CodeAgent, VisitWebpageTool, HfApiModel agent = CodeAgent( tools = [VisitWebpageTool()]、 model=HfApiModel()、 additional_authorized_imports=["requests", "markdownify"]、 use_e2b_executor=True ) agent.run("What was Abraham Lincoln's preferred pet?")
E2B 代碼執行目前與多重代理程式不相容 - 因為讓一個代理程式呼叫一個應該遠端執行的代碼 Blob 會造成混亂。但我們正在努力加入!