Go에서 LLM이 만든 Python을 안전하게 실행하는 monty-go, WASM으로 컨테이너 없이
monty-go: Pure-Go wrapper for Pydantic's Monty Python Interpreter
monty-go는 Pydantic의 Monty Python 인터프리터를 WebAssembly로 컴파일해 wazero로 로드하는 순수 Go 래퍼입니다. Go 에이전트가 LLM이 작성한 Python 코드를 샌드박스 WASM 인스턴스에서 실행하고, 외부 함수 호출 시 일시 중지되어 Go 코드가 처리한 뒤 재개합니다. 컨테이너, CGO, 서브프로세스 없이 단일 Go 바이너리에 포함된 2.9MB WASM으로, LLM이 도구를 순차 호출하는 대신 코드를 작성하게 하여 모델 호출, 지연 시간, 비용을 줄입니다. 메모리·시간·재귀 제한, print 캡처, 파일시스템 접근 제어, Gollem 에이전트 프레임워크 통합을 지원합니다.
LLM은 순차적인 도구 호출 대신 코드를 작성할 때 더 빠르고, 저렴하며, 더 안정적으로 작동합니다.
HN 토론
12- camdenclark
재밌네요 -- 저도 방금 순수 Go 래퍼를 직접 만들었는데, 이건 너무 오래돼서요!
https://github.com/CamdenClark/monty-go
Monty VM을 생성하는 새로운 subprocess 모델을 구현했는데, VM 중 하나가 크래시 나도 메인 스레드가 격리되도록 도와줍니다.
Monty가 이제 바이너리로 패키징되어서 WASM 임베딩 작업을 할 필요 없이 바이너리만 있으면 됩니다. (예를 들어 Go에서 Playwright를 실행하는 방식과 비슷합니다.)
- mkl
Monty 자체가 Python 코드를 실행하는 Rust 구현을 실행하는 WASM 런타임용 Go 래퍼보다 훨씬 더 흥미로워 보입니다. 6개월 전에 그것에 대한 큰 논의가 있었습니다: https://news.ycombinator.com/item?id=46918254
- digdugdirk
이게 Go 안의 WASM 안의 Rust 안의 Python인가요?
Monty라는 이름은 완벽한 선택이었어요. readme를 읽는 동안 멀리서 Yakety Sax가 들리는 것 같았습니다.
농담은 제쳐두고, 이런 멋진 일을 가능하게 하는 브리지로서 WASM을 보는 건 정말 좋네요.