Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Monty è un interprete basato su Rust per un subset con restrizioni Python.
MontyCodeActProvider fornisce a un agente di Agent Framework un tool execute_code e consente al codice generato di chiamare gli strumenti di proprietà del provider come funzioni asincrone tipizzate o tramite call_tool(...).
Questa integrazione usa il modello CodeAct con un interprete con restrizioni anziché un sandbox isolato dall'hardware.
Usa Monty quando hai bisogno di un runtime CodeAct multipiattaforma senza l'hypervisor di Hyperlight o la dipendenza da un guest WASM.
Annotazioni
agent-framework-monty è un pacchetto beta. Monty limita il sistema operativo, il subprocesso e l'accesso diretto alla rete, ma non è una macchina virtuale isolata dall'hardware.
Warning
MontyCodeActProvider e MontyExecuteCodeTool attualmente non supportano FIDES. Le chiamate dello strumento host gestite dal provider non passano attraverso la pipeline middleware per funzione dell'agente.
I controlli sugli strumenti dell'agente diretto o sulla chiamata esterna execute_code non coprono le chiamate annidate, i valori intermedi interni al codice o le funzionalità di rete e file. Gli strumenti host devono applicare i propri controlli di autorizzazione e di destinazione.
Mantenere gli strumenti dipendenti da FIDES come strumenti dell'agente diretto, non gestiti da Monty, oppure lasciare CodeAct disabilitato per i flussi di lavoro che richiedono queste garanzie. Vedere le limitazioni correnti di CodeAct.
Installare i pacchetti
pip install agent-framework-monty agent-framework-foundry --pre
Aggiungere MontyCodeActProvider
Registrare gli strumenti host nel provider anziché direttamente nell'agente. Il modello vede execute_code e chiama tali strumenti dal codice generato.
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}")
Controllare le descrizioni dei parametri degli strumenti host
MontyCodeActProvider e MontyExecuteCodeTool accettano tool_description_format. L'impostazione predefinita, "compact", include i tipi di parametri scalari, l'indicazione se sono obbligatori o facoltativi, le descrizioni, i valori di enumerazione e i valori predefiniti nella descrizione di execute_code e nelle istruzioni CodeAct. Usare "json" per completare lo schema JSON o selezionare un formato in base al nome esatto dello strumento con distinzione tra maiuscole e minuscole:
codeact = MontyCodeActProvider(
tools=[compute, fetch_data],
tool_description_format={
"compute": "json",
"fetch_data": "compact",
},
)
Gli strumenti omessi da un mapping usano il formato compatto. Il rendering compatto torna automaticamente allo schema JSON completo quando non riesce a rappresentare uno schema senza perdere vincoli, ad esempio nel caso di oggetti annidati, array, riferimenti o unioni. Gli schemi dei parametri sono visibili al modello, pertanto non includere credenziali o altri segreti nelle descrizioni, valori enumerazione, valori predefiniti o campi dello schema personalizzati.
Configurare le funzionalità
supporto per MontyCodeActProvider e MontyExecuteCodeTool:
- strumenti host e gestione degli strumenti di runtime
- Approvazione
never_requireoalways_requireperexecute_code - montaggi di file espliciti e radice dell'area di lavoro
- Limiti delle risorse Monty
- file restituiti dai montaggi di lettura/scrittura come contenuto di Agent Framework
L'acquisizione di file post-esecuzione restituisce solo file normali reali da mount in lettura/scrittura. Ignora collegamenti simbolici, giunzioni di Windows e altri reparse point e file non regolari a ogni livello di percorso. Prima di leggere un file, Monty verifica che il descrittore aperto corrisponda al percorso convalidato e ricontrolla i componenti del percorso. Se il file o un predecessore cambia durante l'acquisizione, il file viene omesso anziché seguito.
Accesso alla rete e pacchetti di Python
Monty esegue il proprio interprete Python, non l'ambiente Python dell'host. Questa integrazione non fornisce pip o un'altra opzione di installazione del pacchetto.
Installare una dipendenza sull'host non la rende importabile nel codice Monty.
Usare i moduli supportati dell'interprete per il codice eseguito all'interno di Monty.
Monty non offre un'opzione allowed_domains . Per le chiamate API esterne o le operazioni che richiedono pacchetti installati sull'host, registrare uno strumento host con ambito limitato e invocarlo dal codice Monty. Mantieni le credenziali, l'autorizzazione e i controlli sull'elenco di elementi consentiti per la destinazione in quella funzione, perché viene eseguita sull'host, al di fuori dell'interprete Monty.
Scegliere Monty o Hyperlight
| Runtime | Da scegliere per |
|---|---|
| Monty | L'esecuzione multipiattaforma e un interprete con restrizioni sono sufficienti. |
| Hyperlight | Hai bisogno di un sandbox protetto, di controlli sul file system o di liste di domini in uscita consentiti. |