← В блог
    Кейс продукта25 июня 20267 минут чтения

    Граница ИИ: бот от тревоги, где нейронке запрещено лечить

    Я спроектировал и собрал бота от тревоги «Министерство Экзистенциальной Безопасности» от и до — продукт, архитектуру и код, в режиме AI-native разработки. Решающий ход здесь не «обернуть всё нейронкой», а провести границу: где модели можно импровизировать, а где ей запрещено касаться ответа. Нейронка пишет только сатирическую разрядку. Терапию и обработку кризиса ведёт детерминированный код без единого вызова модели — потому что там неудачное слово стоит не шутки, а человека в дистрессе.

    Это и есть моя работа как ИИ-консультанта: я решаю, где модели место, а где она риск — и закрепляю эту границу в коде, а не в промпте.

    Граница ИИэто архитектурное решение о том, где модели позволено выдавать ответ, а где нет. Здесь модель пишет только сатирическую разрядку; терапия, заземление и обработка кризиса детерминированы и не содержат вызова модели. Граница закреплена в коде, а не оставлена на промпт.

    Что это за бот и почему вся суть в границе?

    Бот переводит человека от вспышки тревоги к конкретному следующему шагу. У него две части, и разница между ними — это и есть кейс.

    Часть первая — разрядка. Вы выгружаете то, что грызёт, а уставший чиновник «Министерства Экзистенциальной Безопасности» выдаёт сатирический «Акт №404», который перемалывает страх через масштаб Вселенной и чёрный юмор. Эта часть генеративная — её пишет языковая модель. Импровизация тут ровно то, что и работает, а неудачное слово стоит лишь чуть более слабой шутки.

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

    Часть вторая — разбор. Здесь бот ведёт через настоящую регуляцию эмоции: назвать чувство, проверить, бьётся ли оно с фактами, и пошагово сделать телесное «действие наоборот». В этой части нейронки нет. Каждое слово собрано руками из клинического источника, потому что здесь неудачное слово стоит человеку неверной инструкции.

    Этот раздел и есть архитектура. Модель допущена туда, где ошибка безвредна, и закрыта там, где может навредить. Всё остальное работает на эту одну линию.

    Где модель работает, а где ей вход закрыт?

    Я пустил модель ровно в одно место и закрыл ей вход во все остальные. Терапевтический контент, обработка кризиса и заземление — детерминированные модули без вызова модели. Модель — одна изолированная функция за одной частью продукта.

    app/
      api/
        bot         вебхук: роутинг, обе части, кризис-чек, лимит, админка
        cron        фоновый дёрж молчунов (тихие часы, раз в 3-6 дней)
      admin         панель статистики + рассылка
    
    lib/
      prompts       системный промпт модели — ЕДИНСТВЕННОЕ место, где живёт ИИ
      utils         вызов DeepSeek: таймаут 58с, ручной abort, ответ в образе при сбое
      emotion_reg   Часть 2, разбор: статичный DBT-движок, 9 эмоций (БЕЗ ИИ)
      grounding     заземление, фиксированные шаги (БЕЗ ИИ)
      crisis        перехват по стоп-словам, до всего остального (БЕЗ ИИ)
      supabase      данные: пользователи, логи сообщений

    Состояние разговора — конечный автомат, хранится по пользователю, а не «в голове модели»: разбор шагает по шагам в базе, идемпотентно, поэтому обновление страницы или двойной тап его не ломают.

    Обёртка над LLM или архитектура с границей?

    Обёртка отправляет всё в модель и надеется, что ответ безопасен. Архитектура с границей решает, что модели позволено выдавать, а что — нет. Вот разница построчно.

    Обёртка над LLMГраница (этот проект)
    Где работает модельвезде, на любой вводтолько безопасная зона (разрядка)
    Терапевтический контентгенерит модельзахардкожен из клинического источника
    Кризисное сообщениетоже уходит в модельдетерминированный путь → человек
    Риск галлюцинациина пользователевырезан архитектурой
    Если модель сбоитчеловек остаётся ни с чемчеловек всё равно получает ответ
    Роль авторапромпт-инженерархитектор границ

    Какие решения и сделали продукт?

    Кейс не в том, что «собрался бот от тревоги». Кейс — в том, где проведена линия.

    Модель работает только в безопасной зоне

    Она пишет сатирический «Акт» и больше ничего. Вся терапевтическая суть продукта лежит вне её.

    Терапия захардкожена из клинического источника

    Разбор собран по таблицам регуляции эмоций из работы Кристин Данкли — назвать эмоцию, сверить с фактами, телесное «действие наоборот». Бот выдаёт выверенный метод, одинаково каждый раз, а не выдумывает советы. Подсказки о состоянии тела даны через «если Вы съёжились…», чтобы бот не приписывал человеку чувство, которого у того нет.

    Кризис всегда доходит до человека

    Детерминированная проверка по стоп-словам о самоповреждении стоит до любой другой обработки, в обоих режимах. При совпадении бот прекращает шутки и упражнения и направляет человека к живому специалисту. Это единственное место, которое нельзя отдавать вероятностной модели.

    Человек всегда получает ответ

    У генеративного вызова таймаут 58 секунд под лимитом Vercel в 60 и ручной abort, а при любом сбое уходит внятное сообщение в образе, а не зависание и не луп. Надёжность лежит в коде, а не в настроении модели. (Ранняя версия как раз зацикливалась и падала по таймауту; починка — увести этот путь из-под милости модели.)

    Состояние — автомат, а не память

    Разбор идёт по явным шагам в базе, идемпотентно к обновлениям и двойным тапам. Контекст модели нарочно крошечный — лишь несколько последних сообщений — чтобы ничего не разрасталось и не разъезжалось.

    Персона — обезболивающее

    Бюрократический чёрный юмор — «Шредер Реальности», «Акт №404» — обесценивает страх через масштаб и смех. Он живёт только в первой части; в разборе и в кризисе тон серьёзный и уважительный, потому что там насмешка навредила бы. После шутки-разрядки одна кнопка гласит «а теперь разобрать по-настоящему» и переводит человека из катарсиса в саму работу.

    Это работает?

    Да. Развёрнуто в продакшене на Vercel, вебхук здоров — ноль ошибок и ноль зависших апдейтов, обе части работают, кризис-фильтр и детерминированный разбор работают как задумано. Я не публикую «снизил тревогу на N%»: честной базы для такого замера нет, и выдумывать её не буду. За что я ручаюсь — за проект: рискованные части детерминированы и выверены, а модель отгорожена от всего, что может навредить человеку.

    Почему это лучше обёртки над моделью?

    Обёртка отправляет всё в модель и надеется, что ответ безопасен. Я решаю, что модели позволено выдавать. Смешная часть остаётся свободной и генеративной; клиническая часть и кризисный путь остаются детерминированными, читаемыми и неизменными. Эта граница и есть результат — у большинства «ИИ-продуктов» её нет, и ровно там они и ломаются.

    Строите с ИИ и не уверены, где модели место?

    Я решаю, где модель оправдывает себя, а где она риск — и проектирую эту линию, а не просто пишу промпты. AI-native разработка доводит продукт от идеи до развёрнутой системы за дни, с границей, вшитой с самого начала.

    Вопросы и ответы

    Роман Денисов

    Об авторе

    Роман Денисов

    ИИ-консультант

    MBA (МИРБИС), 17 лет в маркетинге и продажах B2B. Помогаю командам решить, где ИИ уместен в их продукте, и закрепить эту границу в работающей, развёрнутой системе.

    Подробнее о Романе