Ein ChatGPT-ähnlicher SMS-Chatbot mit OpenAI und Python

March 10, 2023
Autor:in:
Prüfer:in:

ChatGPT ging vor Kurzem viral. Dieser von OpenAI entwickelte Conversational Machine Learning (ML)-Chatbot kann Fragen beantworten, Zusammenfassungen geben, falsche Versprechen hinterfragen, Geschichten, Poesie erzeugen und vieles mehr. Lesen Sie weiter, um zu erfahren, wie Sie einen ChatGPT-ähnlichen SMS-Chatbot mit der OpenAI-API und Twilio Programmable Messaging mit Python erstellen.

ChatGPT

GPT-3 (kurz für „Generative Pre-Training Transformer 3“) ist ein NLP-Modell (Natural Language Processing), das für menschengenerierten Text trainiert ist. In Antwort auf eine Frage kann er menschenähnliche Texte in einer Vielzahl von Sprachen und Stilen generieren. Hier schicke ich ihm die folgende Aufforderung: „Gib mir einen Rap-Text über SendGrid.“

ChatGPT in einem Browser

Falls Sie es selbst testen möchten, können Sie ChatGPT hier im Browser testen.

Das GPT-3-Modell verwendet eine Transformer-Architektur. Dieses mehrschichtige neuronale Netzwerk eignet sich gut zur Verarbeitung sequenzieller Daten wie Text. Zu den sprachbezogenen Aufgaben, die es ausführen kann, gehören Übersetzung, Zusammenfassung und Beantwortung von Fragen sowie eine Textgenerierung, die mit der menschlichen vergleichbar ist.

Um ChatGPT in einer Python-Anwendung zu imitieren, müssen Sie OpenAI-API verwenden.

Voraussetzungen

  1. Ein Twilio-Konto: Melden Sie sich hier für ein kostenloses Twilio-Konto an
  2. Eine Twilio-Telefonnummer mit SMS-Funktionen: Erfahren Sie hier, wie Sie eine Twilio-Telefonnummer kaufen können
  3. Ein OpenAI-Konto: Erstellen Sie hier ein OpenAI-Konto
  4. Python installiert: Laden Sie Python hier herunter
  5. Mit dem praktischen Programm ngrok können Sie die unserer Python-Anwendung, die auf Ihrem Computer ausgeführt wird, mit einer öffentlichen URL verbinden, auf die Twilio zugreifen kann. Das ist für die Entwicklung des Chatbots notwendig, da sich Ihr Computer wahrscheinlich hinter einem Router oder einer Firewall befindet, sodass er nicht direkt über das Internet erreichbar ist. Übrigens, sie können ngrok auch automatisieren.

 

Konfiguration

Da Sie für dieses Projekt einige Python-Pakete installieren werden, müssen Sie ein neues Projektverzeichnis und eine virtuelle Umgebung erstellen.

Bei einem Unix- oder MacOS-System öffnen Sie ein Terminal und geben die folgenden Befehle ein:

mkdir chatgpt-sms-python
cd chatgpt-sms-python
python3 -m venv venv
source venv/bin/activate
pip install openai twilio flask python-dotenv

Wenn Sie diesem Tutorial unter Windows folgen, geben Sie die folgenden Befehle in eine Kommandozeile ein:

mkdir chatgpt-sms-python
cd chatgpt-sms-python
python -m venv venv
venv\Scripts\activate
pip install openai twilio flask python-dotenv

Der letzte Befehl verwendet pip, den Python-Paket-Installer, um die vier Pakete zu installieren, die Sie in diesem Projekt verwenden werden, nämlich:

Wie oben erwähnt, benötigen Sie für dieses Projekt einen OpenAI-API-Schlüssel. Nachdem Sie ein OpenAI-Konto erstellt haben, können Sie hier einen OpenAI-API-Schlüssel erhalten, indem Sie auf + Create new secret key (Neuen geheimen Schlüssel erstellen) klicken.

openAI API Schlüßel in der Konsole

 

Die Python-Anwendung muss Zugriff auf diesen Schlüssel haben. Dazu erstellen wir eine .env-Datei, in der Sie den API-Schlüssel sicher speichern können. Die Anwendung, die wir erstellen, kann diesen Schlüssel dann als Umgebungsvariable importieren.

Erstellen Sie eine .env-Datei im Stammverzeichnis Ihres Projekts und geben Sie die folgende Textzeile ein. Achten Sie dabei darauf, <OPENAI_API_KEY> durch Ihren tatsächlichen Schlüssel zu ersetzen:

OPENAI_API_KEY=<YOUR-OPENAI-KEY>

Achten Sie darauf, dass der OPENAI_API_KEY sicher ist und dass Sie Ihre .env-Datei nicht an einem öffentlichen Ort wie GitHub verfügbar machen.

