AgentRun Sandbox SDK 正式開源

新聞
HongKong
2
10:10 AM · Dec 18 ,2025

作者:靖蘇

讓智能體開發更輕盈,讓雲端運行更安全------AgentRun Sandbox SDK 開源發佈,賦能 Agentic AI 快速落地。

引言:構建面向未來的

Agentic AI 基礎設施

在大模型與智能體(Agent)技術迅猛發展的今天,開發者不僅需要強大的模型能力,更亟需一個安全、彈性、易用且可擴展的運行環境來承載複雜的 Agent 邏輯。為此,我們正式推出 AgentRun Sandbox SDK 並全面開源!

函數計算 AgentRun [ 1] 是以高代碼為核心、生態開放、靈活組裝的一站式 Agentic AI 基礎設施平台,致力於為企業級 Agentic 應用提供從開發、部署到運維的全生命週期支持。平台深度構建於阿里雲函數計算(Function Compute, FC)之上,天然繼承了 Serverless 架構的三大核心優勢:極致彈性、按量付費、零運維負擔。

更重要的是,函數計算 AgentRun 通過深度集成 AgentScope、LangChain、Dify、RAGFlow、Mem0 等主流開源生態,打造了一個高性能、高安全、高可觀測的智能體運行底座。平台提供五大核心能力:高性能 Sandbox 執行環境、統一模型代理與高可用保障、全鏈路可觀測性、工具與 MCP(Model Context Protocol)統一管理,以及完善的數據安全與隔離治理機制。這一切,只為讓你專注於智能體的業務邏輯本身,而無需被底層基礎設施的複雜性所困擾。

多模態沙箱能力,滿足多樣智能體需求

函數計算 AgentRun 的核心亮點之一,是其內置的多類型 Sandbox 運行環境,基於阿里雲 FC 安全隔離架構構建,確保每一次執行都安全可控:

  • Code Interpreter Sandbox(代碼解釋器沙箱)

    提供隔離的 Python/JavaScript 執行環境,支持文件系統讀寫、命令執行、數值計算與數據分析。適用於需要動態生成/執行代碼的場景,如數據可視化、公式求解、自動化腳本等。

  • Browser Sandbox(瀏覽器沙箱)

    內置無頭瀏覽器、VNC 可視化客户端及操作錄製功能,支持模擬真實用户行為,實現網頁抓取、表單填寫、信息提取等操作,為智能體賦予"上網"能力。

  • All-in-One Sandbox(二合一沙箱)

    融合代碼執行與瀏覽器能力於一體,一站式支持複雜任務流------例如:先爬取網頁數據,再用 Python 分析並生成圖表,最後返回結構化結果。真正實現"端到端智能體工作流"。

為降低接入門檻,函數計算 AgentRun 特別開源推出基於 Python 語言的 Sandbox SDK,開發者僅需幾行配置即可將任意智能體接入沙箱服務。無需修改原有框架邏輯,即可享受 Serverless 架構下的安全、彈性與高性能。

LangChain × Codelnterpreter:為智能體注入"代碼大腦"

LangChain 是當前最流行的 Agent 編排框架之一。現在,通過 AgentRun Sandbox SDK,你可以零改造地為 LangChain Agent 添加安全可靠的代碼執行能力。

本地快速實踐(5 分鐘上手)

安裝 AgentRun Sandbox SDK 後,在 LangChain 工具中註冊 Code Interpreter 工具,即可讓 Agent 自主編寫並運行 Python 代碼。整個過程無需改動原有項目結構,輕鬆完成本地調試。

1. 安裝 Serverless Devs

運行腳手架,您需要使用 Serverless Devs 工具,請參考對應安裝教程 [ 2]

如果您擁有 NodeJS 開發環境,可以使用 npm i -g @serverless-devs/s 快速安裝 Serverless Devs。您也可以直接下載 Serverless Devs 二進制程序 [ 3] 使用 Serverless Devs。

2. 初始化腳手架應用

使用快速創建腳手架創建您的 Agent。

注意! 您需要確保您的 python 環境在 3.10 以上。

# 初始化模板
s init agentrun-quick-start-langchain
# 按照實際情況進入代碼目錄
cd agentrun-quick-start-langchain/code
# 初始化虛擬環境並安裝依賴
uv venv && uv pip install -r requirements.txt

3. 配置認證信息

首次使用前,需要登錄函數計算 AgentRun 控制枱 [ 4] ,創建服務關聯角色(SLR)。

設置環境變量(建議通過 .env 配置您的環境變量)。

