Wykorzystanie generatywnego AI do pisania i uruchamiania kodu wbudowanego

Ari Mahpour
|  Utworzono: maj 15, 2024  |  Zaktualizowano: lipiec 1, 2024
Wykorzystanie generatywnego AI do pisania i uruchamiania kodu wbudowanego

W Jak zbudować własną akcję GPT do komunikacji z Twoim sprzętem oraz Budowanie asystenta laboratorium AI, nauczyliśmy się, jak sterować naszym sprzętem za pomocą generatywnej AI. Wykorzystując niestandardowe akcje GPT w ChatGPT, byliśmy w stanie dać ChatGPT możliwość nie tylko mrugania diodami LED na Raspberry Pi, ale także kontrolowania i pozyskiwania danych z instrumentów laboratoryjnych. Oznaczało to, że mogliśmy używać sztucznej inteligencji jako naszego asystenta laboratoryjnego, a także przetwarzać dane, które pozyskała z naszych instrumentów. W tym artykule idziemy o krok dalej, pozwalając generatywnej AI nie tylko pisać dla nas kod, ale także wykonywać go na wbudowanych celach i otrzymywać informacje zwrotne w procesie.

Tło

Używanie generatywnej AI do pisania kodu, nawet dla systemów wbudowanych, nie jest niczym nowym. Istnieje już mnóstwo narzędzi sugerujących lub całkowicie piszących kod od zera. Najpopularniejsze duże modele językowe, takie jak ChatGPT, Gemini i Claude, stały się całkiem dobre w pisaniu kodu (zobacz Gemini vs. ChatGPT: Kto pisze lepszy kod? dla porównania). Piszę o generowaniu kodu przez ChatGPT od ponad roku (zobacz Używanie ChatGPT do automatycznego testowania) i głoszę, że to jedyny sposób na rozwój w dzisiejszych czasach. Prawdziwym wyzwaniem jest wprowadzenie AI do pętli rozwoju.

Generowanie kodu to tylko początek, ale aby zweryfikować i upewnić się, że działa, wymagane jest inne podejście, jeśli chodzi o generatywną AI. Interpreter kodu z ChatGPT zapewnia zamknięte środowisko Pythona, które w pewnym stopniu może uruchamiać wygenerowany kod i weryfikować, czy działa dla Ciebie. Chciałem pójść o krok dalej i zobaczyć, czy możemy osiągnąć to samo z systemami wbudowanymi. Istnieją dwie drogi, które można obrać z ChatGPT OpenAI. Najczęstszą drogą jest stworzenie zamkniętej aplikacji, która używa API OpenAI. Spowodowałoby to pobranie kodu z dużego modelu językowego (LLM) za pomocą API, skompilowanie go, załadowanie na Arduino i użycie dodatkowego niestandardowego kodu do weryfikacji funkcjonalności wygenerowanego kodu. Zdecydowałem się na inne podejście, używając akcji GPT, aby uczynić to bardziej „doświadczeniem wspólnego kodowania”. Oto jak wygląda to doświadczenie:

Przykład akcji GPT

Rysunek 1: Przykład akcji GPT

Chociaż przykład może być trywialny (tj. mruganie wbudowaną diodą LED), powyższa demonstracja podsumowuje wszystko. Byłem w stanie przekazać jasne instrukcje mojemu niestandardowemu GPT i wykonał je dokładnie tak, jak oczekiwałem. Mogłem również potwierdzić, że faktycznie załadowało to do mojego urządzenia i mrugało diodą LED z częstotliwością 1s. Miłą rzeczą w używaniu niestandardowego GPT w porównaniu z zamkniętym systemem jest to, że mogę dość łatwo iterować w ramach polecenia:

Iteracja nad szkicem Arduino

Rysunek 2: Iteracja nad szkicem Arduino

Teraz, gdy widziałeś kilka przykładów, spójrzmy, jak to wszystko działa.

Jak to działa

Tak jak widzieliśmy w innych artykułach o niestandardowym GPT, konfiguracja GPT Actions dla tego projektu jest mniej więcej taka sama. Plik Dockerfile, Docker Compose, certyfikaty SSL i ogólna struktura repozytorium nie zmieniły się wiele. Oczywiście sam kod projektu oraz plik OpenAPI YAML są znacząco różne (jak można się było spodziewać).

