Przejdź do głównej sekcji

Samonaprawiający się kod jest przyszłością rozwoju oprogramowania

Programiści uwielbiają automatyzować rozwiązania swoich problemów, a wraz z rozwojem sztucznej inteligencji generatywnej ten koncept może zostać zastosowany w zupełnie nowym wymiarze zarówno do tworzenia, jak i utrzymywania oraz ulepszania kodu.

A cartoon-style illustration showing a digital brain with colorful lines of code streaming from it, symbolizing the intelligence behind self-healing code in software development. The brain is whimsical and vibrant, set against a playful background of binary code, rendered in a fun, cartoonish style.

Jedną z bardziej fascynujących cech dużych modeli językowych jest ich zdolność do poprawiania swoich wyników poprzez samorefleksję. Podając modelowi jego własne odpowiedzi, a następnie prosząc o ich poprawę lub identyfikację błędów, model ma znacznie większą szansę na wyprodukowanie czegoś poprawnego pod względem faktów lub przyjemnego dla użytkowników. Prosząc go o rozwiązanie problemu, pokazując mu krok po kroku swoją pracę, te systemy są bardziej dokładne niż te dostrojone tylko do znalezienia poprawnej ostatecznej odpowiedzi.

Chociaż dziedzina ta rozwija się bardzo dynamicznie, a błędy faktograficzne, zwane halucynacjami, nadal stanowią problem dla wielu chatbotów napędzanych LLM, rośniejąca ilość badań wskazuje, że bardziej ukierunkowane, autoregresywne podejście może prowadzić do lepszych wyników.

To staje się naprawdę interesujące, gdy zastosuje się je do świata rozwoju oprogramowania i CI/CD. Większość programistów jest już zaznajomiona z procesami pomagającymi automatyzować tworzenie kodu, wykrywanie błędów, testowanie rozwiązań i dokumentowanie pomysłów. Kilku z nich pisało w przeszłości o pomyśle samodzielnego kodu naprawczego. Przejdź do CI/CD Collective na Stack Overflow i znajdziesz liczne przykłady technologicznych wprowadzających te idee w życie.

Kiedy kod nie działa, często wyświetla komunikat o błędzie. Jeśli Twoje oprogramowanie jest dobre, komunikat o błędzie dokładnie powie Ci, co było nie tak i wskaże kierunek rozwiązania. Poprzednie programy samodzielnego naprawczego kodu to sprytne automatyzacje, które zmniejszają liczbę błędów, umożliwiają łagodne fallbacky i zarządzają alarmami. Możesz chcieć dodać trochę wolnego miejsca na dysku lub usunąć niektóre pliki, gdy otrzymasz ostrzeżenie, że wykorzystanie jest na poziomie 90%. Albo może próbowałeś wyłączyć go i włączyć ponownie?

Programiści uwielbiają automatyzować rozwiązania swoich problemów, a wraz z rozwojem sztucznej inteligencji generatywnej ten koncept może zostać zastosowany w zupełnie nowym wymiarze zarówno do tworzenia, jak i utrzymywania oraz ulepszania kodu.

Więcej kodu wymaga lepszej kontroli jakości

Możliwość szybkiego generowania dużych fragmentów kodu przez LLM może oznaczać, że programiści, a nawet osoby niebędące programistami, będą dodawać więcej do kodu firmowego niż w przeszłości. To stawia własne wyzwania.

„Jedną z rzeczy, które słyszę często od inżynierów oprogramowania, jest to, że mówią: Cóż, każdy może teraz generować trochę kodu za pomocą niektórych z tych narzędzi, ale obawiamy się jakości tego, co jest generowane”, mówi Forrest Brazeal, szef mediów dla programistów w Google Cloud. Tempo i ilość kodu, jaką mogą wyprodukować te systemy, mogą być przytłaczające. „Myślę o przejrzeniu pull requesta o długości 7000 linii, który napisał ktoś z twojego zespołu. To jest bardzo, bardzo trudne i nie można mieć istotnej opinii. Nie staje się to łatwiejsze, gdy AI generuje tak dużą ilość kodu. Wchodzimy więc w świat, w którym będziemy musieli wymyślić najlepsze praktyki inżynierii oprogramowania, abyśmy mogli skutecznie korzystać z GenAI”.

