Шаги с кодом (code_step)
Некоторая логика слишком специфична для оператора compute, но при этом слишком детерминирована, чтобы оправдывать LLM-агента: сверки из нескольких источников, специализированные бизнес-вычисления, экзотические нормализации. Для таких случаев узел code_step выполняет код внутри песочницы, без вызова LLM и с предсказуемым выводом.
Код редактируется напрямую, как любое другое поле конфигурации, и запускается сразу после сохранения.
Модель выполнения
code_step выполняет Starlark — диалект Python, спроектированный для изоляции: без доступа к файловой системе, без сети, без произвольных импортов, детерминированный, ограниченный бюджетом времени. Код видит только:
- Входы (
input_paths), которые вы явно на него отображаете. - Инструменты (
allowed_tools), которые вы разрешаете ему вызывать.
Всё остальное недосягаемо. Шаг с кодом не может получить доступ к ресурсу, который вы ему не передали.
Конфигурация
| Поле | Назначение |
|---|---|
| Code | Исходный код Starlark, который выполняется, редактируется напрямую. |
Inputs (input_paths) | Отображение variable → selector. Коду раскрываются только эти ключи контекста. Внутренние ключи (_*) отклоняются. |
| Tool allowlist | Инструменты, вызываемые через tool(name, args). Каждый вызов наследует собственные защитные механизмы инструмента (защита от SSRF, биллинг, аудит, killswitch). |
| Output key | Куда поместить результат в контексте. Нижестоящие узлы читают этот ключ. |
| Execution budget | Потолок времени (мс), ограниченный на стороне сервера. Шаг, который его превышает, прерывается. |
Где проходит граница безопасности
Язык не является угрозой: Starlark изолирован по своей природе — сам по себе он не может ни прочитать файл, ни выйти в сеть, ни зациклиться навечно. Чистое вычисление безвредно.
Единственная реальная возможность — это мост tool(), и он ограничен списком разрешённых инструментов, применяемым во время выполнения: код может вызывать только те инструменты, которые вы перечислили, и каждый из них несёт собственные защитные механизмы (защита от SSRF, биллинг, аудит, killswitch). Именно там — в выборе инструментов — вы задаёте область того, что шагу разрешено делать.
Пустой список разрешённых инструментов = отсутствие возможности побочных эффектов: шаг просто вычисляет по своим входам и производит вывод.
Когда его использовать
- Да: детерминированная логика, которую вы можете описать точно, но которая выходит за пределы встроенных операций
compute(сверка нескольких списков, составные бизнес-правила, проприетарные форматы). - Нет: простой фильтр, агрегация или проекция → достаточно оператора
compute. - Нет: задача, требующая суждения или открытого письма → это agent, а не код.