Три недели назад мне позвонила мама. Не «привет, как дела», а сразу: «Сынок, тут из банка звонили, говорят, с моей карты пытаются снять деньги».

У меня похолодело внутри. Не потому что поверил. А потому что понял: они дозвонились. Опять.

Я работаю с ML-системами шестой год. Строю пайплайны, оптимизирую инференс, вот это всё. И в тот момент, вешая трубку после того, как полчаса объяснял маме, что «сотрудник Сбербанка» не будет просить коды из SMS, я понял — хватит.

Да, можно блокировать номера. Но они звонят с новых. Можно поставить определитель спама — помогает, но через раз. Можно объяснять родственникам — объяснял сто раз, через неделю забывают. Мама вот снова чуть не повелась.

Пора сделать то, что я откладывал месяцами.


❯ Чего я хотел добиться (и чего — нет)

Давайте сразу: я не планировал «победить телефонное мошенничество». Я инженер, который постит в тг, и пишет отчеты своих экспериментов на хабр, но никак не супергерой. Моя цель была проще, но злее.

Сжечь время мошенника.

Логика такая. Колл-центр — это бизнес. У них есть конверсия, есть стоимость оператора, есть план на день. Если я заставлю одного оператора висеть на линии полчаса с нулевым результатом — это полчаса, которые он не потратит на мою маму. Или на чью-то бабушку. Или на одинокого деда, который вот-вот продиктует код из SMS.

Прикинул экономику. По разным оценкам, оператор мошеннического колл-центра получает от 30 до 80 тысяч рублей в месяц. Допустим, 50 тысяч. При 22 рабочих днях и 8-часовом дне — это примерно 280 рублей в час, или 4.7 рубля в минуту. Мой 31-минутный звонок стоил им около 145 рублей прямых расходов. Плюс упущенная выгода: за это время оператор мог бы обработать 5-6 коротких звонков.

Решение созрело само: нужен голосовой агент. Но не обычный — не ассистент и не бот техподдержки.

Мне нужен был профессиональный пожиратель времени.


❯ Знакомьтесь: Геннадий Петрович, 78 лет

Здесь начинается самое интересное. Потому что заставить ИИ тупить — это отдельное искусство.

ChatGPT и его собратья обучены быть полезными. Они хотят помочь, ответить на вопрос, решить проблему. А мне нужно было ровно противоположное: модель, которая будет максимально бесполезной, но при этом достаточно живой, чтобы мошенник не бросил трубку.

Я убил три дня на промпт-инжиниринг. Для тех, кто не в теме: это когда ты пишешь для ИИ подробную инструкцию — кем притворяться и как себя вести. Для тех, кто в теме: системный промпт на ~2000 токенов с ролью, few-shot примерами и жёсткими ограничениями.

Пробовал разные подходы. Первая версия была слишком умной — Геннадий задавал логичные уточняющие вопросы, и мошенники быстро понимали, что что-то не так. Вторая версия была слишком тупой — односложные ответы, мошенники бросали трубку ч��рез минуту. Третья версия попала в точку.

Хороший скамбейт работает не потому что умный. А потому что «проблемный».

Вот какие приёмы я заложил в поведение Геннадия:

Путаница в цифрах. Когда мошенник просит номер карты — Геннадий начинает диктовать. Но это не номер карты. Это серия паспорта СССР. Или номер партийного билета. Или домашний телефон сватьи Клавы.

Как это работает: в инструкции для ИИ написано «при запросе числовых данных диктуй цифры, но прерывайся каждые 3-4 цифры и вспоминай, откуда они». Плюс список «ложных источников»: партбилет, военный билет, старый паспорт, номер дома, индекс. ИИ случайно выбирает, что он «диктует».

Мошенник получает цифры. Он думает, что близок к цели. И слушает дальше.

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

«Деньги? Да, с деньгами сейчас плохо. Вот молоко раньше 28 копеек стоило, а сейчас знаешь сколько? В сельпо ходил на прошлой неделе, дак там...» И понеслось. Пять минут про молоко. Мошенник ждёт, потому что дед вроде как согласился помочь.

