Eye, эх вы!
|
#511
27 Февраля 2026 20:14
Eye, эх вы!
|
|
#512
27 Февраля 2026 20:30
Извиняюсь перед модераторами - простыню пришлось постить - с хабра убрали, но кое-где пока осталось)
Прежняя ссылка: https://habr.com/ru/companies/timeweb/articles/1001118/ Мошенники позвонили моему ИИ-деду. Он продержал их 31 минуту и записал всё Блог компании Timeweb Cloud , Искусственный интеллект , Машинное обучение , Программирование , Информационная безопасность *** Три недели назад мне позвонила мама. Не «привет, как дела», а сразу: «Сынок, тут из банка звонили, говорят, с моей карты пытаются снять деньги». У меня похолодело внутри. Не потому что поверил. А потому что понял: они дозвонились. Опять. Я работаю с 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. Если у вас есть пожилые родственники — научите их одной фразе: «Я перезвоню в банк сам по номеру с карты». Это работает лучше любого ИИ. Но пока они учатся — пусть Геннадий подстрахует. |
||||
| 08.07.2021 11:47 | "Добровольно-принудительная" вакцинация |
| 07.05.2019 16:24 | Отзыв Мошенник кидала vip-tv.ml Недобросовестный заказчик MrDudi |
| 29.09.2018 11:39 | Всем доброго дня. |
| 26.07.2017 16:15 | ssl добро или как Мегафон стимулирует переход на https |
| 31.01.2017 13:03 | Доброе утро Яндекс |