LLM Sandbox: безопасный AI-агент в Docker — обзор open-source решения | AiManual
AiManual Logo Ai / Manual.
25 Июн 2026 Инструмент

LLM Sandbox: Реализация агента с Docker-песочницей для безопасного исполнения кода

Обзор open-source инструмента LLM Sandbox: Docker-изоляция для AI-агентов, субагенты, оркестрация. Сравнение с gVisor, Firecracker, LangSmith Sandboxes. Примеры

Реклама
partv2

В 2026 году запустить AI-агента без песочницы — всё равно что оставить квартиру с открытой дверью в районе с высоким уровнем преступности. Prompt injection атаки, как та история с LiteLLM, стали нормой. Агенты, которым доверяют доступ к shell, — это бомбы замедленного действия. В предыдущих статьях (раз, два) мы разбирали слои изоляции и показывали, как правильно настроить Docker-контейнер. Но ручное создание песочницы под каждого агента — та ещё морока. Особенно если агентов много, и каждый со своими инструментами. Знакомьтесь: LLM Sandbox — open-source фреймворк, который автоматизирует всю эту кухню.

Что под капотом: архитектура, от которой не оторвать глаз

LLM Sandbox — не очередная обёртка над docker run. Это полноценный оркестратор для безопасного выполнения кода, который сгенерировала нейросеть. В основе — идея субагентов, о которой мы писали в методичке по Sub-agents. Каждый субагент получает свою песочницу с минимальными правами, а главный агент (оркестратор) управляет ими через API.

Ключевая фича — policy-as-code. Вы описываете правила безопасности в YAML: какие команды разрешены, какие порты открыты, можно ли писать в /tmp. Оркестратор на лету генерирует Dockerfile и seccomp-профиль. Никаких ручных флагов в командной строке.

  • Изоляция на уровне контейнера — каждый вызов кода живёт в своей Docker-песочнице. Read-only rootfs, user namespaces, запрет монтирования.
  • Встроенный мониторинг — логи stdout/stderr, метрики CPU/RAM, алерты при подозрительной активности (например, попытка открыть сокет на 127.0.0.1:6379).
  • Интеграция с LLM-фреймворками — готовые адаптеры для LangChain и LlamaIndex. Вы говорите агенту "запусти код", а он сам решает, в какой песочнице это сделать.
  • Субагентный режим — оркестратор может запускать параллельных субагентов в разных контейнерах. Идеально для multi-agent сценариев, о которых мы говорили в статье IN Sandbox против Sandbox as Tool.

Сравнение с альтернативами: где LLM Sandbox выигрывает, а где проигрывает

Рынок песочниц для AI-агентов в 2026 году насыщен. Давайте разложим по полочкам.

Инструмент Изоляция Простота настройки Субагенты Локализация
LLM Sandbox Средняя (Docker + seccomp) Высокая (один YAML-файл) Да (из коробки) Локальный
Docker run с флагами Низкая (человеческий фактор) Низкая (ручное управление) Нет Локальный
gVisor Высокая (изоляция ядра) Средняя (требуется настройка системы) Нет (один контейнер — одно приложение) Локальный
Firecracker (микро-ВМ) Максимальная Низкая (сложно, медленный запуск) Технически да, но тяжко Локальный
LangSmith Sandboxes Высокая (управляемый sandbox) Очень высокая (через UI) Да Облачное (LangChain)
E2B (кодовые песочницы) Средняя (облачные контейнеры) Высокая (API) Через API, но сложно Облачное

Вывод для прагматиков: если вам нужна абсолютная изоляция и вы готовы мириться с оверхедом — смотрите в сторону gVisor или Firecracker. Если хотите минимальный порог входа и не паритесь о приватности — берите LangSmith Sandboxes или E2B. Но если вам нужно локальное решение с гибкой настройкой, которое умеет в субагентов и не требует месячных подписок, LLM Sandbox — ваш вариант.

Будьте честны: 90% промптов не требуют доступа к /etc/passwd. LLM Sandbox запрещает всё, что не разрешено явно. Это как тотальный контроль, но без паранойи.

Как это работает: от policy до выполнения

Весь процесс строится вокруг YAML-политики. Вы описываете, что может делать агент, а LLM Sandbox собирает Docker-образ и запускает код.