Паузы с фоновыми звуками. Это, возможно, самая недооценённая штука. Геннадий периодически «уходит» за чем-нибудь:

  • «Ой, милок, погоди, очки протру...» → пауза 15-30 секунд

  • «Сейчас-сейчас, телевизор сделаю потише...» → фоновый звук ТВ, потом тишина

  • «Подожди, кот орёт, пойду гляну...» → шаги, шуршание, пауза 30-45 секунд

  • «Карточка в комоде была, сейчас схожу...» → шаги, звук ящиков, пауза до минуты

Я собрал библиотеку из 47 бытовых звуков: шаги, шуршание бумаги, телевизор (новости, сериал), мяуканье кота, скрип двери, звон посуды. Они проигрываются во время пауз в случайном порядке.

Мошенник висит на линии. Ждёт. Минута за минутой.

Бесконечная «почти готовность». Психологический крючок. Геннадий никогда не говорит «нет». Он всегда «сейчас-сейчас».

В инструкции жёсткое правило: «НИКОГДА не отказывай напрямую. Ты ХОЧЕШЬ помочь, просто у тебя не получается прямо сейчас».

Карта? Сейчас найду, куда-то положил. Код? Погоди, SMS не вижу, буквы мелкие. Паспорт? Был в шкафу, а может в серванте... Мошенник чувствует: ещё немного, и он получит данные. И остаётся на линии.

Эмоциональные качели. Геннадий периодически пугается: «Ой, а точно всё хорошо будет? А то я боюсь, вдруг деньги пропадут...». Мошенник вынужден успокаивать, объяснять, убеждать. Это дополнительные минуты.


❯ Как это устроено технически

Ладно, хватит психологии. Теперь — как оно работает под капотом. Буду объяснять простым языком, но для гиков оставлю детали.

Задача: мошенник звонит на телефон, а ему отвечает ИИ голосом деда. В реальном времени, без заметных задержек.

Для этого нужны четыре компонента:

1. Определитель речи (VAD — Voice Activity Detection)

Штука, которая понимает: человек говорит или молчит. Обычно в голосовых ботах VAD нужен, чтобы не перебивать собеседника — система вежливо ждёт паузу и только потом отвечает. Но настоящий дед так не делает. Настоящий дед влезает посреди фразы с «ась?», переспрашивает, бормочет невпопад.

Поэтому я настроил VAD в два режима. Основной — классический: ждём полсекунды тишины, потом отвечаем. Но с вероятностью ~20% Геннадий перебивает: не дожидаясь паузы, вставляет короткую реплику — «а?», «чего?», «погоди-погоди». Это раздражает мошенника, сбивает его скрипт и добавляет реалистичности. Живой человек не ждёт идеальной тишины, чтобы заговорить.

Использую Silero-VAD — лёгкая модель, работает на процессоре, не требует видеокарты. Задержка около 20 миллисекунд.

2. Распознавание речи (STT — Speech-to-Text)

Мошенник что-то сказал — нужно превратить звук в текст. Для этого — Whisper от OpenAI. Одна из лучших моделей для распознавания русской речи, при этом открытая и бесплатная.

Важный момент: телефонный звук — это не студийная запись. Шумы, сжатие, хрипы. Whisper справляется, но иногда путает похожие с��ова. Поэтому я добавил initial_prompt — подсказку с ключевыми словами контекста: «банк, карта, код, перевод». Помогает.

3. Мозг (LLM — Large Language Model)

Получив текст, система должна придумать ответ. За это отвечает языковая модель. Это та же технология, что стоит за ChatGPT, только модель открытая, бесплатная и крутится у меня на сервере.

На момент запуска я остановился на Llama-3 70B. Тестировал несколько вариантов — Llama, Mistral, DeepSeek — на трёх задачах:

  • Не выходить из образа деда

  • Придумывать правдоподобные отмазки

  • Не сдаваться под давлением

Llama-3 70B победила. Особенно в устойчивости: когда я в тестах орал и требовал «немедленно назвать номер», модель оставалась в образе и продолжала тупить. В будущем буду обновлять — выходят новые версии, и для такой задачи может хватить модели поменьше.

4. Синтез голоса (TTS — Text-to-Speech)

Ответ готов в виде текста. Теперь нужно превратить его в голос. Использую Piper — быстрый синтезатор, который работает локально. Не идеальный выбор для русского (Silero TTS, вероятно, лучше), но у Piper низкая задержка, а для телефонного качества хватает.