export AGENTRUN_ACCESS_KEY_ID="your-access-key-id"
export AGENTRUN_ACCESS_KEY_SECRET="your-access-key-secret"
export AGENTRUN_ACCOUNT_ID="your-account-id"
export AGENTRUN_REGION="cn-hangzhou"

4. 瞭解 Agent 如何與 LangChain 集成

使用 from agentrun.integration.langchain import model, sandbox_toolset 導入 langchain 的集成能力,這裏默認提供了 modelsandbox_toolsettoolset,可以快速創建 langchain 可識別的大模型、工具。

同時,通過 AgentRunServer 可以快速開放 HTTP Server 供其他業務集成。

from agentrun.integration.langchain import model, sandbox_toolset
from agentrun.sandbox import TemplateType
from agentrun.server import AgentRequest, AgentRunServer
from agentrun.utils.log import logger
# 請替換為您已經創建的 模型 和 沙箱 名稱
MODEL_NAME = "<your-model-name>"
SANDBOX_NAME = "<your-sandbox-name>"
if MODEL_NAME.startswith("<"):
    raise ValueError("請將 MODEL_NAME 替換為您已經創建的模型名稱")
code_interpreter_tools = []
if SANDBOX_NAME and not SANDBOX_NAME.startswith("<"):
    code_interpreter_tools = sandbox_toolset(
        template_name=SANDBOX_NAME, # 創建好的沙箱模型的名稱
        template_type=TemplateType.CODE_INTERPRETER, # 沙箱的類型
        sandbox_idle_timeout_seconds=300, # 沙箱空閒超時時間(秒)
    )
else:
    logger.warning("SANDBOX_NAME 未設置或未替換,跳過加載沙箱工具。")
# ...
# 自動啓動 http server,提供 OpenAI 協議
AgentRunServer(invoke_agent=invoke_agent).start()

5. 調用 Agent

curl 127.0.0.1:9000/openai/v1/chat/completions \
  -XPOST \
  -H "content-type: application/json" \
  -d '{"messages": [{"role": "user", "content": "Calculate how many r's are in the word 'strawberry'"}], "stream":true}'

雲端一鍵部署:"函數求值計算專家"示例

平台已為你準備好開箱即用的模板應用------"函數求值計算專家"。該智能體能理解用户輸入的數學求值問題(如計算sin(x) + x^2的極值),自動生成數值計算代碼並在沙箱中執行,最終返回數值計算分析結果。

1. 登錄"函數計算 AgentRun"控制枱,創建好模型、沙箱等資源

登錄阿里雲函數計算 AgentRun 控制枱 [ 5] ,首先創建好模型和代碼解釋器沙箱資源:

  • 模型管理 >> 大語言模型 >> 添加模型

選擇模型供應商、選擇模型、配置憑證並點擊創建模型,創建好您的模型

  • 運行時與沙箱 >> Sandbox 沙箱 >> 創建沙箱模板 >> 代碼解釋器

選擇沙箱配置信息、日誌鏈路追蹤信息,點擊創建解釋器,創建好您的代碼解釋器資源

2. 進入探索頁面,點擊"函數求值計算專家"應用,一鍵部署

進入函數計算 AgentRun 探索頁面 [ 6] ,點擊"函數求值計算專家"應用,一鍵部署。

進入探索頁面,點擊函數求值專家,快速部署您的 Agent 應用

選擇剛剛創建好的大語言模型和沙箱資源,點擊確認創建,創建此 Agent 應用

3. 點擊自動生成域名,進入網頁體驗智能體應用

等待前端後端服務部署完成,點擊生成的域名,跳轉至智能體應用頁面快速體驗相關能力。

等待部署成功,點擊此按鈕,跳轉至應用體驗頁面

您也可以在運行時與沙箱 >> Agent 運行時頁面,查看您剛剛部署 Agent 應用的詳細信息,基於 WebIDE 也可以進行在線調試與二次開發。

跳轉到應用 Web 鏈接,通過對話體驗基於代碼解釋器沙箱的數值計算能力

AgentScope × Browser:讓智能體"看得見"互聯網

AgentScope 是由阿里通義實驗室推出的開源智能體框架,強調模塊化與可組合性。結合函數計算 AgentRun 的 Browser Sandbox,你的 Agent 將具備實時聯網、信息檢索與交互操作的能力。

本地快速實踐

通過 AgentRun SDK,只需簡單配置即可啓用瀏覽器工具。隨後,Agent 即可執行如"訪問新浪財經,獲取今日騰訊控股股價"等指令,並返回結構化數據。

1. 安裝 Serverless Devs

運行腳手架,您需要使用 Serverless Devs 工具,請參考對應安裝教程。

