
Devo ammettere che inizialmente ero scettico riguardo alla capacità dei Large Language Models (LLM) di generare frammenti di codice che funzionassero davvero. L’ho provato aspettandomi il peggio e sono rimasto piacevolmente sorpreso. Come ogni interazione con un chatbot, il modo in cui è formattata la domanda è importante, ma con il tempo imparerai come specificare i confini del problema per cui hai bisogno di aiuto.
Mi stavo abituando ad avere un servizio di chatbot online sempre disponibile mentre scrivevo codice quando il mio datore di lavoro ha emesso una politica a livello aziendale che vietava ai dipendenti di utilizzarlo. Potrei tornare alle mie vecchie abitudini di ricerca su Google, ma ho deciso di creare un servizio LLM gestito a livello locale che potessi mettere in discussione senza far trapelare informazioni al di fuori delle mura dell’azienda. Grazie all’offerta LLM open source su Abbracciare il visoe il progetto illuminato a catenaPotrei mettere insieme un servizio che soddisfi la necessità di assistenza per la codifica.
Il passo logico successivo è stato aggiungere qualche interazione vocale. Sebbene la voce non sia adatta per l’assistenza alla codifica (vuoi vedere i frammenti di codice generati, non ascoltarli), ci sono situazioni in cui hai bisogno di aiuto per trovare ispirazione su un progetto creativo. La sensazione di sentirsi raccontare una storia aggiunge valore all’esperienza. D’altro canto, potresti essere riluttante a utilizzare un servizio online perché desideri mantenere privato il tuo lavoro.
In questo progetto ti guiderò attraverso i passaggi per creare un assistente che ti consenta di interagire vocalmente con un LLM open source. Tutti i componenti sono in esecuzione localmente sul tuo computer.
L’architettura prevede tre componenti separati:
- Un servizio di rilevamento delle parole di attivazione
- Un servizio di assistente vocale
- Un servizio di chat
I tre componenti sono progetti autonomi, ciascuno con il proprio repository github. Esaminiamo ciascun componente e vediamo come interagiscono.
Servizio di chat
Il servizio di chat esegue il LLM open source chiamato HuggingFaceH4/zephyr-7b-alpha. Il servizio riceve un prompt tramite una chiamata POST, passa il prompt tramite LLM e restituisce l’output come risposta alla chiamata.
Puoi trovare il codice Qui.
In …/chat_service/server/, rinomina chat_server_config.xml.esempio A chat_server_config.xml.
È quindi possibile avviare il server di chat con il seguente comando:
python .\chat_server.py
Quando il servizio viene eseguito per la prima volta, sono necessari diversi minuti per l’avvio perché vengono scaricati file di grandi dimensioni dal file Abbracciare il viso sito Web e archiviato in una directory della cache locale.
Ottieni una conferma dal terminale che il servizio è in esecuzione:
Se vuoi testare l’interazione con LLM, vai su …/chat_service/chainlit_interface/.
Rinominare app_config.xml.esempio A app_config.xml. Avvia il servizio di chat web con
.\start_interface.sh
Passare all’indirizzo locale host locale:8000
Dovresti essere in grado di interagire con il tuo LLM in esecuzione locale tramite un’interfaccia di testo:
Servizio di assistente vocale
Il servizio di assistente vocale è il luogo in cui avvengono le conversioni da voce a testo e da testo a voce. Puoi trovare il codice Qui.
Vai a …/voice_assistant/server/.
Rinominare voice_assistant_service_config.xml.example A voice_assistant_service_config.xml.
L’assistente inizia riproducendo il saluto per indicare che sta ascoltando l’utente. Il testo del saluto è configurato in voice_assistant_config.xmlsotto l’elemento
Il motore di sintesi vocale che consente al programma di convertire il testo in audio parlato che puoi ascoltare tramite il tuo dispositivo di uscita audio è pittx3. Dalla mia esperienza, questo motore parla con un tono abbastanza naturale, sia in inglese che in francese. A differenza di altri pacchetti che si basano su una chiamata API, viene eseguito localmente.
Un modello chiamato facebook/seamless-m4t-v2-large esegue l’inferenza da parlato a testo. I pesi del modello vengono scaricati quando voice_assistant_service.py è la prima esecuzione.
Il loop principale voice_assistant_service.main() svolge i seguenti compiti:
- Prendi una frase dal microfono. Convertilo in testo utilizzando il modello di sintesi vocale.
- Controlla se l’utente ha pronunciato il messaggio definito nel file
elemento dal file di configurazione. In questo caso la conversazione termina e il programma termina dopo la riproduzione del messaggio di addio. - Controlla se la frase è senza senso. Il motore di sintesi vocale spesso restituisce una frase inglese valida, anche se non ho detto nulla. Per caso, questi risultati indesiderati tendono a ripetersi. Ad esempio, le frasi senza senso a volte iniziano con “(” o “sto per”. Ho raccolto un elenco di prefissi spesso associati a una frase senza senso nella
elemento del file di configurazione (questo elenco probabilmente cambierebbe per un altro modello di sintesi vocale). Ogni volta che un input audio inizia con uno dei prefissi nell’elenco, la frase viene ignorata. - Se la frase non ti sembra senza senso, invia una richiesta al servizio di chat. Riproduci la risposta.
Servizio di parola sveglia
L’ultimo componente è un servizio che ascolta continuamente il microfono dell’utente. Quando l’utente pronuncia la parola di attivazione, una chiamata di sistema avvia il servizio di assistente vocale. Il servizio di parola d’allarme esegue un modello più piccolo rispetto ai modelli di servizio di assistente vocale. Per questo motivo è logico che il servizio di sveglia sia attivo ininterrottamente mentre il servizio di assistente vocale venga avviato solo quando ne abbiamo bisogno.
Puoi trovare il codice del servizio parola sveglia Qui.
Dopo aver clonato il progetto, spostati su …/wakeword_service/server.
Rinominare wakeword_service_gui_config.xml.example A wakeword_service_gui_config.xml.
Rinominare comando.bat.esempio A comando.bat. Dovrai modificare comando.bat quindi l’attivazione dell’ambiente virtuale e la chiamata a voice_assistant_service.py corrispondere alla struttura della directory.
È possibile avviare il servizio tramite la seguente chiamata:
python gui.py
Il nucleo del servizio di rilevamento delle parole di attivazione è il file openwakeword progetto. Tra alcuni modelli di parole di veglia, ho scelto il modello “hey Jarvis”. Ho scoperto che dire semplicemente “Jarvis?” attiverà il rilevamento.
Ogni volta che viene rilevata la parola di attivazione, viene richiamato un file di comando, come specificato nel file
Se desideri utilizzare il servizio di rilevamento delle parole di attivazione per qualcos’altro, puoi modificare il file comando.bat file per farlo avviare qualunque programma desideri.
Quando viene rilevata la parola di attivazione, il servizio di rilevamento della parola di attivazione emette un segnale audio di due bip per indicare che è stato attivato. Questo rapido feedback indica all’utente che deve attendere il caricamento dei modelli di sintesi vocale e di sintesi vocale nella GPU del computer, operazione che può richiedere diversi secondi. Quando entrambi i modelli vengono caricati, il servizio di assistente vocale riproduce il saluto e la conversazione può iniziare. Al termine della conversazione, il servizio di assistente vocale termina e il servizio di rilevamento della parola di attivazione emette un altro segnale di due segnali acustici.
Una volta installati e testati i tre componenti, possiamo avviare la chat e i servizi di rilevamento delle parole di attivazione. Il servizio di rilevamento delle parole di attivazione ascolterà costantemente il microfono. Quando viene rilevata la parola di attivazione (“Jarvis?”), verrà avviato il servizio di assistente vocale. È quindi possibile porre domande ad alta voce e ricevere una risposta vocale. Quando viene rilevata la frase di fine conversazione (“Grazie e arrivederci”) il servizio dell’assistente vocale termina.
Ecco un esempio di interazione con l’assistente vocale:
“Jarvis?” (Beep Beep)
(Diversi secondi di silenzio durante il caricamento dei modelli con assistente vocale)
“Ciao! Come posso aiutarla?”
“Di cosa sono fatti gli anelli di Saturno?”
“Gli anelli di Saturno sono composti principalmente da particelle di ghiaccio, la maggior parte delle quali è costituita da ghiaccio d’acqua. Tuttavia, negli anelli sono presenti anche quantità minori di altri ghiacci, come ghiaccio di ammoniaca e detriti rocciosi. L’esatta composizione degli anelli varia a seconda della distanza da Saturno, con gli anelli interni che sono più densi e costituiti da particelle più piccole, mentre gli anelli esterni sono più estesi e contengono particelle di ghiaccio più grandi”.
“Raccontami la trama del film ‘Ritorno al futuro’.”
“Il film ‘Ritorno al futuro’ segue la storia di Marty McFly, uno studente delle superiori che viene accidentalmente trasportato indietro nel 1955 in un’auto DeLorean che viaggia nel tempo creata dal suo eccentrico amico scienziato, Doc Brown. Marty deve affrontare le sfide del passato mentre cerca di riparare i danni del presente e impedire a sua madre adolescente di innamorarsi di suo padre adolescente. Lungo la strada, Marty fa amicizia con una versione più giovane di Doc Brown e lo aiuta a superare una tragedia personale. Il film esplora i temi del destino, della famiglia e delle conseguenze dell’alterazione del passato”.
“Grazie e arrivederci”
“Arrivederci” (bip-bip)
In questo progetto abbiamo implementato un sistema di assistente vocale composto da un servizio di rilevamento delle parole di attivazione, un servizio di assistente vocale e un servizio di chat. Ciascuno di questi componenti è un elemento costitutivo autonomo riutilizzabile per altri progetti.
Tra le tante sorprese che ho avuto lavorando su questo assistente vocale, quella che mi ha colpito di più è stata la qualità della conversione da parlato a testo. Se sei come me, probabilmente hai avuto problemi con i sistemi di riconoscimento vocale automatizzato che non riescono a trascrivere semplici comandi come “Abbassa il volume”! Mi aspettavo che la conversione da voce a testo fosse il principale ostacolo del processo. Dopo aver sperimentato alcuni modelli insoddisfacenti, ci sono arrivato facebook/seamless-m4t-v2-large e sono rimasto colpito dalla qualità dei risultati. Posso anche pronunciare una frase in francese e la rete neurale la tradurrà automaticamente in inglese. Niente di meno che sorprendente!
Spero che proverai questo divertente progetto e fammi sapere per cosa lo usi!
Fonte: towardsdatascience.com