Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Monty é um interpretador baseado em Rust para um subconjunto de Python restrito.
MontyCodeActProvider fornece a um agente do Agent Framework uma ferramenta execute_code e permite que o código gerado chame ferramentas do provedor como funções assíncronas tipadas ou por meio de call_tool(...).
Essa integração usa o padrão CodeAct com um interpretador restrito em vez de um sandbox isolado por hardware.
Use o Monty quando precisar de um runtime CodeAct de plataforma cruzada sem o hipervisor do Hyperlight ou a dependência de um convidado WASM.
Note
agent-framework-monty é um pacote beta. Monty restringe o sistema operacional, o subprocesso e o acesso direto à rede, mas não é uma máquina virtual isolada por hardware.
Warning
MontyCodeActProvider e MontyExecuteCodeTool atualmente não dão suporte ao FIDES. As chamadas da ferramenta de host gerenciada pelo provedor não passam pelo pipeline de middleware por função do agente.
As verificações em ferramentas de agente direto ou na chamada externa execute_code não abrangem chamadas aninhadas, valores intermediários internos de código ou recursos de arquivo e rede. As ferramentas de host devem impor seus próprios controles de autorização e de destino.
Mantenha as ferramentas dependentes do FIDES como ferramentas de agente direto, não ferramentas gerenciadas por Monty ou deixe o CodeAct desabilitado para fluxos de trabalho que exigem essas garantias. Consulte as limitações atuais do CodeAct.
Instalar os pacotes
pip install agent-framework-monty agent-framework-foundry --pre
Adicionar MontyCodeActProvider
Registre as ferramentas de host no provedor em vez de diretamente no agente. O modelo vê execute_code e chama essas ferramentas a partir do código gerado.
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}")
Controlar descrições de parâmetro da ferramenta de host
MontyCodeActProvider e MontyExecuteCodeTool aceitam tool_description_format. O padrão, "compact", inclui tipos de parâmetro escalar, status de obrigatório ou opcional, descrições, valores de enum e padrões na descrição execute_code e nas instruções do CodeAct. Use "json" para o esquema JSON completo ou selecione um formato pelo nome exato da ferramenta, respeitando maiúsculas e minúsculas:
codeact = MontyCodeActProvider(
tools=[compute, fetch_data],
tool_description_format={
"compute": "json",
"fetch_data": "compact",
},
)
As ferramentas omitidas de um mapeamento usam o formato compacto. A renderização compacta volta automaticamente ao esquema JSON completo quando não pode representar um esquema sem perder restrições, como objetos aninhados, matrizes, referências ou uniões. Esquemas de parâmetro são visíveis para o modelo, portanto, não inclua credenciais ou outros segredos em descrições, valores de enumeração, padrões ou campos de esquema personalizados.
Configurar recursos
Suporte MontyCodeActProvider e MontyExecuteCodeTool:
- ferramentas de host e gerenciamento de ferramentas de runtime
- Aprovação
never_requireoualways_requireparaexecute_code - uma raiz do espaço de trabalho e montagens explícitas de arquivos
- Limites de recursos do Monty
- arquivos retornados de montagens de leitura/gravação como conteúdo do Agent Framework
A captura de arquivo pós-execução retorna apenas arquivos regulares reais de montagens de leitura e gravação. Ele ignora symlinks, junções do Windows e outros pontos de reanálise e arquivos não regulares em todos os níveis de caminho. Antes de ler um arquivo, Monty verifica se o descritor aberto corresponde ao caminho validado e verifica novamente os componentes de caminho. Se o arquivo ou um ancestral for alterado durante a captura, o arquivo será omitido em vez de acompanhado.
Acesso à rede e pacotes de Python
Monty executa seu próprio interpretador Python, não o ambiente de Python do host. Essa integração não fornece pip nem outra opção de instalação de pacote.
Instalar uma dependência no host não o torna importável no código monty.
Use os módulos com suporte do interpretador para o código executado dentro do Monty.
Monty não oferece uma opção allowed_domains. Para chamadas de API externas ou operações que exigem pacotes instalados no host, registre uma ferramenta de host específica e invoque-a a partir do código Monty. Mantenha as credenciais, a autorização e as verificações da lista de permissões de destino nessa função porque ela é executada no host, fora do interpretador do Monty.
Escolha Monty ou Hyperlight
| Tempo de execução | Escolha-o quando |
|---|---|
| Monty | A execução entre plataformas e um interpretador restrito são suficientes. |
| Hyperlight | Você precisa de uma sandbox reforçada, controles do sistema de arquivos ou listas de permissões de domínios de saída. |