„Ludzie mówili o zadłużeniu technicznym od dawna, a teraz mamy zupełnie nową kartę kredytową, która pozwoli nam gromadzić zadłużenie techniczne w sposób, którego nigdy wcześniej nie mogliśmy”, powiedział Armando Solar-Lezama, profesor Laboratorium Informatyki i Sztucznej Inteligencji Massachusetts Institute of Technology w wywiadzie z Wall Street Journal. „Myślę, że istnieje ryzyko gromadzenia dużej ilości bardzo lichego kodu napisanego przez maszynę”, powiedział, dodając, że firmy będą musiały przemyśleć metody, w jaki sposób mogą pracować w tandemie z możliwościami nowych narzędzi, aby tego uniknąć.

Ostatnio rozmawialiśmy z kilkoma osobami z Google, które pomogły w budowie i testowaniu nowych modeli AI zasilających sugestie kodowe w narzędziach takich jak Bard. Paige Bailey jest PM-em odpowiedzialnym za modele generatywne w Google, pracującym w nowo połączonej jednostce, która połączyła DeepMind i Google Brain. „Pomyśl o kodzie wygenerowanym przez AI jako czymś stworzonym przez pomocnika L3 SWE do Twojej dyspozycji”, mówi Bailey, „i że powinieneś naprawdę dokładnie go przejrzeć”.

Nadal Bailey wierzy, że część pracy polegającej na sprawdzaniu kodu pod kątem dokładności, bezpieczeństwa i prędkości ostatecznie spadnie również na AI. „Z czasem oczekuję, że duże modele językowe zaczną w pewnym sensie rekurencyjnie stosować się do wyników kodu. Istnieje już badanie przeprowadzone przez Google Brain, które pokazuje, że można w pewnym sensie rekurencyjnie stosować LLM, takie że jeśli jest generowany kod, możesz powiedzieć: „Hej, upewnij się, że nie ma żadnych błędów. Upewnij się, że jest wydajny, upewnij się, że jest szybki, a potem daj mi ten kod”, a następnie jest to wyświetlane użytkownikowi. Więc mam nadzieję, że to się poprawi z czasem.

A cartoon-style illustration showing a digital brain with colorful lines of code streaming from it, symbolizing the intelligence behind self-healing code in software development. The brain is whimsical and vibrant, set against a playful background of binary code, rendered in a fun, cartoonish style.

Co ludzie budują i eksperymentują dzisiaj?

Google już używa tej technologii aby przyspieszyć proces rozwiązywania komentarzy dotyczących przeglądu kodu. Autorzy niedawnego artykułu na temat tej metody piszą, że „Do dnia dzisiejszego autorzy zmian kodu w Google rozwiązują znaczną ilość komentarzy recenzentów poprzez zastosowanie edycji sugerowanej przez ML. Oczekujemy, że zmniejszy to czas spędzony na przeglądach kodu o setki tysięcy godzin rocznie w skali Google. Nieproszona, bardzo pozytywna opinia podkreśla wpływ sugerowanych przez ML edycji kodu na produktywność pracowników Google i pozwala im skupić się na bardziej kreatywnych i złożonych zadaniach”.

„W wielu przypadkach podczas procesu przeglądu kodu twój recenzent może powiedzieć: proszę to naprawić lub proszę to przerobić dla czytelności”, mówi Marcos Grappeggia, PM w Google’s Duet coding assistant. Myśli o agencie AI, który może na to odpowiedzieć jako o rodzajowym zaawansowanym linterze do weryfikacji komentarzy. „To coś, co widzieliśmy jako obiecujące pod względem zmniejszenia czasu trwania naprawy”. Sugerowana poprawka nie zastępuje osoby, „ale pomaga, daje rodzaj punktu wyjścia do myślenia”.

Intrygujące eksperymenty wykorzystujące sztuczną inteligencję do naprawy kodu, technologia sztucznej inteligencji (AI) coraz częściej wykorzystywana jest do automatyzacji procesów programowania, w tym generowania kodu, przeprowadzania jego testów i znajdowania błędów. Niedawno pojawiły się interesujące eksperymenty wykorzystujące AI do naprawy kodu w fazie wydawania, czyli deployu.

Jeśli push kodu spowoduje błąd podczas kompilacji w Twoim CI/CD pipeline, wtyczka może automatycznie wysłać kod do sandboxa, gdzie AI przeanalizuje kod i błąd, a następnie wprowadzi poprawki. Nowo naprawiony kod jest ponownie przepuszczany przez pipeline i jeśli testy się powiodą, jest przekazywany do wdrożenia.