Вот как выглядит минимальная конфигурация для кодинг-агента (этот пример мы также разбирали в статье про кодинг-агентов):

# sandbox-policy.yaml
version: "1.0"
name: code-sandbox
container:
  image: python:3.12-slim
  read_only: true
  tmpfs:
    /tmp: "size=100M,noexec,nosuid"
  user_namespace: true
  seccomp: default
network:
  enabled: false
commands:
  allow:
    - "/usr/bin/python3"
    - "/usr/bin/pip"
  deny:
    - "/bin/bash"
    - "/bin/sh"
    - "/usr/bin/wget"
resources:
  cpu: "0.5"
  memory: "256M"
  timeout: 30

Агент (например, на базе LangChain) отправляет в песочницу код на Python. LLM Sandbox запускает контейнер, выполняет скрипт, возвращает результат и убивает контейнер. Если агент попытается запустить bash — получит ошибку.

1 Настройка оркестратора

Устанавливаете через pip или Docker Compose:

pip install llm-sandbox
# или
docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock llmsandbox/orchestrator

Оркестратор принимает HTTP-запросы на выполнение кода. В ответ — JSON с stdout, stderr, exit code.

2 Интеграция с LLM-агентом

Пример на Python с использованием LangChain (адаптированный код из документации):

from langchain.agents import AgentExecutor, create_react_agent
from langchain.tools import tool
from llm_sandbox import SandboxClient

client = SandboxClient(base_url="http://localhost:8080", policy="code-sandbox")

@tool
def run_python_code(code: str) -> str:
    """Execute Python code in a secure sandbox."""
    response = client.execute(code)
    return response["stdout"]

# ... дальше стандартная цепочка LangChain

Теперь любой код, который решит выполнить агент, отправляется в изолированную среду. Попытка прочитать /etc/shadow? Ничего не выйдет — контейнер read-only и без доступа к хосту.

Реальные сценарии: где LLM Sandbox спасает от катастрофы

Сценарий 1: Автоматический code review и тестирование. Агент получает PR, генерирует тесты и запускает их в песочнице. Если тест удаляет базу данных — не страшно, контейнер всё равно умрёт через 30 секунд. Мы писали об этом в контексте фреймворка офлайн-оценки.

Сценарий 2: Мультиагентная система с субагентами. Запускаете 10 субагентов, каждый анализирует свою часть данных. Оркестратор распределяет их по контейнерам, изолирует друг от друга. Если один агент скомпрометирован — остальные в безопасности.

Сценарий 3: Обучение с подкреплением для кодинг-агентов. Песочница позволяет безопасно симулировать среду. Агент может пробовать разные команды, падать, перезапускаться — без риска для хоста.

💡
При тестировании промптов с agentic loop советую использовать --tmpfs /sandbox:size=200M и ограничивать время жизни контейнера до 60 секунд. Это предотвращает "зависшие" процессы — частая проблема, когда агент зацикливается.

Кому стоит установить LLM Sandbox прямо сейчас

  • Инди-разработчикам AI-агентов, которые хотят запускать код локально, не доверяя облачным песочницам.
  • Командам, которые строят multi-agent системы — субагентный режим сэкономит вам часы на написание собственного оркестратора.
  • Исследователям безопасности, изучающим атаки на агентов — встроенный мониторинг позволяет логировать каждое действие внутри контейнера.
  • Тем, кто переходит с LangSmith Sandboxes на self-hosted — LLM Sandbox даёт тот же уровень абстракции, но без привязки к облаку.

А кому не подойдёт? Если вам нужна is-it-just-me паранойя — изоляция на уровне ядра (gVisor/Firecracker). Если лень возиться с YAML — облачные сервисы вроде Code Interpreter от OpenAI или E2B. Но за удобство вы платите либо деньгами, либо контролем.

Пара слов напоследок

В 2026 году промпт-инъекции уже не экзотика — это рутина. LLM Sandbox не панацея, но он снижает порог для безопасного запуска агентов до одного YAML-файла. Советую интегрировать его в свой стек как обязательный компонент, особенно если ваши агенты работают с внешними данными. А если сомневаетесь, вспомните историю с supply-chain-атаками через prompt injection — лучше перебдеть, чем потом объяснять клиентам, почему их токены утекли.

Удачи в песочнице!

Подписаться на канал