llm-sandbox

GitHub
1k 96 中等 2 次阅读 昨天MIT语言模型
AI 解读 由 AI 自动生成,仅供参考

llm-sandbox 是一个轻量级 Python 库,用来“安全地跑大模型写的代码”。它把 AI 生成的脚本放进隔离的容器里执行,既防止恶意代码破坏主机,又能自动装依赖、限制 CPU/内存、控制网络,还能把生成的图表、文件一键取出来。支持 Docker、Kubernetes、Podman 三种后端,Python、JavaScript、Java、C++、Go、R 等语言开箱即用,并可与 LangChain、OpenAI 等框架无缝衔接。最新版还加入了容器池预热和 MCP 协议支持,让 Claude Desktop 也能直接调用。
适合 AI 应用开发者、数据科学家、教育平台或任何需要“让大模型写代码并立即跑起来”的人。

使用场景

一家 5 人规模的初创公司正在开发一款 AI 数据洞察助手,用户上传 CSV 后,系统让 LLM 自动生成并执行 Python 代码,返回图表和结论。

没有 llm-sandbox 时

  • 直接在宿主机 exec() LLM 生成的代码,曾有一次恶意 os.system("curl ... | bash") 差点把整台服务器变成矿机, CTO 连夜回滚救火。
  • 每次用户请求都要新建一个 venv,安装 pandas、matplotlib 等依赖,冷启动 30 秒起步,用户抱怨“上传完文件要等半分钟才出图”。
  • 不同用户任务并发跑在同一台 4 vCPU 机器上,一次内存泄漏把 OOM Killer 触发,导致其他用户会话全部 502。
  • 为了隔离,运维用 Docker 手写临时容器,结果镜像体积 2 GB,CI/CD 每次推送 15 分钟,开发迭代被拖慢。

使用 llm-sandbox 后

  • 代码被扔进一次性沙箱容器,默认无网络、无特权,即使 LLM 写出 import os; os.system("rm -rf /") 也只是在容器里自毁,宿主机安然无恙。
  • 开启容器池化后,预热的 Python 镜像秒级复用,依赖已缓存,平均响应从 30 s 降到 2 s,用户体验像本地脚本一样顺滑。
  • 通过 memory="512m"cpu=0.5 限制,每个任务独占配额,并发 20 个用户也不会互相挤爆,系统稳定性 SLA 提升到 99.9%。
  • llm-sandbox 自动拉取轻量基础镜像,按需增量安装依赖,镜像体积降到 300 MB,CI 构建时间缩短到 3 分钟,开发每天可以多迭代 3-4 次。

一句话总结:llm-sandbox 让这家初创公司在不增加运维人手的情况下,既守住了安全底线,又把 AI 代码执行体验从“胆战心惊”变成了“丝滑可控”。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

未说明

内存

未说明

依赖
notes必须预先安装 Docker、Kubernetes 或 Podman 作为容器后端;首次运行会自动拉取对应语言的官方镜像(如 python:3.9.19-bullseye),镜像大小数百 MB;支持自定义 Dockerfile 与镜像;支持远程 Docker 主机;支持 TLS 安全连接;支持容器池化以提升性能;支持文件双向拷贝;支持自定义安全策略与资源限制
python3.8+
docker
kubernetes
podman
llm-sandbox hero image

快速开始

LLM 沙盒

轻松安全地执行 LLM 生成的代码

SonarQube 云

质量门状态 PyPI 下载量 发布 构建状态 CodeFactor codecov Ask DeepWiki

LLM 沙盒 是一种轻量级且可移植的沙盒环境,专为在安全、隔离的模式下运行大型语言模型(LLM)生成的代码而设计。它为 AI 生成的代码提供了一个安全的执行环境,同时具备灵活的容器后端选择和全面的语言支持,从而简化了运行 LLM 生成代码的流程。

文档:https://vndee.github.io/llm-sandbox/

新增功能:本项目现已支持 模型上下文协议 (MCP) 服务器,使您的 MCP 客户端(如 Claude Desktop)能够在一个安全的沙盒环境中运行 LLM 生成的代码。

🚀 核心功能

🛡️ 安全第一

  • 隔离式执行:代码运行于隔离的容器中,无权访问主机系统。
  • 安全策略:可自定义安全策略,以严格控制代码的执行。
  • 资源限制:可设置 CPU、内存及执行时间的上限。
  • 网络隔离:对沙盒化代码的网络访问进行严格管控。