如果您擁有 NodeJS 開發環境,可以使用 npm i -g @serverless-devs/s 快速安裝 Serverless Devs。您也可以直接下載 Serverless Devs 二進制程序使用 Serverless Devs。

2. 初始化腳手架應用

使用快速創建腳手架創建您的 Agent。

注意! 您需要確保您的 python 環境在 3.10 以上。

# 初始化模板
s init agentrun-finance-demo
# 按照實際情況進入代碼目錄
cd agentrun-finance-demo/code/agentrun-backend
# 初始化虛擬環境並安裝依賴
uv venv && uv pip install -r requirements.txt

3. 配置認證信息

設置環境變量。(建議通過 .env 配置您的環境變量)

export AGENTRUN_ACCESS_KEY_ID="your-access-key-id"
export AGENTRUN_ACCESS_KEY_SECRET="your-access-key-secret"
export AGENTRUN_ACCOUNT_ID="your-account-id"
export AGENTRUN_REGION="cn-hangzhou"

4. 瞭解 Agent 如何與 AgentScope 集成

使用 from agentrun.integration.agentscope import model, sandbox_toolset 導入 AgentScope 的集成能力,這裏默認提供了 modelsandbox_toolsettoolset,可以快速創建 AgentScope 可識別的大模型、工具。

同時,通過 AgentRunServer 可以快速開放 HTTP Server 供其他業務集成。

from agentrun.integration.agentscope import model, sandbox_toolset
from agentrun.sandbox import TemplateType
from agentrun.server import AgentRequest, AgentRunServer
from agentrun.utils.log import logger
# 請替換為您已經創建的 模型 和 沙箱 名稱
MODEL_NAME = os.getenv("MODEL", "<your-model-name>")
SANDBOX_NAME = os.getenv("BROWSER_TEMPLATE", "<your-sandbox-name>")
if MODEL_NAME.startswith("<"):
    raise ValueError("請將 MODEL_NAME 替換為您已經創建的模型名稱")
# ...
agent = ReActAgent(
    name="agentscope-finance-assistant-agent",
    sys_prompt=PROMPT,
    model=model(MODEL_NAME),
    formatter=OpenAIChatFormatter(),
    toolkit=toolkit,
    memory=InMemoryMemory(),
)
# ...
# 自動啓動 http server,提供 OpenAI 協議
AgentRunServer(invoke_agent=invoke_agent).start()

5. 基於 AgentRun Sandbox SDK 進行二次開發

在此版代碼示例中,通過開源的 AgentRun Sandbox SDK 對瀏覽器(Browser)沙箱進行靈活二次開發為 AgentScope 原生工具,針對工具調用的開始前準備階段,可以通過 SDK 創建沙箱示例或者選擇一個正在運行的沙箱;在調用結束後,可以通過 SDK 及時刪除沙箱,節省資源消耗。通過 AgentRun Sandbox SDK,可以和代碼無縫集成,靈活對沙箱的生命週期進行全流程管理操作。

_browser_sandbox = None
def get_browser_sandbox():
    """獲取或創建 browser sandbox"""
    global _browser_sandbox
    if _browser_sandbox is None:
        try:
            print(f"正在創建 browser sandbox: {SANDBOX_NAME}")
            _browser_sandbox = Sandbox.create(
                template_type=TemplateType.BROWSER,
                template_name=SANDBOX_NAME,
                sandbox_idle_timeout_seconds=1800,
            )
            # 等待 browser 準備就緒(最多嘗試15次,每次等待1秒)
            max_retries = 15
            for i in range(max_retries):
                health_status = _browser_sandbox.check_health()
                if health_status["status"] == "ok":
                    print(f"browser sandbox 準備就緒 id: {_browser_sandbox.sandbox_id}")
                    break
                import time
                time.sleep(1)
            else:
                # 超過最大重試次數仍未就緒
                raise Exception(f"browser sandbox 在 {max_retries} 秒內未能準備就緒")
        except Exception as e:
            print(f"創建 browser sandbox 失敗: {str(e)}")
            import traceback
            traceback.print_exc()
            return None
    return _browser_sandbox
