Kasu:
- Oskus selgitada, kuidas kodeerimisassistent keelemudelina töötab ja mis on märgi, kontekstiakna ja hallutsinatsiooni mõisted
- Oskus vaimse kaardiga eristada tarkvaraülesandeid, kus tehisintellekt on tugev ja nõrk
- Oskus rakendada oma tööülesannete jaoks põhilist töötsüklit ettepaneku-tootma-kontrolli
Tarkvaraarendaja päev möödub harva "koodi nullist kirjutamisele". Reaalajas; Kellegi teise kirjutatud koodi lugemine, vea reprodutseerimine, logi skannimine (töötamise ajal rakenduse poolt toodetud logiread), testide kirjutamine, PR (pull request – liitmistaotlus, kus koodi muudatus esitatakse meeskonna ülevaatamiseks) seletuse kirjutamine ja dokumentatsiooni uuendamine. Tehisintellekt (AI) on kiiruse kordistaja, mis võib puudutada peaaegu kõiki neid seninägematuid töid. Kuid selle ohutu kasutamise esimene tingimus on õigesti aru saada, mis see on ja mis mitte.
Selles üksuses selgitame esmalt lihtsas keeles kodeerimisassistendi põhitehnoloogiat; seejärel koostame mentaalse kaardi mudeli tugevatest ja nõrkadest külgedest; Lõpuks kehtestame põhilise töödistsipliini, mida kasutame kogu mooduli jooksul: pakume välja, koostame, kontrollime. Need kolm sammu on järgmise üheteistkümne üksuse selgroog.
Märkus. See moodul on üldkoolitus. Turvakriitilises tarkvaras (maksete töötlemine, tervishoid, autentimine, kriitiline infrastruktuur) ei asenda tehisintellekti väljund kvalifitseeritud inseneri läbivaatamist ja heakskiitu. AI on assistent; Allakirjutaja on insener.
Mida kodeerimisassistent tegelikult teeb?
Enamik kodeerimisassistente on üles ehitatud suurele keelemudelile (LLM – tehisintellekt, mis on treenitud tohutul hulgal teksti- ja koodikogustel, mis ennustab järgmise kõige tõenäolisema "tüki"). Mudel ei "mõista" koodi nagu inimene; See loob teie antud konteksti kõige tõenäolisema jätku, tuginedes mustritele, mida ta õpib tohutul hulgal näidetel. See pealtnäha lihtne mehhanism annab praktikas üllatavalt asjatundlikke tulemusi – sest enamik tarkvara koosneb korduvatest mustritest: HTTP päring, silmus, nullkontroll, testmuster.
Kolm terminit on siin kriitilised. Token on väikseim ühik, mida mudel teksti jagamise teel töötleb; See on umbes paar tähte või sõna osa. Kontekstiaken on märkide hulk, mida mudel saab korraga "näha"; Teie kood, veateade ja juhis peavad sellesse aknasse mahtuma. Viip on kõik juhised ja kontekst, mille mudelile annate. Saadud väljundi kvaliteet sõltub otseselt neist kahest: mida parema konteksti ja selgemad juhised mudelile annate, seda parema tulemuse saate. Halb sisend annab halva väljundi, isegi kui tegemist on nutika mudeliga — klassikaline tarkvara reegel “prügi sisse, prügi välja” kehtib ka AI puhul.
Tugevuste ja nõrkuste kaart
Tehisintellekti õigetele töökohtadele suunamiseks on vaja teada, kus see paistab ja kuhu komistab. Selle kaardi päheõppimine paneb teid iga järgmise missiooni puhul mõtlema: "Kas ma peaksin selle töö tellima AI-lt või tegema seda ise?" See võimaldab teil vastata küsimusele sekunditega.
Selle tugevad küljed on: katlakoodi genereerimine, ühest keelest teise tõlkimine, regulaaravaldise (regex) kirjutamine, funktsiooni kirjeldamine, testskeleti loomine, veateate tõlgendamine, dokumentatsiooni koostamine, muutujate/funktsioonide nimede soovitamine ja väiksemad ümbertegemised (koodi struktuuri parandamine selle käitumist muutmata).
Nõrgad küljed: oma ettevõttespetsiifiliste ärireeglite tundmine, kogu koodibaasi meeldejätmine, koodi reaalne käitamine ja kontrollimine, uusimate teegiversioonide kindel tundmine, turvaaukude tuvastamine sajaprotsendilise garantiiga. Kõige ohtlikum on hallutsinatsioon: mudel mõtleb väga veenvas keeles välja olematu funktsiooni, raamatukogu ehk API (rakenduste vahelist andmevahetust võimaldava liidese). Selle riski saab tegelikult enda kasuks pöörata, kuna erinevalt lihttekstist saab koodi testida, et näha, kas see "töötab" – lihtsalt ärge jätke kontrollimisetappi vahele.
Missiooni tüüp
AI roll
mehe roll
Valmistage katlaplaat/skelett
toodab mustandit
Kohandab, arvustab
Koodi kirjeldus
Annab kiire kokkuvõtte
Kontrollib koodi kriitilist osa
testide kirjutamine
Case soovitab
Kinnitab katvust ja täpsust
Turvakriitiline loogika
kasulik idee
Otsused ja vastutus lasub täielikult inimestel.
API/teegi kasutamine
Loob proovi
Kinnitab olemasolu ja versiooni
arhitektuurne otsus
Omamoodi valikud
Valib ja kaitseb konteksti tundes
Samm-sammult: põhiline töötsükkel
- Selgitage ülesannet. Kui sa ei suuda ühe lausega kirjutada, mida tahad, ei saa ka modell. Mida varem ebakindlus sisendisse imbub, seda suuremaks see väljundis kasvab.
- Andke kontekst. Lisage viipale asjakohane kood, täielik veateade, keele/raamistiku versioon ja piirangud. Ärge öelge "fix this", öelge "Python 3.11, FastAPI 0.110; see funktsioon annab 500 vea, see plahvatab, kui päringu keha on tühi".
- Kehtestamise roll ja formaat. Raamistik nagu "Olete Go vanem arendaja; andke lihtsalt kood ja kahelauseline põhjendus" keskendub väljundile.
- Küsi väikest. Jaotage see pigem sammudeks kui üheks hiiglaslikuks taotluseks; Kontrollige iga sammu eraldi. Suured muudatused on riskantsed, kuna neid on raske kontrollida ja need võivad vigu varjata.
- Kinnitage. Käivitage, katsetage, lugege visuaalselt. Kontrollimata AI kood on "visand", mitte "lahendus". See on tsükli kõige vaieldamatum samm.
Kolm miniümbrist
Juhtum 1 – aja kokkuhoid on tõeline, kuid tagasihoidlik. Kui meeskond koostas tehisintellektiga uued CRUD-i (Loo-Loe-Uuenda-Kustuta) lõpp-punktid, vähenes esimese mustandi aeg ligikaudu 40 minutilt 8 minutile. Ülevaatamise ja testimisega oli aga koguaeg 25 minutit; seega on tegelik kasum 40–25, umbes 38%. See määr, mõõdetuna ootuse "oleme 10 korda kiirendanud" asemel, on jätkusuutlik kasum.
Juhtum 2 – hallutsinatsioonid on kulukad. Arendaja kasutas tehisintellekti soovitatud kõnet requests.get_json() ilma kinnitamiseta; Sellist meetodit ei olnud (täpselt response.json()). 20 minutit läks kaduma, kui koodi ei kompileeritud. Lihtne "kas see meetod on tõesti olemas?" kontrollimine lähtestaks kaotuse.
3. juhtum – hea kontekst kahekordistab väljundi. Sama vea puhul kirjutas üks arendaja lihtsalt "I'm get an error" ja teine lisas kogu pinu jälje, versiooni ja sisendi näidise. Viimane sai esimesel katsel õige lahenduse; Esimesel kulus kolm pööret. Erinevus ei olnud mudelis, vaid sisendis.
Neli kopeeritavat malli
Üldotstarbeline võimas käivitusviip:
Roll: olete kogenud keele {{keel}} arendaja. Ülesanne: {{what_want}}Kontekst:- Raam/versioon: {{framework_and_version}}- Piirangud: {{jõudlus, stiil, sõltuvusreeglid}}Reeglid:- Ärge kasutage olematut teeki/funktsiooni; Kui te pole kindel, märkige see kui "kinnita". - Esmalt andke lühike plaan, seejärel kood, seejärel 2 lauset põhjendust. - Looge testitav, töötav kood.
Ebakindluse mudelisse tagasi filtreerimiseks tehke järgmist.
Enne alloleva ülesande lahendamist loetle küsimustena VÄHEMALT 3 punkti, mis sulle puuduvad või on ebaselged. ÄRGE kirjutage koodi enne, kui ma vastan.Ülesanne: {{ülesanne}}
Väljundi enesekontrollimiseks tehke järgmist.
Olete koostanud järgmise koodi. Nüüd muutke oma rolli ja kritiseerige seda koodi: - Loetlege 3 juhtumit (servajuhtumit), mis ei pruugi töötada. - Kas on API-sid/funktsioone, mida oleksite võinud välja mõelda? Märgi. – Sisesta parandatud versioon. Kood:{{kood}}
Otsuse jaotamiseks valikuteks tehke järgmist.
Soovitage {{probleem}} jaoks 2–3 lahendusviisi. Igaühe kohta: lühike kirjeldus, pluss/miinus, millal valida. Esitage tabeli kujul. ÄRGE vali minu jaoks; lihtsalt selgitage valikut.
Nõrk viip / Tugev viip
Nõrk: "Parandage selle koodi viga." (Milline viga? Mis keeles? Milline on eeldatav käitumine?)
Tugev: "Python 3.11 / FastAPI 0.110. Järgmine lõpp-punkt tagastab 500 koos KeyErroriga, kui päringu keha tuleb tühjaks; ma tahan, et see tagastaks 400 ja sisulise sõnumi tühjale kehale. Esmalt selgitage põhjust, seejärel esitage parandatud funktsioon, seejärel kirjutage selle stsenaariumi jaoks test. [kood]"
Võimas versioon; See annab keele, versiooni, tegeliku vea, eeldatava käitumise ja väljundvormingu. Mudel ei pea enam ennustama.
Levinud vead
- Usaldus ilma kontrollita. Kõige tavalisem ja kallim viga. Ärge öelge "lahendatud" enne, kui kood on koostatud ja testitud.
- Küsimuste esitamine ilma kontekstita. Vastus ilma versiooni, veateksti ja piiranguteta on üldine ja sageli vale.
- Üks suur palve. Kui 300-realist toodangut ei saa korraga taotleda ja üle vaadata, muutuvad vead nähtamatuks.
- Modelli enesekindluse eksimine tõestuseks. AI võib enesekindlalt öelda midagi valesti; Toon ei ole täpsuse näitaja.
- Ettevõtte saladuse juhuslik kleepimine. Privaatvõtmeid, kliendiandmeid ega privaatset lähtekoodi ei tohiks sisestada kinnitamata tööriistadesse (süveneme sellesse teemasse 10. üksuses).
Näpunäide: käsitlege iga AI väljundit kui "see on mustand". See üksik vaimne harjumus kustutab enamiku riskidest, mida näete kogu mooduli jooksul.
Kokkuvõttes
Kodeerimisassistent on keelemudel, mis ennustab järgmist kõige tõenäolisemat fragmenti; See ei saa koodist aru, toodab mustreid. Sellepärast on ta tugev korduvates, vormelitöös; Seda tuleks kasutada ettevaatusega töö puhul, mis nõuab teie kontekstile vastavat kinnitamist. Suurim risk on hallutsinatsioonid ja ainus vastumürk on kontrollimine. Distsipliin, mida järgime kogu mooduli jooksul, on selge: täpsustage ülesanne, andke kontekst, küsige väikest, kinnitage iga tulemus.
Rakenduse ülesanne
Kirjutage üles kolm tarkvaraülesannet, mida te eelmisel nädalal tegite (nt veaparandus, test, README värskendus). Vaadake igaühe tugevate ja nõrkade külgede kaarti ja kirjeldage ühe lausega, milline oleks teie ja tehisintellekti roll, kui tehisintellekt seda teeks. Seejärel andke üks neist ülesannetest tehisintellektile ülaltoodud malliga "Start prompt" ning käivitage ja kontrollige väljundit; Pange tähele, mitu minutit säästsite ja kui palju vigu pidite parandama.
kontrollnimekiri
- [ ] Sain aru, et LLM toodab mustreid, mitte "mõistab" koodi.
- [ ] Oskan ühe lausega lahti seletada tokeni, kontekstiakna ja viipe mõisted.
- [ ] Oskan eristada selliseid ülesandeid, kus tehisintellekt on tugev ja nõrk.
- [ ] Ma tean, mis on hallutsinatsioon ja ainus vastumürk on kontrollimine.
- [ ] Kohandasin tsükli "ettepanek, toota, kontrolli" oma ülesande järgi.
- [ ] Võin näidata erinevust tugeva ja nõrga viipe vahel konkreetses näites.