ChatBotAI Vocale basato su ChatGPT4
Questo è il codice completo per creare un ChatBot AI con capacità di interazione vocale in italiano e basato sul modello GPT4 di OpenAI.
import openai
import pyaudio
import vosk
import sys
import os
import json
from apikeyserial import serialnumberapi
from gtts import gTTS
import simpleaudio as sa
from pydub import AudioSegment
# Configura la tua chiave API
openai.api_key = f"{serialnumberapi}"
# print (f"{serialnumberapi}")
def get_response_from_gpt3(user_input):
instruction = f"Rispondi in modo chiaro e conciso alla domanda: \'{user_input}\'"
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "Tu sei un assistente virtuale."},
{"role": "user", "content": instruction}
]
)
return response['choices'][0]['message']['content']
# Funzione per convertire testo in audio e riprodurlo
def text_to_speech(text, lang="it"):
tts = gTTS(text=text, lang=lang, slow=False)
tts.save("./response.mp3")
# Converti il file MP3 in WAV
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()
# Initialize Vosk
vosk.SetLogLevel(0)
model_path = "./vosk-model-it-0.22" # Replace with the path to your Italian model
vosk_model = vosk.Model(model_path)
# Initialize PyAudio
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16,
channels=1,
rate=16000,
input=True,
frames_per_buffer=8000)
stream.start_stream()
# Initialize Kaldi recognizer
rec = vosk.KaldiRecognizer(vosk_model, 16000)
print("Parla con il ChatBot. Pronuncia 'Stop' per uscire.")
while True:
try:
data = stream.read(4000, exception_on_overflow=False)
except IOError:
print("Errore di Buffer, mi scuso, riprova.")
continue
if rec.AcceptWaveform(data):
result = json.loads(rec.Result())
text = result.get("text", "").strip()
print(f"Tu: {text}")
if text.lower() == "stop":
print("ChatBot: Arrivederci!")
break
if text: # Check if text is not empty
prompt = text # More descriptive prompt
user_input = text
response_text = get_response_from_gpt3(user_input)
print(f"ChatBot: {response_text}")
text_to_speech(response_text)