Fehlermeldung bei Python voice assistent mit Chat GPT?

Hallo,

ich wollte mir mal einen voice assistent coden, welcher chat gpt als Informationsquelle benutzt. Wenn ich aber dem voice assistent einen Befehl gebe kommt diese Fehlermeldung:

You tried to access openai.Completion, but this is no longer supported in openai>=1.0.0 - see the README at https://github.com/openai/openai-python for the API.

You can run `openai migrate` to automatically upgrade your codebase to use the 1.0.0 interface. 

Alternatively, you can pin your installation to the old version, e.g. `pip install openai==0.28`

A detailed migration guide is available here: https://github.com/openai/openai-python/discussions/742

Ich habe mir die Links auch durchgelesen, werde aber davon nicht schlauer. Wäre nett wenn jeman helfen könnte :D

Code:

import speech_recognition as sr

import pyttsx3

import openai

# OpenAI API-Zugangsdaten

openai.api_key = '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'

# Initialisierung der Spracherkennung

recognizer = sr.Recognizer()

microphone = sr.Microphone()

# Initialisierung der Text-to-Speech Engine

engine = pyttsx3.init()

# Funktion zum Abhören und Verarbeiten von Befehlen

def listen_for_wake_word():

  with microphone as source:

    print("Warten auf das Wakeword...")

    recognizer.adjust_for_ambient_noise(source)

    audio = recognizer.listen(source)

  try:

    print("Sprache wird erkannt...")

    command = recognizer.recognize_google(audio, language='de-DE')

    if 'Jarvis' in command:

      return True

    else:

      return False

  except sr.UnknownValueError:

    return False

# Funktion zum Verarbeiten von Befehlen

def process_question(question):

  try:

    response = openai.Completion.create(

      engine="davinci",

      prompt=question,

      temperature=0.7,

      max_tokens=50

    )

    return response.choices[0].text.strip()

  except Exception as e:

    return str(e)

# Funktion zum Beenden des Programms

def terminate_assistant():

  engine.say("Auf Wiedersehen!")

  engine.runAndWait()

  exit()

# Funktion zum Abhören und Verarbeiten von Benutzerantworten

def listen_for_command():

  with microphone as source:

    recognizer.adjust_for_ambient_noise(source)

    audio = recognizer.listen(source)

  try:

    print("Sprache wird erkannt...")

    response = recognizer.recognize_google(audio, language='de-DE')

    return response

  except sr.UnknownValueError:

    return None

  except sr.RequestError:

    return None

# Hauptprogramm

if __name__ == "__main__":

  while True:

    if listen_for_wake_word():

      engine.say("wie kann ich dir helfen?")

      engine.runAndWait()

      with microphone as source:

        print("Bitte stelle deine Frage")

        recognizer.adjust_for_ambient_noise(source)

        audio = recognizer.listen(source)

      try:

        print("Frage wird erkannt")

        question = recognizer.recognize_google(audio, language='de-DE')

        response = process_question(question)

        print("Antwort:", response)

        engine.say(response)

        engine.runAndWait()

      except sr.UnknownValueError:

        engine.say("Ich habe dich nicht verstanden.")

        engine.runAndWait()

      except sr.RequestError:

        engine.say("Es gab ein Problem mit der Spracherkennung.")

        engine.runAndWait()

      except Exception as e:

        engine.say(str(e))

        engine.runAndWait()

    else:

      continue

    

    # Überprüfe auf Beendigungsbefehl

    engine.say("Möchtest du fortfahren oder das Programm beenden?")

    engine.runAndWait()

    response = listen_for_command()

    if response and 'beenden' in response.lower():

      terminate_assistant()

    elif response and 'fortfahren' in response.lower():

      continue

    else:

      engine.say("Ich habe dich nicht verstanden. Möchtest du fortfahren oder das Programm beenden?")

      engine.runAndWait()

Python
Python .txt Datenbearbeitung?

Hallo an alle,

Es geht um folgendes.
Ich habe zwei .txt Dateien mit folgenden Inhalten:

Datei1:
Schlüssel: Y&XXXXXXXXXX,

