Ein ChatGPT-SMS-Chatbot mit OpenAI und Node.js

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 Annahmen hinterfragen, Geschichten, Poesie erzeugen und vieles mehr. Lesen Sie weiter, um zu erfahren, wie Sie einen ChatGPT-ähnlichen SMS-Chatbot mit der OpenAI-API ,Twilio Programmable Messaging, dem Twilio Serverless Toolkit und Node.js erstellen.

ChatGPT und Node.js

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.“

Browser-Interaktion mit ChatGPT

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 Node.js-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. OpenAI-Konto: Erstellen Sie hier ein OpenAI-Konto
  4. Node.js muss installiert sein – Laden Sie Node.js hier herunter

Erste Schritte mit OpenAI

Nachdem Sie ein OpenAI-Konto erstellt haben, benötigen Sie einen API-Schlüssel. Sie können hier einen OpenAI-API-Schlüssel erhalten, indem Sie auf + Create new secret key (Neuen geheimen Schlüssel erstellen) klicken.

openAI API Schlüssel in der Konsole

 

Speichern Sie diesen API-Schlüssel für später, um die OpenAI-Clientbibliothek in Ihrer Twilio Function zu verwenden.

Erste Schritte mit dem Twilio Serverless Toolkit

Das Serverless Toolkit ist ein CLI-Tool der Twilio CLI, mit dem Sie Twilio Functions lokal entwickeln und in Twilio Functions & Assets bereitstellen können. Wenn die Twilio-CLI noch nicht installiert ist, führen Sie die folgenden Befehle in der Befehlszeile aus, um diese und das Serverless Toolkit zu installieren:

npm install twilio-cli -g
twilio login
twilio plugins:install @twilio-labs/plugin-serverless

Legen Sie danach Ihr neues Projekt an und installieren Sie das openai Package:

twilio serverless:init chatgpt-sms --template=blank
cd chatgpt-sms
npm install openai

Festlegen einer Umgebungsvariable mit Twilio Functions and Assets

Öffnen Sie Ihre .env-Datei für Ihr Functions-Projekt in Ihrem Stammverzeichnis und fügen Sie die folgende Zeile hinzu:

OPENAI_API_KEY=<YOUR-OPENAI-API-KEY>

Ersetzen Sie YOUR-OPENAI-API-KEY mit dem OpenAI-API-Schlüssel, den Sie sich zuvor notiert haben. Sie können jetzt auf diesen API-Schlüssel in Ihrem Code mit context.OPENAI_API_KEY zugreifen.

Erstellen einer Twilio Function mit JavaScript

Erstellen Sie eine neue Datei im /functions Verzeichnis chatgpt.js, das den folgenden Code enthält:

const { Configuration, OpenAIApi } = require("openai");
exports.handler = async function (context, event, callback) {
 const twiml = new Twilio.twiml.MessagingResponse();
 const inbMsg = event.Body.toLowerCase().trim();

 const openai = new OpenAIApi(new Configuration({
   apiKey: process.env.OPENAI_API_KEY
 }));
  const response = await openai.createCompletion({
   model: "text-davinci-003",
   prompt: inbMsg,
   temperature: 0.7, // Eine Zahl zwischen 0 und 1, die bestimmt, wie viele kreative Risiken das Model beim Generieren von Text eingeht.
   max_tokens: 3000, // Maximale Länge der Antwort in "Tokens"
   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.
 });
 twiml.message(response.data.choices[0].text);
 callback(null, twiml);
};

Dieser Code importiert openAI und erstellt eine asynchrone Funktion, die ein Twilio Messaging Response-Objekt und eine Variable inbMsg aus der eingehenden Textnachricht enthält, in die Benutzer:innen Text eingeben. Anschließend nutzt er den Configuration-Konstruktor, der denapiKeyenthält. Die Funktion ruft dann die openai.createCompletion-Funktion auf, um mit einem ihrer Sprachmodelle Texte basierend auf inbMsg zu generieren. Das model gibt das OpenAI-Sprachmodell an, das verwendet wird, um eine Antwort für den Text zu generieren. In diesem Tutorial verwenden Sie das text-davinci-003-Sprachmodell. Es handelt sich um das gleiche Sprachmodell, das auch im Hintergrund von ChatGPT verwendet wird. Die OpenAI-Dokumente listen die anderen Sprachmodelle auf, die zur Verwendung angeboten werden.
Wir weisen dem Funktionsaufruf außerdem die SMS-Eingabe mittels der prompt-Eigenschaft zu.
Die optionalen Parameter max_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 den vollständigen Quellcode auf GitHub hier einsehen.

Konfigurieren der Function mit einer Twilio-Telefonnummer

Um Ihre Function in der Twilio Cloud zu installieren, führen Sie sie twilio serverless:deploy aus dem Stammverzeichnis chatgpt-sms aus. Die URL Ihrer Function sollte unten in Ihrem Terminal angezeigt werden:

Twilio Function Terminalausgabe mit URL

Wählen Sie die Function-URL aus, die Ihrer App entspricht (die auf /chatgpt endet), und konfigurieren Sie eine Twilio-Telefonnummer wie unten gezeigt:

Wählen Sie die Twilio-Nummer aus, die Sie in Ihrer Twilio Konsole erworben haben, und scrollen Sie hinunter zum Abschnitt Messaging. Fügen Sie den Link in das Textfeld für den WebHook A MESSAGE COMES IN (EINGEHENDE NACHRICHT) ein, um sicherzustellen, dass er auf HTTP POST eingestellt ist. Wenn Sie auf Save (Speichern) klicken, wird Folgendes angezeigt:

Twilio Konsole mit Konfiguration der Telefonnummer

Der Service (Dienst) ist der Serverless-Projektname, die Umgebung bietet nur eine Auswahloption und der Function-Pfad ist der Dateiname, also /chatgpt. Nehmen Sie nun Ihr Telefon und stellen Sie eine Frage oder Aufforderung an Ihre Twilio-Nummer.

SMS Interaktion mit ChatGPT

Was kommt als Nächstes bei Twilio Serverless und ChatGPT?

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 und vieles mehr. Lassen Sie mich wissen, woran Sie mit OpenAI arbeiten (bitte auf Englisch, da dieser Artikel übersetzt wurde). Ich bin gespannt, was Sie damit entwickeln.