Enhet 1 / 12

Artificiell intelligens för mjukvaruteam: arbetsmodell och gränser

Vinster:

  • Förmåga att förklara hur en kodningsassistent fungerar som språkmodell och begreppen token, kontextfönster, hallucination
  • Förmåga att särskilja mjukvaruuppgifter där AI är stark och svag med en mental karta
  • Förmåga att tillämpa den grundläggande arbetscykeln föreslå-producera-verifiera på sina egna uppgifter

En mjukvaruutvecklares dag ägnas sällan åt "att skriva kod från grunden." Realtid; Att läsa koden som skrivits av någon annan, försöka återskapa en bugg, skanna loggen (loggrader som produceras av applikationen medan den körs), skriva tester, skriva en PR (pull request - en sammanslagningsförfrågan där en kodändring skickas in för teamgranskning) förklaring och uppdatering av dokumentationen. Artificiell intelligens (AI) är en hastighetsmultiplikator som kan röra nästan alla dessa osynliga jobb. Men det första villkoret för att använda det säkert är att korrekt förstå vad det är och vad det inte är.

I den här enheten förklarar vi först den underliggande tekniken för en kodningsassistent på ett enkelt språk; sedan skapar vi en mental karta över modellens styrkor och svagheter; Slutligen etablerar vi den grundläggande arbetsdisciplinen som vi kommer att använda genom hela modulen: föreslå, producera, verifiera. Dessa tre steg är ryggraden i de kommande elva enheterna.

Obs: Denna modul är en allmän utbildning. I säkerhetskritisk programvara (betalningshantering, hälsovård, autentisering, kritisk infrastruktur) är AI-utdata inte ett substitut för granskning och godkännande av en kvalificerad ingenjör. AI är en assistent; Undertecknaren är ingenjören.

Vad gör egentligen en kodningsassistent?

De flesta kodningsassistenter är byggda på en stor språkmodell (LLM – en AI som tränas på enorma mängder text och kod som förutsäger nästa mest troliga "bit"). Modellen "förstår" inte koden som en människa; Det genererar den mest sannolika fortsättningen på sammanhanget du ger det, baserat på mönstren den lär sig från en enorm pool av exempel. Denna till synes enkla mekanism ger förvånansvärt skickliga resultat i praktiken - eftersom de flesta program består av upprepade mönster: en HTTP-förfrågan, en loop, en nollkontroll, ett testmönster.

Tre termer är kritiska här. Token är den minsta enhet som modellen bearbetar genom att dela texten; Det är ungefär några bokstäver eller en del av ett ord. Kontextfönstret är mängden tokens som modellen kan "se" på en gång; Din kod, felmeddelande och instruktion måste passa i det här fönstret. En uppmaning är alla instruktioner och sammanhang du ger till modellen. Kvaliteten på resultatet du får beror direkt på dessa två: ju bättre sammanhang och tydligare instruktioner du ger modellen, desto bättre resultat får du. Dålig input ger dålig utdata, även om det är en smart modell - den klassiska "skräp in, skräp ut"-regeln för programvara gäller även för AI.

Styrkor och svagheter Karta

För att styra AI till rätt jobb är det nödvändigt att veta var den lyser och var den snubblar. Att memorera den här kartan kommer att få dig att undra med varje nästa uppdrag: "Ska jag lägga ut det här jobbet till AI eller göra det själv?" Det låter dig svara på frågan på några sekunder.

Dess styrkor är: Generera boilerplate-kod, översätta från ett språk till ett annat, skriva ett reguljärt uttryck (regex), beskriva en funktion, skapa ett testskelett, tolka ett felmeddelande, utarbeta dokumentation, föreslå variabel-/funktionsnamn och mindre omfaktorer (förbättra strukturen av koden utan att ändra dess beteende).