Calvin Hoenes, twórca wtyczki, wyjaśnia, że zaimplementował mechanizm retry, aby zapobiec niepożądanym scenariuszom. Aby zwiększyć dokładność agenta AI, dodał dokumentację kodu do bazy danych wektorowej opartej na technologii Pinecone. Dzięki temu agent może się uczyć rzeczy, do których podstawowy model nie ma dostępu, i być regularnie aktualizowany w razie potrzeby.

Hoenes twierdzi, że marzy o świecie, w którym takie agenty AI będą mogły naprawiać błędy w kodzie już działającym w produkcyjnym środowisku. „To bardzo fascynujące, czy kod działający w produkcji, który generuje błąd, może naprawić się sam?” – pyta Hoenes. „Załóżmy, że masz klaster Kubernetes. Jeśli jedna część wykryje awarię, uruchamia się mechanizm naprawczy.”

W takim scenariuszu, uszkodzony pod zostanie usunięty w celu naprawy, a na jego miejsce zostanie dodany nowy. Po naprawie oryginalnego pod, zostanie on ponownie podłączony do systemu.

Hoenes przyznaje, że obecnie potrzebujemy ludzi w pętli naprawczej. Czy kiedykolwiek nadejdzie czas, kiedy programy komputerowe będą w stanie samodzielnie naprawić się w miarę ich tworzenia i rozwoju? „Jeśli masz doskonałe pokrycie testami, czyli 100% pokrycie testowe, i czystą bazę kodu, to tak, mogę to sobie wyobrazić. Jednak w najbliższej przyszłości prawdopodobnie lepiej będzie, jeśli ludzie będą nadal uczestniczyć w procesie naprawczym.”

Przekaż to dalej: lintery, opiekunowie i nigdy niekończąca się walka z długiem technicznym.

Znalezienie rzeczy podczas CI/CD lub rozwiązywanie błędów, gdy się pojawiają, jest świetne, ale posuńmy się o krok dalej. Pracujesz w firmie z dużą, ciągle rosnącą bazą kodu. Można założyć, że masz pewien poziom długu technicznego. A co, jeśli miałbyś agenta AI, który przeglądałby stary kod i sugerował zmiany, które jego zdaniem sprawią, że twój kod będzie działał wydajniej. Może zwrócić uwagę na świeże aktualizacje w bibliotece, które będą korzystne dla twojej architektury. Albo przeczytał o nowych sztuczkach dotyczących ulepszania pewnych funkcji w niedawnym blogu lub wydaniu dokumentacji. Rady AI przychodzą każdego ranka jako pull requesty do przeglądu przez człowieka.

Itamar Friedman, CEO CodiumAI, obecnie podchodzi do problemu podczas pisania kodu. Jego firma ma bota AI, który działa jako programista-parter obok programistów, podsuwając im testy, które zawodzą, wskazując przypadki brzegowe i ogólnie szukając dziur w ich kodzie podczas pisania, mając na celu zapewnienie, że gotowy produkt będzie jak najbardziej wolny od błędów. Mówi, że wiele narzędzi do mierzenia jakości kodu skupia się na aspektach takich jak wydajność, czytelność i unikanie powtórzeń.

Codium pracuje nad narzędziami, które pozwalają na testowanie podstawowej logiki, co Friedman widzi jako węższą definicję jakości funkcjonalnej kodu. Z takim podejściem uważa, że automatyczna poprawa kodu jest teraz możliwa i wkrótce stanie się powszechna. „Jeśli jesteś w stanie zweryfikować logikę kodu, to prawdopodobnie możesz także pomóc, na przykład, z automatyzacją pull requestów i sprawdzaniem, czy są one wykonane zgodnie z najlepszymi praktykami.”

Itamar, który przyczynił się do AutoGPT i wygłaszał prelekcje z jego twórcą, widzi przyszłość, w której ludzie kierują AI, i odwrotnie. „Maszyna przejdzie przez całe twoje repozytorium i powie ci o wszystkich najlepszych (i takich sobie) praktykach, które zidentyfikowała. Następnie kilku tech leaderów może to przejrzeć i powiedzieć, o mój Boże, tak chcieliśmy to zrobić, albo nie chcieliśmy. To jest nasza najlepsza praktyka testowania, to jest nasza najlepsza praktyka wywoływania API, tak lubimy robić kolejkowanie, tak lubimy robić buforowanie, itd. Będzie to konfigurowalne. Zasady będą faktycznie mieszaniną sugestii AI i ludzkiej definicji, które będą następnie wykorzystywane przez bota AI do pomocy programistom. To jest niesamowite.”

