使用 Hugging Face smolagents 建立程式代理人
在快速演進的 AI 世界中,代理人(Agents) 成為最令人興奮的前沿領域之一。多虧了 Hugging Face 的 smolagents,現在建立專業化、安全且功能強大的程式代理人變得前所未有地簡單。在本文中,我們將探索代理人發展歷程、學習如何建立程式代理人、討論安全執行策略、了解如何監控與評估代理人,最後設計一個深入研究型的代理人。
代理人簡史:走向更高自主性的道路
代理人在過去幾年中經歷了巨大的演變。早期的 LLM 應用是靜態的:用戶提問,模型回答。沒有記憶、沒有決策、也沒有真正的 "自主性"。
但研究人員渴望更多:能夠規劃、決策、適應、並自主行動的系統。
我們可以將自主性視為一個連續光譜:
- Level 0:無狀態回應(傳統聊天機器人)
- Level 1:短期記憶與推理(ReAct 模式)
- Level 2:長期記憶、動態工具使用
- Level 3:遞迴自我改進、自主設定目標(仍在研究中)
早期的代理人嘗試面臨 "S 曲線" 效益挑戰。最初,自主性增加反而帶來更多混亂。但隨著提示工程、工具使用與記憶架構的進步,我們正攀登第二段斜坡:代理人終於變得真正有效。
今天,藉由像 smolagents 這樣的框架,你可以輕鬆建立能撰寫、執行、甚至除錯程式碼的代理人。
介紹程式代理人(含範例)
程式代理人 是專門用來生成並執行程式碼以達成目標的代理人。他們不只是回答,而是以程式行動。
讓我們用 Hugging Face 的 smolagents
建立一個基本的程式代理人:
from smolagents import Agent
agent = Agent(system_prompt="You are a helpful coding agent. Always solve tasks by writing Python code.")
response = agent.run("Write a function that calculates the factorial of a number.")
print(response)
發生了什麼事?
- 初始化一個具有系統提示的 Agent
。
- 使用 run
來執行使用者查詢。
- 代理人透過撰寫並執行 Python 程式碼回應。
範例輸出:
安全執行程式碼
執行任意程式碼具有風險。即使是善意的代理人也可能: - 嘗試使用未定義的指令。 - 匯入危險模組。 - 進入無限迴圈。
要建立安全代理人,必須做到:
-
捕捉例外:
-
過濾未定義指令:
-
使用受限的
globals
和locals
字典執行exec
。 -
防止危險匯入:
- 掃描程式碼中是否包含如
os
、subprocess
等危險關鍵字。 -
或選擇性地禁用部分 built-ins。
-
處理無限迴圈:
-
在獨立執行緒或程序中運行程式碼並設定超時。
-
沙箱化執行:
- 使用 Python 的
multiprocessing
,甚至是 Docker 隔離關鍵應用。
安全執行範例:
import multiprocessing
def safe_exec(code, timeout=2):
def target():
try:
exec(code, {"__builtins__": {"print": print, "range": range}})
except Exception as e:
print(f"Execution error: {e}")
p = multiprocessing.Process(target=target)
p.start()
p.join(timeout)
if p.is_alive():
p.terminate()
print("Terminated due to timeout!")
監控與評估代理人
好的代理人不僅要建構,還要持續監控與改進。
使用 Phoenix.otel —— 一個基於 OpenTelemetry 的工具,來監控 LLM 應用程式。
需追蹤的關鍵指標: - 延遲(回應時間) - 成功/錯誤率 - Token 使用量 - 用戶回饋
整合範例:
from phoenix.trace import init_tracing
init_tracing(service_name="code_agent")
# 你的代理人程式碼
agent.run("Write a quicksort algorithm.")
透過此方式,每次代理人互動都會自動追蹤並傳送到遙測後端。
你可以視覺化執行過程、錯誤與資源使用情況,持續優化代理人。
建立深入研究型代理人(使用 Tavily Browser)
有時候,單純撰寫程式碼還不夠 —— 代理人需要研究、檢索資訊,並基於即時資料行動。
我們可以使用 Tavily Browser 為程式代理人加持,打造檢索增強生成(RAG)能力。
範例:
from smolagents import Agent
from tavily import TavilyBrowser
browser = TavilyBrowser()
agent = Agent(
system_prompt="You are a deep research coding agent.",
tools=[browser]
)
response = agent.run("Find the latest algorithm for fast matrix multiplication and implement it.")
print(response)
現在你的代理人可以: - 搜尋學術論文。 - 抽取最新的方法論。 - 動態撰寫並執行程式碼。
結合推理、執行與即時檢索的代理人,開啟了全新層級的能力。
結語
我們正進入一個代理人能自主推理、編程、研究與持續改進的新時代。
有了像 Hugging Face smolagents 這樣的輕量級框架,加上 Tavily 的強大檢索功能與 Phoenix.otel 的監控工具,建立安全、強大且可監控的程式代理人已觸手可及。
自主編程的疆界已全面展開。
你會打造什麼?