vndee/llm-sandbox
Lightweight and portable LLM sandbox runtime (code interpreter) Python library.
LLM Sandbox – AI 생성 코드의 안전한 실행
무엇인가요 – 대규모 언어 모델이 생성한 코드를 격리된 컨테이너(Docker, Kubernetes, 또는 Podman) 내에서 실행하는 가벼운 Python 라이브러리입니다. 개발자는 LLM의 출력을 일반 스크립트처럼 다룰 수 있지만, 호스트 시스템은 안전하게 유지됩니다.
왜 중요한가요 – LLM은 종종 실행 가능한 코드를 생성하지만, 개발자의 머신에서 직접 실행하는 것은 위험합니다. LLM Sandbox는 사전에 사전 환경을 자동 생성하고, 리소스 제한을 적용하며, 코드가 생성하는 아티팩트(예: 플롯)를 캡처할 수 있습니다.
핵심 기능
| 기능 | 제공되는 기능 |
|---|---|
| 격리 | 각 실행은 별도의 컨테이너에서 이루어지며, 명시적으로 허용하지 않는 한 호스트 파일 시스템이나 네트워크에 접근할 수 없습니다. |
| 보안 정책 | CPU, 메모리, 실행 시간, 네트워크 연결에 대한 사용자 정의 정책을 설정할 수 있습니다. |
| 다중 백엔드 | Docker(기본), Kubernetes(기업 규모), Podman(루트 없음). |
| 다중 언어 지원 | Python, JavaScript/Node, Java, C++, Go, R – 라이브러리는 필요에 따라 pip, npm, Maven/Gradle 등 패키지 매니저를 실시간으로 설치합니다. |
| LLM 프레임워크 훅 | LangChain, Claude, LlamaIndex, CrewAI 등 11개의 인기 에이전트 SDK용 사전 준비된 예제가 있습니다. |
| 아티팩트 추출 | 생성된 이미지/플롯을 base-64 블롭으로 자동 반환하여 노트북이나 API에서 표시할 수 있습니다. |
| 인터랙티브 세션 | InteractiveSandboxSession은 장시간 실행되는 IPython 커널을 유지하며, 상태를 보존한 채 여러 셀을 실행할 수 있습니다. |
| 컨테이너 풀링 | 미리 컨테이너 풀을 준비하고 재사용함으로써 시작 지연을 최대 10배까지 줄이고, 동시 실행을 지원합니다. |
| 사용자 정의 이미지 및 Dockerfile | 특수 환경용으로 사용자 정의 컨테이너 이미지 또는 Dockerfile을 제공할 수 있습니다. |
빠른 시작 (Python)
from llm_sandbox import SandboxSession
with SandboxSession(lang="python") as s:
r = s.run("print('안전한 컨테이너에서 안녕하세요!')")
print(r.stdout)
라이브러리 설치:
pip install llm-sandbox # 핵심 기능
pip install 'llm-sandbox[docker]' # Docker 지원 (가장 일반적)
# 또는 [k8s] / [podman] 추가로 다른 백엔드 활성화
실행 중에 추가 패키지를 요청할 수도 있습니다:
s.run("import numpy as np; print(np.mean([1,2,3]))", libraries=["numpy"])
다른 언어 사용
# JavaScript (Node.js)
with SandboxSession(lang="javascript") as s:
s.run("const axios = require('axios'); console.log('axios 준비 완료');", libraries=["axios"])
# C++
with SandboxSession(lang="cpp") as s:
s.run("#include <iostream>\nint main(){std::cout<<'안녕';}")
Java, Go, R에도 동일한 패턴이 적용됩니다. lang 인수를 선택하고, 필요 시 런타임이 이미 포함된 컨테이너 이미지를 전달하면 됩니다.
인터랙티브 노트북
from llm_sandbox import InteractiveSandboxSession
with InteractiveSandboxSession(lang="python", kernel_type="ipython") as s:
s.run("value = 7 * 6")
print(s.run("print(value)").stdout) # → 42
s.run("%pip install pandas") # 사전 내에서 마법 명령어 작동
상태(변수, 임포트, 마법 명령어)는 컨텍스트 매니저가 종료될 때까지 호출 간에 유지됩니다.
컨테이너 풀링 (고처리량 사용 사례)
from llm_sandbox.pool import create_pool_manager, PoolConfig
from llm_sandbox import SandboxSession
pool = create_pool_manager(
backend="docker",
config=PoolConfig(max_pool_size=10, min_pool_size=3, enable_prewarming=True),
lang="python",
libraries=["numpy", "pandas"]
)
with SandboxSession(lang="python", pool=pool) as s:
print(s.run("import pandas as pd; print(pandas.__version__)").stdout)
pool.close() # 앱 종료 시 정리
풀은 스레드 세이프하므로 여러 동시 요청 간에 공유할 수 있습니다.
더 알아보기
- 문서 – https://vndee.github.io/llm-sandbox/ (완전한 API 참조, 구성 가이드, MCP 통합)
- MCP 서버 – 라이브러리는 Model Context Protocol 엔드포인트로 작동할 수 있으며, Claude Desktop 같은 도구가 안전하게 코드를 실행할 수 있도록 합니다.
- 예제 –
examples/agent_sdks/에는 OpenAI, Claude, LangChain, CrewAI 등에 대한 즉시 실행 가능한 스크립트가 포함되어 있습니다.
TL;DR
llm-sandbox설치 (Docker, K8s, Podman 확장 중 하나 선택).- LLM 생성 코드를
SandboxSession(...).run(...)로 감싸기. - stdout, stderr, 종료 코드, 생성된 플롯을 반환받기.
- 프로덕션 워크로드에는 컨테이너 풀링, 노트북에는 인터랙티브 세션 사용.
결론 – LLM Sandbox는 LLM의 "이 코드를 실행하세요" 제안을 안전하고 재현 가능하며 언어에 구애받지 않는 작업으로 전환하여, 개발자가 호스트 환경을 노출하지 않고 AI 생성 스크립트를 실험할 수 있도록 합니다.
관련
- 프로젝트
- Dispatch
- Dispatch
- 프로젝트
- 프로젝트