- Trình thông dịch Python nhẹ viết bằng Rust được thiết kế để thực thi an toàn mã do AI tạo ra, loại bỏ độ phức tạp và độ trễ của sandbox dựa trên container
- Chặn hoàn toàn quyền truy cập vào hệ thống tệp, biến môi trường và mạng, chỉ cho phép gọi các hàm bên ngoài do nhà phát triển chỉ định
- Cung cấp thời gian khởi động dưới 1 micro giây và hiệu năng thực thi tương tự CPython, đồng thời có thể được gọi từ Rust, Python và JavaScript
- Có thể lưu và khôi phục snapshot trạng thái thực thi ở mức byte, cho phép tạm dừng và tiếp tục giữa các tiến trình
- Dự kiến sẽ vận hành tính năng Code Mode của Pydantic AI, đóng vai trò là thành phần cốt lõi để thực thi an toàn mã Python do LLM viết
Tổng quan về Monty
- Monty là một trình thông dịch Python thử nghiệm được viết bằng Rust, là công cụ để thực thi an toàn mã do AI tạo ra
- Tránh được chi phí, độ trễ và độ phức tạp của sandbox dựa trên container, đồng thời có thể thực thi trực tiếp mã Python do LLM viết
- Thời gian khởi động ở mức vài micro giây, nhanh hơn rất nhiều so với hàng trăm mili giây của container thông thường
- Các khả năng hiện có
- Hỗ trợ thực thi một phần cú pháp của Python, bao gồm kiểm tra kiểu tĩnh dựa trên type hint
- Chặn hoàn toàn truy cập vào host, việc gọi hàm bên ngoài chỉ khả dụng với những hàm được nhà phát triển cho phép rõ ràng
- Có thể được gọi từ Rust, Python và JavaScript, đồng thời tích hợp sẵn tính năng theo dõi và giới hạn mức sử dụng tài nguyên
- Hỗ trợ thu thập stdout/stderr, thực thi mã bất đồng bộ, lưu và khôi phục snapshot
- Hạn chế
- Thư viện chuẩn hiện chỉ dùng được
sys, typing, asyncio, dataclasses(sắp hỗ trợ), json(sắp hỗ trợ)
- Định nghĩa class và câu lệnh match hiện vẫn chưa được hỗ trợ
- Thư viện bên thứ ba không nằm trong phạm vi hỗ trợ
- Mục tiêu thiết kế chỉ có một: thực thi an toàn mã do agent viết
Tích hợp với Pydantic AI
- Monty vận hành Code Mode của Pydantic AI
- Thay vì gọi tool, LLM sẽ viết mã Python và Monty sẽ thực thi mã đó một cách an toàn
- Trong ví dụ, các công cụ dạng hàm như
get_weather, get_population được định nghĩa và LLM sẽ viết mã để gọi chúng
So sánh với các công nghệ thay thế
- Monty có mức độ hoàn chỉnh về ngôn ngữ còn hạn chế, nhưng vượt trội về bảo mật, tốc độ và tính đơn giản
- Độ trễ khởi động 0.06ms, miễn phí, cài đặt đơn giản, hỗ trợ tính năng snapshot
- Tóm tắt so sánh với các công nghệ khác:
- Docker: môi trường CPython đầy đủ, bảo mật tốt nhưng độ trễ khởi động 195ms
- Pyodide: dựa trên WASM, bảo mật yếu và độ trễ khởi động 2800ms
- starlark-rust: ngôn ngữ rất hạn chế, nhanh nhưng khác Python
- dịch vụ sandboxing: bảo mật mạnh nhưng tốn chi phí, có độ trễ và cấu hình phức tạp
- YOLO Python(exec/subprocess): nhanh nhưng không có bảo mật
- Monty cung cấp môi trường Python an toàn cho việc thực thi mã AI thông qua các tính năng kiểm soát truy cập tệp, giới hạn tài nguyên, tạm dừng/tiếp tục dựa trên snapshot
1 bình luận
Ý kiến trên Hacker News
Tôi đã thử chạy bản build bằng WebAssembly. Tôi đã tạo một web playground để có thể tự thử trực tiếp
Hiện vẫn chưa hỗ trợ class, nhưng khi LLM cố dùng class thì nó thấy lỗi và tự viết lại thành mã không dùng class
Bài viết tổng hợp quá trình build ở đây
Điểm mạnh của terminal agent là quyền truy cập mạng và hệ thống tệp, nên nếu vậy thì container sandbox có vẻ là phần mở rộng tự nhiên hơn
Tôi dùng Typescript, C# và Python đều không vấn đề gì
Nó làm tôi nhớ lại thời còn dùng Mercurial trước khi chuyển sang Git. Khi đó Git đang là xu hướng nên ai cũng dùng, nhưng tôi luôn thấy UX của Mercurial tốt hơn nhiều
Bây giờ mọi người đều viết agent
execbằng Python, còn tôi lại thấy TypeScript/JS phù hợp hơn. Nó nhanh, an toàn, và nhờ có type nên mật độ thông tin cũng cao hơn. Nhưng có lẽ lần này tôi vẫn sẽ thuaCá nhân tôi thích hệ thống kiểu tĩnh của TypeScript hơn, nhưng về tốc độ hay bảo mật thì hai ngôn ngữ này đều ở mức tương tự
Python có hệ sinh thái xử lý dữ liệu rất tốt, và các công cụ như Pyodide hay ty cũng có thể giúp giảm bớt vấn đề bảo mật
Giờ đây NVIDIA cũng chính thức hỗ trợ viết kernel bằng Python
Dự án này là một hướng tiếp cận thú vị cho bài toán sandboxing. Trước đây tôi từng làm thử nghiệm jsrun, nhúng V8 vào Python để chạy JS an toàn
Có vẻ Monty cũng nhắm đến mục tiêu tương tự. Bắt đầu bằng một trình thông dịch tối giản rất hợp với workload AI, nhưng xử lý đuôi dài cú pháp của Python thì không dễ
Điều quan trọng là tìm ra điểm cân bằng giữa việc giảm bề mặt tính năng để tăng bảo mật và tính dự đoán, trong khi vẫn cung cấp đủ khả năng để xử lý cả những đoạn code phức tạp do LLM tạo ra
Hơi lạc đề một chút, nhưng nó làm tôi nhớ đến cuốn Monty Roberts The Man Who Listens to Horses.
Nội dung là về việc học ngôn ngữ của động vật; có link sách và video
Mô tả “thực thi code Python do LLM viết ra một cách an toàn với tốc độ siêu cao” nghe rất thú vị.
Tuy vậy, ngay cả runtime viết bằng Rust như
uvcũng mất ít nhất khoảng 10ms, nên mức micro giây có vẻ khó đạt đượcDù sao thì ý tưởng về một mini interpreter không có thư viện chuẩn vẫn rất hay. Từ góc nhìn sandboxing cho AI cũng khá mới mẻ, và tôi không ngờ Pydantic lại làm ra thứ như vậy
uvlà một runtime được viết bằng RustTôi nghĩ tốt hơn là tạo ra một ngôn ngữ nghiêm ngặt dành riêng cho AI thay vì tái sử dụng các ngôn ngữ hiện có
AI hiểu đặc tả rất tốt, nên không cần cú pháp lỏng lẻo như con người.
Ngược lại, một ngôn ngữ ép buộc cấu trúc chính xác và định dạng nhất quán sẽ phù hợp hơn.
Tôi cũng đang thử nghiệm một ngôn ngữ như thế, và cho rằng với sinh mã cho AI, ta có thể đòi hỏi mức kỷ luật còn cao hơn con người
Thực tế hơn nhiều là giới hạn một model vốn đã giỏi Python theo kiểu “chỉ dùng những hàm này” mà thôi
Luận điểm về “những bất tiện nhỏ (papercut)” mà jstanley nói là đúng, nhưng ngược lại, khi chạy code do AI tạo ở quy mô lớn thì rủi ro bảo mật mới là thứ đáng lo hơn
Việc mở file I/O, mạng, subprocess cho một CPython đầy đủ là rất nguy hiểm
Tuy vậy, hạn chế class thì hơi kỳ. Nó không liên quan đến bảo mật, chỉ làm code trở nên lộn xộn hơn thôi.
Có lẽ đây là cách tiếp cận “bắt đầu với tính năng tối thiểu rồi mở rộng dần”
Thay vì bắt chước toàn bộ tính năng của CPython, cách làm một trình thông dịch tối thiểu chỉ phục vụ cho code AI là rất thú vị
Một runtime đầy đủ có bề mặt tấn công quá rộng, còn tập con bị giới hạn thì an toàn hơn
Chiến lược dùng phản hồi lỗi để khiến LLM tự thích nghi với cú pháp bị giới hạn cũng khá thực tế.
Trong phần lớn kịch bản dùng công cụ, không cần đến metaclass hay import động
Đây là câu hỏi đơn giản, nhưng liệu không thể dùng seccomp để hạn chế system call sao?
Nếu muốn chặn truy cập tệp thì chỉ cần chặn các syscall liên quan, vậy tại sao lại cần hẳn một trình thông dịch riêng?
Nếu ngay từ đầu khởi động bằng một runtime cực kỳ đơn giản thì bề mặt tấn công sẽ nhỏ hơn nhiều và an toàn hơn hẳn
Bản thân dự án thì hợp lý, nhưng cụm từ “công cụ siêu nhanh cho AI” vẫn khiến tôi bật cười
Tốc độ suy nghĩ của AI vốn đã quá chậm, nên dù thực thi code nhanh đến đâu thì khác biệt về tốc độ tổng thể mà người dùng cảm nhận được cũng không lớn
Nó giống như đi giao hàng cùng một đồng nghiệp làm việc với tốc độ băng hà đang di chuyển vậy