Monty

Monty es un intérprete basado en Rust para un subconjunto de Python restringido. MontyCodeActProvider proporciona a un agente de Agent Framework una herramienta execute_code y permite que el código generado llame a las herramientas del proveedor como funciones asíncronas tipadas o a través de call_tool(...).

Esta integración utiliza el patrón CodeAct con un intérprete restringido en lugar de un entorno aislado por hardware.

Utilice Monty cuando necesite un entorno de ejecución multiplataforma de CodeAct sin el hipervisor de Hyperlight ni la dependencia de un invitado WASM.

Note

agent-framework-monty es un paquete beta. Monty restringe el sistema operativo, el subproceso y el acceso directo a la red, pero no es una máquina virtual aislada por hardware.

Warning

MontyCodeActProvider y MontyExecuteCodeTool no admiten actualmente FIDES. Las llamadas a herramientas host administradas por el proveedor no pasan a través de la canalización de middleware por función del agente.

Las comprobaciones en las herramientas directas del agente o en la llamada externa execute_code no cubren las llamadas anidadas, los valores intermedios internos del código o las funcionalidades de archivo y red. Las herramientas de host deben aplicar sus propios controles de autorización y destino.

Mantenga las herramientas dependientes de FIDES como herramientas de agente directo, no herramientas administradas por Monty o deje CodeAct deshabilitado para los flujos de trabajo que requieren esas garantías. Consulte Las limitaciones actuales de CodeAct.

Instalación de los paquetes

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

Agregue MontyCodeActProvider.

Registra las herramientas del host en el proveedor en lugar de hacerlo directamente en el agente. El modelo ve execute_code y llama a esas herramientas desde código generado.

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

Descripciones de los parámetros de la herramienta del host de control

MontyCodeActProvider y MontyExecuteCodeTool acepte tool_description_format. La opción predeterminada, "compact", incluye tipos escalares de parámetros, si son obligatorios u opcionales, descripciones, valores de enumeración y valores predeterminados en la descripción de execute_code y las instrucciones de CodeAct. Use "json" para completar el esquema JSON o seleccione un formato con el nombre exacto de la herramienta que distingue mayúsculas de minúsculas:

codeact = MontyCodeActProvider(
    tools=[compute, fetch_data],
    tool_description_format={
        "compute": "json",
        "fetch_data": "compact",
    },
)

Las herramientas omitidas en un mapeo usan el formato compacto. La representación compacta vuelve automáticamente a completar el esquema JSON cuando no puede representar un esquema sin perder restricciones, como objetos anidados, matrices, referencias o uniones. Los esquemas de parámetros son visibles para el modelo, por lo que no incluya credenciales ni otros secretos en descripciones, valores de enumeración, valores predeterminados o campos de esquema personalizados.

Configurar las capacidades

Compatibilidad con MontyCodeActProvider y MontyExecuteCodeTool:

  • herramientas de host y administración de herramientas en tiempo de ejecución
  • never_require o always_require para execute_code
  • una raíz del espacio de trabajo y montajes explícitos de archivos
  • Límites de recursos de Monty
  • archivos devueltos desde montajes de lectura y escritura como contenido del Agent Framework

La captura de archivos tras la ejecución solo devuelve archivos regulares reales de montajes de lectura y escritura. Omite vínculos simbólicos, puntos de unión de Windows y otros puntos de reanálisis, y archivos no regulares en cada nivel de ruta de acceso. Antes de leer un archivo, Monty comprueba que el descriptor abierto coincide con la ruta de acceso validada y vuelve a comprobar los componentes de la ruta de acceso. Si el archivo o un antecesor cambia durante la captura, el archivo se omite en lugar de seguirse.

Acceso a la red y paquetes de Python

Monty ejecuta su propio intérprete de Python, no el entorno de Python del host. Esta integración no proporciona pip ni otra opción de instalación de paquetes. La instalación de una dependencia en el host no hace que se pueda importar en el código de Monty. Use los módulos admitidos del intérprete para el código que se ejecuta dentro de Monty.

Monty no proporciona una opción allowed_domains. Para las llamadas a API externas o las operaciones que requieran paquetes instalados en el host, registre una herramienta específica del host e invóquela desde el código de Monty. Mantenga las comprobaciones de credenciales, autorización y lista de permitidos de destino en esa función porque se ejecuta en el host, fuera del intérprete de Monty.

Elegir Monty o Hyperlight

Runtime Elíjalo cuando
Monty La ejecución multiplataforma y un intérprete restringido son suficientes.
Hyperlight Necesitas un entorno aislado reforzado, controles del sistema de archivos o listas de dominios permitidos de salida.

Pasos siguientes