Integrazione Avanzata di GPT-4 per Conversazioni Vocali: Script Completo

L’evoluzione dell’intelligenza artificiale ha portato a sviluppi sorprendenti, e uno degli esempi più eclatanti è GPT-4, un modello linguistico di OpenAI. Recentemente, ho sviluppato uno script Python che integra GPT-4 in un sistema di chatbot conversazionale con output vocale. Questo script rappresenta un esempio notevole di come le API AI possano essere sfruttate per creare interazioni utente avanzate.

import pyaudio
import vosk
import os
import json
from gtts import gTTS
import simpleaudio as sa
from openai import OpenAI
from pydub import AudioSegment

# Inizializza il client OpenAI
client = OpenAI(api_key='sk-XXX') # Inserire API OpenAI

# Inizializza la cronologia dei messaggi
message_history = []

def get_response_from_gpt4(user_input):
    global message_history

    # Aggiungi il messaggio dell'utente alla cronologia
    message_history.append({"role": "user", "content": user_input})

    completion = client.chat.completions.create(
        model="gpt-4",
        messages=message_history
    )

    if completion.choices and completion.choices[0].message:
        risposta = completion.choices[0].message.content
        # Aggiungi la risposta del modello alla cronologia
        message_history.append({"role": "assistant", "content": risposta})
    else:
        risposta = "Nessuna risposta ottenuta dall'API."

    return risposta

def text_to_speech(text, lang="it"):
    tts = gTTS(text=text, lang=lang, slow=False)
    tts.save("./response.mp3")
    command = 'ffmpeg -y -i ./response.mp3 ./response.wav > NUL 2>&1'
    os.system(command)
    wave_obj = sa.WaveObject.from_wave_file("./response.wav")
    play_obj = wave_obj.play()
    play_obj.wait_done()

def main():
    global message_history

    # Initialize Vosk
    vosk.SetLogLevel(0)
    model_path = "./vosk-model-it-0.22" # Scaricare il modello
    vosk_model = vosk.Model(model_path)

    p = pyaudio.PyAudio()
    stream = p.open(format=pyaudio.paInt16,
                    channels=1,
                    rate=16000,
                    input=True,
                    frames_per_buffer=8000)
    stream.start_stream()

    rec = vosk.KaldiRecognizer(vosk_model, 16000)

    # Aggiungi il messaggio iniziale del sistema alla cronologia
    message_history.append({"role": "system", "content": "Tu sei un assistente virtuale."})

    print("Parla con il ChatBot. Pronuncia 'Stop' per uscire.")

    while True:
        try:
            data = stream.read(4000, exception_on_overflow=False)
        except IOError as e:
            print(f"Errore di Buffer: {e}")
            continue

        if rec.AcceptWaveform(data):
            result = json.loads(rec.Result())
            text = result.get("text", "").strip()

            if text.lower() == "stop":
                print("ChatBot: Arrivederci!")
                break

            if text:
                print(f"Tu: {text}")
                response_text = get_response_from_gpt4(text)
                print(f"ChatBot: {response_text}")
                text_to_speech(response_text)

if __name__ == "__main__":
    main()

Configurazione Iniziale e Dipendenze

Il codice si apre con l’importazione di librerie fondamentali:

  • pyaudio: gestione dell’interfaccia audio.
  • vosk: per il riconoscimento vocale offline.
  • gtts (Google Text-to-Speech): per convertire le risposte testuali in audio.
  • simpleaudio: per riprodurre i file audio.
  • openai: per interagire con l’API di GPT-4.
  • pydub: per la manipolazione audio.

Autenticazione e Stato Iniziale

Viene inizializzato il client OpenAI con una chiave API, segno di un’autenticazione sicura e necessaria per accedere alle capacità di GPT-4. Inoltre, lo script mantiene una cronologia dei messaggi, essenziale per contestualizzare le risposte di GPT-4 durante una conversazione.

Funzione di Comunicazione con GPT-4

La funzione get_response_from_gpt4(user_input) rappresenta il cuore dello script. Riceve l’input vocale dell’utente, lo aggiunge alla cronologia dei messaggi, e richiede a GPT-4 di generare una risposta. Questa risposta viene poi passata per la conversione testo-voce.

Riconoscimento e Sintesi Vocale

Il riconoscimento vocale, gestito da vosk, traduce l’input vocale dell’utente in testo. Successivamente, gtts converte le risposte testuali di GPT-4 in output vocale, creando un’esperienza conversazionale fluida e naturale.

Riproduzione Audio

La risposta vocale generata viene riprodotta usando simpleaudio, permettendo all’utente di ricevere feedback immediato e vocale.

Flusso di Lavoro della Conversazione

Il flusso di lavoro generale dell’applicazione inizia con l’ascolto dell’input vocale dell’utente, seguito dal riconoscimento vocale e dalla generazione della risposta di GPT-4. Infine, la risposta viene comunicata all’utente in forma vocale.

Conclusione

Questo script Python è un esempio impressionante di come le tecnologie AI possano essere combinate per creare applicazioni interattive e coinvolgenti. L’uso di GPT-4, insieme al riconoscimento vocale e alla sintesi vocale, apre nuove strade per l’interazione uomo-macchina, rendendo la tecnologia più accessibile e personale.