Werte: Y:10_XXXXXXXX, Y:XXXXXXX, Y:XXXXXXXX, Y:XXXXX, Y:XX_XXXXX, Y:XX_XXXXXXXX, YH:XX_XXXXXXXXX, YH:XX_XXXXXXXXX, Y:10_XXXXXXXX, Y:XXXXXXX, Y:XXXXXXXX, Y:XXXXX, Y:XX_XXXXX, Y:XX_XXXXXXXX, YH:XX_XXXXXXXXX, YH:XX_XXXXXXXXX, Y:10_XXXXXXXX, Y:XXXXXXX, Y:XXXXXXXX, Y:XXXXX, Y:XX_XXXXX, Y:XX_XXXXXXXX, YH:XX_XXXXXXXXX, YH:XX_XXXXXXXXX, Y:10_XXXXXXXX, Y:XXXXXXX, Y:XXXXXXXX, Y:XXXXX, Y:XX_XXXXX, Y:XX_XXXXXXXX, YH:XX_XXXXXXXXX, YH:XX_XXXXXXXXX, Y:10_XXXXXXXX, Y:XXXXXXX, Y:XXXXXXXX, Y:XXXXX, Y:XX_XXXXX, Y:XX_XXXXXXXX, YH:XX_XXXXXXXXX, YH:XX_XXXXXXXXX

Datei2:

Schlüssel: User 1

Werte: Y&XXXXXXXX, Y&10_XXXXXXXX, Y:XXXXXXX, Y:XXXXXXXX, Y:XXXXX, Y:XX_XXXXX, Y:XX_XXXXXXXX, YH:XX_XXXXXXXXX, YH:XX_XXXXXXXXX

In beiden Dateien ist natürlich mehr Inhalt drin. Also bei beiden mehr als 1000 Zeilen.

In Datei2 stehen ganz viele User und deren Namen ist der Schlüssel. Diese User haben bestimmte Berechtigungen als Rollen. Jede Rolle wird als Wert (durch Komma getrennt) dargestellt in dieser Ansicht wie gezeigt.

Zwischen allen Schlüsseln/Werten ist jeweils eine Zeile frei.

Wichtig ist nur das die Werte hinter dem Komme zu dem Schlüssel darüber gehören.

Die Rollen sind immer so aufgebaut das sie mit einem X oder einem Y oder ganz selten auch mit einem YH: anfangen, was nach dem Doppelpunkt kommt, gibt nur an um was für Berechtigungen es sich handelt, das habe ich durch die vielen X dargestellt.

Die Rollen die ein & und kein : haben sind Sammelrollen die viele Einzelrollen (das sind die mit :) zusammenfassen. Hat ein User also eine Rolle mit einem & dann hat er alle Berechtigungen, die in dieser Sammelrolle enthalten sind.

Allerdings haben viel User Einzelrollen, die sie aber eigentlich schon durch eine Sammelrolle erhalten haben.

Um das zu bereinigen wollte ich ein Python Programm schreiben welches die Datei2 für jeden User (Schlüssel) durchgeht, sie dich rollen mit dem :, also die Einzelrollen nimmt, in Datei1 schaut, ob diese Einzelrolle in einer Sammelrolle enthalten ist, die ebenfalls dem User zugewiesen ist, was bedeuten würde er hätte zweimal diese Rolle.
Wenn das der Fall ist dann soll in einer neuen Datei (Erstmal egal ob csv oder txt, lieber aber direkt eine CSV Datei) eine neue User liste sein in der eben alle Einzelrollen entfernt wurden die der User halt schon durch eine Sammelrolle erhält.

Ich habe mich mehrere Stunden damit beschäftigt und auch versucht mit KI mir helfen zu lassen aber es funktioniert nicht. Entweder werden falsche Sachen geändert, erkannt oder gesucht oder es funktioniert gar nicht.

Aber eigentlich stell ich mir das gar nicht so unfassbar komplex vor.

Im Screenshot ist ein Beispiel zu sehen wie die txt Dateien aussehen.
Beide sind genauso aufgebaut nur das bei der einen halt der Schlüssel ein Name ist und bei der anderen ist der Schlüssel der Name der Sammelrolle, bei der einen ist der Wert alle Berechtigungen (Sammel und Einzelrollen) eines Users und bei der anderen sind der alle Einzelrollen aufgelistet, die die Sammelrolle enthält.

Und beide enthalten natürlich weitaus mehr Inhalte als nur das eine wie in dem Beispiel auf dem Bild zu sehen ist.

Vielleicht ist hier ja jemand der mir hier eine Lösung vorschlagen kann.
Danke VG

Bild zum Beitrag
Python

Meistgelesene Fragen zum Thema Python