Голос должен звучать как у деда, а не как у робота. Поэтому я добавил постобработку:

  • Замедление на 15% (старики говорят медленнее)

  • Лёгкий тремор (дрожание голоса)

  • Небольшая хрипотца

  • Фильтр телефонного звука (срезает высокие и низкие частоты — bandpass 300–3400 Гц)

Результат — голос звучит натурально. Я давал послушать знакомым, никто не заподозрил синтез.

Собираем вместе

Весь процесс выглядит так:

Мошенник говорит

      ↓

Определитель речи ждёт паузу (20мс)

      ↓

Распознавание речи: звук → текст (400мс)

      ↓

Языковая модель придумывает ответ (500мс)

      ↓

Синтез голоса: текст → звук (150мс)

      ↓

Геннадий отвечает

Общая задержка: примерно 1.1 секунды от конца фразы мошенника до начала ответа. Для «пожилого человека, который соображает медленно» — идеально. Настоящие деды отвечают так же или медленнее.

Железо

Всё крутится на моём собственном сервере — он жужжит в углу комнаты, я давно собрал его для ML-экспериментов и рассказывал про это в телеграм-канале. Характеристики:

  • GPU: RTX 4090 24GB

  • CPU: AMD Ryzen, 16 ядер

  • RAM: 64GB

Llama-3 70B в полном виде на 24 гигабайта видеопамяти не влезает. Поэтому — квантизация: модель сжимается до 4 бит (GPTQ/AWQ), теряя немного качества, но помещаясь в память. Для задачи «тупить как дед» потери незаметны.

Сервер параллельно тянет другие задачи. Но именно поэтому проект обошёлся почти бесплатно: железо и так работает 24/7.

Для связи с телефонной сетью использую Asterisk — бесплатная программа, которая умеет принимать звонки через интернет (SIP-телефония). Арендую номер у провайдера, входящие звонки переправляются на сервер.


❯ Грабли, на которые я наступил

Было бы нечестно рассказывать только про успехи. Вот с чем намучился:

Грабли #1: Эхо

Первая версия создавала эхо. Система слышала звук, который сама же воспроизводила, и получалась петля обратной связи.

Решение: добавил пода��ление эха (acoustic echo cancellation). Плюс научил систему игнорировать звук во время воспроизведения ответа — простой флаг «сейчас говорю, не слушаю».

Грабли #2: ИИ выходил из роли

Когда мошенник давил, модель иногда отвечала: «Извините, я не могу предоставить личную информацию». Это фраза чат-бота, не деда. Мошенник сразу понимал, что что-то не так.

Решение: добавил в системный промпт список запрещённых фраз и примеры, как отвечать вместо них:

НИКОГДА не говори:

- "Извините, я не могу..."

- "Как искусственный интеллект..."  

Вместо этого говори:

- "Ох, милок, да я же и так стараюсь..."

- "Погоди, сейчас найду..."

Грабли #3: Whisper галлюцинировал

На тишине или шуме Whisper иногда выдавал: «Спасибо за просмотр» или «Подписывайтесь на канал». Классическая проблема — артефакты обучения на YouTube-видео.

Решение: фильтрация коротких сегментов (< 0.5 сек) и чёрный список фраз-галлюцинаций.

Грабли #4: Мошенники-роботы

Некоторые мошенники сами используют ботов для первичного обзвона. Получалась беседа двух ИИ — забавно, но бесполезно.

Решение: если первые реплики подозрительно шаблонные, а паузы между ними ровно по 2 секунды — вешаем трубку. Не хочу тратить ресурсы на робота.


❯ Тот самый звонок: 31 минута разбора

Теперь к главному. Самый длинный диалог — 31 минута 14 секунд. Разберу по фазам.

Минуты 0–3: Установление контакта

Мошенник представляется сотрудником службы безопасности Сбербанка.

Мошенник: Геннадий Петрович, здравствуйте. Вас беспокоит служба безопасности Сбербанка. Меня зовут Алексей Сергеевич. С вашего счёта пытаются провести подозрительную операцию.

Геннадий: Ась? Какой Сбербанк? У меня сберкнижка была, дак я её закрыл в девяносто каком-то году... или в двухтысячном... не помню уже...