🏗️ 灵活的容器后端

  • Docker:最受欢迎且广泛支持的选项。
  • Kubernetes:企业级编排工具,适用于可扩展的部署方案。
  • Podman:无根容器,提供更强的安全性。

🌐 多语言支持

支持多种编程语言的代码执行,并实现自动依赖管理:

  • Python - 全面支持 pip 包管理。
  • JavaScript/Node.js - 通过 npm 安装包。
  • Java - 使用 Maven 和 Gradle 进行依赖管理。
  • C++ - 支持编译与运行。
  • Go - 提供模块化支持与编译功能。
  • R - 利用 CRAN 包进行统计计算与数据分析。

🔌 LLM 框架集成

可无缝集成到流行的 LLM 框架中,例如 LangChain、LangGraph、LlamaIndex、OpenAI 等。

📊 高阶功能

  • 工件提取:自动捕获图表与可视化结果。
  • 库管理:即时安装依赖项。
  • 文件操作:在沙盒环境中复制文件。
  • 自定义镜像:使用您自己的容器镜像。
  • 快速生产模式:跳过环境搭建,加快容器启动速度。
  • 容器池化:预热并复用容器,提升性能(全新功能!)

📦 安装指南

基础安装

pip install llm-sandbox

配合特定后端支持

# 用于 Docker 支持(最常见)
pip install 'llm-sandbox[docker]'

# 用于 Kubernetes 支持
pip install 'llm-sandbox[k8s]'

# 用于 Podman 支持
pip install 'llm-sandbox[podman]'

# 所有后端
pip install 'llm-sandbox[docker,k8s,podman]'

开发版安装

git clone https://github.com/vndee/llm-sandbox.git
cd llm-sandbox
pip install -e '.[dev]'

🏃‍♂️ 快速上手

基本用法

from llm_sandbox import SandboxSession

# 创建并使用沙盒会话
with SandboxSession(lang="python") as session:
    result = session.run("""
print("来自 LLM 沙盒的问候!")
print("我正在安全的容器中运行。")
    """)
    print(result.stdout)

安装库

from llm_sandbox import SandboxSession

with SandboxSession(lang="python") as session:
    result = session.run("""
import numpy as np

# 创建一个数组
arr = np.array([1, 2, 3, 4, 5])
print(f"数组: {arr}")
print(f"平均值: {np.mean(arr)}")
    """, libraries=["numpy"])

    print(result.stdout)

多语言支持

JavaScript

with SandboxSession(lang="javascript") as session:
    result = session.run("""
const greeting = "来自 Node.js 的问候!";
console.log(greeting);

const axios = require('axios');
console.log("Axios 已成功加载!");
    """, libraries=["axios"])

Java

with SandboxSession(lang="java") as session:
    result = session.run("""
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("来自 Java 的问候!");
    }
}
    """)

C++

with SandboxSession(lang="cpp") as session:
    result = session.run("""
#include <iostream>

int main() {
    std::cout << "来自 C++ 的问候!" << std::endl;
    return 0;
}
    """)

Go

with SandboxSession(lang="go") as session:
    result = session.run("""
package main
import "fmt"

func main() {
    fmt.Println("来自 Go 的问候!")
}
    """)

R

with SandboxSession(
    lang="r",
    image="ghcr.io/vndee/sandbox-r-451-bullseye",
    verbose=True,
) as session:
    result = session.run(
        """
# 基本的 R 操作
print("=== 基本的 R 演示 ===")

# 创建一些数据
numbers <- c(1, 2, 3, 4, 5, 10, 15, 20)
print(paste("数字:", paste(numbers, collapse=", ")))

# 基本统计
print(paste("平均值:", mean(numbers)))
print(paste("中位数:", median(numbers)))
print(paste("标准差:", sd(numbers)))

# 处理数据框
df <- data.frame(
    name = c("Alice", "Bob", "Charlie", "Diana"),
    age = c(25, 30, 35, 28),
    score = c(85, 92, 78, 96)
)

print("=== 数据框 ===")
print(df)

# 计算平均分数
avg_score <- mean(df$score)
print(paste("平均分数:", avg_score))
        """
    )

