Jedinica 6 / 12

Otklanjanje pogrešaka i analiza uzroka

Dobici:

  • Sposobnost smanjivanja buga na najmanju instancu koja se može ponoviti i premjestiti ga na AI uz potpuni dokaz
  • Sposobnost testiranja hipoteza utemeljenih na dokazima uz najjeftiniju kontrolu i pronalaženje temeljnog uzroka
  • Sposobnost rješavanja temeljnog uzroka i njegovog osiguranja regresijskim testom umjesto krpanjem simptoma

Otklanjanje pogrešaka je postupak otkrivanja zašto se softver ponaša neočekivano i popravljanja toga. To je posao na kojem programer provodi najviše vremena i na kojem se najviše umara; Jer većinu vremena greška nije tamo gdje se pojavi, već je skrivena nekoliko koraka iza. AI je moćan misaoni partner koji ubrzava ovo istraživanje — ali samo ako mu date prave dokaze. Otklanjanje pogrešaka bez dokaza područje je u kojem AI proizvodi najviše halucinacija.

U ovoj jedinici uspostavljamo discipliniran tijek od generiranja pogreške do otkrivanja temeljnog uzroka: razjašnjavanje simptoma, prikupljanje dokaza (poruka o pogrešci, praćenje niza, dnevnik, unos), generiranje hipoteze, testiranje hipoteze i potvrđivanje popravka. AI pomaže na svakom koraku; ali "popravljena" odluka se donosi kada se vidi da je greška zapravo nestala.

Zašto su dokazi sve?

LLM ne vidi pogreške na način na koji ih vi vidite; On zna samo ono što mu kažeš. Rečenica poput "Aplikacija se ruši" ne daje modelu gotovo nikakve informacije, a model ispunjava prazninu predviđanjem - to jest, halucinacijom. S druge strane, potpuna poruka o pogrešci, praćenje hrpe — raščlamba funkcija kroz koje se pozive dogodila pogreška, unos koji je pokrenuo pogrešku i što se očekivalo itd. S obzirom na opaženo ponašanje, model može rangirati stvarne vjerojatnosti.

U otklanjanju pogrešaka, razmišljajte o umjetnoj inteligenciji kao o pomoćniku detektiva: što više dokaza prezentirate, točniju će hipotezu generirati. Ako nema dokaza, pomoćnik će samo nagađati i može vas odvesti na krivi trag.

Savjet: Prije prijenosa buga na AI, smanjite ga na najmanji primjer koji se može ponoviti. Najmanji kôd i unos koji pokreće pogrešku radikalno olakšavaju stvari i vama i modelu; najčešće tijekom ove redukcije sami pronađete uzrok.

Korak po korak: Tijek analize uzroka

  1. Pojasnite simptom. "Što se događa, što ste očekivali da će se dogoditi?" Napiši to dvoje u jednoj rečenici.
  2. Prikupiti dokaze. Potpuna poruka o pogrešci, praćenje snopa, relevantni redovi dnevnika, unos koji pokreće, informacije o verziji.
  3. Neka se hipoteza generira. Od AI “3 moguća uzroka koji objašnjavaju ovaj simptom i kako da testiram svaki od njih?” pitati.
  4. Prvo testirajte najjeftiniju hipotezu. Dodajte dnevnik, ispišite vrijednost, pokrenite test. Potvrđuju li dokazi hipotezu?
  5. Riješite temeljni uzrok, a ne simptom. Umjesto da utišate simptom flasterom, riješite glavni uzrok.
  6. Potvrdite i dodajte regresijsko testiranje. Vidjeti kako greška nestaje; Zatim napišite test koji će uhvatiti tu grešku kako se više ne bi vraćala.

Tri mini kućišta

Slučaj 1 — Praćenje steka dovelo je do ispravne datoteke. Aplikacija je vraćala pogrešku 500 na određene zahtjeve. Razvojni programer je AI-ju dao puno praćenje hrpe i zahtjev za pokretanje; Model je pretpostavio da je pogrešku uzrokovala vrijednost None u sloju parsiranja datuma. Programer je dodao zapisnik u taj redak, potvrdio ga i riješio za 15 minuta; 2 sata su potrošena dan prije na nedokazane pokuse.

Slučaj 2 — Halucinacije su dovele do pogrešnog traga. Drugi programer jednostavno je napisao "veza s bazom podataka pada". AI je optužio postavku skupa veza bez ikakvih dokaza; Programer je proveo 40 minuta petljajući s ovom postavkom. Pravi uzrok bilo je vremensko ograničenje na strani mreže i otkriveno je tek gledanjem zapisa. Pouka: hipoteza postavljena bez dokaza samo je vjerojatna, a ne pouzdana.

Slučaj 3 — Uočena nesigurna pogreška. Postojao je test koji je povremeno padao. AI je dobio testni kod, poruku o neuspjehu i informaciju "ponekad prolazi, ponekad ne uspijeva"; model je ukazao na zajedničku ovisnost vremena/redoslijeda testova. Pregled je potvrdio da se test temeljio na lokalnom vremenu sustava. Nakon što je sat fiksiran (ismijavan), test je postao stabilan.

Četiri predloška za kopiranje

Generiranje hipoteza temeljenih na dokazima:

Otklanjam grešku. Dokazi u nastavku.- Očekivano ponašanje: {{expected}}- Uočeno ponašanje: {{observed}}- Poruka o pogrešci/trag hrpe: {{trace}}- Unos pokretanja: {{input}}- Okruženje/verzija: {{version}}Navedite 3 NAJVJEROJATNIJA temeljna uzroka koji objašnjavaju ovaj simptom. Za svaki: kako da testiram (najjeftinija provjera) i kako to popraviti ako je istina. Ako su dokazi nedostatni, recite mi koje dodatne informacije trebate.