Jetzt muss Ihre Flask-App im Internet sichtbar sein, damit Twilio Anfragen an die App senden kann. Das erreichen Sie mit ngrok. Mit installiertem ngrok führen Sie ngrok http 5000 in einer neuen Terminal-Registerkarte in dem Projektverzeichnis aus.

ngrok ausgeführt in einem Terminal

Sie sollten den oben abgebildeten Bildschirm sehen. Konfigurieren Sie mithilfe dieser ngrok-Weiterleitungs-URL Ihre Twilio-Nummer: Wählen Sie dazu Ihre Twilio-Nummer unter Active Numbers (Aktive Nummern) in Ihrer Twilio-Konsole und scrollen Sie zum Abschnitt „Messaging“. Ändern Sie dann die Weiterleitung der Telefonnummer, indem Sie die ngrok-URL in das A Message Comes In (Eine Nachricht geht ein) Textfeld einfügen:

Konfiguration der Telefonnummer um Nachrichten mit unserer Python app zu beantworten.

Klicken Sie auf Save (Speichern). Ihre Twilio-Telefonnummer wird jetzt so konfiguriert, dass sie Ihrem lokalen Webanwendungsserver auf Ihrem Computer zugeordnet wird. Erstellen wir nun diese Anwendung.

Erstellen Ihrer ChatGPT-ähnlichen SMS Python-App

Erstellen Sie in Ihrem Verzeichnis chatgpt-sms-python eine neue Datei mit dem Namen app.py.

Kopieren Sie den folgenden Code und fügen Sie ihn in app.py ein, um das ChatGPT-ähnliche Projekt zu starten. Der Code importiert die erforderlichen Module, legt den OpenAI-API-Schlüssel über die .env-Datei fest und erstellt eine Flask-App.

from flask import Flask, request
from twilio.twiml.messaging_response import MessagingResponse
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
app = Flask(__name__)

Fügen Sie direkt darunter den folgenden Code ein:

@app.route("/sms", methods=['POST'])
def chatgpt():
   inb_msg = request.form['Body'].lower()
   print(inb_msg)
   response = openai.Completion.create(
       model="text-davinci-003", # Name des Modells
       prompt=inb_msg,
       max_tokens=3000, # Maximale Länge der Antwort in "Tokens"
       temperature=0.7, # Eine Zahl zwischen 0 und 1, die bestimmt, wie viele kreative Risiken das Model beim Generieren von Text eingeht.
       frequency_penalty=0.7 # Zwischen 0 und 1. Je höher dieser Wert, desto größer ist die Anstrengung des Modells, sich nicht zu wiederholen.
   )
   # Start unserer TwiML Antwort
   resp = MessagingResponse()
   # Füge die Antwort ein
   resp.message(response["choices"][0]["text"])
   print(response["choices"][0]["text"])

   return str(resp)

if __name__ == "__main__":
   app.run(debug=True)

Innerhalb der /sms-Webhook erstellt dieser Code die Variable inbMsg aus der eingehenden, vom Nutzer:innen eingegebenen SMS. Anschließend wird die Methode openai.Completion.create aufgerufen, die basierend auf inbMsg Text generieren soll.
Um unsere Completion (oder Antwort) zu spezifizieren, geben Sie einige Parameter ein: model gibt das OpenAI-Sprachmodell an, das verwendet wird, um eine Antwort für den Text zu generieren, den wir mit dem prompt-Parameter zuweisen. In diesem Tutorial verwenden Sie das Sprachmodell text-davinci-003. Es handelt sich um das gleiche Sprachmodell, das auch im Hintergrund von ChatGPT verwendet wird. Die Open-AI-Dokumentation listet die anderen Sprachmodelle auf, die sie zur Verwendung anbieten.
Die optionalen Parametermax_tokens und frequency_penalty geben die maximale Länge der Antwort und den Aufwand an, den das Modell betreiben soll, um sich nicht zu wiederholen. Weitere optionale Eigenschaften zum Abschluss finden Sie hier in der OpenAI-Dokumentation.

Sie können die vollständige App auf GitHub hier ansehen.

Führen Sie die Python-Flask-App aus, indem Sie den folgenden Befehl ausführen.

python app.py

Nehmen Sie jetzt Ihr Telefon und senden Sie eine SMS mit einer Frage oder Aufforderung an Ihre Twilio-Telefonnummer, damit OpenAI sie beantworten kann.

SMS Interaktion mit ChatGPT

Was steht als Nächstes für Twilio und ChatGPT an?

Die Entwicklungsmöglichkeiten, die ChatGPT und Twilio bieten, sind endlos. Sie können einen SMS-Chatbot mit Python erstellen, einen KI-Freund anrufen, über WhatsApp mit einem KI-Kochprofi chatten, OpenAI API mit Node.js und Twilio Serverless verwenden und vieles mehr. Lassen Sie mich wissen, woran Sie mit OpenAI oder Python arbeiten (bitte auf Englisch, da dieser Artikel übersetzt wurde). Ich bin gespannt, was Sie damit entwickeln.