Jak Stack Overflow eksperymentuje z GenAI?

Jak ogłosił niedawno nasz CEO, Stack Overflow ma teraz wewnętrzny zespół poświęcony eksploracji, jak sztuczna inteligencja, zarówno najnowsza fala AI generatywnej, jak i dziedzina szerzej, mogą poprawić nasze platformy i produkty. Naszym celem jest tworzenie w przestrzeni publicznej, abyśmy mogli włączyć opinie do naszego procesu. W tym duchu podzieliliśmy się eksperymentem, który pomógł użytkownikom stworzyć dobry tytuł dla ich pytania. Celem tutaj jest ułatwienie życia zarówno osobom zadającym pytania, jak i recenzentom, zachęcając wszystkich do udziału w wymianie wiedzy, która ma miejsce na naszej publicznej stronie.

Łatwo jest sobie wyobrazić bardziej iteracyjny proces, który wykorzystywałby moc wieloetapowego podsuwania i rozumowania opartego na łańcuchu myślenia, technik, które badania pokazały, że mogą znacznie poprawić jakość i dokładność wyjścia LLM.

System AI mógłby przejrzeć pytanie, zaproponować zmiany w tytule dla czytelności i zaoferować pomysły, jak lepiej sformatować kod w treści pytania, a także kilka dodatkowych tagów na końcu, aby poprawić kategoryzację. Inny system, recenzent, mógłby przyjrzeć się zaktualizowanemu pytaniu i przyznać mu ocenę. Jeśli przekroczy pewien próg, może zostać zwrócone użytkownikowi do przeglądu. Jeśli nie, system podejmuje kolejną próbę, poprawiając swoje wcześniejsze sugestie, a następnie ponownie przedstawiając swoje wyjście do zatwierdzenia.

Mamy szczęście móc pracować z kolegami z Prosus, wielu z nich ma dziesięciolecia doświadczenia w dziedzinie uczenia maszynowego. Niedawno rozmawiałem z Zulkufem Gencem, Szefem Nauki o Danych w Prosus AI. W przeszłości skupiał się na przetwarzaniu języka naturalnego (NLP), współtworząc model oparty na LLM do analizy sentymentu finansowego, FinBert, który pozostaje jednym z najpopularniejszych modeli w swojej kategorii w HuggingFace.

„Próbowałem używać autonomicznych agentów w przeszłości do moich badań akademickich, ale nigdy nie działały one zbyt dobrze i musiały być kierowane bardziej na zasadzie heurystyki, więc nie były naprawdę autonomiczne,” powiedział mi w wywiadzie w tym miesiącu. Najnowsze LLMy zmieniły to wszystko. Jesteśmy teraz w punkcie, wyjaśnił, gdzie można poprosić agentów o samodzielne działanie i uzyskać dobre wyniki, zwłaszcza jeśli zadanie jest dobrze określone. „W przypadku Stack Overflow istnieje doskonały przewodnik, jak powinien wyglądać jakościowy wynik, ponieważ istnieją wyraźne definicje tego, co stanowi dobre pytanie lub odpowiedź.”

Tak więc co z nami, programistami ?

Programiści mają prawo zastanawiać się i martwić o wpływ, jaki tego rodzaju automatyzacja będzie miała na branżę. Na razie jednak te narzędzia uzupełniają i wzmacniają istniejące umiejętności, ale są dalekie od zastąpienia prawdziwych ludzi. Wydaje się, że niektóre boty już nauczyły się automatyzować same siebie w pętlę i w efekcie stały się zbędne. Niezmordowani agenci, którzy ciągle pracują nad utrzymaniem czystości twojego kodu. Chyba mamy szczęście, że jak dotąd wydają się być równie łatwo rozpraszani przez czasochłonne objazdy, jak przeciętny programista?

Technologia nieustannie posuwa się naprzód, ale prokrastynacja pozostaje niepokonana.

Kompilujemy wyniki naszej Ankiety dla Programistów i mamy mnóstwo fascynujących danych do udostępnienia na temat tego, jak programiści postrzegają te narzędzia i w jakim stopniu już wdrażają je w swoje procesy pracy.

Jeśli bawiłeś się kiedyś pomysłami tego typu, od samonaprawiającego się kodu po Roboblogi, zostaw nam komentarz, a postaramy się uwzględnić twoje doświadczenia w naszym następnym poście. A jeśli chcesz dowiedzieć się więcej o tym, co Stack Overflow robi z AI, sprawdź niektóre z eksperymentów, które udostępniliśmy na Meta.