async def browser_search(keyword: str, page: int = 1, wait_seconds: float = 1.5) -> ToolResponse:
    """使用Bing搜索指定關鍵詞,並查看指定頁碼的結果,返回搜索結果標題列表
    Args:
        keyword: 搜索關鍵詞
        page: 頁碼,從1開始,默認為第1頁
        wait_seconds: 等待頁面加載的秒數,默認為1.5秒
    Returns:
        搜索結果標題列表,每個標題包含文本內容和鏈接
    """
    try:
        import asyncio
        from urllib.parse import quote
        # 構造Bing搜索URL
        # first參數:第1頁=0, 第2頁=10, 第3頁=20,以此類推
        first = (page - 1) * 10 + 1
        encoded_keyword = quote(keyword)
        url = f"https://www.bing.com/search?q={encoded_keyword}&first={first}"
        print(f"[DEBUG] url: {url}")
        browser = get_browser_sandbox()
        if browser is None:
            return make_tool_response("瀏覽器工具不可用,請透出讓用户檢查browser是否存在的信息")
        async with browser.async_playwright(record=True) as playwright:
            try:
                # 設置導航超時為5秒,並等待頁面加載
                await playwright.goto(url, timeout=5000)
                # 等待頁面加載完成
                if wait_seconds > 0:
                    print(f"等待 {wait_seconds} 秒以確保頁面加載完成")
                    await asyncio.sleep(wait_seconds)
                # 獲取頁面HTML內容
                html = await playwright.html_content()
                print(f"[DEBUG] html length: {len(html)}")
            except Exception as page_error:
                # 捕獲頁面操作相關的錯誤
                error_msg = str(page_error)
                if "TargetClosedError" in error_msg or "closed" in error_msg.lower():
                    return make_tool_response("搜索失敗: 頁面在加載過程中被關閉,該網站可能不允許自動化訪問")
                elif "timeout" in error_msg.lower():
                    return make_tool_response(f"搜索失敗: 頁面加載超時({url}),請稍後重試")
                else:
                    raise  # 其他錯誤繼續拋出,由外層捕獲
            # 使用工具函數提取搜索結果
            search_results = extract_bing_search_results(html)
            if not search_results:
                return make_tool_response(f"搜索 '{keyword}'(第{page}頁)完成,但未找到搜索結果")
            # 格式化輸出
            formatted_results = []
            for i, result in enumerate(search_results, 1):
                formatted_results.append(f"{i}. {result['title']}\n   鏈接: {result['link']}")
                print(f"{i}. {result['title']}\n   鏈接: {result['link']}")
            result_text = "\n\n".join(formatted_results)
            return make_tool_response(f"成功搜索 '{keyword}'(第{page}頁),找到 {len(search_results)} 個結果:\n\n{result_text}")
    except Exception as e:
        import traceback
        traceback.print_exc()
        return make_tool_response(f"搜索失敗: {str(e)}")
async def browser_text_content(url: str, wait_seconds: float = 1.5) -> ToolResponse:
    """訪問指定網頁並獲取其純文本內容(已過濾HTML標籤和腳本)
    先導航到指定URL,等待頁面加載,然後提取頁面的可讀文本內容。
    Args:
        url: 要訪問的網頁URL地址
        wait_seconds: 等待頁面加載的秒數,默認為1.5秒(大多數網頁足夠)
    返回頁面的可讀文本內容,已自動過濾:
    - 所有HTML標籤
    - JavaScript代碼
    - CSS樣式
    - HTML註釋
    Returns:
        頁面的純文本內容
    注意:
    - 默認等待1.5秒通常足夠大多數網頁加載
    - 如果內容沒有完全加載,可以增加wait_seconds參數重試(如wait_seconds=3.0)
    - 某些網頁可能會攔截自動化工具訪問,導致無法獲取內容
    - 如果遇到訪問失敗,可以嘗試其他來源的鏈接
    """
    # 檢查URL是否在黑名單中
    import asyncio
    try:
        browser = get_browser_sandbox()
        if browser is None:
            return make_tool_response("瀏覽器工具不可用,請透出讓用户檢查browser是否存在的信息")
        async with browser.async_playwright(record=True) as playwright:
            try:
                # 先導航到指定URL,設置超時為5秒
                await playwright.goto(url, timeout=5000)
                # 等待頁面加載完成
                if wait_seconds > 0:
                    await asyncio.sleep(wait_seconds)
                # 獲取HTML內容
                html = await playwright.html_content()
                # 使用過濾函數提取純文本
                text = filter_html_to_text(html)
                print(f"{url}:\n{text}\n{'=' * 100}")
                # 如果文本內容太長,只返回前50000個字符和總長度信息
                if len(text) > 50000:
                    return make_tool_response(f"成功訪問 {url}\n\n文本內容(前10000字符):\n{text[:50000]}\n\n... (總長度: {len(text)} 字符)")
                return make_tool_response(f"成功訪問 {url}\n\n文本內容:\n{text}")
            except Exception as page_error:
                # 捕獲頁面操作相關的錯誤
                error_msg = str(page_error)
                if "TargetClosedError" in error_msg or "closed" in error_msg.lower():
                    return make_tool_response(f"獲取網頁內容失敗: {url}\n錯誤: 頁面在加載過程中被關閉\n注意: 該網頁可能對自動化工具進行了攔截,建議嘗試其他來源")
                elif "timeout" in error_msg.lower():
                    return make_tool_response(f"獲取網頁內容失敗: {url}\n錯誤: 頁面加載超時(5秒)\n建議: 可以嘗試增加 wait_seconds 參數或嘗試其他來源")
                else:
                    raise  # 其他錯誤繼續拋出,由外層捕獲
    except Exception as e:
        return make_tool_response(f"獲取網頁內容失敗: {url}\n錯誤: {str(e)}\n注意: 該網頁可能對自動化工具進行了攔截,建議嘗試其他來源")

