Giới thiệu

Bạn đã bao giờ lo lắng khi cho phép AI (LLM) tự viết và thực thi mã Python trực tiếp trên hệ thống của mình chưa? Việc chạy code do AI tạo ra luôn tiềm ẩn rủi ro bảo mật lớn, nhưng các giải pháp như Docker hay Sandbox truyền thống lại quá nặng nề và chậm chạp.

Đó chính là lý do Monty ra đời. Được phát triển bởi đội ngũ đứng sau Pydantic danh tiếng, Monty là một trình thông dịch Python tối giản, viết hoàn toàn bằng Rust, được thiết kế riêng biệt để thực thi mã của AI một cách an toàn và nhanh chóng.

Thông số ấn tượng:

  • Stars: 4,290+
  • Forks: 155+
  • Ngôn ngữ: Rust
  • Tốc độ khởi động: < 1 micro giây (nhanh hơn hàng nghìn lần so với Docker).

Tính năng nổi bật

Monty không cố gắng thay thế hoàn toàn CPython, mà tập trung vào những gì AI cần:

  1. Bảo mật tuyệt đối: Monty chặn hoàn toàn quyền truy cập vào hệ thống file, biến môi trường và mạng. Bạn có toàn quyền kiểm soát những hàm nào AI được phép gọi.
  2. Tốc độ ánh sáng: Thời gian khởi động gần như bằng 0, cực kỳ phù hợp cho các ứng dụng Agent cần phản hồi tức thì.
  3. Snapshotting: Bạn có thể "đóng băng" trạng thái thực thi của code thành một mảng bytes, lưu vào database và khôi phục lại để chạy tiếp ở bất kỳ đâu.
  4. Kiểm soát tài nguyên: Dễ dàng giới hạn bộ nhớ, độ sâu của stack và thời gian thực thi để tránh các cuộc tấn công gây treo hệ thống.
  5. Hỗ trợ Type Checking: Tích hợp sẵn bộ kiểm tra kiểu dữ liệu hiện đại, giúp đảm bảo code AI viết ra chuẩn chỉnh.

Cài đặt

Bạn có thể cài đặt Monty cực kỳ đơn giản thông qua pip hoặc uv (công cụ quản lý package nhanh nhất hiện nay):

# Dành cho các bạn dùng uv
uv add pydantic-monty

# Hoặc dùng pip truyền thống
pip install pydantic-monty

Hướng dẫn sử dụng

Chạy code Python cơ bản

Đây là cách bạn có thể thực thi một đoạn mã Python từ trong ứng dụng của mình:

import pydantic_monty

code = "x + y"
m = pydantic_monty.Monty(code, inputs=['x', 'y'])

result = m.run(inputs={'x': 10, 'y': 32})
print(result) # Output: 42

Tính năng Snapshot (Tạm dừng và Tiếp tục)

Đây là tính năng "ăn tiền" nhất của Monty. Hãy tưởng tượng bạn đang chạy một quy trình AI dài và muốn tạm dừng để chờ phản hồi từ người dùng:

import pydantic_monty

code = """
data = fetch_data(url)
len(data)
"""

m = pydantic_monty.Monty(code, inputs=['url'], external_functions=['fetch_data'])

# Bắt đầu thực thi - sẽ tạm dừng khi gặp hàm fetch_data
progress = m.start(inputs={'url': 'https://api.example.com'})

# Lưu lại trạng thái này vào database nếu muốn
state_bytes = progress.dump()

# Khi đã có dữ liệu, khôi phục và chạy tiếp
restored_progress = pydantic_monty.MontySnapshot.load(state_bytes)
final_result = restored_progress.resume(return_value='Dữ liệu giả lập')

print(final_result.output) # Output: 15 (độ dài chuỗi)

Kết luận

Ưu điểm

  • Cực kỳ nhẹ và an toàn.
  • Khả năng snapshot độc đáo.
  • Tích hợp hoàn hảo với Rust và Python.

Nhược điểm

  • Hiện tại chưa hỗ trợ định nghĩa class (sẽ sớm có).
  • Thư viện tiêu chuẩn (stdlib) còn hạn chế, không hỗ trợ các thư viện bên thứ ba như Pandas hay NumPy.

Ai nên dùng Monty? Nếu bạn đang xây dựng AI Agents, các công cụ coding assistant, hoặc bất kỳ hệ thống nào cần thực thi code do người dùng/AI nhập vào một cách an toàn và tức thì, Monty chính là lựa chọn số 1 hiện nay.

Mình hy vọng bài viết này giúp bạn có thêm một công cụ mạnh mẽ trong bộ công cụ phát triển AI của mình!


GitHub - pydantic/monty: A minimal, secure Python interpreter written in Rust for use by AI
A minimal, secure Python interpreter written in Rust for use by AI - pydantic/monty