交互式会话

对于笔记本式的工作流,您可以使用 InteractiveSandboxSession,它能够在多次 run 调用之间保持 Python 解释器的状态。

from llm_sandbox import InteractiveSandboxSession

with InteractiveSandboxSession(
    lang="python",
    kernel_type="ipython",
    history_size=200,
) as session:
    session.run("value = 21 * 2")
    result = session.run("print(f'结果: {value}')")
    print(result.stdout)  # -> 结果: 42

    # 使用魔法命令安装库
    session.run("%pip install pandas")
    result = session.run("import pandas as pd; print(pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}))")
    print(result.stdout)

交互式会话支持 Docker、Podman 和 Kubernetes 后端,目前主要面向 Python 语言。它们会在沙盒中启动一个长时间运行的 IPython 内核,因此每次 run() 操作都如同在笔记本单元格中执行一样——状态、导入语句以及魔法命令都会一直保留,直到上下文管理器退出,无需额外的网络通信或手动序列化操作。

捕获图表与可视化效果

Python 图表

from llm_sandbox import ArtifactSandboxSession
import base64
from pathlib import Path

with ArtifactSandboxSession(lang="python") as session:
    result = session.run("""
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)

plt.figure(figsize=(10, 6))
plt.plot(x, y)
plt.title("正弦波")
plt.xlabel("x")
plt.ylabel("sin(x)")
plt.grid(True)
plt.savefig("sine_wave.png", dpi=150, bbox_inches="tight")
plt.show()
    """, libraries=["matplotlib", "numpy"])

    # 提取生成的图表
    print(f"生成了 {len(result.plots)} 张图表")

    # 将图表保存为文件
    for i, plot in enumerate(result.plots):
        plot_path = Path(f"plot_{i + 1}.{plot.format.value}")
        with plot_path.open("wb") as f:
            f.write(base64.b64decode(plot.content_base64))

R 图表

from llm_sandbox import ArtifactSandboxSession
import base64
from pathlib import Path

with ArtifactSandboxSession(lang="r") as session:
    result = session.run("""
library(ggplot2)

# 创建示例数据
data <- data.frame(
    x = rnorm(100),
    y = rnorm(100)
)

# 创建 ggplot2 可视化
p <- ggplot(data, aes(x = x, y = y)) +
    geom_point(alpha = 0.6) +
    geom_smooth(method = "lm", se = FALSE) +
    labs(title = "散点图带趋势线",
         x = "X 值", y = "Y 值") +
    theme_minimal()

print(p)

# R 图表
hist(data$x, main = "X 的分布",
     xlab = "X 值", col = "lightblue", breaks = 20)
    """, libraries=["ggplot2"])

    # 提取生成的图表
    print(f"生成了 {len(result.plots)} 张 R 图表")

    # 将图表保存为文件
    for i, plot in enumerate(result.plots):
        plot_path = Path(f"r_plot_{i + 1}.{plot.format.value}")
        with plot_path.open("wb") as f:
            f.write(base64.b64decode(plot.content_base64))

🔧 配置

基本配置

from llm_sandbox import SandboxSession

# 创建一个新的沙盒会话
with SandboxSession(image="python:3.9.19-bullseye", keep_template=True, lang="python") as session:
    result = session.run("print('Hello, World!')")
    print(result)

# 使用自定义 Dockerfile
with SandboxSession(dockerfile="Dockerfile", keep_template=True, lang="python") as session:
    result = session.run("print('Hello, World!')")
    print(result)

# 或者使用默认镜像
with SandboxSession(lang="python", keep_template=True) as session:
    result = session.run("print('Hello, World!')")
    print(result)

LLM 沙盒还支持在主机与沙盒之间复制文件:

from llm_sandbox import SandboxSession

with SandboxSession(lang="python", keep_template=True) as session:
    # 将文件从主机复制到沙盒
    session.copy_to_runtime("test.py", "/sandbox/test.py")

    # 在沙盒中运行复制的 Python 代码
    result = session.execute_command("python /sandbox/test.py")
    print(result)

    # 将文件从沙盒复制回主机
    session.copy_from_runtime("/sandbox/output.txt", "output.txt")

自定义运行时配置

from llm_sandbox import SandboxSession

