Monty 是一個基於 Rust 的解譯器,適用於受限的 Python 子集。
MontyCodeActProvider為 Agent Framework Agent 提供一個execute_code工具,並讓產生的程式碼能夠以具類型的非同步函式,或透過call_tool(...)來呼叫由提供者擁有的工具。
此整合採用 CodeAct 模式,並使用受限直譯器,而非硬體隔離的沙盒。
當你需要不依賴 Hyperlight 的虛擬機監控程式或 WASM 客體環境的跨平台 CodeAct 執行階段時,請使用 Monty。
備註
agent-framework-monty 是測試版套件。 Monty 限制了作業系統、子程序和直接網路存取,但它並非硬體隔離的虛擬機器。
警告
MontyCodeActProvider 和 MontyExecuteCodeTool 目前不支援 FIDES。 提供者管理的主機工具呼叫不會通過 Agent 的個別函式中介軟體管線。
對直接代理工具或外部 execute_code 呼叫的檢查不涵蓋巢狀呼叫、程式碼內部中間值,或檔案與網路功能。 主機工具必須自行強制執行本身的授權與目的地控制。
將依賴 FIDES 的工具保留為直接代理工具,而非 Monty 管理的工具,或在需要這些保證的工作流程中停用 CodeAct。 請參閱 CodeAct目前的限制。
安裝套件
pip install agent-framework-monty agent-framework-foundry --pre
加上 MontyCodeActProvider
將主機工具註冊在提供者上,而非直接在代理上。 模型會看到 execute_code,並從產生的程式碼中呼叫這些工具。
async def main() -> None:
"""Run the provider-owned Monty CodeAct sample."""
# 1. Create the Monty-backed provider and register sandbox tools on it.
codeact = MontyCodeActProvider(
tools=[compute, fetch_data],
approval_mode="never_require",
)
# 2. Create the client and the agent.
agent = Agent(
client=FoundryChatClient(
project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
model=os.environ["FOUNDRY_MODEL"],
credential=AzureCliCredential(),
),
name="MontyCodeActProviderAgent",
instructions="You are a helpful assistant.",
context_providers=[codeact],
middleware=[log_function_calls],
)
# 3. Run a request that should use execute_code plus provider-owned tools.
query = (
"Fetch all users, find admins, multiply 7*(3*2), and print the users, "
"admins, and multiplication result. Use a single execute_code call. "
"You may call the registered tools directly as typed async functions "
"(`await compute(operation='multiply', a=7, b=6)`) or via "
"`call_tool('compute', ...)`."
)
print(f"{_CYAN}{'=' * 60}")
print("Monty CodeAct provider sample")
print(f"{'=' * 60}{_RESET}")
print(f"{_CYAN}User: {query}{_RESET}")
result = await agent.run(query)
print(f"{_CYAN}Agent: {result.text}{_RESET}")
控制主機工具參數描述
MontyCodeActProvider 和 MontyExecuteCodeTool 接受 tool_description_format。 預設 "compact"值包含純量參數類型、必要或可選狀態、描述、枚舉值,以及描述與 CodeAct 指令中的 execute_code 預設值。 使用 "json" 以取得完整的 JSON Schema,或依完全相符且區分大小寫的工具名稱選取格式:
codeact = MontyCodeActProvider(
tools=[compute, fetch_data],
tool_description_format={
"compute": "json",
"fetch_data": "compact",
},
)
地圖中省略的工具則使用精簡格式。 當 Compact 渲染無法在不失去限制條件(如巢狀物件、陣列、參考或聯集)的情況下表示結構時,會自動退回到完整的 JSON Schema。 參數結構對模型可見,因此不要在描述、列舉值、預設值或自訂結構欄位中包含憑證或其他秘密。
設定功能
MontyCodeActProvider和MontyExecuteCodeTool支援:
- 主機工具與執行時工具管理
-
never_require或對execute_code的always_require核准 - 工作區根目錄與明確的檔案掛載
- Monty 資源限制
- 從讀寫掛載回傳的檔案會以 Agent Framework 內容的形式呈現
執行後檔案擷取僅回傳讀寫掛載的真實常規檔案。 它會跳過符號連結、Windows 接點及其他重解析點,以及每個路徑層級的非規則檔案。 在讀取檔案前,Monty 會確認已開啟的描述符是否與驗證路徑相符,並重新檢查路徑元件。 若檔案或上階在擷取過程中發生變更,會省略而不是追蹤該檔案。
每次執行最多可擷取 20 個檔案及 20 MiB 的原始資料,涵蓋所有讀寫掛載,且每個檔案限制為 5 MiB。 空白檔案計入檔案限制。 超出剩餘預算的檔案會被跳過,但之後仍可擷取較小的檔案。 當任何檔案超過擷取限制時,回應會包含一份省略摘要。 檔案仍保留在沙盒中;這些限制僅適用於退回的附件。
網路存取與 Python 套件
Monty 運行的是自己的 Python 直譯器,而不是主機的 Python 環境。 此整合不提供 pip 或其他套件安裝選項。
在主機上安裝相依套件,並不會讓它能在 Monty 程式碼中被匯入。
使用直譯器支援的模組來處理 Monty 內部執行的程式碼。
Monty 不提供 allowed_domains 選項。 對於需要主機安裝套件的外部 API 呼叫或操作,註冊一個窄型主機工具,並從 Monty 程式碼呼叫它。 請將憑證、授權和目的地允許清單檢查保留在該函式中,因為該函式是在主機上執行,而不是在 Monty 直譯器內執行。
選擇Monty或Hyperlight。
| Runtime | 在以下時機加以選擇 |
|---|---|
| 蒙提 | 跨平台執行與受限直譯器即可。 |
| 超光速 | 您需要強化沙箱、檔案系統控制或輸出網域允許清單。 |