Как я делал голосового ассистента на NLP и не сошел с ума

от автора

Голосовые ассистенты давно перестали быть просто игрушкой — теперь это полноценные цифровые помощники, которые умеют общаться, искать информацию и даже шутить (иногда лучше некоторых людей). В этой статье разберём, как собрать своего кастомного ассистента с нуля на Python, используя современные NLP-инструменты. Без Siri, без Alexa, всё своё, родное.

Зачем всё это?

Когда голосовой ассистент отвечает тебе по делу — это магия. Но чтобы эта магия случилась, под капотом крутится куча хитрых технологий: автоматическое распознавание речи (ASR), обработка естественного языка (NLP), диалоговые модели, синтез речи (TTS)… и если хоть одна часть запнётся — привет, хаос. А ещё желательно, чтобы он не сливал все данные на сервера третьих лиц, да?

В этой статье покажу, как собрать своего ассистента, который будет работать локально, понимать речь, говорить в ответ и помнить, о чём вы с ним говорили. Всё на Python, по-взрослому.

Архитектура голосового ассистента

Вот базовые блоки системы:

  • ASR (Automatic Speech Recognition) — распознавание речи из микрофона.

  • NLP Engine — обработка текста, понимание намерений.

  • Dialogue Manager — управление диалогом, логикой взаимодействия.

  • TTS (Text-to-Speech) — озвучивание ответа.

  • API Layer — если ассистенту нужно что-то искать или выполнять действия.

Мы будем использовать:

  • Whisper от OpenAI для распознавания речи.

  • Rasa в качестве движка для диалогов и NLP.

  • pyttsx3 для синтеза речи.

  • SpeechRecognition для захвата голоса.

Часть 1: Распознавание речи с Whisper

Whisper — это модель от OpenAI, которая умеет распознавать аудио. Можно использовать её локально через whisper или faster-whisper.

Пример кода на Python:

import whisper import sounddevice as sd import numpy as np import scipy.io.wavfile  model = whisper.load_model("base")  def record_audio(duration=5, fs=16000):     print("Говори...")     audio = sd.rec(int(duration * fs), samplerate=fs, channels=1, dtype='int16')     sd.wait()     return np.squeeze(audio)  def save_wav(filename, audio, fs=16000):     scipy.io.wavfile.write(filename, fs, audio)  audio = record_audio() save_wav("temp.wav", audio)  result = model.transcribe("temp.wav") print("Ты сказал:", result["text"])

Часть 2: NLP с Rasa

Rasa позволяет строить полноценные диалоговые системы с определением намерений, слотов, контекста.

# nlu.yml version: "3.1"  nlu: - intent: greet   examples: |     - Привет     - Здравствуй     - Доброе утро  - intent: ask_weather   examples: |     - Какая погода?     - Что там с погодой?     - Будет дождь?  # domain.yml intents:   - greet   - ask_weather  responses:   utter_greet:     - text: "Привет! Чем могу помочь?"   utter_weather:     - text: "Погода отличная, солнышко светит!"

Дальше пишем stories, запускаем rasa train, и всё — диалоговая логика работает.

Часть 3: Синтез речи

Для TTS можно использовать pyttsx3, он работает оффлайн и довольно шустрый.

import pyttsx3  engine = pyttsx3.init() engine.say("Привет! Я твой голосовой ассистент.") engine.runAndWait()

Можно выбрать голос, скорость, тональность. На винде и маке разные голоса, но общее API — одинаковое.

Часть 4: Склеиваем всё вместе

Теперь мы можем построить полный цикл:

  1. Голос → текст (Whisper)

  2. Текст → интент (Rasa)

  3. Ответ → текст (Rasa)

  4. Текст → речь (pyttsx3)

# main.py from rasa.core.agent import Agent from whisper import load_model import pyttsx3  agent = Agent.load('models')  # путь к модели rasa asr_model = load_model("base") tts = pyttsx3.init()  while True:     audio = record_audio()     save_wav("temp.wav", audio)     result = asr_model.transcribe("temp.wav")     user_text = result["text"]      response = agent.handle_text(user_text)     if response:         reply = response[0]['text']         print(f"Ассистент: {reply}")         tts.say(reply)         tts.runAndWait()

Что можно улучшить?

  • Заменить pyttsx3 на Coqui TTS или VITS для более человеческого голоса.

  • Добавить память и историю диалога с базой данных.

  • Подключить внешние API — погоду, календари, заметки.

Заключение

Сделать своего голосового ассистента — это не так сложно, как может показаться. Главное — не пытаться сделать сразу как у Google или Amazon. Маленькими шагами можно дойти до вполне приличного помощника. И самое главное — он будет именно таким, как тебе нужно.

А потом можно уже и добавить ему характер. Пусть бурчит по утрам или говорит «Мастер, вы сегодня великолепны».

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


ссылка на оригинал статьи https://habr.com/ru/articles/897862/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *