Бэкграунд:
В сентябре 2022 года я уволился с работы (я был менеджером крупных проектов в логистической компании) и стал учить программирование. И вот, наконец, настало время дополнить портфолио не каким-то простеньким скриптом или телеграм-ботом, а полноценным продуктом, построенным с нуля.
Идея:
К этому моменту уже началось внедрение ChatGPT во все возможные места. Мне тоже не терпелось поработать с его API, но я понимал, что ниша серьёзных продуктов будет быстро занята и переполнена. К счастью, у меня есть жена Дина, которая, будучи гениальным маркетологом, генерирует десятки идей для стартапов в день. С её подачи я решил заставить искусственный интеллект быть не самым удачным партнёром на Тиндер-свидании.
Продукт:
Worst Date Ever — это голосовой чат с 23-летней девушкой с западного побережья Северной Америки. В зависимости от вашей удачи, она может быть драма-квин, страдать по бывшему, искать богатого парня или просто быть слишком высокого мнения о себе 🥰
UPD: добавил парня по имени Кайл. У него тоже несколько доступных личностей, в том числе высокооплачиваемый и высокомерный айтишник 😏
Стек:
Фронтенд (HTML и CSS) я построил с помощью Webflow. Я обожаю его за то, что я смог написать сайт и сделать его адаптивным за пару часов.
Кнопки и аудио (запись и проигрывание) работают на JavaScript. На это я потратил большую часть времени, поскольку пока что не добрался до того, чтобы полноценно изучить JS. Что ж, lesson learned, пора им заняться.
Бэкенд: Python, Flask.
Хостится всё на Google Cloud Run из-за простоты контейнеризации, удобства CI/CD и низкой latency (как это po-russki?)
Как всё работает:
На стороне юзера аудио записывается в Blob и передаётся в память. На сервере аудио расшифровывается в текст с помощью Google Speech.
Далее я дважды вызываю ChatGPT API: первый раз чтобы сгенерить ответ, второй — чтобы сделать конспект беседы и сохранить её историю.
После этого ответ озвучивается с помощью Google Text-To-Speech и проигрывается у пользователя.
Занятные детали:
• Довелось побороться с ChatGPT, потому что он норовит вставить смайлы и * описание эмоций * в текст при неформальном общении, а при озвучке гугл-голос просто говорит winking face и sighs. Промтингом не удалось заставить AI не использовать это в его (её?) речи. Пришлось прописывать регулярные выражения и отрезать это всё вручную.
• Как я уже упоминал, у Кайли есть основа личности, к которой потом рандомно добавляются особенности. Было интересно подбирать промты, чтобы заставить её вести себя бесяче, но реалистично.
• Мне не хватило бы терпения сделать fine-tuning отдельной модели, поэтому я использую 3.5-turbo. Получается неплохо, но я жду доступа к четвёртой версии ChatGPT и надеюсь, что это сильно повысит органичность ответов.
• Я выставил достаточно высокую температуру в настройке ответов: это значит, что Кайли отвечает разнообразно и креативно, но её также можно вывести из себя, и тогда она начинает выдавать чуть менее связный набор слов. Я не планирую это менять и представляю, что она просто к этому моменту перебрала с алкоголем.
• Поскольку проект некоммерческий, а я — безработный, приходится довольствоваться самым дешёвым голосом, который предоставляет Гугл. Я пробовал озвучивать Кайли с помощью AI-голоса от ElevenLabs, и это было потрясающе: он может определять эмоции и звучать заинтересованно, раздражённо, разочарованно и т.д.
• Проект был готов две недели назад, и всё это время я решал одну единственную проблему: как заставить все браузеры писать аудио в одном формате. Сделал много удивительных открытий относительно состояния фронтенда в 2023-м году! В итоге я сдался и использовал Audio Recorder Polyfill, не придумав более элегантного решения. Не знаю, во мне ли проблема, или лыжи действительно не едут 🥲
Монетизировать этот проект я не планирую. Мои основные цели — научиться работать с OpenAI API и построить портфолио.
Для клуба:
- Если вам понравился проект, предложите мне работу или стажировку у себя!
- Делитесь скриншотами ваших бесед с Кайли.
- Если вы готовы сделать код-ревью или помочь мне улучшить функционал (я хочу как минимум добавить кнопку шеринга скриншота), я буду очень рад. Если я как-то могу помочь вам с технологиями, использованными в этом проекте — пишите! ✌️
P.S.: при написании этого текста не использовался ChatGPT. Если вам показалось, что какая-то часть поста сгенерирована с помощью ИИ, это значит лишь одно — у меня началась профессиональная деформация.
Сразу представился миллиардером и Кайли оказалась очень приятной в общении девушкой.
Офигенно, очень клевый проект для портфолио!
Kylie is a bitch :)
whoops
Какая ж лютейшая годнота!))) Автору неимоверный респект и уважуха.))
Решил что если на меня точно будут токсичить то нужно РРРЕЗКО подсобраться и натоксичить первому
Не знаю какой персонаж мне достался, но начиная с фразы "Fuck off" Кайли резко начинает извиняться и старается угождать :D
Я предложил ей выйти на 20 км прогулку по пляжу. Она согласилась, но при условии, что мы остановимся поесть лобстеров. Я сказал, что не против, но только если она заплатит за нас двоих. Ответила, что без проблем все оплатит, ибо накопила денег за последний месяц.
Что я делаю не так? :D
Хахаха
Только надо было назвать ее на Kylie, а Karen :-D
ну это на 148% пропаганда сексизма
нормальная чувиха, легко согласилась со мной быть )