Jedinica 6 / 12

Otklanjanje grešaka i analiza uzroka

Dobici:

  • Sposobnost smanjenja greške na najmanju reproducibilnu instancu i premještanja na AI uz potpuni dokaz
  • Sposobnost testiranja hipoteza zasnovanih na dokazima uz najjeftiniju kontrolu i pronalaženje glavnog uzroka
  • Sposobnost da se riješi osnovni uzrok i osigura ga regresijskim testom, umjesto da se zakrpi simptom

Otklanjanje grešaka je proces otkrivanja zašto se softver ponaša neočekivano i popravljanja. To je posao u kojem programer provodi najviše vremena i najviše se umara; Jer najčešće greška nije tamo gdje se pojavljuje, već je skrivena nekoliko koraka iza. AI je moćan partner u razmišljanju koji ubrzava ovo istraživanje - ali samo ako mu pružite prave dokaze. Otklanjanje grešaka bez dokaza je oblast u kojoj AI proizvodi najviše halucinacija.

U ovoj jedinici uspostavljamo disciplinovan tok od generisanja greške do odlaska do osnovnog uzroka: pojašnjavanje simptoma, prikupljanje dokaza (poruka o grešci, praćenje steka, dnevnik, unos), generisanje hipoteze, testiranje hipoteze i validacija popravka. AI pomaže na svakom koraku; ali "popravljena" odluka se donosi tako što se vidi da je greška zapravo nestala.

Zašto su dokazi sve?

LLM ne vidi grešku kao vi; On zna samo šta mu kažeš. Rečenica poput "Aplikacija se ruši" ne daje modelu gotovo nikakve informacije, a model popunjava prazninu predviđanjem - to jest, halucinacijom. Zauzvrat, puna poruka o grešci, praćenje steka — raščlanjivanje preko koje funkcije poziva greška se dogodila, unos koji je pokrenuo grešku i šta se očekivalo, itd. S obzirom na posmatrano ponašanje, model može rangirati prave verovatnoće.

U otklanjanju grešaka, zamislite AI kao pomoćnika detektiva: što više dokaza iznesete, to je tačnija hipoteza koju generiše. Ako nema dokaza, asistent će samo nagađati i može vas navesti na pogrešan trag.

Savjet: Prije prijenosa greške na AI, smanjite je na najmanji primjer koji se može reproducirati. Najmanji kod i unos koji pokreće grešku čini stvari radikalno lakšim i vama i modelu; najčešće tokom ove redukcije sami pronalazite uzrok.

Korak po korak: tok analize uzroka

  1. Pojasnite simptom. "Šta se dešava, šta ste očekivali da će se dogoditi?" Napišite dva u jednoj rečenici.
  2. Prikupite dokaze. Potpuna poruka o grešci, praćenje steka, relevantni redovi dnevnika, unos koji pokreće, informacije o verziji.
  3. Neka se generira hipoteza. Od AI “3 moguća uzroka koji objašnjavaju ovaj simptom i kako da testiram svaki od njih?” pitaj.
  4. Prvo testirajte najjeftiniju hipotezu. Dodajte dnevnik, ispišite vrijednost, pokrenite test. Potvrđuju li dokazi hipotezu?
  5. Popravite osnovni uzrok, a ne simptom. Umjesto da utišate simptom flasterom, pozabavite se osnovnim uzrokom.
  6. Potvrdite i dodajte regresijsko testiranje. Vidite da greška nestaje; Zatim napišite test koji će uhvatiti tu grešku tako da se ne vrati.

Tri mini futrole

Slučaj 1 — Praćenje steka je dovelo do ispravnog fajla. Aplikacija je vraćala grešku 500 na određene zahtjeve. Programer je dao kompletno praćenje steka i zahtjev za pokretanje AI; Model je pretpostavio da je greška uzrokovana vrijednošću None u sloju za raščlanjivanje datuma. Programer je dodao dnevnik u tu liniju, verificirao ga i riješio za 15 minuta; 2 sata su potrošena dan ranije neprovjerenim eksperimentima.

Slučaj 2 — Halucinacije su dovele do pogrešnog traga. Drugi programer je jednostavno napisao "veza sa bazom podataka pada". AI je optužio postavku skupa veza bez ikakvih dokaza; Programer je proveo 40 minuta petljajući sa ovom postavkom. Pravi uzrok je bio tajm-aut na strani mreže i otkriven je tek gledanjem dnevnika. Pouka: hipoteza uzeta bez dokaza je samo vjerovatna, a ne pouzdana.

Slučaj 3 — Uhvaćena je nepogrešiva ​​greška. Postojao je test koji je povremeno padao. AI je dobio testni kod, poruku o grešci i informaciju "ponekad prođe, ponekad ne uspije"; model je ukazao na zajedničku zavisnost testova od vremena/reda. Pregled je potvrdio da je test zasnovan na lokalnom vremenu sistema. Kada je sat bio fiksiran (ismijavan), test je postao stabilan.

Četiri predloška koji se mogu kopirati

Generisanje hipoteza zasnovanih na dokazima:

Otklanjam grešku. Dokazi u nastavku.- Očekivano ponašanje: {{očekivano}}- Uočeno ponašanje: {{promatrano}}- Poruka o grešci / praćenje steka: {{trace}}- Input pokretanja: {{input}}- Okruženje/verzija: {{verzija}}Navedite 3 NAJVEROVATNIJE uzroka koji objašnjavaju ovaj simptom. Za svaki: kako da testiram (najjeftinija provjera) i kako to popraviti ako je istina. Ako su dokazi nedovoljni, recite mi koje dodatne informacije su vam potrebne.