pod_manifest = {
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "name": "test",
        "namespace": "test",
        "labels": {"app": "sandbox"},
    },
    "spec": {
        "containers": [
            {
                "name": "sandbox-container",
                "image": "test",
                "tty": True,
                "volumeMounts": {
                    "name": "tmp",
                    "mountPath": "/tmp",
                }
            }
        ],
        "volumes": [{"name": "tmp", "emptyDir": {"sizeLimit": "5Gi"}}],
    },
}
with SandboxSession(
    backend="kubernetes",
    image="python:3.9.19-bullseye",
    dockerfile=None,
    lang="python",
    keep_template=False,
    verbose=False,
    pod_manifest=pod_manifest,
) as session:
    result = session.run("print('Hello, World!')")
    print(result)

远程 Docker 主机

import docker
from llm_sandbox import SandboxSession

tls_config = docker.tls.TLSConfig(
    client_cert=("path/to/cert.pem", "path/to/key.pem"),
    ca_cert="path/to/ca.pem",
    verify=True
)
docker_client = docker.DockerClient(base_url="tcp://<your_host>:<port>", tls=tls_config)

with SandboxSession(
    client=docker_client,
    image="python:3.9.19-bullseye",
    keep_template=True,
    lang="python",
) as session:
    result = session.run("print('Hello, World!')")
    print(result)

Kubernetes 支持

from kubernetes import client, config
from llm_sandbox import SandboxSession

# 使用本地 kubeconfig
config.load_kube_config()
k8s_client = client.CoreV1Api()

with SandboxSession(
    client=k8s_client,
    backend="kubernetes",
    image="python:3.9.19-bullseye",
    lang="python",
    pod_manifest=pod_manifest, # 默认为 None
) as session:
    result = session.run("print('Hello from Kubernetes!')")
    print(result)

⚠️ 对于自定义 Pod 映射至关重要:

在使用自定义 Pod 映射时,请确保您的容器配置包含以下内容:

  • "tty": True(使容器保持存活)
  • 在 Pod 和容器层面正确配置 securityContext
  • 容器名称可以是任意有效名称(无任何限制)

有关完整要求,请参阅 配置指南

Podman 支持

from llm_sandbox import SandboxSession

with SandboxSession(
    backend="podman",
    lang="python",
    image="python:3.9.19-bullseye"
) as session:
    result = session.run("print('Hello from Podman!')")
    print(result)

⚡ 容器池化(性能优化)

容器池化通过重复利用预先预热的容器,而非为每次执行创建新容器,从而大幅提升性能。这尤其适用于频繁执行代码的应用程序。

核心优势

  • 执行速度更快:消除容器创建的开销,执行速度最高可提升10倍。
  • 预热环境:容器在启动时即已加载所需依赖项。
  • 线程安全:安全处理并发请求。
  • 资源高效:自动管理容器的生命周期。
  • 灵活配置:可自定义池大小、超时时间及行为。

基本池使用

from llm_sandbox import SandboxSession
from llm_sandbox.pool import PoolConfig, create_pool_manager

# 明确创建池管理器
pool = create_pool_manager(
    backend="docker",
    config=PoolConfig(
        max_pool_size=10,          # 最大容器数量
        min_pool_size=3,           # 至少保持3个已预热容器
        idle_timeout=300.0,        # 5分钟后回收空闲容器
        enable_prewarming=True,    # 在启动时自动创建容器
    ),
    lang="python",
)

# 在会话中使用池
with SandboxSession(
    lang="python",
    pool=pool,
) as session:
    result = session.run("print('Hello from pool!')")

# 当会话关闭时,容器会自动返回到池中
# 完成操作后,清理池
pool.close()

在多个会话间共享池

为实现最大效率,可将单个池在多个会话间共享:

from llm_sandbox import SandboxSession
from llm_sandbox.pool import create_pool_manager, PoolConfig

# 创建共享池管理器
pool = create_pool_manager(
    backend="docker",
    config=PoolConfig(
        max_pool_size=10,
        min_pool_size=3,
    ),
    lang="python",
    libraries=["numpy", "pandas"],  # 在所有容器中预先安装相关库
)

# 在多个会话中使用池
with SandboxSession(lang="python", pool=pool) as session1:
    result1 = session1.run("import pandas; print(pandas.__version__)")

