Monty

Trình thông dịch Python siêu tốc, bảo mật viết bằng Rust giúp thực thi code do AI sinh ra an toàn mà không cần Docker.

Giới thiệu

Monty (của Pydantic) là một trình thông dịch Python thu nhỏ (subset) được viết bằng Rust, được thiết kế đặc biệt để giải quyết bài toán an toàn khi chạy code do AI (LLM) sinh ra. Bình thường, để chạy code không tin cậy, developer phải dùng Docker container (chậm, nặng) hoặc WebAssembly. Monty giải quyết vấn đề này bằng cách cung cấp một môi trường sandbox ngay ở cấp độ thông dịch viên, khởi động cực nhanh (micro-seconds) và mặc định chặn mọi truy cập nguy hiểm (file hệ thống, mạng). Đây là công cụ lý tưởng cho các AI Agent cần khả năng ‘Code Interpreter’ mạnh mẽ và an toàn.

Tính năng chính

  • Sandboxing mặc định: Ngăn chặn hoàn toàn việc truy cập filesystem, biến môi trường và mạng trừ khi được cấp quyền.
  • Hiệu năng cực cao: Thời gian khởi động tính bằng microsecond, nhanh hơn rất nhiều so với việc spin-up một Docker container.
  • Viết bằng Rust: Đảm bảo an toàn bộ nhớ và hiệu suất thực thi gần tương đương CPython.
  • Hỗ trợ Host Functions: Cho phép định nghĩa các hàm an toàn từ phía ứng dụng chính (Host) để code trong sandbox gọi ra.
  • Snapshotting: Hỗ trợ lưu trạng thái bộ nhớ để tạm dừng và tiếp tục thực thi sau này.

Hướng dẫn cài đặt Local (macOS)

Để sử dụng Monty trên macOS, bạn có thể cài đặt trực tiếp qua pip hoặc uv (khuyến nghị dùng uv để quản lý package tốt hơn).

  1. Cài đặt Python 3.9+ (nếu chưa có):
    brew install python
    
  2. Cài đặt thư viện pydantic-monty:
    pip install pydantic-monty
    # Hoặc nếu dùng uv:
    uv add pydantic-monty
    
  3. Kiểm tra cài đặt:
    python -c "import pydantic_monty; print('Monty installed successfully')"
    

Hướng dẫn Docker

Mặc dù Monty sinh ra để thay thế Docker trong việc sandbox code, nhưng bạn vẫn có thể cần đóng gói ứng dụng AI Agent của mình (có chứa Monty) bằng Docker. Dưới đây là Dockerfile cơ bản:

# Sử dụng Python slim image để tối ưu dung lượng
FROM python:3.11-slim

# Thiết lập thư mục làm việc
WORKDIR /app

# Cài đặt dependencies
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Đảm bảo pydantic-monty có trong requirements.txt

# Copy mã nguồn ứng dụng
COPY . .

# Chạy ứng dụng
CMD ["python", "main.py"]

Build và Run:

# Build image
docker build -t my-ai-agent .
# Run container
docker run my-ai-agent

Ví dụ Code (Example Code)

Dưới đây là ví dụ minh họa cách sử dụng Monty để chạy một đoạn code Python không tin cậy một cách an toàn. (Lưu ý: API có thể thay đổi do dự án đang phát triển nhanh).

import asyncio
# Giả định import, tên module thực tế có thể là pydantic_monty
import pydantic_monty

async def run_safe_code():
    # Code được sinh ra bởi LLM (ví dụ: tính toán đơn giản)
    # Code này KHÔNG thể truy cập file hay mạng của máy bạn
    unsafe_code = """
result = 0
for i in range(10):
    result += i
print(f'Kết quả tính toán an toàn: {result}')
"""

    print("--- Bắt đầu thực thi trong Monty Sandbox ---")
    
    # Khởi tạo instance Monty với code cần chạy
    monty_instance = pydantic_monty.Monty(unsafe_code)
    
    # Thực thi code (API mẫu)
    # Monty sẽ chặn nếu code cố gắng import os hay truy cập disk
    await pydantic_monty.run_monty_async(monty_instance)
    
    print("--- Kết thúc thực thi ---")

if __name__ == "__main__":
    asyncio.run(run_safe_code())

Sources

Github Page

https://github.com/pydantic/monty

Tags: github
Share: X (Twitter) Facebook LinkedIn