Hallo zusammen,
Ich bin ja immer noch ziemlich beeindruckt von dem was die KI kann (und auch nicht :-)).
Als neueste Herausforderung habe ich mir gestellt, einen eigenen Chatbot zu bauen, der Antworten gibt, die auf Daten beruhen, die es nicht im Internet zu finden gibt. Stattdessen soll dieser Bot meine eigenen Daten verwenden.
Hier schon mal ein kleiner Teaser, was dieser Bot aus meinem CV herauslesen kann:
Der Anfang
Ich habe ein Youtube Video gesehen, wie jemand einen Chatbot baut: How to Add Custom GPTs to Any Website in Minutes (OpenAI GPTs Tutorial)
Unten im Video in den Links findet man die Webseite von Liam Ottley.
https://www.liamottleyresources.com/portal
Ich habe mich dort registriert und (widerwillig) meine Emailadresse und Telefonnummer hinterlegt. Dennoch war es ein guter Tausch, denn seine Links und sein Code waren (im Prinzip) alle erreichbar.
Chat GPT Assistant (Backend)
OpenAI bietet neben dem normalen Chat zwei weitere Funktionen für zahlende User an: GPTs und Assistants. Beides funktioniert ähnlich, der Unterschied liegt darin, dass GPTs Tools sind, die auf der Openai Plattform konfiguriert, ausgeführt und verteilt/vermietet werden. Sie kosten mind. 18$ im Monat (so habe ich es verstanden).
Die Assistenten kosten deutlich weniger (je nach Verbrauch) und sind auch von Außerhalb via API Schnittstelle erreichbar.
Man kann sie manuell, oder wie ich weiter unten, via Code anlegen.
Hier ein kleiner Einblick auf die Preise in meiner Test-Phase:
Ich habe eine Visitenkarte hinterlegt und diese erst mal mit 5,95 USD belastet. Davon sind nach einer Woche 3.11 $ verbraucht. Wenn das Geld weg ist oder noch nicht bezahlt wurde, meldet die API:
RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details.', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
Das Backend For Frontend (BFF) auf Replit.com
In der Dokumentation von Liam Ottley sehe ich unter "How to Create OpenAI GPTs in 5 Minutes" einen Link zu replit.com.
Dies ist eine Plattform, wo Code hinterlegt ist, den man auch dort starten kann.
Der Inhalt des Links ist zwar leer, aber ich kann andere Projekte von https://replit.com/@LiamOttley finden.
Ich habe mir sein custom-gpts-to-website-template geklont:
Das Programm ist zwar nicht auf anhieb intuitiv, aber es funktioniert.
Wenn man es startet, läuft flask, ein HTTP Server für Python. Bitte nicht von "not found" irritieren lassen. Man kann auf den Flask Server mit einem Browser zugreifen, z.B. so:
(Ich habe den Code auch bei mir lokal ausgeführt, daher die 127.0.0.1).
Die API Schnittstelle
Da das BFF dafür ausgelegt wurde, von einem Chatbot abgefragt zu werden, lauscht es auf eine API Schnittstelle.
Mit Postman kann man einen POST Request an die API schicken (Man achte auf die doppelten Gänsefüße):
Das Frontend: Ein kleines Python Script
Postman ist natürlich nur ein Test. Komfortabler wird es mit einem Chatprogramm in Python, welches auf die API zugreift (erstellt von mir und der KI):
chat.py
import requests
# Definieren der URL des Flask-Servers
url = 'http://localhost:8080/chat' # Ersetzen Sie 'localhost:8080' durch Ihre tatsächliche URL
# Starten einer Endlosschleife für die Benutzereingabe
while True:
# Benutzereingabe abfragen
user_input = input("Geben Sie einen Satz ein (oder 'exit' zum Beenden): ")
# Überprüfen, ob der Benutzer das Programm beenden möchte
if user_input.lower() == 'exit':
break
# Definieren der Daten für die Anfrage
data = {
'thread_id': 'thread_PLGeY7s7ItgrGkvVDPzUXFZR',
'message': user_input
}
# Senden der POST-Anfrage an den /chat-Endpunkt
response = requests.post(url, json=data)
# Überprüfen, ob die Anfrage erfolgreich war
response.raise_for_status()
# Ausgabe der erhaltenen Daten
print("Antwort vom Assistenten:", response.json().get('response', 'Keine Antwort verfügbar'))
# Ende des Skripts
Standardmäßig kann man Fragen stellen zu "Smith' Solar Sales", einem Test-Word-Dokument, welches Liam ebenfalls mit seinem Code zur Verfügung stellt.
Ich wollte aber eigene Daten haben. Also habe ich folgenden Testballon geschrieben und (irgendwie, dazu weiter unten mehr) hochgeladen:
Data.txt, Inhalt:
These are the names of my chicken:
Gudrhuhn, Brhuhnhilde, Huhngrig, Jean Cool, Gelbfuß, Tonja, BlackBeauty, Hans, Baronin Bertholda.
Nach dem Start des chat.py Scripts kann ich an einer Bash-Konsole meine Fragen stellen.
Im Hintergrund sehe ich im BFF-Log die Kommunikation zum GPT-Assistenten:
Yeah! Das hat funktioniert. Nur der Assisten kennt die Namen meiner Hühner.
Eigene Daten hochladen
Nun möchte ich die KI ein wenig herausfordern und komplexere Dokumente hochladen.
Ich habe zuerst mein Curuculum Vitae (CV) als MarkDown-Dokument und danach den Inhalt meiner Homepage für unsere Ferienwohnung als PDF File hochgeladen.
Das Hochladen geht zwar über die Webseite von OpenAI, aber ich habe den Assistenten nicht dazu bewegen können, den Text zu interpretieren.
Daher habe ich die Möglichkeit des Tools von Liam genutzt:
Ich habe einfach die Datei assistant.json umbenannt in etwas anderes.
Dadurch wurde sie nicht mehr gefunden und der "else" Zweig aus der Funktion "create_assistant" trat in Kraft. Dieser legte mir einen neuen Assitenten an, eine neue Assitent_id und lud meine eingetragene Datei hoch.
Dann fragte ich nach Inhalten aus meinem CV und war baff:
Wow! Das ist für mich immer noch sehr beeindruckend. Es sind sicherlich auch alle anderen Prompts möglich wie "Erstelle ein Quiz" oder so was.
Dann wiederholte ich diese Prozedur für meine Ferienwohnung. Interesannt ist, dass zwar jedes mal beim Hochladen ein neuer Assistent erstellt wird, aber das alte Wissen nicht verloren geht:
Hier ist übrigens mein Code: https://replit.com/@mertensachim/custom-gpts-to-website-template
Fazit
Ich bin immer noch geflasht, was möglich ist. Ich kann nun einen eigenen Bot mit eigenen Daten laufen lassen. Die Variationen sind vielfältig (z.B. Chatbot auf einer Webseite). Mir reicht aber erst mal dieser Usecase.
Die Daten liegen dann natürlich bei OpenAI und ich weiß nicht, was die damit machen. Immerhin sind sie nicht öffentlich im Internet.
Für noch sicherere Varianten lohnt es sich einen lokalen Assitenten zu bauen. Dafür braucht man aber ordentlich Ressourcen. Dennoch ich habe schon irgendwo auf Youtube gesehen, dass das wohl auch geht.
Ich spiele noch was weiter damit und schaue mal, wohin es mich als nächstes trägt ;-)
Stay Tuned, Achim Mertens