Skip to content

使用 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 程式碼回應。

範例輸出:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

安全執行程式碼

執行任意程式碼具有風險。即使是善意的代理人也可能: - 嘗試使用未定義的指令。 - 匯入危險模組。 - 進入無限迴圈。

要建立安全代理人,必須做到:

  1. 捕捉例外

    try:
        exec(agent_code)
    except Exception as e:
        print(f"Error occurred: {e}")
    

  2. 過濾未定義指令

  3. 使用受限的 globalslocals 字典執行 exec

  4. 防止危險匯入

  5. 掃描程式碼中是否包含如 ossubprocess 等危險關鍵字。
  6. 或選擇性地禁用部分 built-ins。

  7. 處理無限迴圈

  8. 在獨立執行緒或程序中運行程式碼並設定超時。

  9. 沙箱化執行

  10. 使用 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 的監控工具,建立安全強大可監控的程式代理人已觸手可及。

自主編程的疆界已全面展開。

你會打造什麼?