with SandboxSession(lang="python", pool=pool) as session2:
    result2 = session2.run("import numpy; print(numpy.__version__)")

# 完成操作后,清理池
pool.close()

并发执行

容器池具有线程安全性,并能高效处理并发请求:

from concurrent.futures import ThreadPoolExecutor
from llm_sandbox import SandboxSession
from llm_sandbox.pool import create_pool_manager, PoolConfig

# 创建共享池
pool = create_pool_manager(
    backend="docker",
    config=PoolConfig(max_pool_size=5),
    lang="python",
)

def run_code(task_id: int):
    with SandboxSession(lang="python", pool=pool) as session:
        return session.run(f'print("Task {task_id}")')

try:
    # 使用仅5个容器,同时并发执行20个任务
    with ThreadPoolExecutor(max_workers=10) as executor:
        results = list(executor.map(run_code, range(20)))
finally:
    pool.close()

池配置选项

from llm_sandbox.pool import PoolConfig, ExhaustionStrategy, create_pool_manager

config = PoolConfig(
    # 池大小限制
    max_pool_size=10,                      # 池中的最大容器数量
    min_pool_size=2,                       # 最小的已预热容器数量

    # 超时配置
    idle_timeout=300.0,                    # 回收空闲容器(秒)
    acquisition_timeout=30.0,              # 等待可用容器的时间

    # 运行状态与生命周期
    health_check_interval=60.0,            # 运行状态检查频率
    max_container_lifetime=3600.0,         # 最大容器寿命
    max_container_uses=100,                # 回收前的最大使用次数

    # 池的耗尽策略
    exhaustion_strategy=ExhaustionStrategy.WAIT,  # WAIT、FAIL_FAST 或 TEMPORARY

    # 预热容器
    enable_prewarming=True,                # 预热容器
)

pool = create_pool_manager(
    backend="docker",
    config=config,
    lang="python",
)

池耗尽策略

当所有容器都处于繁忙状态时,池可采用多种方式应对:

1. WAIT(默认)

等待容器空闲:

config = PoolConfig(
    max_pool_size=5,
    exhaustion_strategy=ExhaustionStrategy.WAIT,
    acquisition_timeout=30.0,  # 最多等待30秒
)

2. FAIL_FAST

立即抛出错误:

config = PoolConfig(
    max_pool_size=5,
    exhaustion_strategy=ExhaustionStrategy.FAIL_FAST,
)

3. TEMPORARY

在池外创建临时容器:

config = PoolConfig(
    max_pool_size=5,
    exhaustion_strategy=ExhaustionStrategy.TEMPORARY,
)

监控池统计信息

from llm_sandbox.pool import create_pool_manager

pool = create_pool_manager(backend="docker", lang="python")

# 获取池统计信息
stats = pool.get_stats()
print(f"总容器数: {stats['total_size']}")
print(f"空闲容器数: {stats['state_counts']['idle']}")
print(f"繁忙容器数: {stats['state_counts']['busy']}")

pool.close()

利用池进行工件提取

若需通过容器池捕获图表和可视化效果,可采用以下两种方法:

from llm_sandbox import ArtifactSandboxSession
from llm_sandbox.pool import create_pool_manager, PoolConfig
import base64
from pathlib import Path

# 创建带有预装可视化库的池
pool = create_pool_manager(
    backend="docker",
    config=PoolConfig(max_pool_size=5, min_pool_size=2),
    lang="python",
    libraries=["matplotlib", "numpy"],
)

try:
    # 方法1:利用池参数(推荐用于保持API一致性)
    with ArtifactSandboxSession(pool=pool, enable_plotting=True) as session:
        result = session.run("""
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('池化执行 - 正弦波')
plt.show()
        """)

        # 保存生成的图表
        for i, plot in enumerate(result.plots):
            Path(f"plot_{i}.{plot.format.value}").write_bytes(
                base64.b64decode(plot.content_base64)
            )

        print(f"使用池化容器生成了{len(result.plots)}张图表")

    # 方法2:使用ArtifactPooledSandboxSession(显式类)
    # 两种方法的效果完全相同
    from llm_sandbox.pool import ArtifactPooledSandboxSession

    with ArtifactPooledSandboxSession(pool_manager=pool, enable_plotting=True) as session:
        result = session.run("print('功能相同,API不同')")