Największą zmianą, która następuje w tym kodzie (w porównaniu z poprzednimi przykładami), jest wprowadzenie „podprocesu” w Pythonie do wywołania zewnętrznego programu, w tym przypadku środowiska Arduino IDE. Nasz plik OpenAPI YAML (openapi.yaml) dostarcza strukturę dla ChatGPT, informując, jakie informacje powinny być dostarczane i w jaki sposób. Patrząc na sekcję „components” na końcu pliku YAML, zauważysz różne części oczekiwanego obiektu zwrotnego:

  

components:

  schemas:

    CodeSnippet:

      type: object

      properties:

        language:

          type: string

        code:

          type: string

        description:

          type: string

          nullable: true

      required:

        - language

        - code

Poprosiliśmy ChatGPT, aby dostarczał nie tylko kod, ale również język i opcjonalnie opis tego kodu. Przetwarzamy te dane w app.py. Ważniejsze niż samo przetwarzanie polecenia jest to, że zwracamy również znaczące odpowiedzi HTTP, jeśli coś pójdzie nie tak w procesie. To pomaga dostarczyć kontekst i mówić tym samym „językiem”, co serwer internetowy/bot AI ChatGPT.

Implementacja, choć dość prosta, jest bardzo łatwa: zrzucamy fragment kodu do tymczasowego pliku INO, weryfikujemy i/lub przesyłamy go do Arduino, a następnie usuwamy tymczasowy plik INO. Oczywiście, jest tak wiele sposobów, przez które coś może pójść nie tak, włączając w to niezliczoną ilość ryzyk bezpieczeństwa. Jest to niezwykle ważne, jak zawsze, aby ograniczyć środowisko rozwojowe i, jeśli otwierasz je na świat zewnętrzny, zaimplementować wszystkie niezbędne środki bezpieczeństwa, aby zapewnić bezpieczeństwo twojego środowiska.

Dla zabawy zaimplementowałem również bardzo podstawowe polecenie odczytu szeregowego, które daje naszej niestandardowej akcji GPT możliwość odczytu z portu szeregowego Arduino. Pozwala nam to zweryfikować, czy port szeregowy działa, bez manualnego sprawdzania z naszego komputera. Przykładowy scenariusz może być taki, gdy prosisz ChatGPT, aby napisał i przesłał kod do twojego Arduino ze smartfona. To oczywiście może być rozszerzone do bardziej formalnej implementacji serial get/set, gdzie wysyłasz polecenia i odczytujesz odpowiedzi przez serial (jak zaimplementowano w Konfiguracja projektu sprzętu w pętli).

Podsumowanie

W tym artykule pokazaliśmy, jak AI może robić więcej niż tylko pisać kod - może również upewnić się, że kod działa, uruchamiając go na rzeczywistych urządzeniach. To jak posiadanie programisty, który nie tylko pisze projekt za ciebie, ale również testuje go, aby upewnić się, że jest poprawny. Z przykładów, które użyliśmy, możesz zobaczyć, jak to może zmienić sposób, w jaki tworzymy i testujemy nasze projekty, czyniąc rzeczy szybszymi i łatwiejszymi. Wszystkie kroki i kod, których użyliśmy, są udostępnione, więc każdy zainteresowany może to wypróbować i zobaczyć, jak AI może pomóc w ich pracy.

Odkryj więcej na temat tego pionierskiego projektu i dołącz do ewolucji na: https://gitlab.com/ai-examples/ai-arduino-code-builder.

About Author

About Author

Ari jest inżynierem z rozległym doświadczeniem w projektowaniu, produkcji, testowaniu i integracji systemów elektrycznych, mechanicznych i oprogramowania. Jego pasją jest łączenie inżynierów zajmujących się projektowaniem, weryfikacją i testowaniem, aby pracowali jako jeden zespół.

Powiązane zasoby

Powiązana dokumentacja techniczna

Powrót do strony głównej
Thank you, you are now subscribed to updates.