Erwägen Sie die Erstellung einer Anwendung für die Arbeit mit ChatGPT. Ihre Aufgabe wird es sein, Sprachnachrichten über Telegram zu empfangen, sie in Text umzuwandeln, sie an ChatGPT zu übertragen und eine Antwort an Telegram zu senden. Während des Erstellungsprozesses müssen Sie die folgenden Schritte durchlaufen:
- Erstellen eines Bots für Telegram und dessen Grundkonfiguration.
- Empfangen einer Datei mit einer Sprachnachricht (Telegram verwendet das Format .oga ).
- Konvertierung der Datei von oga nach mp3.
- Übermittlung der Datei mp3 an den Whisper Dienst zur Konvertierung in Text.
- Senden eines empfangenen Textes an ChatGPT.
- Senden einer Antwort von ChatGPT an einen Benutzer in Telegram.
Erstellen eines Bots für Telegram und dessen grundlegende Einrichtung
Alles beginnt mit der Registrierung eines Bots. Und dafür verwendet Telegram seinen eigenen speziellen Bot - BotFather. Sie müssen ihn anschreiben und einfache, aufeinander folgende Schritte durchlaufen.
Als Ergebnis sollten Sie einen Link zu Ihrem Bot und ein Token für Anfragen an seine API haben.
Jetzt können Sie mit der Einrichtung des Bots in AppMaster. Am einfachsten geht das, indem Sie das entsprechende Modul installieren. Sie müssen es nur in der Liste der Module auswählen und Ihr API-Token in den Einstellungen angeben.
Die notwendigen Modelle werden automatisch in Ihrem Projekt erstellt, Blöcke für die Arbeit mit Telegram erscheinen, ebenso wie der grundlegende Telegram-Geschäftsprozess Telegram: Echo. Es lohnt sich, genau hinzusehen und das Prinzip der Arbeit zu verstehen.
Am Eingang empfängt es eine Nachricht von Telegram (ModellMessage ). Er enthält den Text der gesendeten Nachricht (text), sowie das Modell chat, aus dem man die Absenderkennung (id) entnehmen kann. Der letzte Block Telegram: Send Message sendet die empfangene Nachricht an den Absender zurück, allerdings im Namen des Bots.
Sie können diesen Geschäftsprozess für die ersten Tests des Bots und die Kommunikation mit ihm verwenden. Zu diesem Zweck müssen Sie einen Endpunkt erstellen, der Informationen empfängt und einen Geschäftsprozess startet.
Bei der Erstellung des Endpunkts ist es wichtig, dass Sie die Option Middleware Token Auth. Der Endpunkt muss für die Verwendung ohne Autorisierung offen sein.
Das Funktionsprinzip des Telegram Bot ist recht einfach - alle Nachrichten, die an ihn gesendet werden, gehen an einen speziellen Webhook, der sie automatisch weiterleiten und an den Endpunkt Ihrer Wahl für weitere Aktionen senden kann.
Dementsprechend bleibt der letzte Schritt, um den Bot zu aktivieren - Sie müssen diesen Endpunkt in Telegram registrieren und angeben, dass dieser Bot mit ihm verbunden werden soll. Dazu müssen Sie eine POST-Anfrage mit der vollständigen Endpunkt-URL und der Angabe Ihres Bot-Tokens anstelle von {Bot API Token} an die Adresse
https://api.telegram.org/bot{Bot API Token}/setWebhook
Wenn Sie eine solche Nachricht als Antwort erhalten, wurde alles richtig gemacht.
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
Der Bot ist einsatzbereit, Sie können ihm eine Nachricht senden und erhalten sie zurück.
Empfangen einer Datei mit einer Sprachnachricht
Das Modul Telegram ist in erster Linie für die Arbeit mit Textnachrichten konzipiert. Unsere Aufgabe ist es, eine Datei mit einer Sprachnachricht zu erhalten. Mit AppMaster können Sie dieses Problem leicht lösen. Zunächst müssen wir analysieren, was wir normalerweise von Telegram erhalten, um die Struktur der Nachricht zu analysieren. Der Get Request Body Block ist für diesen Zweck gedacht. Er macht es überflüssig, die Struktur der Anfrage im Voraus zu spezifizieren, und ermöglicht es Ihnen, die gesamte Anfrage unabhängig von ihrem Inhalt zu empfangen. Dieser Block gibt das Abfrageergebnis als eine Reihe von Bytes zurück, und Sie können den To String Block verwenden, um das Ergebnis in einer für den Menschen lesbaren Form zu präsentieren und es in Protokollen (Write to Log Block) zur weiteren Analyse speichern.
Wir sind an zwei Parametern aus der gesamten Anfrage interessiert:
Sender ID - in der Anfrage angegeben als "id":300493858
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"
Sie können Ihr eigenes Modell erstellen, das der Anfrage entspricht, und es verwenden, um die erforderlichen Felder zu erhalten. Schneller geht es jedoch, wenn Sie einen regulären Ausdruck erstellen (Regex) zu erstellen und diesen zu verwenden. Um dies zu tun, nimmt der String Match Regex Block sowohl den Ausdruck selbst als Eingabe, als auch die Zeichenkette, in der die Übereinstimmung mit dem gegebenen Ausdruck überprüft werden soll.
Im ersten Fall ist der Ausdruck "id":"\d+
Als Ergebnis erhalten wir die Zeichenkette "id":300493858, aus der wir das zusätzliche ("id":) mit Hilfe des Replace String Block entfernen und nur den Bezeichner selbst übrig lassen.
Im zweiten Fall ist das Prinzip genau dasselbe, aber es wird ein etwas komplexerer Ausdruck verwendet: "file_id":"[^"]+
Jetzt haben wir die Absenderkennung und die Dateikennung, und wir können diese verwenden, um die Datei selbst zu erhalten. Zu diesem Zweck müssen Sie sich an Telegram API wenden. Dies wurde bereits bei der Registrierung des Endpunkts des Bots getan. Jetzt müssen Sie eine ähnliche Anfrage stellen, um die Datei zu erhalten. {File ID} in der Anfrage-URL muss durch die empfangene Datei-ID ersetzt werden.
https://api.telegram.org/bot{Bot API Token}/setWebhook/getFile?file_id={File ID}
Um eine Anfrage zu senden und ihr Ergebnis zu erhalten, verwenden wir den HTTP Request Block und geben dabei URL und Method = GET als Parameter dafür.
Aus der empfangenen Antwort können Sie den relativen Pfad zur Datei herausfinden, er wird im Parameter "file_path"Parameter übergeben. Dementsprechend können Sie mit dem nächsten regulären Ausdruck ("file_path":"[^"]+) den gewünschten Wert extrahieren und mit "https://api.telegram.org/file/bot{Bot API Token}/" verbinden, um den vollständigen Link zur Datei zu erhalten.
Datei konvertieren von OGA nach MP3
Die Datei wird empfangen, aber das Hindernis ist, dass der Whisper Dienst nicht die Arbeit mit dem OGA Format unterstützt. Sie müssen in eines der entsprechenden Formate konvertieren.
Als Beispiel wird der Zamzar (dessen kostenloser Plan die Möglichkeit bietet, 100 Konvertierungen pro Monat durchzuführen) und die Konvertierung in MP3 verwendet.
Einzelheiten können Sie der Dokumentation des Dienstes entnehmen oder einen anderen ähnlichen Dienst verwenden. Wir werden die Arbeit mit diesem Dienst nicht im Detail analysieren, sondern nur den Teil betrachten, der sich direkt auf die Implementierung von AppMaster bezieht.
Zuallererst benötigt die Anfrage die richtigen Authentifizierungsdaten. Sie müssen im Basic Authentication Format angegeben werden. Dazu müssen Sie einen Header mit Werten in der Anfrage übergeben:
Key = 'Authorization'
Value = 'Basic '+ Benutzer-ID und Passwort getrennt durch ":" im base64 Format
Der API-Schlüssel, den Sie bei der Registrierung für den Dienst erhalten, ist die Benutzer-ID. Sie müssen ihr ":" hinzufügen und sie im Format Base64 kodieren, indem Sie den To Base64 Block. Das Ergebnis muss in eine Kopfzeile umgewandelt werden (Make Key-Value (String) Block).
Der nächste Schritt ist die Erstellung eines Modells für die Abfrage im Datenbankdesigner. Die Anfrage muss im Multipart Form Format gesendet werden, bzw. es ist notwendig, ein Modell der Form dieser Anfrage zu erstellen. In unserem Beispiel besteht das Modell aus drei Feldern des Typs String:
- source_file - dem vollständigen Pfad zur Quelldatei (wurde im vorherigen Schritt gelernt).
- source_format - dem Format der Quelldatei, in diesem Beispiel ist es ein fester Wert "ogg".
- target_format - Zielformat für die Konvertierung. Sie können jedes Format wählen, das von Whisper unterstützt wird. Nehmen wir "mp3" als Beispiel.
Im Geschäftsprozess-Editor müssen Sie den Make Block verwenden, um die Modelldaten auszufüllen und sie als POST Anfrage an https://sandbox.zamzar.com/v1/jobs/ zu senden, indem Sie den HTTP Request Block (geben Sie unbedingt Serialize request body = Multipart Form).
Es ist zu beachten, dass diese Anfrage nicht die konvertierte Datei zurückgibt, sondern nur eine Aufgabe zur Konvertierung erstellt. Das Ergebnis müssen Sie separat beantragen; dazu benötigen Sie die ID der erstellten Aufgabe. Diese ID muss aus dem Textkörper der Antwort auf die Anfrage gewonnen werden, und dazu sollte der bereits ausgearbeitete Prozess mit regulären Ausdrücken und dem Extrahieren des ID-Wertes durchgeführt werden.
Das Ergebnis der Konvertierung muss separat angewendet werden. Dazu sind zwei weitere Anfragen erforderlich. Die erste ist, um herauszufinden, ob das Ergebnis fertig ist. Die zweite dient dazu, die fertige Datei abzuholen. Da wir den genauen Zeitpunkt der Bereitschaft nicht kennen, können wir eine Schleife einrichten, die in bestimmten Abständen (z. B. jede Sekunde) wiederholte Anfragen zur Überprüfung der Bereitschaft sendet.
Eine HTTP Request muss mit der Methode GET an die URL https://sandbox.zamzar.com/v1/jobs/{id} gesendet werden, wobei {id} die im vorigen Schritt erhaltene Task-ID ist. Dabei werden die gleichen Kopfzeilen wie bei der vorherigen Anfrage verwendet.
Anhand der empfangenen Antwort muss der Bereitschaftsstatus ermittelt werden. Wenn die Konvertierung abgeschlossen ist, enthält die Antwort "status": "successful" und für uns ist dies ein Signal, dass wir die Schleife abschließen und weitermachen können.
Neben dem Status muss die Antwort auch die ID der fertigen Datei enthalten ("target_files":[{"id":). Sie muss extrahiert werden, um den endgültigen Link zur Datei in der Form https://sandbox.zamzar.com/v1/files/{ID}/content
Da der Empfang einer Datei nur für autorisierte Benutzer möglich ist, müssen Sie eine HTTP Request mit denselben Kopfzeilen wie bei den vorherigen Anfragen ausführen.
Als Ergebnis der Anfrage erhält man den Inhalt der Datei, die mit einem Namen versehen und zur weiteren Verwendung gespeichert werden muss.
Senden einer MP3 -Datei an Whisper zur Konvertierung in Text
Nun ist alles bereit für den nächsten Schritt - das Senden einer Datei mit einer Sprachnachricht zur Erkennung. Dazu ist eine weitere Anfrage im Multipart Form Format. Im Gegensatz zum vorherigen Beispiel muss die Anfrage jedoch die Datei selbst übertragen und nicht einen Link zu ihr.
Ein Modell für eine solche Anfrage kann im External HTTP Request Abschnitt erstellt werden. In diesem Fall können Sie keine vollständige Anfrage erstellen, sondern sich nur auf die Erstellung eines Modells für den Anfragekörper beschränken. Das Modell selbst besteht aus zwei Parametern:
- File (Virtual File type) - die gleiche Datei, die erkannt werden muss.
- model (Typ String) - hier geben wir den Wert whisper-1.
Für die Anfrage ist es außerdem notwendig, einen Schlüssel für die Arbeit mit der OpenAI API zu erhalten und einen Autorisierungskopf des Bearer Token Typs.
Key = 'Authorization'
Value = 'Bearer '+ OpenAI API Key
Als Nächstes können Sie die eigentliche Anfrage POST zur Erkennung der Sprachnachricht an den Dienst Whisper unter der URL https://api.openai.com/v1/audio/transcriptions
Nach erfolgreicher Erkennung der Datei erhalten Sie eine Antwort in der Form {"text": "Hello world.”}
Senden eines empfangenen Textes an ChatGPT
Sie können weiterhin mit HTTP Request Blöcke verwenden, um eine Anfrage zu senden an ChatGPT. Um die API-Dokumentation zu erforschen, sowie um unabhängig Modelle für Anfragen und Antworten zu erstellen. Sie können aber auch eine einfachere Option in Form eines vorgefertigten Moduls von AppMaster für die Arbeit mit OpenAIverwenden, das im Bereich Module installiert werden muss.
In der minimal ausreichenden Version müssen Sie nur die Parameter des OAI ChatCompletionMessage Modells (role = user, content = zu versendende Nachricht) angeben, sie dem Array hinzufügen und eine Anfrage an ChatGPT mit dem OpenAI: Create Chat Completion Block (Parameter setzen model = gpt-4).
Als Ergebnis erhalten wir eine Antwort von ChatGPT. Wir lesen sie aus dem content Parameter des OAI ChatCompletionChoice Modells.
Senden einer Antwort von ChatGPT an einen Benutzer in Telegram
Der letzte Schritt besteht lediglich darin, das zu wiederholen, was bereits zuvor getan wurde - eine Nachricht an Telegram zu senden. Aber wenn wir damit begonnen haben, die Nachricht einfach an den Absender zurückzuschicken, hat diese Nachricht nun eine Reihe verschiedener Aktionen ausgelöst und das Ergebnis wird als Antwort von ChatGPT zurückgeschickt.
Bei der Entwicklung eines solchen Bots ist es eine Überlegung wert:
- Telegram Der Bot muss so arbeiten, dass jede von ihm gesendete Anfrage erfolgreich bearbeitet werden muss. Andernfalls wird er versuchen, sie viele Male zu wiederholen, was bedeutet, dass Sie im Falle von Problemen immer wieder eine Antwort erhalten werden. Achten Sie darauf, dass die Logik so aufgebaut ist, dass die Anfrage nicht zu einem Fehler führt und erfolgreich bearbeitet werden kann.
- Nicht alle Anfragen werden beim ersten Versuch wie gewünscht funktionieren. Sie müssen nach Fehlern suchen, und dafür sorgen Sie für Write to Log Blöcke. Sie sind nützlich, um zu überprüfen, ob jeder Block tatsächlich die Daten empfängt, die Sie übertragen wollten, und um das Ergebnis des Blocks zu analysieren und die Antwort im Detail zu untersuchen.
- Im Rahmen des Leitfadens sind wir davon ausgegangen, dass alle Anfragen vorhersehbar und erfolgreich sind und der Prozess ziemlich linear verläuft. In der Praxis wird es notwendig sein, eine Vielzahl von Optionen für Aktionen (z. B. was zu tun ist, wenn der Benutzer eine Textnachricht anstelle einer Sprachnachricht oder sogar eines Bildes sendet) und für die Fehlerbehandlung (Überprüfung des Status von HTTP-Anfragen, Berücksichtigung verschiedener Antwortoptionen) vorzusehen.