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(root不要)。
多言語対応 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
  • プロジェクト
  • プロジェクト