Мошенник: Нет, Геннадий Петрович, речь о банковской карте. У вас есть карта Сбербанка?

Геннадий: Карта? А, ну да, карточка есть. Зелёненькая такая. Пенсию на неё кидают. Только я ей редко пользуюсь, там деньги-то какие — восемнадцать тыщ, и то к середине месяца половину на лекарства...

Обратите внимание: Геннадий сразу даёт информацию. Небольшую, безобидную, но даёт. Мошенник получает подтверждение: карта есть, баланс маленький, человек пожилой и доверчивый. Крючок заглочен.

Минуты 3–10: Нагнетание

Мошенник пугает: деньги украдут, нужно срочно действовать.

Мошенник: Геннадий Петрович, ситуация серьёзная. Мошенники пытаются перевести все средства. Нам нужно заблокировать операцию. Продиктуйте номер карты.

Геннадий: Ох, батюшки... Все деньги? [пауза] ...а вы точно из банка? Звонил тут кто-то недавно, внук сказал — мошенники...

Мошенник: Я вас понимаю, сейчас много мошенников. Но я настоящий сотрудник. Проверьте мой номер в интернете.

Геннадий: В интернете? Да какой интернет, милок, у меня телефон кнопочный. Внук смартфон подарил, дак я его включать боюсь, там кнопок нету...

Мошенник пытается выстроить доверие. Геннадий уходит в сторону. Ещё минута потрачена.

Геннадий: Номер карты... Сейчас найду... Где-то она была... [шуршание] ...в пиджаке? Нет, там партбилет. Или в комоде? Сейчас схожу.

[Пауза 40 секунд. Шаги, звук ящиков]

Геннадий: Тут нету... может, в серванте? Жена покойница всегда документы туда складывала...

[Ещё пауза 30 секунд]

Семь минут Геннадий ищет карту. Мошенник ждёт. Подбадривает: «Не торопитесь, я подожду».

Минуты 10–18: Ложный прогресс

Геннадий «находит» карту.

Геннадий: Нашёл! Сейчас... очки найду. Без очков цифры не разгляжу...

[Пауза 20 секунд]

Геннадий: Так, записывай. Два... два... [пауза] ...нет, это не то. Серия паспорта, кажись. Советского ещё. Там римские цифры были. Три палочки и буква Л.

Мошенник: Мне нужен номер карты. На лицевой стороне, 16 цифр.

Геннадий: Шашнадцать? Сейчас... Четыре, семь, два... [пауза] ...ой, затёрлось. Три вроде. Или восемь...

Этот цикл повторяется пять раз. Геннадий выдаёт 3-4 цифры, сбивается, путает с другими числами. Мошенник записывает, надеется, ждёт.

Минуты 18–25: Философские отступления

Когда давление растёт, Геннадий уходит в рефлексию.

Мошенник: Геннадий Петрович, давайте сосредоточимся. Мне нужен номер карты.

Геннадий: Да-да... [вздох] Знаешь, раньше проще было. Зарплату в кассе давали, наличкой. А щас карточки, коды, пароли... Внук показывал телефоном платить — приложил, пикнуло, деньги ушли. Куда ушли? Непонятно...

Мошенник: Я понимаю, но сейчас важно...

Геннадий: А ты откуда? Голос южный какой-то. Не Сашки ли сын? Сосед мой был, уехал в Крым вроде...

Мошенник: Нет, я не знаю никакого Сашку...

Геннадий: Хороший мужик был. На рыбалку ходили. На Волгу. Судаки — во какие!

Пять минут мошенник пытается вернуть разговор. Геннадий вспоминает соседей и жалуется на здоровье.

Минуты 25–31: Финал

Мошенник на грани срыва.

Мошенник: Геннадий Петрович! [кричит] Просто прочитайте номер! Шестнадцать цифр!

Геннадий: Чего кричишь? Я и так плохо слышу. Слуховой аппарат поправлю...

[Пауза 40 секунд]

Геннадий: Так. Номер. Четыре... четыре... семь... три... два...

Мошенник: Да! Продолжайте!

Геннадий: ...или нет, это телефон сватьи. Клавки. Она в соседнем селе, дом с зелёным забором...

Мошенник: [мат]

[Гудки]

