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
  • 프로젝트
  • 프로젝트