Инструменты — это просто структурный вывод
🤔 Зачем это читать
На совещании предлагают подключить AI-агента к вашей складской системе — чтобы он сам списывал остатки и формировал заказы поставщикам. И тут у кого-то в зале сводит живот: «Стоп. То есть нейросеть будет сама лазить в наш склад и что-то там менять? А если она ошибётся и спишет не тот товар на миллион? Кто это вообще остановит?» Возражение повисает. Никто за столом не может внятно объяснить, что именно произойдёт между моментом, когда модель «решила списать», и моментом, когда товар реально списан. И проект ставят на паузу — не потому что он плохой, а потому что страшно.
Знакомо? Этот страх — «агент сам что-то натворит с моими системами» — самый частый стопор для AI-проектов в бизнесе. И он держится ровно на одном непонимании: люди думают, что модель действует напрямую. Сказала — сделала. Как будто между её «хочу списать товар» и реальным списанием нет вообще ничего.
А там есть. Там всегда стоит прослойка кода, которая получает «заявку» от модели и сама решает — выполнять её, проверить сначала или вообще отклонить. Модель не дотягивается до твоего склада руками. Она может только попросить. А выполняет просьбу — отдельный код, который ты контролируешь.
После этой темы ты сможешь показать пальцем, где именно стоит точка контроля в любом разговоре про «агент подключится к нашим системам». И вместо паники «оно само всё сделает» начнёшь задавать спокойный рабочий вопрос: «окей, а что в этой прослойке — что она пропускает, что блокирует, где спрашивает человека?». Это и есть разница между «боюсь» и «управляю».
Задержись на 10 секунд. Вспомни систему на своей работе, которую тебе было бы страшнее всего отдать «под управление AI» — касса, склад, рассылка клиентам, бухгалтерия. Стоит удержать её в голове до конца страницы: там ты увидишь, что между моделью и этой системой можно поставить ровно такой замок, какой захочешь, — и кто держит ключ.
🧾 Повар не лезет в сейф — он выписывает требование
В прошлой теме про инструменты агента мы говорили, что у повара-модели есть «руки» — техника и кладовая, через которые он что-то делает в реальном мире. Теперь заглянем под капот этих рук и увидим главное: повар не трогает ничего сам. Совсем.
Представь дорогую кладовую ресторана — там лежит чёрная икра, выдержанное мясо, всё под замком. Повару понадобился килограмм лосося. Что он делает? Он не идёт и не вскрывает сейф своим ключом — у него и ключа-то нет. Он берёт бланк и выписывает требование: «Кладовая. Выдать: лосось, 1 кг». Подписывает. И отдаёт кладовщику.
А дальше — самое важное. Кладовщик читает требование и сам решает, что с ним делать. Лосось есть, повар имеет право — выдаёт. Лосося нет — пишет «нет в наличии». Повар вдруг выписал «выдать всю чёрную икру для личного дома шефа» — кладовщик не выдаёт, потому что это против регламента, и зовёт владельца. Между «повар захотел» и «продукт ушёл со склада» всегда стоит этот человек с регламентом. Повар может только попросить. Выдаёт — кладовщик.
📋 Под капотом инструмент — это заявка, а не действие
Теперь без метафоры, прямо. В прошлой теме мы разбирали структурированный вывод (structured output — когда модель выдаёт ответ не вольным текстом, а по строгой схеме, как заполненный бланк) — загляни в тему про него, если подзабылось. Так вот, секрет всей этой темы помещается в одну фразу: использование инструментов (tool use) — это и есть структурированный вывод. Никакой особой магии «действия» там нет.
Когда говорят, что «модель вызвала инструмент» (это называют вызовом функций, function calling — когда модель просит запустить конкретную функцию с конкретными данными), на самом деле модель сделала ровно одно действие, своё единственное: выдала текст. Только текст этот — не ответ тебе, а аккуратно заполненный бланк-заявка: имя инструмента, который нужен, и аргументы — что именно с ним сделать.
Вот так выглядит «заявка», когда модель «решает списать товар»:
# модель не списывает товар. Она выдаёт ВОТ ТАКОЙ текст-заявку:
заявка = {
имя_инструмента: «списать_со_склада»,
аргументы: { товар: «лосось», количество: 1, единица: «кг» }
}
# всё. На этом работа модели закончена. Это просто заполненный бланк.
# никакой товар ещё НЕ списан. Склад даже не в курсе, что есть такая заявка.
Заметь: это намерение, выраженное текстом. «Я бы хотел списать вот это». Реального списания пока не произошло — ровно как с требованием на бланке: бумага есть, лосось ещё в кладовой.
🛡️ Между намерением и действием всегда стоит код
А теперь — кто делает дело. Заявку забирает отдельная программа — её называют по-разному (обвязка, прослойка), но суть одна: это обычный код, который написали разработчики, и в нём нет никакого AI. Этот код — наш кладовщик. Он получает заявку и идёт по шагам, которые задал человек:
- прочитать заявку: что за инструмент, какие аргументы;
- проверить по регламенту: можно ли это вообще? в каких границах? кому?
- и только потом — либо выполнить, либо отказать, либо притормозить и спросить человека.
Вот в этом — вся соль темы и весь ответ напуганному коллеге с совещания. Модель физически не может ничего сделать с твоими системами напрямую. У неё нет рук, нет ключа, нет доступа. Всё, что она умеет, — выписать бумажку с просьбой. А выполнять эту просьбу или нет, решает код, который ты контролируешь. Этот код — и есть твоя точка контроля.
Покажу тот же кладовщик псевдокодом — чтобы было видно, что вся «логика контроля» написана обычными человеческими правилами, а не AI:
получили заявку от модели: списать «лосось», количество N
# шаг 1 — проверка по регламенту, который написал ЧЕЛОВЕК
если инструмент не из разрешённого списка → отказать, записать в журнал
если N больше дневной нормы → отказать, сообщить модели «слишком много»
если списание дороже 50 000 ₽ → поставить на паузу, спросить человека
# шаг 2 — и только если все проверки пройдены — реальное действие
иначе → выполнить списание на складе, вернуть модели результат
# → модель ни на одном шаге не трогала склад. Она только попросила.
# → весь контроль — в этих строчках. Их пишешь и согласовываешь ты.
💡 Почему этот разрез снимает страх (и что с ним делать)
Ты тут владелец, а не разработчик, который пишет кладовщика. Но именно тебе принимать решение «подключать или нет», и именно тебе важно понимать, где рычаги. Три рабочих вывода.
- «Агент сам залезет и натворит» — это страх перед тем, чего технически нет. Модель не действует напрямую — она выписывает заявку, а исполняет код. Между намерением и действием всегда есть прослойка. Услышал «он сам всё сделает» — спрашивай: а кто исполняет заявку, что у него в регламенте?
- Замок ставишь ты, а не модель. Насколько строгий кладовщик, что он пропускает, где зовёт человека — это решения, которые принимают люди и согласуешь ты. Можно начать с кладовщика, который вообще ничего не выдаёт, а только показывает — об этом следующая тема.
- Правильный вопрос — не «опасна ли модель», а «что в прослойке». Сила или новизна модели тут ни при чём: даже самая мощная упрётся в того же кладовщика. Безопасность живёт не в модели, а в коде вокруг неё — и в твоих правилах для этого кода.
Запомни одной фразой: модель выписывает заявку, код её проверяет и решает, выполнять ли. Между «хочу» и «сделано» всегда стоит код — и это твоя точка контроля.
🎮 Прими решение за код-кладовщика
Пять ситуаций. В каждой два шага. Сначала разберись, что на самом деле произошло: модель действительно «сама сделала» — или только выписала заявку? А потом — главное — реши как ты настроишь код-кладовщика на эту заявку: пропустить, поставить лимит, спросить человека или вообще отказать. Это и есть работа владельца — не угадать определение, а приложить три двери из иллюстрации к новому случаю. Жми кнопку — сразу разбор. Это не экзамен, а тренировка.
📖 Ключевые понятия
- Использование инструментов (tool use)
- То, что под капотом выглядит как «модель что-то сделала». На деле модель не делает — она выписывает заявку: имя нужного инструмента и аргументы к нему. Это и есть структурированный вывод, а не отдельная «способность действовать».
- Вызов функций (function calling)
- Частный случай того же: модель просит запустить конкретную функцию (списать товар, отправить письмо, посмотреть остаток) с конкретными данными. Просит — текстом. Запускает функцию отдельный код.
- Заявка (имя + аргументы)
- Содержимое того самого бланка от модели: что за инструмент нужен и что именно с ним сделать. Это намерение, выраженное текстом, а не само действие. Бумага есть — лосось ещё в кладовой.
- Точка контроля
- Тот самый код-кладовщик между моделью и твоей системой. Он получает заявку, проверяет по правилам, которые задал человек, и решает: выполнить, отказать или спросить человека. Безопасность живёт здесь, а не в модели.
🛡️ Частые заблуждения
«Раз агент опасен для систем — значит, единственная защита это вообще не давать ему туда доступ»
Это ложная развилка «или полный доступ, или ничего». Доступ модель и так получает не напрямую, а через код-прослойку — и именно её настраивают по шагам. Не «пускать / не пускать», а «что этому коду разрешить»: дать только инструменты-«смотреть», поставить лимиты на суммы, потребовать подтверждение на необратимом. Отключить всё — это отказ от пользы там, где хватило бы аккуратной настройки замка.
«Чем мощнее и новее модель, тем она опаснее для моих данных»
Мощность модели — про то, как хорошо она думает и формулирует заявки. До твоих данных модель всё равно дотягивается только через код-прослойку, и эта прослойка одинаково проверяет заявку хоть от слабой модели, хоть от самой свежей. Опасность не в модели, а в том, какие инструменты и права ей дали и насколько строг проверяющий код.
«Раз модель „решила" выполнить действие — значит, оно уже выполнено»
«Решение» модели — это просто выписанная заявка, текст. Реального действия в этот момент ещё нет, как нет лосося на столе, пока кладовщик не выдал его по требованию. Между «модель захотела» и «это случилось» всегда есть шаг, на котором код может сказать «нет». Заявка — не приказ, который нельзя отменить.
🧠 AI-чутьё (AI Judgment)
Перестань бояться автономии — найди точку контроля
Вот рамка, которую стоит носить с собой: к любому «агент подключится к нашим системам и будет сам…» мысленно прикладывай вопрос — а где код между ним и системой, и что у этого кода в правилах? Этот вопрос мгновенно переводит разговор из плоскости страха («оно само что-то натворит») в плоскость управления («покажите мне прослойку и её регламент»).
Работает это так. Модель не действует напрямую — никогда. Она выписывает заявку, а исполняет отдельный код, который написали и согласовали люди. Значит, у тебя всегда есть место, куда поставить замок: пропускать только разрешённые инструменты, ограничить суммы и объёмы, потребовать человеческого «да» на дорогих и необратимых шагах. Страх автономии лечится не «давайте не будем подключать AI», а «давайте решим, что именно этот код пропускает».
И держи практический след на будущее. Раз точка контроля — это код-кладовщик, то у тебя есть два мощных рычага, которые мы разберём дальше. Первый: дать модели инструменты, которые умеют только смотреть, но не менять, — тогда сломать нечего в принципе. Второй: на самые дорогие заявки ставить обязательное подтверждение человеком. Оба рычага живут в прослойке, и оба настраиваешь ты. Это и есть мышление владельца: не «страшно ли пускать модель», а «какой замок я ставлю на дверь».
🎯 Практика
Одно задание на пять минут — оно превращает «точку контроля» из абзаца в книжке в конкретный замок на твоей системе.
- Возьми ту систему со своей работы, которую тебе было бы страшнее всего отдать AI (ту самую, из микромомента в начале: касса, склад, рассылка, бухгалтерия).
- Выпиши три действия, которые AI-агент теоретически мог бы там запросить. Например, для склада: «посмотреть остаток», «списать товар», «заказать у поставщика на крупную сумму».
- Теперь для каждого реши, как должен поступить код-кладовщик: какие из них пропускать свободно, какие — только в пределах лимита, а какие — обязательно через твоё подтверждение. Это и есть проектирование точки контроля. Заметь, как страх «оно само» сменился на спокойное «вот мои правила».
Помнишь страх из начала — «нейросеть сама залезет в наш склад»? Теперь видно: сама она туда не залезет. Она выпишет заявку, а исполнит код, в котором записаны твои правила. Замок на двери ставишь ты — модель только стучится.