Warum bekomme ich den Wert „none“ von der API zurück?
Ich arbeite gerade an einem Sprachassistenten, der mit
gpt-3.5-turbo
kommunizieren soll, bekomme aber bei jeder Anfrage nur den Wert
none
zurück. Kann mir jemand sagen warum?
Mein Code:
import speech_recognition as sr
import openai
import pyttsx3
class ChatGPT:
def __init__(self, api_key, rolle):
openai.api_key = api_key
self.dialog = [{"role":"system", "content":rolle}]
def fragen(self, frage):
self.dialog.append({"role":"user","content":"frage"})
ergebnis = openai.ChatCompletion.create(
model='gpt-3.5-turbo',
messages=self.dialog
)
antwort = ergebnis.choices[0].message.content
self.dialog.append({"role":"assistant","content":antwort})
def gpt(frage):
if __name__ == '__main__':
API_KEY = "sk-..."
chat_gpt = ChatGPT(API_KEY, "...!")
antwort = chat_gpt.fragen(frage)
print(antwort)
return antwort
def mikrofon_zu_text():
# Initialisiere das Recognizer-Objekt
recognizer = sr.Recognizer()
recognizer.energy_threshold = 4000
while True:
# Öffne das Mikrofon für die Aufnahme
with sr.Microphone() as source:
print("wait...")
audio = recognizer.listen(source, timeout=5)
try:
# Versuche, den Text zu erkennen
text = recognizer.recognize_google(audio, language='de-DE')
if "Sprache" in text or "sprache" in text:
speak("Ich höre")
print("Aufnahme gestartet.")
audio = recognizer.listen(source, timeout=5)
transcription = recognizer.recognize_google(audio, language='de-DE')
print("input: " + transcription)
output = gpt(transcription)
speak(output)
except sr.RequestError as e:
print("Fehler bei der Spracherkennung: {0}".format(e))
except:
print("~")
def speak(text):
engine = pyttsx3.init() # object creation
voices = engine.getProperty('voices') #getting details of current voice
engine.setProperty('voice', voices[0].id) #changing index, changes voices. o for male
engine.say(text)
engine.runAndWait()
speak("test")
# Aufruf der Funktion
mikrofon_zu_text()
Ich dachte, es könnte mein API-Schlüssel sein, aber ich habe andere Konten als andere verwendet und mein Guthaben beträgt nicht weniger als 5 $. Ich habe auch versucht, die Variable zu verfolgen, aber sie ändert sich nur von
Null
zu
None
1 Antwort
Deine Methode fragen hat keinen expliziten Rückgabewert. Daher liefert sie den Standardwert None zurück.
Füge also noch eine return-Anweisung hinzu.
return antwort
Auch deine gpt-Funktion solltest du besser noch einmal überarbeiten, denn wenn die if-Anweisung nicht erfüllt werden kann, liefert sie ebenso nur None zurück.
Da wäre es eleganter, die if-Anweisung komplett aus dem Funktionskörper herauszunehmen und stattdessen in den globalen Kontext zu verschieben, wo die Funktion mikrofon_zu_text aufgerufen wird.
if __name__ == '__main__':
mikrofon_zu_text()
Auf diese Weise spart sich das Programm einen langen Weg, sollte die Bedingung nicht erfüllt werden können.