Этот проект представляет собой голосового и текстового ассистента. Он использует распознавание речи, обработку текста и взаимодействие с внешними API для выполнения задач, таких как ответы на вопросы и управление Discord.
- Python: 3.10
- Установленные драйвера:
- Виртуальный микрофон и динамик: VB-Audio Virtual Cable
- Рекомендуется использовать кабели A и B.
- Виртуальный микрофон и динамик: VB-Audio Virtual Cable
- Устоновленный git
- Установленный ffmpeg
-
SpeechRecognition
Используется для распознавания речи через Google Speech Recognition.
Примечание: Whisper рассматривался как альтернатива, но был отклонён из-за высоких требований к ресурсам, низкой скорости и недостаточного качества распознавания (моделиtiny
,small
,medium
). Также Whisper плохо справляется с русской речью. Вы можете экспериментировать с ним самостоятельно. -
webrtcvad
Используется для подавления шума и определения активной речи (Voice Activity Detection). -
sounddevice
Воспроизведение звука через виртуальный динамик. -
soundfile
Работа с аудиофайлами (запись и чтение). -
transliterate
Транслитерация английского текста в кириллицу и обратно.
-
NetworkToolsAPI
API для взаимодействия с ChatGPT и Text-to-Speech (TTS).
Репозиторий: NetworkToolsAPI.
Рекомендуемые модели:- ChatGPT:
chatgpt-4o
- TTS:
hailuo TTS (turbo)
- ChatGPT:
-
DiscordUserAPI
Управление Discord через Python.
Репозиторий: DiscordUserAPI.
Инструкция по установке: тут (следуйте всем пунктам, кроме 4.1 и 5).
- Установите Python 3.10.
- Установите виртуальные аудиокабели (VB-Audio Virtual Cable).
- Склонируйте репозиторий:
git clone https://github.com/Badim41/discord_voice_client.git cd discord_voice_client
- Установите зависимости:
pip install -r requirements.txt pip install python-magic-bin # для windows
- Настройте виртуальный микрофон и динамик в системе (рекомендуются кабели A и B).
- Настройте API-ключи в secret.py
для NetworkTools, Cohere
и других сервисов (см. документацию
NetworkToolsAPI
, Cohere). - При необходимости замените другие настройки в secret.py
Рекомендуемый пункт. Бот будет искать ответы на вопросы в заготовленном файле с помощью эмбеддингов вопросов, тем, ответов.
Есть 2 режима. Первый быстрый, для войс-чата:
- Находится эмбеддинг вопроса и ищутся схожие вопросы в файле. Результат поиска получает GPT.
- Поиск обычно занимает ~0.5 секунд, значительно повышая качество ответа
Второй вариант занимает чуть больше времени, но намного качественнее:
- ChatGPT даётся вопрос, картинка и история сообщений, он составляет до 5 поисковых запросов в датасет
- Повторение действий, как для для войс-чата (нахождение эмбеддинга и поиск результата)
- Обычно этот вариант занимает не более 4 секунд
- Подготовьте текстовые файлы. Укажите папку с файлами в переменной
folder_path
вcreate_dataset.py
. - Укажите имя персонажа (
character_name
) и API ключ (network_tools_api
). Про цены на API и как получить ключ: тык. - Если имена файлов соответствуют темам в них, установите
segmented_input
наTrue
- Запустите скрипт:
python dataset/create_dataset.py
Процесс состоит из трёх этапов:
- Форматирование: Текст преобразуется в формат "вопрос-ответ" с использованием API.
- Сортировка: Вопросы и ответы сортируются по темам (если
segmented_input=False
). - Конвертация в JSON: Итоговый датасет сохраняется в формате JSON.
Вначале нужно спарсить, а потом обработать сообщения. Для этого нужно запустить ds_message_parser.py
, а потом ds_message_format.py
- Укажите
author_id
,guild_id
, токен Discord. - После обработки появится 2 файла:
{author_id}_raw.json
,{author_id}_dialogues.json
.
-
После обработки появится 2 файла:
formatted-dataset-{character_name}-2.txt
,dataset_json/{character_name}-2.json
. -
Код также обрабатывает изображения, заменяет
<@user_id>
на имена пользователей. -
Убедитесь, что токен Discord действителен и имеет права на чтение сообщений.
-
Для больших объемов данных настройте лимиты в
messages_search
(параметрlimit
). -
Вы можете использовать
formatted_dataset
для обработки в create_dataset.py -
Чтобы убрать обработку изображений в сообщениях, замените
elif message["author_id"] == author_id and i == 0:
наelif False:
в 90 строке -
Рекомендуется вручную убрать лишние вопросы и ответы в файлах датасета
- Запустите основной скрипт:
python main.py
- Откройте дискорд с другим аккаунтов в браузере. 'devices_output' из 'secret.py' укажите как микрофон, а ' device_input' как динамики.
- То есть по умолчанию:
- "Устройство Ввода": Cable-B-Output
- "Устройство вывода:" Cable-A-input
- Зайдите со второго аккаунта в войс-чат
- Говорите в микрофон в войс-чате или вводите текст — бот обработает запрос и ответит через виртуальный динамик или текстовым сообщением.
- Бот распознает речь, пока вы не остановитесь (должна быть пауза в 1 секунду)
- Генерация речи занимает 9-14 секунд. Если в течение этого времени что-то сказать, то он завершит прошлый запрос и начнёт новый
- Если перебивать бота в течении 3 секунд, то он замолчит.
- Запустите скрипт:
python ds_user.py
- Напишите в лс или в обрабатываемый чат боту и он ответит
- Для улучшения качества распознавания русской речи рекомендуется использовать Google Speech Recognition.
- Модель
hailuo TTS (turbo)
обеспечивает быструю и качественную генерацию речи.