Monty: Trình thông dịch Python tối giản và an toàn bằng Rust
Giới thiệu
Monty là một trình thông dịch Python tối giản và an toàn, được viết bằng ngôn ngữ lập trình Rust, phục vụ cho các tác vụ thực thi mã do Trí tuệ Nhân tạo tạo ra. Monty giúp tránh sự phức tạp và thời gian chờ của sandbox dựa trên container.
Tính năng nổi bật của Monty:
- Thực thi một tập hợp con hợp lý của mã Python.
- Ngăn chặn hoàn toàn việc truy cập vào môi trường host như hệ thống file, biến môi trường, và truy cập mạng.
- Thực hiện kiểm tra kiểu dữ liệu với các gợi ý kiểu hiện đại.
- Lưu trạng thái của trình thông dịch để có thể tiếp tục xử lý sau này.
- Khởi động cực kỳ nhanh (<1μs) với hiệu suất gần tương đương với CPython.
- Có thể được gọi từ Rust, Python hoặc JavaScript mà không phụ thuộc vào CPython.
- Quản lý được việc sử dụng tài nguyên như bộ nhớ và thời gian thực thi.
Hạn chế của Monty:
- Không hỗ trợ thư viện tiêu chuẩn (ngoại trừ một số module chọn lọc).
- Không hỗ trợ thư viện bên thứ ba.
- Không thể định nghĩa class hoặc sử dụng câu lệnh match (sẽ có trong tương lai).
Tại sao nên dùng Monty?
Monty giúp cho LLMs (Mô hình ngôn ngữ lớn) làm việc nhanh hơn, rẻ hơn và tin cậy hơn bằng cách cho phép chúng viết mã Python thay vì sử dụng gọi công cụ truyền thống. Điều này có thể thấy qua các sản phẩm từ Cloudflare, Anthropic và Hugging Face.
Sử dụng Monty
Python
from typing import Any
import pydantic_monty
code = '''
async def agent(prompt: str, messages: Messages):
while True:
print(f'messages so far: {messages}')
output = await call_llm(prompt, messages)
if isinstance(output, str):
return output
messages.extend(output)
await agent(prompt, [])
'''
...
if __name__ == '__main__':
import asyncio
asyncio.run(main())
Rust
use monty::{MontyRun, MontyObject, NoLimitTracker, StdPrint};
let code = r#"
def fib(n):
if n <= 1:
return n
return fib(n - 1) + fib(n - 2)
fib(x)
"#;
let runner = MontyRun::new(code.to_owned(), "fib.py", vec!["x".to_owned()], vec![]).unwrap();
let result = runner.run(vec![MontyObject::Int(10)], NoLimitTracker, &mut StdPrint).unwrap();
assert_eq!(result, MontyObject::Int(55));
PydanticAI Integration
Monty sẽ hỗ trợ ‘code-mode’ trong Pydantic AI, cho phép LLM viết mã Python để gọi các công cụ của bạn một cách an toàn.
from pydantic_ai import Agent
from pydantic_ai.toolsets.code_mode import CodeModeToolset
from pydantic_ai.toolsets.function import FunctionToolset
from typing_extensions import TypedDict
class WeatherResult(TypedDict):
city: str
temp_c: float
conditions: str
...
result = agent.run_sync(
'Compare the weather and population of London, Paris, and Tokyo.'
)
print(result.output)
Alternatives
| Tech | Language completeness | Security | Start latency | Cost | Setup complexity | File mounting | Snapshotting |
|---|---|---|---|---|---|---|---|
| Monty | partial | strict | 0.06ms | free | easy | easy | easy |
| Docker | full | good | 195ms | free | intermediate | easy | intermediate |
| Pyodide | full | poor | 2800ms | free | intermediate | easy | hard |
| … |
Monty giải quyết nhiều vấn đề mà các công nghệ hiện tại không thể bằng cách mang lại hiệu suất vượt trội và sự an toàn cao trong việc thực thi mã AI.