AgentRun Sandbox SDK 中,集成了 PlayWright,用户可以根據上述代碼進行二次開發為相應工具,browser_search() 通過必應搜索相關內容。同時,browser_text_content() 通過網頁抓取,為 Agent 提供更多信息。

此外,get_browser_sandbox() 通過 SDK 二次開發,可以靈活管理 Sandbox 的生命週期,包含創建、刪除等一站式生命週期管理。

6. 調用 Agent

curl 127.0.0.1:9000/openai/v1/chat/completions \
  -XPOST \
  -H "content-type: application/json" \
  -d '{"messages": [{"role": "user", "content": "查詢下當前的上證指數"}], "stream":true}'

雲端部署實戰:"金融股票專家"智能體

我們基於此能力打造了"金融股票專家"應用:用户輸入股票名稱或代碼,Agent 自動打開財經網站,抓取最新行情、財報摘要與新聞輿情,綜合分析後生成投資建議。

1. 登錄"函數計算 AgentRun"控制枱,創建好模型、沙箱等資源

登錄阿里雲函數計算 AgentRun 控制枱,首先創建好模型和代碼解釋器沙箱資源:

  • 模型管理 >> 大語言模型 >> 添加模型

選擇模型供應商、選擇模型、配置憑證並點擊創建模型,創建好您的模型

  • 運行時與沙箱 >> Sandbox 沙箱 >> 創建沙箱模板 >> 瀏覽器

2. 進入探索頁面,點擊"股票金融專家"應用,一鍵部署

進入函數計算 AgentRun 探索頁面,點擊"股票金融專家"應用,一鍵部署。

進入探索頁面,點擊股票金融專家快速部署您的 Agent 應用

選擇剛剛創建好的大語言模型和沙箱資源,點擊確認創建,創建此 Agent 應用

3. 點擊自動生成域名,進入網頁體驗智能體應用

等待前端後端服務部署完成,點擊生成的域名,跳轉至智能體應用頁面快速體驗相關能力。

等待部署成功,點擊此按鈕,跳轉至應用體驗頁面

您也可以在運行時與沙箱 >> Agent 運行時頁面,查看您剛剛部署 Agent 應用的詳細信息,基於 WebIDE 也可以進行在線調試與二次開發。

跳轉到應用 Web 鏈接,通過對話體驗基於瀏覽器沙箱的網頁內容檢索能力

結語:智能隨心,開發成趣

Agentic AI 的未來,不應被基礎設施的複雜性所束縛。AgentRun Sandbox SDK 的開源,正是為了打破這一壁壘。

無論你是 LangChain 的忠實用户,還是 AgentScope 的探索者;無論你在本地調試原型,還是在雲端部署生產級應用------函數計算 AgentRun 都能為你提供安全、彈性、免運維的沙箱運行時,讓每一個智能體都能輕盈地奔跑在雲端。

現在就加入我們!

  • GitHub 開源地址:https://github.com/Serverless-Devs/agentrun-sdk-python

  • 文檔與示例:https://docs.agent.run/

  • 加入"函數計算 AgentRun 客户羣"羣的釘釘羣號:134570017218

歡迎 Star、Fork、提 Issue,一起共建開放的 Agentic 生態!

智能隨心,開發成趣 ------ 函數計算 AgentRun,讓智能體開發迴歸創造力本身。

相關鏈接:

[1] AgentRun

https://functionai.console.aliyun.com/agent/explore

[2] 安裝教程

https://serverless-devs.com/docs/user-guide/install

[3] Serverless Devs 二進制程序

https://github.com/Serverless-Devs/Serverless-Devs/releases

[4] AgentRun 控制枱

https://functionai.console.aliyun.com/agent/explore

[5] AgentRun 控制枱

https://functionai.console.aliyun.com/welcome

[6] AgentRun 探索頁面

https://functionai.console.aliyun.com/agent/explore

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.