Tumačenje praćenja steka:

Pročitajte ovo praćenje steka. Razlikujte u kojoj liniji greška VEROVATNO počinje (koren) i koje linije su samo nastavak lanca. Predložite 1-2 mjesta da prvo pogledate. Povezani kod:{{code}}Trag:{{trace}}

Minimalno repro oduzimanje:

Kod ispod daje grešku. Smanjite ga na NAJMANJU instancu koja još uvijek pokreće grešku, ali odbacuje sve nepotrebno. Nemojte pretpostavljati da svaki komad koji uklonite ne utiče na grešku, već dodajte napomenu "ako greška nestane kada ovo uklonite, to je razlog zašto".{{code}}

Validacija nakon korekcije i regresijsko testiranje:

Pretpostavimo da je osnovni uzrok {{cause}} i ja napravim sljedeću ispravku: {{fix}}.1) Da li ovaj popravak zaista popravlja simptom, hoće li imati bilo kakve nuspojave?2) Napišite regresijski test koji će uhvatiti ovu grešku u budućnosti.

Slaba prompt / Jaka prompt

Slabo: "Šifra ne radi, zašto?"
Snažno: "Čvor 20 / Express. POST /orders vraća 500 kada je items prazan niz u tijelu; trebao je vratiti 400. Praćenje steka: TypeError: Ne mogu pročitati svojstva undefined (čitanje '0') — u prilogu je potpuni trag i pridruženi rukovalac. Dajte mi 3 najvjerovatnije prouzročenog koda + mptom.

Moćna verzija; Daje okruženje, krajnju tačku, unos okidača, tačan tip greške i očekivano ponašanje. Model više ne može da pravi predviđanja, već analizu.

korak

Doprinos AI

vaša kontrola

prikupljanje dokaza

Koji dokazi su potrebni, podsjeća

Zaista prikuplja dokaze

generisanje hipoteza

Navedite moguće razloge

Određuje prioritete u kontekstu

testiranje hipoteza

Preporučuje metodu ispitivanja

Lično operiše i posmatra

korekcija

patch preporučuje

Da li rješava osnovni uzrok? Istina je.

regresija

piše test

Provjerava da li je test pokvaren

Rješavanje osnovnog uzroka, a ne simptoma

Većinu vremena AI će predložiti zakrpu koja brzo utišava simptom: dodajte pokušaj/hvatanje, stavite nultu ček, progutajte grešku. Ovo je ponekad tačno, često opasno; jer prvobitni uzrok ostaje na mestu i ponovo izbija sa nekog drugog mesta. Uz svaki popravak, zapitajte se: “Da li ovo otklanja uzrok greške ili ga čini nevidljivim?” Jednom kada pronađete osnovni uzrok, popravak je obično manji, robusniji i trajniji.

Oprez: Tiho gutanje izuzetka (prazno ulov) ne rješava grešku; ona samo prikriva i onemogućava buduću dijagnozu. Ako AI predlaže takvo "rješenje", nemojte ga prihvatiti bez preispitivanja korijenskog uzroka.

Uobičajene greške

  • Postavljanje pitanja bez dokaza. Dvosmislene rečenice guraju model u halucinaciju; Dajte punu grešku, trag i unos.
  • Zaključavanje prve hipoteze. Prvi prijedlog AI možda nije najvjerovatniji; Počnite s najjeftinijom hipotezom kojom se može kontrolirati.
  • Krpanje simptoma i propuštanje osnovnog uzroka. Vraća se utišana greška.
  • Zatvaranje popravka bez provjere. Vidite u proizvodnom stanju da greška zapravo nestaje.
  • Ne pišem regresijske testove. Ako se ne dodaju testovi, ista greška će se tiho vratiti u kasnijim verzijama.

Ukratko

U otklanjanju grešaka, moć AI je direktno proporcionalna dokazu koji joj date: bez pune poruke o grešci, praćenja steka, inputa za pokretanje i očekivanog ponašanja, model samo nagađa. Disciplinovani tok – razjasniti simptome, prikupiti dokaze, generisati hipotezu, testirati najjeftinijom kontrolom, popraviti osnovni uzrok, potvrditi i dodati regresijsko testiranje – brzo i trajno zatvara grešku. AI je generator hipoteza; Vi ste taj koji odlučuje da je greška zaista riješena.

Zadatak aplikacije

Odaberite pravu grešku na koju ste nedavno naišli (ili reproducirajte probnu grešku). Prvo uradite korak "minimalne reprodukcije"; Uklonite najmanji kod i unos koji pokreće grešku. Zatim uzmite 3 moguća uzroka i metode testiranja od AI pomoću šablona „generiranje hipoteza zasnovanih na dokazima“. Sami testirajte najjeftiniju hipotezu, pronađite osnovni uzrok, popravite ga i na kraju napišite regresijski test koji će uhvatiti ovu grešku u budućnosti i potvrditi da je test zaista pokvaren.

kontrolna lista

  • [ ] Smanjujem grešku na najmanji ponovljivi uzorak prije nego što je premjestim na AI.
  • [ ] U prompt dodajem punu poruku o grešci, praćenje steka, unos i očekivano ponašanje.
  • [ ] Počinjem s najjeftinijim kontrolisanim, a da se ne zatvaram u jednu hipotezu.
  • [ ] Potvrđujem da sam riješio osnovni uzrok umjesto da zakrpim simptom.
  • [ ] Primećujem da popravka zapravo popravlja grešku.
  • [ ] Dodajem regresijski test za svaku riješenu grešku.