Zyski:
- Umiejętność wyjaśnienia działania asystenta kodowania jako modelu językowego oraz pojęć tokena, okna kontekstowego, halucynacji
- Umiejętność rozróżniania zadań programowych, w których sztuczna inteligencja jest silna i słaba, za pomocą mapy mentalnej
- Umiejętność zastosowania podstawowego cyklu pracy zaproponowanie-produkcja-weryfikacja do własnych zadań
Dzień programisty rzadko spędza się na „pisaniu kodu od zera”. Czas rzeczywisty; Czytanie kodu napisanego przez kogoś innego, próba odtworzenia błędu, skanowanie logu (wiersze logu generowane przez aplikację podczas działania), pisanie testów, pisanie PR (pull request - żądanie scalania, w którym zmiana kodu jest przesyłana do przeglądu zespołowi) wyjaśnienie i aktualizacja dokumentacji. Sztuczna inteligencja (AI) to mnożnik prędkości, który może pomóc w prawie wszystkich tych niewidocznych zadaniach. Ale pierwszym warunkiem bezpiecznego korzystania z niego jest prawidłowe zrozumienie, czym jest, a czym nie.
W tej części najpierw prostym językiem wyjaśnimy podstawową technologię asystenta kodowania; następnie tworzymy mentalną mapę mocnych i słabych stron modelu; Na koniec ustalamy podstawową dyscyplinę pracy, którą będziemy stosować w całym module: proponować, produkować, weryfikować. Te trzy kroki stanowią podstawę kolejnych jedenastu jednostek.
Uwaga: ten moduł ma charakter szkolenia ogólnego. W oprogramowaniu o znaczeniu krytycznym dla bezpieczeństwa (przetwarzanie płatności, opieka zdrowotna, uwierzytelnianie, infrastruktura krytyczna) wyniki AI nie zastępują przeglądu i zatwierdzenia przez wykwalifikowanego inżyniera. AI jest asystentem; Osoba podpisująca jest inżynierem.
Co właściwie robi asystent kodowania?
Większość asystentów kodowania opiera się na dużym modelu językowym (LLM – sztuczna inteligencja szkolona na ogromnych ilościach tekstu i kodu, która przewiduje następny najbardziej prawdopodobny „fragment”). Model nie „rozumie” kodu jak człowiek; Generuje najbardziej prawdopodobną kontynuację nadanego mu kontekstu, w oparciu o wzorce, których uczy się z ogromnej puli przykładów. Ten pozornie prosty mechanizm daje w praktyce zaskakująco skuteczne wyniki — ponieważ większość oprogramowania składa się z powtarzających się wzorców: żądania HTTP, pętli, sprawdzenia wartości null, wzorca testowego.
Trzy terminy są tutaj krytyczne. Token to najmniejsza jednostka, którą model przetwarza, dzieląc tekst; Jest to mniej więcej kilka liter lub część słowa. Okno kontekstowe to liczba tokenów, które model może „zobaczyć” na raz; Twój kod, komunikat o błędzie i instrukcja muszą zmieścić się w tym oknie. Podpowiedź to wszystkie instrukcje i kontekst nadawany modelowi. Jakość wyniku zależy bezpośrednio od tych dwóch czynników: im lepszy kontekst i jaśniejsze instrukcje podasz modelowi, tym lepszy wynik uzyskasz. Złe dane wejściowe dają złe wyniki, nawet jeśli jest to inteligentny model – klasyczna zasada oprogramowania „śmieci, śmieci” ma zastosowanie również do sztucznej inteligencji.
Mapa mocnych i słabych stron
Aby skierować sztuczną inteligencję do właściwych zadań, trzeba wiedzieć, gdzie świeci, a gdzie się potyka. Zapamiętywanie tej mapy sprawi, że przy każdej kolejnej misji będziesz się zastanawiać: „Czy powinienem zlecić to zadanie sztucznej inteligencji, czy zrobić to sam?” Pozwala odpowiedzieć na pytanie w ciągu kilku sekund.
Jego mocne strony to: Generowanie szablonowego kodu, tłumaczenie z jednego języka na inny, pisanie wyrażeń regularnych (regex), opisywanie funkcji, tworzenie szkieletu testu, interpretowanie komunikatu o błędzie, tworzenie dokumentacji, sugerowanie nazw zmiennych/funkcji i drobne refaktoryzacje (poprawianie struktury kodu bez zmiany jego zachowania).
Słabe strony: Znajomość reguł biznesowych specyficznych dla Twojej firmy, zapamiętywanie całej bazy kodu, faktyczne uruchamianie i weryfikacja kodu, pewna znajomość najnowszych wersji bibliotek, wykrywanie luk w zabezpieczeniach ze stuprocentową gwarancją. Najbardziej niebezpieczna jest halucynacja: model wymyśla nieistniejącą funkcję, bibliotekę lub API (interfejs umożliwiający wymianę danych pomiędzy aplikacjami) w bardzo przekonującym języku. Ryzyko to można obrócić na swoją korzyść, ponieważ kod, w przeciwieństwie do zwykłego tekstu, można przetestować, aby sprawdzić, czy „działa” – po prostu nie pomijaj etapu weryfikacji.
Typ misji
Rola sztucznej inteligencji
rola mężczyzny
Wyprodukuj płytę kotłową/szkielet
produkuje przeciąg
Dostosowuje się, recenzje
Opis kodu
Daje szybkie podsumowanie
Weryfikuje krytyczną część kodu
pisanie testów
Przypadek sugeruje
Potwierdza zasięg i dokładność
Logika krytyczna dla bezpieczeństwa
pomocny pomysł
Decyzje i odpowiedzialność spoczywają wyłącznie na ludziach.
Użycie API/biblioteki
Generuje próbkę
Sprawdza istnienie i wersję
decyzja architektoniczna
Rodzaje opcji
Selekcjonuje i broni znając kontekst
Krok po kroku: Podstawowy cykl pracy
- Wyjaśnij zadanie. Jeśli nie możesz napisać tego, czego chcesz w jednym zdaniu, model też nie. Im wcześniej niepewność przedostanie się na dane wejściowe, tym większy będzie jej wzrost na wyjściu.
- Podaj kontekst. Dodaj odpowiedni kod, pełny komunikat o błędzie, wersję językową/frameworkową i ograniczenia do zachęty. Nie mów „napraw to”, powiedz „Python 3.11, FastAPI 0.110; ta funkcja daje błąd 500, eksploduje, gdy treść żądania jest pusta”.
- Rola i format impozycji. Struktury takie jak „Jesteś starszym programistą Go; po prostu podaj kod i uzasadnienie w dwóch zdaniach” skupiają się na wynikach.
- Poproś o małe. Podziel to na etapy, a nie na jedno gigantyczne żądanie; Sprawdź każdy krok osobno. Poważne zmiany są ryzykowne, ponieważ są trudne do zweryfikowania i podatne na ukrywanie błędów.
- Zweryfikować. Uruchom, przetestuj, przeczytaj wizualnie. Niezweryfikowany kod AI to „szkic”, a nie „rozwiązanie”. Jest to najbardziej niepodlegający negocjacjom etap cyklu.
Trzy mini etui
Przypadek 1 — Oszczędność czasu jest realna, ale niewielka. Kiedy zespół stworzył szkielet nowych punktów końcowych CRUD (Utwórz, przeczytaj, zaktualizuj, usuń) za pomocą sztucznej inteligencji, czas pierwszej wersji roboczej skrócił się z około 40 minut do 8 minut. Jednakże, po uwzględnieniu przeglądu i testów, całkowity czas wyniósł 25 minut; więc prawdziwy zysk wynosi od 40 do 25, około 38%. Tempo to, mierzone zamiast oczekiwania, że „przyspieszyliśmy 10 razy”, stanowi trwały zysk.
Przypadek 2 — Halucynacje są kosztowne. Programista użył sugerowanego przez sztuczną inteligencję wywołania request.get_json() bez sprawdzania poprawności; Nie było takiej metody (dokładnie respond.json()). Stracono 20 minut, gdy kod się nie skompilował. Proste pytanie „czy ta metoda naprawdę istnieje?” weryfikacja zresetowałaby stratę.
Przypadek 3 — Dobry kontekst podwaja wydajność. W przypadku tego samego błędu jeden programista po prostu napisał „Występuje błąd”, a drugi dodał pełny ślad stosu, wersję i próbkę wejściową. Ten ostatni uzyskał prawidłowe rozwiązanie za pierwszym razem; Pierwszy spędził trzy tury. Różnica nie polegała na modelu, ale na wejściu.
Cztery szablony do kopiowania
Uniwersalny, wydajny monit startowy:
Rola: Jesteś doświadczonym programistą w języku {{language}}. Zadanie: {{what_want}}Kontekst:- Framework/wersja: {{framework_and_version}}- Ograniczenia: {{wydajność, styl, reguły zależności}}Zasady:- Nie używaj nieistniejącej biblioteki/funkcji; Jeśli nie jesteś pewien, zaznacz to jako „weryfikuj”. - Najpierw podaj krótki plan, potem kod, potem 2 zdania uzasadnienia. - Stwórz testowalny, działający kod.
Aby odfiltrować niepewność z powrotem do modelu:
Przed rozwiązaniem poniższego zadania wypisz CO NAJMNIEJ 3 punkty, których Twoim zdaniem brakuje lub są niejasne. NIE PISZ kodu zanim odpowiem. Zadanie: {{task}}
Aby dane wyjściowe zostały automatycznie sprawdzone:
Wygenerowałeś następujący kod. Teraz zmień swoją rolę i oceń ten kod: - Wymień 3 przypadki (przypadki brzegowe), które mogą nie działać. - Czy są jakieś interfejsy API/funkcje, które mogłeś wymyślić? Zaznacz.- Podaj poprawioną wersję.Kod:{{code}}
Aby podzielić decyzję na opcje:
Zaproponuj 2-3 podejścia do rozwiązania {{problem}}. Do każdego: krótki opis, plus/minus, kiedy wybrać. Podaj w formie tabelarycznej. NIE wybieraj za mnie; po prostu wyjaśnij tę opcję.
Słaba zachęta/silna zachęta
Słabe: „Napraw błąd w tym kodzie”. (Jaki błąd? Który język? Jakie jest oczekiwane zachowanie?)
Mocne: „Python 3.11 / FastAPI 0.110. Następujący punkt końcowy zwraca 500 z KeyError, gdy treść żądania jest pusta; chcę, aby zwrócił 400 i znaczący komunikat w pustej treści. Najpierw wyjaśnij przyczynę, następnie podaj poprawioną funkcję, a następnie napisz test dla tego scenariusza. [kod]”
Potężna wersja; Podaje język, wersję, rzeczywisty błąd, oczekiwane zachowanie i format wyjściowy. Model nie musi już przewidywać.
Typowe błędy
- Zaufanie bez weryfikacji. Najczęstszy i najdroższy błąd. Nie mów „rozwiązany”, dopóki kod nie zostanie skompilowany i przetestowany.
- Zadawanie pytań bez kontekstu. Odpowiedź bez wersji, tekstu błędu i ograniczeń jest ogólna i często błędna.
- Jedna wielka prośba. Brak możliwości jednoczesnego zamówienia i sprawdzenia 300-liniowej produkcji sprawia, że błędy stają się niewidoczne.
- Uznawanie pewności siebie modelki za dowód. Sztuczna inteligencja może z całą pewnością powiedzieć coś złego; Ton nie jest wskaźnikiem dokładności.
- Losowe wklejenie tajemnicy firmy. Kluczy prywatnych, danych klientów czy prywatnego kodu źródłowego nie należy wprowadzać do niezatwierdzonych narzędzi (tym tematem zajmiemy się w części 10).
Wskazówka: traktuj każdy wynik AI jako „to jest wersja robocza”. Ten pojedynczy nawyk mentalny eliminuje większość zagrożeń, które zobaczysz w całym module.
Podsumowując
Asystent kodowania to model językowy, który przewiduje następny najbardziej prawdopodobny fragment; Nie rozumie kodu, tworzy wzorce. Dlatego jest dobry w powtarzalnych, szablonowych pracach; Należy go używać ostrożnie w przypadku pracy wymagającej weryfikacji specyficznej dla kontekstu. Największym ryzykiem są halucynacje, a jedynym antidotum jest weryfikacja. Dyscyplina, której będziemy przestrzegać w całym module, jest jasna: wyjaśnij zadanie, podaj kontekst, poproś o drobne, zweryfikuj każdy produkt.
Zadanie aplikacji
Zapisz trzy zadania programowe, które wykonałeś w ostatnim tygodniu (np. naprawa błędów, test, aktualizacja README). Spójrz na „mapę mocnych i słabych stron” każdego z nich i opisz jednym zdaniem, jaka byłaby Twoja rola i rola AI, gdyby AI to zrobiła. Następnie przekaż jedno z tych zadań AI za pomocą powyższego szablonu „podpowiedzi startowej”, a następnie uruchom i zweryfikuj dane wyjściowe; Zwróć uwagę, ile minut zaoszczędziłeś i ile błędów musiałeś naprawić.
lista kontrolna
- [ ] Zdałem sobie sprawę, że LLM tworzy wzorce, a nie „rozumie” kod.
- [ ] Potrafię wyjaśnić pojęcia tokena, okna kontekstowego i podpowiedzi w jednym zdaniu.
- [ ] Potrafię rozróżnić rodzaje zadań, w których sztuczna inteligencja jest silna i słaba.
- [ ] Wiem, co to jest halucynacja i jedynym antidotum jest weryfikacja.
- [ ] Cykl „zaproponuj, wyprodukuj, zweryfikuj” dostosowałem do własnego zadania.
- [ ] Potrafię pokazać różnicę pomiędzy silną i słabą podpowiedzią na konkretnym przykładzie.