Tumačenje traga stoga:

Pročitajte ovo praćenje hrpe. Razlikujte u kojem retku pogreška VJEROJATNO počinje (korijen) i koji su redovi samo nastavci lanca. Predložite 1-2 mjesta za prvo pogledati. Povezani kod:{{code}}Trag:{{trace}}

Minimalno repro oduzimanje:

Kod u nastavku stvara pogrešku. Smanjite ga na NAJMANJU instancu koja još uvijek pokreće pogrešku, ali odbacuje sve nepotrebno. Nemojte pretpostavljati da svaki dio koji uklonite ne utječe na pogrešku, već dodajte napomenu koja kaže "ako pogreška nestane kada ovo uklonite, to je razlog".{{code}}

Validacija nakon ispravka i regresijsko testiranje:

Pretpostavimo da je temeljni uzrok {{cause}} i napravim sljedeći popravak: {{popravak}}.1) Popravlja li ovaj popravak zapravo simptom, hoće li imati nuspojave?2) Napišite regresijski test koji će otkriti ovu pogrešku u budućnosti.

Slab upit / Jak upit

Slab: "Kôd ne radi, zašto?"
Snažno: "Čvor 20 / Express. POST /orders vraća 500 kada su stavke prazan niz u tijelu; trebalo je vratiti 400. Stack trace: TypeError: Nije moguće pročitati svojstva nedefiniranog (čitanje '0') — priloženo je puno praćenje i pridruženi rukovatelj. Dajte mi 3 najvjerojatnija uzroka koji objašnjavaju ovaj simptom i kako testirati svaki. [trag + kod]"

Snažna verzija; Daje okruženje, krajnju točku, unos okidača, točnu vrstu pogreške i očekivano ponašanje. Model više ne može davati predviđanja, već analizu.

korak

AI-ov doprinos

vaša kontrola

prikupljanje dokaza

Koji su dokazi potrebni, podsjeća

Stvarno prikuplja dokaze

generiranje hipoteza

Navedite moguće razloge

Određuje prioritete s kontekstom

testiranje hipoteza

Preporuča metodu ispitivanja

Osobno upravlja i promatra

ispravak

patch preporučuje

Rješava li temeljni uzrok? Istina je.

regresija

piše test

Provjerava je li test pokvaren

Rješavanje temeljnog uzroka, a ne simptoma

Većinu vremena AI će predložiti zakrpu koja brzo utišava simptom: dodajte pokušaj/hvatanje, stavite nultu provjeru, progutajte pogrešku. Ovo je ponekad točno, često opasno; jer izvorni uzrok ostaje na mjestu i izbija opet s nekog drugog mjesta. Uz svaki popravak, zapitajte se: "Popravlja li ovo uzrok pogreške ili je čini nevidljivom?" Nakon što pronađete glavni uzrok, popravak je obično manji, robusniji i trajniji.

Oprez: Tiho gutanje iznimke (empty catch) ne rješava pogrešku; samo prikriva i onemogućuje buduću dijagnozu. Ako umjetna inteligencija predloži takvo "rješenje", nemojte ga prihvatiti bez propitivanja temeljnog uzroka.

Uobičajene greške

  • Postavljanje pitanja bez dokaza. Dvosmislene rečenice guraju model u halucinacije; Navedite punu pogrešku, praćenje i unos.
  • Zaključavanje prve hipoteze. AI-jev prvi prijedlog možda nije najvjerojatniji; Počnite s najjeftinijom kontroliranom hipotezom.
  • Krpanje simptoma i propuštanje temeljnog uzroka. Vraća se utišana pogreška.
  • Zatvaranje popravka bez provjere. Vidite u proizvodnom stanju da greška zapravo nestaje.
  • Ne pisanje regresijskih testova. Ako se ne dodaju testovi, ista će se pogreška tiho vratiti u kasnijim verzijama.

Ukratko

U otklanjanju pogrešaka, snaga umjetne inteligencije izravno je proporcionalna dokazima koje joj dajete: bez potpune poruke o pogrešci, praćenja niza, pokretačkog unosa i očekivanog ponašanja, model samo nagađa. Disciplinirani tijek—razjasnite simptome, prikupite dokaze, generirajte hipotezu, testirajte uz najjeftiniju kontrolu, popravite glavni uzrok, potvrdite i dodajte regresijsko testiranje—brzo i trajno zatvara bug. AI je generator hipoteza; Vi ste taj koji odlučuje da je greška zapravo riješena.

Zadatak aplikacije

Odaberite pravi bug na koji ste nedavno naišli (ili reproducirajte probni bug). Najprije napravite korak "minimalne reprodukcije"; Uklonite najmanji kôd i unos koji pokreće pogrešku. Zatim nabavite 3 moguća uzroka i metode testiranja od umjetne inteligencije s predloškom "generiranje hipoteza temeljenih na dokazima". Sami testirajte najjeftiniju hipotezu, pronađite glavni uzrok, popravite ga i na kraju napišite regresijski test koji će otkriti ovu pogrešku u budućnosti i potvrditi da je test stvarno pokvaren.

popis za provjeru

  • [ ] Svodim pogrešku na najmanji uzorak koji se može ponoviti prije nego što ga premjestim u AI.
  • [ ] U upit dodajem potpunu poruku o pogrešci, praćenje hrpe, unos i očekivano ponašanje.
  • [ ] Počinjem s najjeftinijim kontroliranim, bez zatvaranja u jednu hipotezu.
  • [ ] Potvrđujem da sam riješio glavni uzrok umjesto da popravim simptom.
  • [ ] Primjećujem da popravak zapravo popravlja grešku.
  • [ ] Dodajem regresijski test za svaku riješenu grešku.