Monty

Monty est un interpréteur basé sur Rust pour un sous-ensemble de Python restreint. MontyCodeActProvider fournit à un agent Agent Framework un outil execute_code et permet au code généré d’appeler des outils appartenant au fournisseur en tant que fonctions asynchrones typées ou via call_tool(...).

Cette intégration utilise le modèle CodeAct avec un interpréteur restreint plutôt qu’un bac à sable isolé au niveau matériel.

Utilisez Monty lorsque vous avez besoin d’un environnement d’exécution CodeAct multiplateforme sans dépendre de l’hyperviseur Hyperlight ni d’un invité WASM Hyperlight.

Note

agent-framework-monty est un package bêta. Monty restreint le système d’exploitation, le sous-processus et l’accès réseau direct, mais il ne s’agit pas d’une machine virtuelle isolée par le matériel.

Installer les packages

pip install agent-framework-monty agent-framework-foundry --pre

Ajouter MontyCodeActProvider

Inscrivez les outils hôtes sur le fournisseur plutôt que directement sur l’assistant. Le modèle voit execute_code et appelle ces outils à partir du code généré.

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}")

Configurer les fonctionnalités

MontyCodeActProvider et MontyExecuteCodeTool support :

  • Outils hôtes et gestion des outils d’exécution
  • never_require ou always_require approbation pour execute_code
  • montages de fichiers racine et explicites d’un espace de travail
  • Limites des ressources Monty
  • fichiers renvoyés à partir de montages en lecture-écriture en tant que contenu Agent Framework

Monty ne fournit pas de liste d’autorisation d’URL sortantes. Fournissez un accès réseau via un outil hôte étroit qui valide les destinations et les entrées.

Choisir Monty ou Hyperlight

Temps d’exécution Choisissez cette option lorsque
Monty L’exécution multiplateforme et un interpréteur restreint sont suffisants.
Hyperlight Vous avez besoin d’un bac à sable renforcé, de contrôles de système de fichiers ou de listes d’autorisation de domaine sortant.

Étapes suivantes