W początkowych dniach ChatGPT (co tak naprawdę nie było tak dawno temu), OpenAI ewoluowało z różnymi sposobami na dostęp do zewnętrznego internetu za pomocą ich LLM. Dzięki Code Interpreter, można było użyć Curl, aby pobrać zawartość strony internetowej. Dodatki niestandardowe również umożliwiały dostęp do zewnętrznych stron internetowych, ale wymagały specjalnych uprawnień od OpenAI. OpenAI dodało również możliwości przeglądania za pomocą Microsoft Bing, które również mogło uzyskać dostęp do internetu. Jednakże, wszystkie te opcje nie okazały się zrównoważone dla wzrostu i zapotrzebowania, jakiego użytkownicy i programiści wymagali od systemów OpenAI. OpenAI wprowadziło więc niedawno nową platformę o nazwie GPT Actions. GPT Actions umożliwiają tworzenie niestandardowych „GPT”, które mogą łączyć się z różnymi serwerami, aby zapewnić silniki AI na bazie istniejącej usługi internetowej.
Co to wszystko oznacza dla inżyniera sprzętu, który udaje, że rozumie, czym jest AI? Jak brzmi dla Ciebie sprzęt kontrolowany przez AI? Brzmi złowieszczo, potencjalnie niebezpiecznie i niesamowicie ekscytująco, wszystko w tym samym czasie! W tym artykule zagłębimy się w sposób konfiguracji serwera internetowego, który będzie połączony z Twoją akcją GPT. Przyjrzymy się nawet, jak umożliwić ChatGPT kontrolowanie IO na twoim Raspberry Pi, otwierając możliwości dla wielu nowych i ekscytujących projektów napędzanych przez AI, do których przeciętny inżynier nigdy nie miał dostępu... do teraz.
Zanim zagłębimy się w kod, ważne jest, aby zauważyć, że jest to dziedzina ewoluująca i szybko się zmieniająca. Jest to również technologia zależna od OpenAI i wymaga subskrypcji płatnej wersji ChatGPT. Prawie na pewno konkurenci będą wprowadzać swoje wersje „GPT Actions”, ale w chwili pisania tego artykułu, GPT Actions (moim zdaniem) były najprostszym sposobem na podłączenie w pełni funkcjonalnego Large Language Model (LLM) do twojej usługi internetowej.
Koncepcja usługi GPT Action jest dość prosta. Wskazujemy nasz niestandardowy GPT na usługę internetową, mówimy mu, jakie są wejścia i wyjścia, i pozwalamy mu działać. Implementacja jednak okazała się być o wiele bardziej skomplikowana, niż sobie wyobrażałem (co było impulsem do napisania tego artykułu). Oto diagram, jak działa ta usługa:
Rysunek 1: Interakcje serwera
Jak widać, dostarczamy OpenAI usługę internetową i dokument interfejsu (OpenAPI), który mówi nam, jak wchodzić w interakcje z naszym sprzętem. Zaczniemy od bardzo trywialnego przykładu, który nie obejmuje sprzętu, a następnie przejdziemy do prostego przykładu przełączania diody LED.
Dla inżynierów sprzętu, którzy są co najwyżej zaznajomieni z oprogramowaniem wbudowanym, ta sekcja może nie być dla nich tak trywialna, jak dla kogoś pracującego w IT lub infrastrukturze chmury. Jako inżynier elektryk i programista, konfiguracja serwera w pełni zabezpieczonego przez SSL była dla mnie nieco zagadką - głównie dlatego, że jest wiele sposobów, aby to zrobić. Niestety, jest to wymóg ze strony OpenAI, więc będziemy musieli się przez to przebić. Jeśli masz już bezpieczny sposób hostowania serwera internetowego (np. zakończenie TLS na twoim balanserze obciążenia), możesz pominąć tę sekcję. Podobnie jak ja, większość osób czytających ten artykuł będzie chciała eksperymentować ze swoim domowym serwerem. Pamiętaj, że nadal musisz otworzyć porty 80 i 443 na świat zewnętrzny przez ustawienia routera. Instrukcje, jak skonfigurować zaporę ogniową routera i przekierowanie portów, wykraczają poza zakres tego artykułu, ale w internecie znajdziesz wiele zasobów, które mogą ci w tym pomóc.
Aby zacząć, musimy zażądać certyfikatu SSL. Można to zrobić za pomocą płatnych usług (np. Cloudfare), darmowych usług stron trzecich (np. ZeroSSL) lub bezpośredniego mechanizmu za pomocą Let’s Encrypt. W tym poradniku będziemy korzystać z Let’s Encrypt za pośrednictwem certbot. Będziesz również potrzebować nazwy domeny, która wskazuje na adres IP twojego serwera. Możesz ją kupić lub uzyskać dynamiczną nazwę DNS za pomocą Cloudfare (płatne) lub No-IP (darmowe). Pamiętaj, że przekierowanie twojej dynamicznej nazwy DNS na twoje IP wymaga rekordu typu „A”, a nie przekierowania URL.
Aby zażądać 90-dniowego certyfikatu SSL od Let’s Encrypt, będziemy musieli użyć Certbot. Mają wykonywalne pliki, które można uruchomić na dowolnym systemie operacyjnym. Uruchomimy najprostsze polecenie, aby uzyskać certyfikaty. Oto polecenie do uzyskania certyfikatu:
sudo certbot certonly --standalone --agree-tos -v --preferred-challenges http -d twoja_domena.com
Jeśli korzystasz z Windows, nie użyjesz części sudo. Upewnij się, że zamienisz twoja_domena.com na zakupioną nazwę domeny lub tę, którą otrzymałeś od usługi dynamicznego DNS (np. No-IP). Zostanie wygenerowany folder zawierający serię plików certyfikatu. W tym momencie nadszedł czas, aby sklonować szablon repozytorium: https://gitlab.com/ai-examples/gpt-actions-webserver/. Przenieś wygenerowany przez certbot folder do repozytorium po jego sklonowaniu.
Aby poprawnie skonfigurować przekierowania SSL (tj. zapewnić szyfrowanie całego ruchu), będziemy chcieli skonfigurować Nginx. Utwórz folder w swoim repozytorium o nazwie nginx i nowy plik o nazwie default.conf. Korzystając z tego szablonu, zamień twoja_domena.com na nazwę domeny, która została użyta podczas żądania certyfikatu SSL za pomocą certbot:
server {
listen 80;
server_name your_domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name your_domain.com;
ssl_certificate /etc/ssl/certs/fullchain.pem;
ssl_certificate_key /etc/ssl/private/privkey.pem;
location / {
proxy_pass http://web:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
W tym momencie powinieneś mieć poprawnie skonfigurowane szyfrowanie SSL i gotowe do działania. Teraz skupimy się na podstawowej aplikacji internetowej, która może komunikować się z naszym niestandardowym GPT. Cały kod możesz znaleźć w repozytorium, więc zamiast skupiać się na szczegółach tego, co wchodzi w skład aplikacji, podkreślimy jak ją uruchomić.
Ze względu na charakter usługi internetowej z szyfrowaniem SSL, abstrahowałem aplikację internetową od faktycznego szyfrowania SSL. Aby to zrobić, potrzebujemy Nginx, który przekierowuje ruch i obsługuje certyfikaty, które otrzymaliśmy od Let’s Encrypt za pośrednictwem Certbot. Aby wszystko zamknąć w schludnym małym pakiecie, zawinąłem to w Docker Compose. Oznacza to, że potrzebujesz Docker, aby uruchomić ten przykład. Początkowe ustawienie może być nieco uciążliwe i żmudne, ale to właśnie w tym kierunku zmierza obecnie oprogramowanie, więc projekt tego typu jest świetnym miejscem, aby zapoznać się z Dockerem. Jako notatkę na marginesie, wszystkie opisy i instrukcje zostały umieszczone w pliku README.md w repozytorium. O ile wykonałeś poprzednie kroki, powinieneś być w stanie uruchomić docker compose up i wszystkie komponenty (tj. Nginx i aplikacja internetowa) powinny się zbudować i zacząć działać. Pamiętaj, że ta aplikacja to tylko prosty przykład typu „Hello World” i może być uruchomiona z dowolnego miejsca.
Po uruchomieniu komendy docker compose up powinieneś zobaczyć wynik podobny do tego:
Rysunek 2: Wyjście terminala
Powinieneś przetestować swoją aplikację, nawigując do http://localhost:8000. Zobaczysz wynik testu, który mówi {"status":"OK"}. Powinieneś zobaczyć ten sam wynik, nawigując do http://your_domain.com, gdzie „your_domain.com” to nazwa domeny, którą ustawiłeś w poprzednim kroku. Aby naprawdę zweryfikować, czy ustawienia routera i domeny są poprawne, powinieneś przetestować to poza swoją siecią (np. na swoim telefonie komórkowym z wyłączonym WiFi).
Teraz, gdy potwierdziliśmy, że nasz podstawowy serwer internetowy działa, musimy go połączyć z naszą niestandardową akcją GPT. OpenAI wymaga dokumentu o nazwie OpenAPI, który informuje ich serwery, jak wchodzić w interakcję z twoimi. Istnieje już plik openapi.json, który możesz skopiować i wkleić bezpośrednio do ustawień akcji GPT. Aby przejść do swoich ustawień, kliknij na swoje imię w lewym dolnym rogu, a następnie kliknij na „Moje GPT”:
Rysunek 3: Ustawienia ChatGPT
Kliknij na Utwórz GPT, a następnie na Utwórz nową akcję na dole:
Rysunek 4: Ustawienia konfiguracji akcji GPT
Po tym możesz skopiować i wkleić zawartość openapi.json do pola Schema:
Rysunek 5: Ustawienia schematu akcji GPT
Musisz zastąpić „https://your_doman.com” adresem swojej rzeczywistej domeny. W tym momencie pojawi się kilka przycisków testowych. Zakładając, że twój serwer internetowy działa, możesz kliknąć na przycisk testowy i zobaczyć, czy OpenAI może komunikować się z twoim serwerem internetowym. Jeśli wszystko się zgadza, możesz zapisać/opublikować GPT (w prawym górnym rogu) i zacząć z niego korzystać. Upewnij się, że publikujesz to tylko dla siebie, ponieważ łączy się to z prywatną siecią (przypuszczalnie w domu).
Uruchamianie GPT
Jeśli udało ci się przejść przez wszystkie powyższe sekcje i pomyślnie przetestować swoją akcję GPT, gratulacje! Teraz nadszedł czas, aby naprawdę wszystko przetestować. Rozpocząłem nową rozmowę ChatGPT, ale tym razem używając mojego niestandardowego GPT, który nazywam „Kontroler Instrumentów”. Dla uproszczenia poprosiłem o status mojego serwera:
Rysunek 6: Status serwera przy użyciu akcji GPT
A moje logi Nginx (z linii poleceń, gdzie uruchomiłem Docker Compose) również potwierdzają ruch:
"GET / HTTP/1.1" 200 15 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot" "-"
Mamy również generator liczb losowych:
Rysunek 7: Pobieranie losowych liczb z serwera za pomocą akcji GPT
Ruch na serwerze Nginx również potwierdza, że otrzymaliśmy 5 żądań z naszego serwera.
W tym momencie zademonstrowaliśmy, jak wykonywać akcje programowe za pomocą GPT, ale co z kontrolowaniem sprzętu? W tym artykule już wiele omówiliśmy, więc przyjrzymy się tylko podstawowemu przykładowi migającej diody LED.
Aby rozpocząć, wykonaj ten sam proces co powyżej na Raspberry Pi. Zauważ, że możesz użyć tego samego certyfikatu SSL i kodu repozytorium, którego użyłeś na swoim komputerze domowym (zakładając, że wszystkie urządzenia są w tej samej sieci). Gdy wszystko będzie gotowe do działania, uruchom następujące polecenie:
BUILD_TYPE=rpi docker compose up --build
Ten przykład zawiera teraz możliwość przełączania wbudowanej diody LED na pinie 26 (GPIO7). Możesz zmodyfikować numer pinu w app/RPiDemoApp.py. Będziesz także musiał zaktualizować schemat OpenAPI niestandardowego GPT za pomocą dostarczonego schematu opeanapi-rpi.json w repozytorium (ponieważ dodaliśmy nową funkcję).
W tym momencie powinieneś być w stanie przełączyć diodę LED za pomocą interfejsu czatu z ChatGPT:
Rysunek 8: Przełączanie diody LED na Raspberry Pi za pomocą akcji GPT
Gratulacje, że dotarłeś tak daleko! To był skomplikowany poradnik i niewątpliwie będziesz miał pytania lub napotkasz wyzwania. ChatGPT codziennie wprowadza zmiany w tej funkcji i znajduje prostsze sposoby, aby przeprowadzić początkujących przez proces. Bądź na bieżąco z aktualizacjami dokumentacji i nawet botami asystentami AI, które mogą pomóc Ci w tym procesie.
W tym artykule przyjrzeliśmy się niestandardowym akcjom GPT, jak je tworzyć i budować całe rusztowanie wokół nich, aby serwować usługę webową zaszyfrowaną za pomocą SSL z naszego komputera domowego. Oprócz budowania podstawowej usługi webowej udało nam się rozszerzyć ten kod o kontrolę diody LED z Raspberry Pi. Otwiera to możliwość kontrolowania i komunikowania się z znacznie bardziej złożonym sprzętem, wykorzystując „AI w pętli“ (gra słów „sprzęt w pętli“). W przyszłych artykułach będziemy badać takie tematy i koncepcje, wykorzystując ten przykład jako fundament.