Языковая модель (LLM) умеет одно: продолжать текст. Задали вопрос — она дописала ответ. ИИ-агент появляется, когда вокруг модели собирают обвязку (harness): модель просит что-то вызвать, а harness берёт вызов на себя. Может спросить подтверждение у человека, может отсечь действие защитными правилами (guardrails). Мощность этой обвязки часто важнее, чем кажется. Системные инструкции, память, цикл вызовов и набор встроенных инструментов (tools) меняют и то, что агент реально умеет, и качество результата. Есть исследования, где на одних и тех же моделях смена harness ведёт к улучшению результата. Cursor или OpenRouter иногда обходят родной harness Anthropic на его же моделях. Отсюда же разрыв между ценой подписки и ценой API.

Важная часть агента — доступные ему инструменты. Они живут рядом с агентом или приезжают с MCP-сервера. Нужное действие — отдельный инструмент. Поиск по CRM — search_customer, отправка письма — send_email. MCP сделал такую интеграцию переносимой, т.к. владелец сервиса публикует инструменты, а владелец агента подключает его, не влезая во внутренности реализации. Сценарии для моделей становятся всё сложнее, количество вызовов tools всё больше, цепочки вызовов tools становятся длиннее, но это не бесплатно: каждый вызов tools — это история из запроса и ответа в контексте модели, каждый раз на всё это модель смотрит и решает, что с этим делать, и сложность принятия решения увеличивается по мере увеличения контекста. При этом, с точки зрения классического IT, часть логики вообще примитивная, и с ней справился бы самый простой скрипт лучше, быстрее и дешевле.

ПодходОписаниеРиски
Внешние провайдерыКод уезжает на серверы провайдера для изолированного запускаЗависимость от внешнего сервиса, возможные задержки
Docker-контейнерыИзоляция в контейнерах с настраиваемым доступом к интернету и хостуТребует настройки, тяжелее по ресурсам
Виртуальные песочницыПодтверждение от человека на подозрительные действияПользователи часто игнорируют запросы, риск ошибок
JavaScript-интерпретаторЛёгкая и ограниченная среда для выполнения JS-кодаОграниченная функциональность, но достаточна для многих задач

Очевидное решение — дать модели писать нужный ей код, заменяющий часть размышлений, и выполнять его. В общем виде для инженеров это звучит страшновато, ведь модель может написать и запустить то, что вам бы очень не хотелось никогда запускать на вашем компьютере или сервере: удаление важных файлов, отправка конфиденциальных данных в интернет и т.д. Это может быть из-за ошибки модели, вольной интерпретации просьбы (человек сказал «удали это», но модель поняла по-своему, что значит «это»), внедрения инструкций через prompt injection со страницы или из документа, который модель только что прочитала. Поэтому перед тем, как дать модели запускать производный код, приходится тратить время и ресурсы на изолированную песочницу (sandbox). В LangChain для этого есть внешние провайдеры — код уезжает на их серверы, где изолированно запускается. Есть возможность вынести sandbox в отдельные Docker-контейнеры, где доступ к интернету или хосту вы настроили как требуется вам. Есть более «виртуальные» песочницы на вашей машине — они спрашивают подтверждение у человека на подозрительные действия, но по факту это часто перекладывание ответственности. После десятого запроса одиннадцатое пользователи жмут не глядя или включают автоподтверждение.

Каждый вызов инструмента добавляет историю в контекст модели, увеличивая сложность и стоимость.

Более современное решение — выделить класс задач для автоматизации логики LLM и взять для них самую лёгкую, простую и ограниченную песочницу — JavaScript-интерпретатор. Это позволяет закрыть большое количество сценариев, существенно уменьшая риски. Модель получает возможность реализовать недостающий кусок логики, составить цепочку вызовов инструментов (сами вызовы по-прежнему делает harness, но запросы и ответы можно детерминированно отфильтровать и склеить) и задать процедуру для субагентов.

Рассмотрим пример на LM Studio — современном приложении, позволяющем локально скачивать современные небольшие модели из каталога и чатиться с ними. Есть и аналоги, но LM Studio — один из самых простых: всё в одном UI-интерфейсе — понятный каталог моделей с оценкой, что ваш компьютер реально потянет, возможность скачать модель в два клика мышкой, сам устанавливает нужные движки выполнения моделей, предоставляет чат-интерфейс, возможность подключать MCP, публиковать модель через веб-интерфейс для доступа из других приложений и т.д. Берём новый чат, загружаем модель и спрашиваем, какое сегодня число. Без инструментов модель отвечает датой из обучения: утверждает, что сегодня 24 июня 2026 года, но это не так. Это дата, которая осталась в модели в момент её тренировки. У большинства моделей есть какое-то представление о дате, застрявшее при обучении, но часто есть tools, которые модель перед вопросами о дате спрашивает, и именно поэтому модели отвечают текущей датой, а не застрявшей датой из памяти. В нашем случае у модели нет ни одного tool, так что шансов ответить правильно у неё не было.

В LM Studio из коробки есть плагин js-code-sandbox с одним-единственным инструментом — run_javascript, который позволяет модели запускать JavaScript-код. Это даёт модели возможность получить актуальную дату, выполнив простой скрипт, и избежать ошибки. В более общем устройстве на LangChain простой JS-интерпретатор становится уже не таким простым: он забирает часть логики с LLM и помогает ей фокусироваться на том, что нужно, делегируя детерминированную логику скрипту. Такой подход снижает количество вызовов tools, уменьшает контекст и стоимость, а также повышает надёжность, поскольку скрипт выполняется детерминированно.

Остаётся вопрос безопасности: даже JavaScript-интерпретатор должен быть изолирован, чтобы модель не смогла выполнить вредоносный код. Однако по сравнению с Docker-контейнерами или внешними провайдерами, JS-песочница проще и легче, что делает её привлекательной для широкого круга сценариев, где не требуется полная изоляция. В отрасли это тренд: всё больше инструментов для ИИ-агентов включают встроенные интерпретаторы, чтобы сбалансировать мощность и безопасность.