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
- プロジェクト
- プロジェクト