finally:
    pool.close()

示例

请参阅examples/目录,获取完整演示:

🤖 LLM 框架集成

LangChain 工具

from langchain.tools import BaseTool
from llm_sandbox import SandboxSession

class PythonSandboxTool(BaseTool):
    name = "python_sandbox"
    description = "在安全的沙盒环境中执行 Python 代码"

    def _run(self, code: str) -> str:
        with SandboxSession(lang="python") as session:
            result = session.run(code)
            return result.stdout if result.exit_code == 0 else result.stderr

与 OpenAI 函数结合使用

import openai
from llm_sandbox import SandboxSession

def execute_code(code: str, language: str = "python") -> str:
    """在安全的沙盒环境中执行代码"""
    with SandboxSession(lang=language) as session:
        result = session.run(code)
        return result.stdout if result.exit_code == 0 else result.stderr

# 注册为 OpenAI 函数
functions = [
    {
        "name": "execute_code",
        "description": "在安全的沙盒环境中执行代码",
        "parameters": {
            "type": "object",
            "properties": {
                "code": {"type": "string", "description": "要执行的代码"},
                "language": {"type": "string", "enum": ["python", "javascript", "java", "cpp", "go", "r"]}
            },
            "required": ["code"]
        }
    }
]

🔌 模型上下文协议 (MCP) 服务器

LLM 沙盒提供了一个 模型上下文协议 (MCP) 服务器,该服务器使像 Claude Desktop 这样的 AI 助手能够在安全的沙盒环境中安全地执行代码。通过这一集成,LLMs 可以直接运行代码,并自动捕获可视化结果,同时支持多种语言。

特点

  • 安全的代码执行:在隔离的容器中执行代码,使用您偏好的后端
  • 多语言支持:可运行 Python、JavaScript、Java、C++、Go、R 和 Ruby 代码
  • 自动可视化捕获:自动捕获并返回图表和可视化结果
  • 库管理:即时安装包和依赖项
  • 灵活的后端支持:可选择 Docker、Podman 或 Kubernetes 后端

安装

使用您偏好的后端,安装支持 MCP 的 LLM 沙盒:

# 对于 Docker 后端
pip install 'llm-sandbox[mcp-docker]'

# 对于 Podman 后端
pip install 'llm-sandbox[mcp-podman]'

# 对于 Kubernetes 后端
pip install 'llm-sandbox[mcp-k8s]'

配置

将以下配置添加到您的 MCP 客户端(例如,适用于 Claude Desktop 的 claude_desktop_config.json):

{
  "mcpServers": {
    "llm-sandbox": {
      "command": "python3",
      "args": ["-m", "llm_sandbox.mcp_server.server"],
    }
  }
}

后端特定配置

对于特定的后端,您需要将 BACKEND 环境变量设置为您希望使用的后端。根据您所使用的后端,可能还需要设置其他环境变量。例如,如果您使用的是 DOCKER_HOST,而系统中未自动包含 DOCKER_HOST,则可能需要设置 DOCKER_HOST 环境变量。

Docker(默认):

{
  "mcpServers": {
    "llm-sandbox": {
      "command": "python3",
      "args": ["-m", "llm_sandbox.mcp_server.server"],
      "env": {
        "BACKEND": "docker",
        "DOCKER_HOST": "unix:///var/run/docker.sock" // 将此地址更改为实际使用的主机
      }
    }
  }
}

Podman:

{
  "mcpServers": {
    "llm-sandbox": {
      "command": "python3",
      "args": ["-m", "llm_sandbox.mcp_server.server"],
      "env": {
        "BACKEND": "podman",
        "DOCKER_HOST": "unix:///var/run/podman/podman.sock" // 将此地址更改为实际使用的主机
      }
    }
  }
}

对于 Kubernetes,您可能需要将 KUBECONFIG 环境变量设置为您的 kubeconfig 文件路径。

Kubernetes:

{
  "mcpServers": {
    "llm-sandbox": {
      "command": "python3",
      "args": ["-m", "llm_sandbox.mcp_server.server"],
      "env": {
        "BACKEND": "kubernetes",
        "KUBECONFIG": "/path/to/kubeconfig" // 将此地址更改为实际的 kubeconfig 文件路径
      }
    }
  }
}

可用工具

