OpenAI-Websuche mit Python + ChatGPT

Chatgpt + Python Websuche
Chatgpt + Python Websuche

OpenAI hat neulich ein Update rausgebracht, was uns jetzt endlich auch eine automatische Websuche möglich macht. Wie ihr diese Websuche in eure Projekte einbauen könnt, das zeige ich euch jetzt. Viel Spaß!

API-Key besorgen

Fangen wir vielleicht erst mal damit an, was ihr für dieses Projekt benötigt. Wichtig ist, dass ihr euch vorab schon einmal bei OpenAI registriert habt und euch einen API Schlüssel geholt habt. Falls das noch nicht geschehen sein sollte, hier aber auch noch mal eine Kurzfassung:

Zunächst gehen wir dafür in die Entwickler Plattform Von OpenAI. Dafür geht ihr einfach den Link zu Login (https://auth.openai.com/log-in), den ihr aber natürlich auch in der Video-Beschreibung findet. Dort loggt ihr euch ein.

Screenshot

Nach dem Login landet ihr dann im Dashboard, wo ihr auf der linken Seite Zugriff auf den Menüpunkt API-Keys habt. Da klickt ihr drauf und wählt anschließend „Create new secret key“. 

Screenshot

Ihr wählt einen hübschen oder sinnvollen Namen für euren Schlüssel aus und bestätigt das Ganze. Anschließend könnt ihr euch den Key in die Zwischenablage mitnehmen.

Screenshot

API-Key in Projekt ablegen

Mit diesem Schlüssel in der Zwischenablage wartet jetzt hier schon der erste Fallstrick auf uns. Wichtig ist nämlich, dass wir diesen Schlüssel nicht einfach in unseren Quellcode schreiben. Es ist üblich, so einen Schlüssel in eine eigene Datei zu schreiben, damit wir den Schlüssel nicht versehentlich mit anderen Personen teilen, wenn wir zum Beispiel unseren Quellcode weiterschicken.

Da gibt es jetzt 1000 Möglichkeiten, aber die einfachste ist es, den Schlüssel in eine .env-Datei zu legen. Ich lege mir als eine neue Datei an, gebe ihr den Namen .env und schreibe dort meinen Schlüssel rein.

API_KEY="sk-proj-1234"

Dort liegt er erstmal gut und wir können mit unserem eigentlichen Skript weitermachen.

Module installieren und importieren

Module stellen uns in Python Funktionen zur Verfügung, die in die eigentliche Programmiersprache nicht eingebaut sind. Und wir brauchen heute zwei solcher Zusatzmodule. Eins für die Verbindung zu OpenAI und eins zum Laden unseres API-Keys.

Beide können wir ganz einfach über das Terminal installieren:

# Im Terminal:
pip install python-dotenv
pip install openai

Aus diesem Modulen importieren wir jetzt alle Teile, die wir tatsächlich benötigen. aus openai benötigen wir die Klasse OpenAI.

Um unsere .env-Datei zu öffnen, brauchen wir load_dotenv. Und um dort dann den gewünschten Key rauszulesen noch die Funktion getenv.

from openai import OpenAI
from dotenv import load_dotenv
from os import getenv

Wie gerade schon erwähnt, müssen wir unseren Schlüssel jetzt noch verfügbar machen. Ich lade mir also die Datei und hole mir den Schlüssel aus der Datei.


from openai import OpenAI
from dotenv import load_dotenv
from os import getenv


load_dotenv()
API_KEY = getenv("API_KEY")

Und das war’s dann auch schon ein Vorbereitung und wir können unsere GPT-Funktion schreiben.

GPT-Websuche

Wir schreiben uns jetzt eine Funktion, die für uns unsere Unterhaltung mit OpenAI bündelt. Dieser Funktion gebe ich einen passenden Namen und lege fest, was meine Funktion entgegennehmen soll. Ich will die Funktion so designen, dass ich ihr später einfach nur noch die Prompt zuschicken muss und sie mir das Ergebnis zurückgibt.

def get_gpt_answer(prompt):      

In dieser Funktion lege ich mir jetzt einen Client an. Der Client ist für uns dann die direkte Schnittstelle zu OpenAI. Er will von uns auch nur eine Sache haben und zwar den API-Key. Klar, denn der wird ja zur Abrechnung gebraucht. Den Key haben wir ja schon eingelesen und können ihn also sofort nutzen.

def get_gpt_answer(prompt):                
    client = OpenAI(api_key=API_KEY)

Ebenso wie auf der Website von ChatGPT können wir mit OpenAI einen Chat aufmachen. Dafür lege ich jetzt fest, welche Nachrichten geschickt werden sollen.

Dabei muss ich festlegen, mit welcher Rolle die Nachricht geschickt wird und welchen Inhalt sie hat. Die Rolle ist natürlich jetzt gerade der User, denn wir schicken als Nutzer ja eine Anfrage. Und als Content übergeben wir die Prompt, die vorher unsere Funktion entgegengenommen hat.

def get_gpt_answer(prompt):                
    client = OpenAI(api_key=API_KEY)
    msg = [{"role": "user", "content": prompt}]

Über die Schnittstelle von Open Air soll uns jetzt dieser Chat vervollständigt werden. Wir stellen also eine Frage und wollen, dass uns eine Antwort zurückgeschickt wird. Das machen wir mit einer Chat-Completion. Die möchte von uns zwei Dinge haben, nämlich das gewünschte Modell und die Nachrichten des Chats. Als Modell nutzen wir das Modell für die Websuche und als Nachricht übergeben wir die Nachrichten, die wir gerade schon festgelegt haben.

response = client.chat.completions.create(
            model="gpt-4o-search-preview",
            messages=msg
    )

Antwort auslesen

Wenn wir im richtigen Format mit OpenAI gesprochen haben, dann bekommen wir sauber strukturiert eine Antwort zurück. Aus diesen Daten müssen wir uns allerdings nur ein ganz bestimmten Teil holen, nämlich den Inhalt der Nachricht, den wir als Antwort erhalten haben. Und den finden wir in den sogenannten Choices.

    text = response.choices[0].message.content
    return text

Diese Antwort geben wir jetzt zurück und damit ist unsere Funktion fertig. Die Funkton könnt ihr jetzt also ganz entspannt aufrufen und sie in alle eure Projekte mit einbauen.

if __name__ == "__main__":
    res = get_gpt_answer("Welches Datum ist heute?")
    print(res)
    

Ein kleines Beispielprojekt dazu gibt’s in Teil zwei des Videos. Ich freu mich, wenn ihr da gleich wieder mit dabei sind und ansonsten wünsche ich euch ganz viel Spaß beim Ausprobieren! Bleibt neugierig und bis gleich!

# 🎉 Fertiger Quellcode


from openai import OpenAI
from dotenv import load_dotenv
from os import getenv


load_dotenv()
API_KEY = getenv("API_KEY")


def get_gpt_answer(prompt):                
    client = OpenAI(api_key=API_KEY)
    msg = [{"role": "user", "content": prompt}]
    response = client.chat.completions.create(
            model="gpt-4o-search-preview",
            messages=msg
    )
    
    text = response.choices[0].message.content
    return text
   


if __name__ == "__main__":
    res = get_gpt_answer("Welches Datum ist heute?")
    print(res)