Rozważ stworzenie aplikacji do pracy z ChatGPT. Jej zadaniem będzie odbieranie wiadomości głosowych za pośrednictwem strony Telegram, konwertowanie ich na tekst, przekazywanie ich na stronę ChatGPT, a także odsyłanie odpowiedzi na stronę Telegram. Podczas procesu tworzenia trzeba będzie przejść przez następujące kroki:
- Stworzenie bota dla Telegram i jego podstawowa konfiguracja.
- Odbiór pliku z wiadomością głosową (Telegram używa formatu .oga ).
- Konwersja pliku z oga na mp3.
- Przekazanie pliku mp3 do Whisper serwisu w celu konwersji na tekst.
- Wysłanie otrzymanego tekstu na adres ChatGPT.
- Wysłanie odpowiedzi z ChatGPT do użytkownika w Telegram.
Tworzenie bota dla Telegram i jego podstawowa konfiguracja
Wszystko zaczyna się od samego faktu rejestracji bota. A do tego Telegram używa swojego specjalnego bota -. BotFather. Trzeba do niego napisać i przejść przez proste, sekwencyjne kroki.
W efekcie powinieneś mieć link do swojego bota i token do żądań do jego API.
Teraz możesz przejść do skonfigurowania bota w AppMaster. Najłatwiej jest to zrobić poprzez zainstalowanie odpowiedniego modułu. Wystarczy, że wybierzesz go na liście modułów i w ustawieniach podasz swój token API.
W Twoim projekcie zostaną automatycznie utworzone niezbędne modele, pojawią się bloki do pracy z Telegram, a także podstawowy proces biznesowy Telegrama Telegram: Echo. Warto dokładnie rozważyć i zrozumieć zasadę pracy.
Na wejściu otrzymuje wiadomość od Telegram ( modelMessage ). Zawiera tekst wysłanej wiadomości (text), a także model chat, z którego można uzyskać identyfikator nadawcy (id). Ostatni blok Telegram: Send Message wysyła otrzymaną wiadomość z powrotem do nadawcy, ale w imieniu bota.
Możesz wykorzystać ten proces biznesowy do wstępnego testowania bota i komunikacji z nim. Aby to zrobić, musisz stworzyć punkt końcowy, który będzie odbierał informacje i uruchamiał proces biznesowy.
Podczas jego tworzenia ważne jest, aby wyłączyć Middleware Token Auth. Endpoint musi być otwarty do użytku bez autoryzacji.
Zasada działania bota Telegram jest dość prosta - wszystkie wiadomości, które zostaną do niego wysłane, trafiają do specjalnego webhooka, który może automatycznie przekazać je dalej i przesłać do wybranego przez użytkownika endpointu w celu podjęcia dalszych działań.
Zgodnie z tym, ostatnim krokiem pozostaje aktywacja bota - trzeba zarejestrować ten endpoint w Telegram i wskazać, że ten bot ma być z nim powiązany. Wymaga to wysłania POST-request z pełnym adresem URL endpointu i wskazaniem swojego bot tokena zamiast {Bot API Token} na adres
https://api.telegram.org/bot{Bot API Token}/setWebhook
Jeśli w odpowiedzi otrzymasz taką wiadomość, to znaczy, że wszystko zostało wykonane poprawnie.
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
Bot jest gotowy do pracy, możesz wysłać mu wiadomość i otrzymać ją z powrotem.
Odbieranie pliku z wiadomością głosową
Moduł Telegram jest przeznaczony przede wszystkim do pracy z wiadomościami tekstowymi. A nasze zadanie polega na otrzymaniu pliku z wiadomością głosową. Dzięki AppMaster, można łatwo rozwiązać ten problem. Najpierw musimy przeanalizować to, co zwykle otrzymujemy z Telegram, aby sparsować strukturę wiadomości. Blok Get Request Body blok jest do tego przeznaczony. Eliminuje on konieczność wcześniejszego określenia struktury zapytania i pozwala na otrzymanie całego zapytania, niezależnie od jego treści. Blok ten zwraca wynik zapytania w postaci zestawu bajtów, a Ty możesz użyć bloku To String do przedstawienia wyniku w formie czytelnej dla człowieka, jak również zapisać go w logach (Write to Log block) w celu dalszej analizy.
Interesują nas dwa parametry z całego żądania:
Sender ID - określone w żądaniu jako. "id":300493858
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"
Możesz stworzyć własny model pasujący do żądania i użyć go do uzyskania wymaganych pól. Szybciej jednak będzie stworzyć wyrażenie regularne (Regex) i użyć go. Aby to zrobić, the String Match Regex przyjmuje jako wejście samo wyrażenie, jak również ciąg znaków, w którym będzie sprawdzane dopasowanie do danego wyrażenia.
W pierwszym przypadku wyrażenie to. "id":"\d+
W rezultacie otrzymujemy ciąg "id":300493858, z którego będziemy musieli usunąć dodatkowy ("id":) za pomocą bloku Replace String i pozostawić tylko sam identyfikator.
W drugim przypadku zasada jest dokładnie taka sama, ale zastosowano nieco bardziej złożone wyrażenie: "file_id":"[^"]+
Teraz mamy id nadawcy oraz id pliku i możemy to wykorzystać do uzyskania samego pliku. Aby to zrobić, należy zwrócić się do Telegram API. Zostało to już zrobione wcześniej podczas rejestracji punktu końcowego bota. Teraz należy wykonać podobne żądanie, aby otrzymać plik. {File ID} w adresie URL żądania należy zastąpić otrzymanym identyfikatorem pliku.
https://api.telegram.org/bot{Bot API Token}/setWebhook/getFile?file_id={File ID}
Aby wysłać żądanie i odebrać jego wynik, używamy bloku HTTP Request podając adres URL i Method = GET jako parametry dla niego.
Z otrzymanej odpowiedzi można dowiedzieć się o względnej ścieżce do pliku, jest ona przekazywana w parametrze "file_path" parametrze. Odpowiednio, używając następnego wyrażenia regularnego ("file_path":"[^"]+) można wyodrębnić pożądaną wartość i połączyć z "https://api.telegram.org/file/bot{Bot API Token}/", aby uzyskać pełny link do pliku.
Konwersja pliku z OGA na MP3
Plik został odebrany, ale przeszkodą jest to, że usługa Whisper serwis nie obsługuje pracy z formatem OGA formatem. Musisz przekonwertować na jeden z odpowiednich formatów.
Jako przykład można podać Zamzar używana jest usługa (jej darmowy plan wspiera możliwość wykonania 100 konwersji miesięcznie) i konwersja do MP3.
Po szczegóły można sięgnąć do jego dokumentacji lub skorzystać z innej podobnej usługi. Nie będziemy szczegółowo analizować pracy z nim, a weźmiemy pod uwagę tylko tę część, która odnosi się bezpośrednio do wdrożenia AppMaster.
Przede wszystkim żądanie będzie wymagało poprawnych danych uwierzytelniających. Muszą być one dostarczone w tzw. Basic Authentication formacie. W tym celu należy przekazać w żądaniu nagłówek o wartościach:
Key = 'Authorization'
Value = 'Basic '+ ID użytkownika i hasło oddzielone ":" w base64 formacie
Identyfikatorem użytkownika jest klucz API uzyskany podczas rejestracji w serwisie. Należy dodać do niego ":" i zakodować go w formacie Base64 za pomocą. To Base64 blok. Wynik należy zamienić w nagłówek (Make Key-Value (String) blok).
Kolejnym krokiem jest stworzenie modelu dla zapytania w projektancie bazy danych. Zapytanie musi być wysłane w formacie Multipart Form formacie, odpowiednio konieczne jest przygotowanie modelu postaci tego żądania. W naszym przykładzie model składa się z trzech pól typu String:
- source_file - pełna ścieżka do pliku źródłowego (została poznana w poprzednim kroku).
- source_format - format pliku źródłowego, w tym przykładzie jest to stała wartość "ogg".
- target_format - format docelowy do konwersji. Możesz wybrać dowolny format, który jest obsługiwany przez Whisper. Użyjmy "mp3" jako przykładu.
W edytorze procesów biznesowych należy użyć Make aby wypełnić dane modelu i wysłać je jako żądanie POST do https://sandbox.zamzar.com/v1/jobs/ za pomocą bloku HTTP Request (pamiętaj, aby określić Serialize request body = Multipart Form).
Należy zauważyć, że to żądanie nie zwraca przekonwertowanego pliku, a jedynie tworzy zadanie do konwersji. O wynik należy ubiegać się osobno; do tego potrzebny jest identyfikator utworzonego zadania. Ten identyfikator należy uzyskać z ciała odpowiedzi na żądanie, a do tego należy wykonać już wypracowany proces z wykorzystaniem wyrażeń regularnych i wyodrębnieniem wartości id.
Wynik konwersji musi być zastosowany oddzielnie. Będzie to wymagało wykonania dwóch kolejnych zapytań. Pierwszym z nich jest sprawdzenie, czy wynik jest już gotowy. Drugi to odebranie gotowego pliku. Jednocześnie nie znamy dokładnego czasu gotowości, więc możemy zorganizować pętlę, która będzie wysyłała powtarzające się żądania sprawdzenia gotowości w określonych odstępach czasu (na przykład co sekundę).
Należy wysłać HTTP Request za pomocą metody GET na adres URL https://sandbox.zamzar.com/v1/jobs/{id}, gdzie {id} to id zadania uzyskane w poprzednim kroku. Wykorzystuje się przy tym te same nagłówki, co w poprzednim żądaniu.
Z otrzymanej odpowiedzi należy dowiedzieć się o stanie gotowości. Jeśli konwersja zostanie zakończona, odpowiedź będzie zawierała "status": "successful" a dla nas jest to sygnał, że możemy zakończyć pętlę i przejść dalej.
Oprócz statusu, odpowiedź musi zawierać identyfikator gotowego pliku ("target_files":[{"id":). Należy go wyodrębnić, aby uzyskać ostateczny link do pliku w postaci https://sandbox.zamzar.com/v1/files/{ID}/content
Jednocześnie otrzymanie pliku jest dostępne tylko dla autoryzowanych użytkowników, dlatego należy wykonać HTTP Request używając tych samych nagłówków co w poprzednich żądaniach.
W wyniku wykonania żądania zostanie uzyskana zawartość pliku, któremu należy nadać nazwę i zapisać do dalszego wykorzystania.
Wysłanie pliku MP3 do Whisper w celu konwersji na tekst
Teraz wszystko jest gotowe do kolejnego kroku - wysłania pliku z wiadomością głosową do rozpoznania. Będzie to wymagało kolejnego zapytania w Multipart Form formacie. Tylko w odróżnieniu od poprzedniego przykładu, żądanie będzie wymagało przesłania samego pliku, a nie linku do niego.
Model takiego żądania można stworzyć w. External HTTP Request sekcji. W tym przypadku nie można tworzyć żądania w całości, a ograniczyć się jedynie do stworzenia modelu ciała żądania. Sam model składa się z dwóch parametrów:
- File (Virtual File type) - ten sam plik, który musi zostać rozpoznany.
- model (type String) - tutaj określamy wartość whisper-1.
Ponadto, dla żądania konieczne jest uzyskanie klucza do pracy z OpenAI API oraz wygenerować nagłówek autoryzacji typu Bearer Token type.
Key = 'Authorization'
Value = 'Bearer '+ OpenAI API Key
Następnie można wysłać samo żądanie POST rozpoznania wiadomości głosowej do serwisu Whisper pod adresem URL https://api.openai.com/v1/audio/transcriptions
W wyniku pomyślnego rozpoznania pliku otrzymamy odpowiedź w postaci {"text": "Hello world.”}
Wysłanie odebranego tekstu na adres ChatGPT
Możesz nadal używać HTTP Request bloków, aby wysłać żądanie do ChatGPT. Aby poznać dokumentację API, a także niezależnie tworzyć modele dla żądań i odpowiedzi. Ale możesz też skorzystać z prostszej opcji w postaci gotowego modułu z AppMaster do pracy z OpenAI, który należy zainstalować w sekcji modules.
W minimalnie wystarczającej wersji wystarczy podać parametry m.in. OAI ChatCompletionMessage (role = user, content = wiadomość do wysłania), dodać je do tablicy i wysłać żądanie do ChatGPT za pomocą OpenAI: Create Chat Completion blokiem (set parameter model = gpt-4).
W efekcie otrzymujemy odpowiedź z ChatGPT. Odczytujemy ją z content parametru OAI ChatCompletionChoice model.
Wysłanie odpowiedzi z ChatGPT do użytkownika w Telegram
Ostatni krok to tylko powtórzenie tego, co już wcześniej zostało zrobione - wysłanie wiadomości do Telegram. Ale jeśli zaczęliśmy od zwykłego zwrócenia wiadomości z powrotem do nadawcy, to teraz ta wiadomość uruchomiła serię różnych akcji, a wynik jest zwracany jako odpowiedź z ChatGPT.
W procesie tworzenia takiego bota warto rozważyć, że:
- Telegram działa w taki sposób, że każde żądanie wysłane przez bota musi zostać pomyślnie przetworzone. W przeciwnym razie będzie on próbował powtarzać je wielokrotnie, co oznacza, że w razie jakichkolwiek problemów otrzymasz je ponownie i ponownie. Upewnij się, że logika jest zbudowana w taki sposób, że żądanie nie powoduje błędu i może zostać pomyślnie przetworzone.
- Nie wszystkie żądania będą działać zgodnie z przeznaczeniem przy pierwszej próbie. Będziesz musiał szukać błędów, a w tym celu zorganizuj do Write to Log bloki. Są one przydatne zarówno do sprawdzania, czy każdy blok rzeczywiście otrzymuje dane, które planowałeś przekazać, jak i do analizowania wyniku działania bloku i szczegółowego badania odpowiedzi.
- W ramach przewodnika założyliśmy, że wszystkie żądania są przewidywalne i zakończone sukcesem, a proces jest w miarę liniowy. W praktyce konieczne będzie zapewnienie wielu opcji działań (na przykład co zrobić, gdy użytkownik wyśle wiadomość tekstową zamiast głosowej lub nawet obrazek) i obsługi błędów (sprawdzanie stanu żądań HTTP, uwzględnianie różnych opcji odpowiedzi).