MCP 服务器提供了以下工具:

  • execute_code:在安全的沙盒环境中执行代码,并自动捕获可视化结果
  • get_supported_languages:获取支持的编程语言列表
  • get_language_details:获取特定语言的详细信息

使用示例

配置完成后,您可以请求 AI 助手运行代码,它会自动使用 LLM 沙盒的 MCP 服务器:

“创建一个散点图,展示 x 和 y 数据点之间的关系,使用 matplotlib”

助手将在安全的沙盒中执行 Python 代码,并自动捕获生成的图表或可视化结果。

🏗️ 架构

graph LR
    A[LLM 客户端] --> B[LLM 沙盒]
    B --> C[容器后端]

    A1[OpenAI] --> A
    A2[Anthropic] --> A
    A3[本地 LLMs] --> A
    A4[LangChain] --> A
    A5[LangGraph] --> A
    A6[LlamaIndex] --> A
    A7[MCP 客户端] --> A

    C --> C1[Docker]
    C --> C2[Kubernetes]
    C --> C3[Podman]

    style A fill:#e1f5fe
    style B fill:#f3e5f5
    style C fill:#e8f5e8
    style A1 fill:#fff3e0
    style A2 fill:#fff3e0
    style A3 fill:#fff3e0
    style A4 fill:#fff3e0
    style A5 fill:#fff3e0
    style A6 fill:#fff3e0
    style A7 fill:#fff3e0
    style C1 fill:#e0f2f1
    style C2 fill:#e0f2f1
    style C3 fill:#e0f2f1

📚 文档

🤝 贡献

我们欢迎您的贡献!请参阅我们的 贡献指南 以了解详细信息。

开发设置

# 克隆仓库
git clone https://github.com/vndee/llm-sandbox.git
cd llm-sandbox

# 以开发模式安装
make install

# 运行预提交钩子
uv run pre-commit run -a

# 运行测试
make test

📄 许可证

本项目采用 MIT 许可证——详情请参阅 LICENSE 文件。

🌟 星星历史

如果您觉得 LLM Sandbox 有用,请考虑在 GitHub 上为它点个星!

📞 支持与社区

贡献者

星星历史

星星历史图表

版本历史

0.3.372026/03/02
0.3.362026/02/23
0.3.352026/02/14
0.3.342026/01/28
0.3.332026/01/15
0.3.322026/01/15
0.3.312025/12/06
0.3.302025/12/05
0.3.292025/12/04
0.3.282025/12/04
0.3.272025/11/28
0.3.262025/11/28
0.3.252025/11/14
0.3.242025/10/28
0.3.232025/10/21
0.3.222025/10/19
0.3.212025/10/07
0.3.202025/10/01
0.3.192025/10/01
0.3.182025/08/23

常见问题

相似工具推荐

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

150k|★★☆☆☆|今天
开发框架Agent语言模型

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|5天前
语言模型图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|6天前
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85.1k|★★☆☆☆|昨天
图像数据工具视频

funNLP

funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。

79.9k|★☆☆☆☆|2天前
语言模型数据工具其他

gpt4all

GPT4All 是一款让普通电脑也能轻松运行大型语言模型(LLM)的开源工具。它的核心目标是打破算力壁垒,让用户无需依赖昂贵的显卡(GPU)或云端 API,即可在普通的笔记本电脑和台式机上私密、离线地部署和使用大模型。 对于担心数据隐私、希望完全掌控本地数据的企业用户、研究人员以及技术爱好者来说,GPT4All 提供了理想的解决方案。它解决了传统大模型必须联网调用或需要高端硬件才能运行的痛点,让日常设备也能成为强大的 AI 助手。无论是希望构建本地知识库的开发者,还是单纯想体验私有化 AI 聊天的普通用户,都能从中受益。 技术上,GPT4All 基于高效的 `llama.cpp` 后端,支持多种主流模型架构(包括最新的 DeepSeek R1 蒸馏模型),并采用 GGUF 格式优化推理速度。它不仅提供界面友好的桌面客户端,支持 Windows、macOS 和 Linux 等多平台一键安装,还为开发者提供了便捷的 Python 库,可轻松集成到 LangChain 等生态中。通过简单的下载和配置,用户即可立即开始探索本地大模型的无限可能。

77.3k|★☆☆☆☆|今天
语言模型开发框架