Svagheter: Att känna till dina företagsspecifika affärsregler, komma ihåg hela din kodbas, faktiskt köra och verifiera koden, känna till de senaste biblioteksversionerna med säkerhet, upptäcka säkerhetsbrister med hundra procent garanti. Det farligaste är hallucinationer: modellen uppfinner en obefintlig funktion, bibliotek eller API (gränssnitt som möjliggör datautbyte mellan applikationer) på ett mycket övertygande språk. Denna risk kan faktiskt vändas till din fördel, eftersom koden, till skillnad från vanlig text, kan testas för att se om den "fungerar" - hoppa bara inte över verifieringssteget.

Typ av uppdrag

AI:s roll

mannens roll

Producera pannplåt/skelett

producerar utkast

Anpassar sig, recenserar

Kodbeskrivning

Ger en snabb sammanfattning

Verifierar den kritiska delen i koden

skriva prov

Case föreslår

Bekräftar täckning och noggrannhet

Säkerhetskritisk logik

hjälpsam idé

Beslut och ansvar vilar helt på människor.

API/biblioteksanvändning

Genererar prov

Verifierar existens och version

arkitektoniskt beslut

Typer av alternativ

Väljer och försvarar att känna till sammanhanget

Steg för steg: Grundläggande arbetscykel

  1. Förtydliga uppgiften. Om du inte kan skriva vad du vill i en mening, så kan inte modellen heller. Ju tidigare osäkerhet sipprar in i input, desto större växer den i output.
  2. Ge sammanhang. Lägg till relevant kod, fullständigt felmeddelande, språk-/ramversion och begränsningar i prompten. Säg inte "fixa det här", säg "Python 3.11, FastAPI 0.110; den här funktionen ger ett 500-fel, den exploderar när förfrågan är tom".
  3. Imponerande roll och format. Ett ramverk som "Du är en senior Go-utvecklare; ge bara koden och en motivering med två meningar" fokuserar resultatet.
  4. Be om små. Dela upp det i steg snarare än en gigantisk begäran; Verifiera varje steg separat. Stora förändringar är riskabla eftersom de är svåra att verifiera och benägna att dölja fel.
  5. Kontrollera. Kör den, testa den, läs den visuellt. Overifierad AI-kod är en "skiss", inte en "lösning". Detta är det mest icke förhandlingsbara steget i cykeln.

Tre minifodral

Fall 1 — Tidsbesparingarna är verkliga men blygsamma. När ett lag skapade nya CRUD-slutpunkter (Skapa-Läs-Uppdatera-Ta bort) med AI, sjönk tiden för första utkast från cirka 40 minuter till 8 minuter. Men med granskning och testning var den totala tiden 25 minuter; så den verkliga vinsten är från 40 till 25, cirka 38%. Denna takt, mätt istället för förväntan om "vi har accelererat 10 gånger", är en hållbar vinst.

Fall 2 — Hallucination är kostsamt. En utvecklare använde AI-föreslagna requests.get_json()-anropet utan validering; Det fanns ingen sådan metod (exakt response.json()). 20 minuter gick förlorade när koden inte kompilerades. Ett enkelt "finns den här metoden verkligen?" verifiering skulle återställa förlusten.

Fall 3 – Bra sammanhang fördubblar produktionen. För samma bugg skrev en utvecklare helt enkelt "Jag får ett fel" och den andra lade till hela stackspårningen, versionen och ingångsexemplet. Den senare fick rätt lösning vid första försöket; Den första gick tre varv. Skillnaden låg inte i modellen, utan i ingången.

Fyra kopieringsbara mallar

En allmän, kraftfull startuppmaning:

Roll: Du är en erfaren {{language}}-utvecklare. Uppgift: {{what_want}}Kontext:- Ramverk/version: {{framework_and_version}}- Begränsningar: {{prestanda, stil, beroenderegler}}Regler:- Använd inte obefintlig bibliotek/funktion; Om du inte är säker, markera det som "verifiera". - Ge först en kort plan, sedan koden, sedan 2 motiveringssatser. - Ta fram testbar, fungerande kod.

Så här filtrerar du tillbaka osäkerhet i modellen:

Innan du löser uppgiften nedan, lista MINST 3 punkter som du tycker saknas eller är otydliga som frågor. SKRIV INTE kod innan jag svarar. Uppgift: {{uppgift}}

För att få utdata självkontrollerad:

Du har skapat följande kod. Ändra nu din roll och kritisera den här koden:- Lista 3 fall (kantfall) som kanske inte fungerar.- Finns det några API:er/funktioner du kunde ha hittat på? Mark.- Ge korrigerad version.Kod:{{code}}

För att dela upp ett beslut i alternativ:

Föreslå 2-3 lösningar för {{problem}}. För varje: kort beskrivning, plus/minus, när man ska välja. Ge i tabellform. Välj INTE åt mig; bara förtydliga alternativet.

Svag prompt / Stark prompt

Svag: "Åtgärda felet i den här koden." (Vilket fel? Vilket språk? Vilket är det förväntade beteendet?)
Stark: "Python 3.11 / FastAPI 0.110. Följande slutpunkt returnerar 500 med KeyError när förfrågningskroppen blir tom; jag vill att den ska returnera 400 och ett meningsfullt meddelande på tom kropp. Förklara först orsaken, ge sedan den korrigerade funktionen, skriv sedan ett test för detta scenario. [kod]"

Kraftfull version; Det ger språk, version, faktiska fel, förväntat beteende och utdataformat. Modellen behöver inte längre förutsäga.

Vanliga misstag

  • Förtroende utan verifiering. Det vanligaste och dyraste misstaget. Säg inte "löst" förrän koden är kompilerad och testad.
  • Att ställa frågor utan sammanhang. Svaret utan version, feltext och begränsningar är generiskt och ofta fel.
  • En stor förfrågan. Att inte kunna begära och granska en 300-rads produktion på en gång gör misstag osynliga.
  • Att ta modellens självförtroende som bevis. AI kan med säkerhet säga något fel; Ton är inte en indikator på noggrannhet.
  • Klistrar slumpmässigt in företagets hemlighet. Privata nycklar, kunddata eller privat källkod ska inte matas in i ej godkända verktyg (vi kommer att fördjupa oss i detta ämne i del 10).
Tips: Behandla varje AI-utdata som "det här är ett utkast." Denna enda mentala vana släcker de flesta av riskerna du kommer att se under hela modulen.

Sammanfattningsvis

En kodningsassistent är en språkmodell som förutsäger nästa mest sannolika fragment; Den förstår inte koden, den producerar mönster. Det är därför han är stark i repetitiva, formella jobb; Det bör användas med försiktighet för arbete som kräver verifiering som är specifik för ditt sammanhang. Den största risken är hallucinationer, och det enda motgiftet är verifiering. Disciplinen vi kommer att följa under hela modulen är tydlig: förtydliga uppgiften, ge sammanhang, be om små, validera varje leverans.

Applikationsuppgift

Skriv ner tre programvaruuppgifter du gjorde den senaste veckan (t.ex. en buggfix, ett test, en README-uppdatering). Titta på "styrkor och svagheter kartan" för var och en och beskriv i en mening vad din och AI:s roll skulle vara om du hade AI:n att göra detta. Ge sedan en av dessa uppgifter till AI med mallen "startprompt" ovan och kör och verifiera utdata; Notera hur många minuter du sparat och hur många misstag du var tvungen att åtgärda.

checklista

  • [ ] Jag insåg att LLM producerar mönster, inte "förstår" kod.
  • [ ] Jag kan förklara begreppen token, kontextfönster och prompt i en mening.
  • [ ] Jag kan skilja mellan typer av uppgifter där AI är stark och svag.
  • [ ] Jag vet vad en hallucination är och det enda motgiftet är verifiering.
  • [ ] Jag anpassade cykeln "föreslå, producera, verifiera" till min egen uppgift.
  • [ ] Jag kan visa skillnaden mellan en stark uppmaning och en svag prompt i ett konkret exempel.