Twitch-стример, созданный на базе OpenAI GPT-3.5 API с профилированием пользователей из чата.
- Python 3
- PyTorch
- OpenAI
- Sound Device
- Transliterate
- num2words
- twitch-chat-irc
- Silero
Установите все необходимые зависимости и следующие файлы:
- users_data - достаточно создать пустой каталог в корневом каталоге.
- .env - сюда вы занесете название своего канала и api-key от OpenAI.
- backup_trainingdata_messagelist.json - начальные системные установки, которые объясняют GPT контекст диалога.
- blacklist.txt - список банвордов, которые мы будем цензурить.
Для изменения поведения бота меняйте установки в backup_trainingdata_messagelist.json. Примеры ответов и бэкапа можете найти в users_data.
Установите его в корневой каталог.
openai_api_key = #ваш api-ключ openai
token = #если хотите подключить бота на отслеживание сообщений от своего имени
channel = komuto_ai #имя вашего канала на твиче
Данный бот лишь принимает сообщения из чата и отправляет ответ в виде текста, который впоследствии озвучивается посредством SileroTTS. Для самого стриминга вам нужен OBS или любое другое ПО, которое позволяет стримить на Twitch. Бот может принимать сообщения с Twitch чата и вне стрима.
При получении нового сообщения (установленный лимит для строки - 150 символов, можно изменить в функции check_comment) из чата, содержащего слово "комуто" в любом регистре (меняется там же), бот делает проверку на существование пользователя в users_data.
Если такового пользователя нет, то создаем его в .json и вносим первичные инструкции из backup_trainingdata_messagelist.json.
Впоследствии usernamehere.json будет обновляться и включать в себя сообщения, которые отправил пользователь, а также ответы самого GPT.
В силу лимита на запрос в OpenAI API (4000 для GPT-3.5 и 32000 для GPT-4) может возникнуть переполнение инструкций, в таком случае бот делает следующее:
- Переводит имеющийся файл в backup_username.json
- Создает новый файл username.json и задает ему исходные инструкции
- В username.json вносятся последние два сообщения пользователя и два ответа на них
- Далее используется username.json (бэкап можно хранить для памяти/чтобы почитать на досуге)
Субтитры выводятся в следующем формате:
*Сообщение пользователя*?*Ответ GPT*
subs.txt можно использовать как текстовый источник в OBS, обновляется вместе с полученными сообщениями.