31 минута. Мошенник сорвался и бросил трубку.


❯ Статистика за месяц

Система работала 34 дня. Цифры:

Метрика

Значение

Всего звонков

47

Из них мошеннических

41

Среднее время удержания

8 мин 40 сек

Максимум

31 мин 14 сек

Бросили с руганью

23 (56%)

Бросили молча

6 (15%)

Обещали перезвонить

12 (29%)

Последний пункт особенно радует. Некоторые мошенники настолько верят Геннадию, что назначают повторный звонок: «Хорошо, перезвоню через час, когда найдёте карту». И перезванивают. И снова попадают на него.

Распределение по времени:

  • До 2 минут: 12%

  • 2-5 минут: 27%

  • 5-10 минут: 29%

  • 10-20 минут: 22%

  • Больше 20 минут: 10%

Чёткая бимодальность. Мошенники либо бросают сразу (поняли, что дед «сложный»), либо застревают надолго.


❯ Защита от ошибок

Без защитных механизмов система может навредить.

Утечка реальных данных

ИИ обучен быть полезным. Если случайно упомянуть в инструкции реальные данные — модель может их выдать.

Решение: Геннадий ничего не знает. Все данные, которые он «диктует» — генерируются случайно. Нет ни одного реального номера, адреса или имени.

Реальные звонки

Что если позвонит настоящий банк? Или скорая?

Решение: многоуровневая защита.

  • Номера родственников и врачей — в белом списке, звонок идёт напрямую

  • Фразы «скорая», «полиция», «авария» — немедленный перевод на реальный телефон

  • Номера 8-800 банков — тоже перевод

  • Если в первые 30 секунд нет типичных фраз мошенников — перевод


❯ Экономика проекта

Честный расчёт.

Расходы за месяц:

  • Сервер: свой, уже работал (рыночная стоимость аренды аналога ~25 000 руб, но для меня — 0)

  • SIP-номер: ~500 руб

  • Электричество: ~1 500 руб (доля Геннадия в общем потреблении сервера)

  • Итого: ~2 000 руб из кармана

«Урон» мошенникам:

  • 41 звонок × 8.6 минут = 353 минуты

  • 6 часов работы операторов × 280 руб/час = ~1 700 руб

Если бы я арендовал сервер специально — экономика не сходилась бы. Но сервер и так работает 24/7 на других задачах, так что Геннадий — по сути бесплатный бонус.

Для реального урона нужен масштаб: сотни Геннадиев на дешёвом железе.


❯ Что дальше

Система работает на одной линии. Но архитектура масштабируется.

Думаю о нескольких направлениях:

Разные персонажи. Бабушка Зина, которая путает мошенника с внуком. Дядя Толя, который переводит разговор на рыбалку. Тётя Маша с бесконечными жалобами на здоровье.

Активный режим. Не ждать звонков, а самому звонить на номера из слитых баз мошенников. Занимать их линии.

Дешёвое железо. Перейти на модель поменьше, чтобы работало на обычной видеокарте. Llama-3 70B — overkill для этой задачи, и новые модели позволяют получить сравнимое качество на железе попроще.


❯ Итог

Мошенники работают по экономике. Конверсия, стоимость оператора, план на день. Когда один звонок съедает полчаса без результата — это удар.

ИИ идеален для этой задачи. Ему не страшен прессинг. Он не устанет. Не расстроится от мата. Просто продолжит искать очки и вспоминать номер партбилета.

Каждая минута на Геннадия — это минута, которую мошенник не потратит на чью-то бабушку.

И знаете что? Моей маме с тех пор не звонили.

Совпадение? Может быть.

UPD: Материал носит концептуальный характер и представлен в формате художественной реконструкции для демонстрации возможностей описанной ИИ-архитектуры.


P.S. Если у вас есть пожилые родственники — научите их одной фразе: «Я перезвоню в банк сам по номеру с карты». Это работает лучше любого ИИ. Но пока они учатся — пусть Геннадий подстрахует.

Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале 

Перед оплатой в разделе «Бонусы и промокоды» в панели управления активируйте промокод и получите кэшбэк на баланс.
Перед оплатой в разделе «Бонусы и промокоды» в панели управления активируйте промокод и получите кэшбэк на баланс.
Близкое по теме