Eenheid 2 / 12

Scripting en automatisch aanvullen

Winst:

  • Mogelijkheid om de chatmodus toe te wijzen aan het juiste taaktype met inline voltooiing
  • Mogelijkheid om krachtige productieprompts te schrijven die input-/outputcontracten, randgevallen en stijlbeperkingen omvatten
  • Mogelijkheid om gegenereerde code en eventuele nieuwe voorgestelde afhankelijkheden te valideren voordat deze worden samengevoegd

Het eerste contactpunt van een ontwikkelaar met AI is vaak automatisch aanvullen – een functie die de volgende regel voorstelt terwijl je typt – of ‘typ die functie’ in een chatvenster. Ze gebruiken allebei dezelfde motor, maar vereisen verschillende disciplines. In dit onderdeel transformeren we het genereren van code van een willekeurig 'opschrijven' naar een technische stap waarvan de output voorspelbaar en verifieerbaar is.

Het doel is om AI te veranderen van een tool die je typemachine versnelt in een leerling die werkt binnen de beperkingen die je stelt. Een goed begeleide leerling bespaart tijd; Een ongeleide leerling produceert een puinhoop die je later moet opruimen.

Twee gebruiksmodi: inline voltooiing en chat

Inline voltooiing speelt een rol terwijl u in uw editor typt; U typt een functiehandtekening of een commentaarregel en de rest wordt voorgesteld. Het is geweldig voor de snelheid, maar het heeft een beperkte context: het ziet alleen code in de directe omgeving. Daarom werkt het het beste als je je intentie duidelijk in een reactie schrijft. Het //validate e-mailadres van de gebruiker, genereert bijvoorbeeld ValidationError als een ongeldige opmerking de onderstaande suggestie aanzienlijk verbetert.

De chatmodus is voor grotere en gestructureerde taken: "Voeg paginering toe aan deze klasse", "Extraheer een interface van die service". Hier heb je de luxe om rol, context en format mee te geven. De algemene regel is: voltooiing voor kleine en vloeiende taken, conversatie voor taken die nadenken en structuur vereisen.

Tip: Accepteer de voltooiingssuggestie met "Tab" niet blindelings. Lees de voorgestelde regel even; Meestal lekt hier een onjuiste variabelenaam of een omgekeerde voorwaarde.

Stappen om intentie in code te vertalen

  1. Contract definiëren. Wat is het invoer-, uitvoer- en foutgedrag van de functie? Zoals "E-mail ontvangen, normaliseren indien geldig, foutmelding genereren indien ongeldig".
  2. Geef de beperkingen aan. Geen externe afhankelijkheid gebruiken? Een specifieke stijlgids? Is er een prestatielimiet?
  3. Geef een voorbeeld. Een invoer-uitvoerpaar (“ali@x.com → geldig, ali@ → fout”) verplaatst het begrip van de intentie van het model van voorspelling naar precisie.
  4. Vraag om kleine stukjes. Eén functie, één verantwoordelijkheid. Ga dan verder met de volgende.
  5. Lees de gegenereerde code en voer deze uit. Compileren + snel handmatig proberen is de goedkoopste zekerheidsstap.

Drie mini-hoesjes

Geval 1 – Commentaargestuurde productie verhoogt de nauwkeurigheid. Een ontwikkelaar vroeg eerst om een ​​datumparseerfunctie met een lege hoofdtekst en kreeg in drie rondes het juiste resultaat. Bij de tweede poging, toen ik de functie definieerde met een commentaar van vier regels (geaccepteerde formaten, tijdzoneregel, foutconditie) en deze opvroeg, kwam de code die in de eerste ronde werkte. Hetzelfde model, dezelfde dag; het verschil was alleen de helderheid van de bedoeling.

Geval 2 — Het niet specificeren van een versie is duur. Eén team had moeite met de oude, op callback gebaseerde API die fs.promises verving in code die voor Node.js was geproduceerd. Toen de regel "Gebruik Node 20, ESM, async/await" aan de prompt werd toegevoegd, volgde de productie de eerste keer het project; Het gemiddelde van 12 minuten besteed aan correctie werd gereset.

Geval 3 — Echte winst in standaardcode. Voor een microservice waren zes nieuwe DTO's (Data Transfer Object – een eenvoudige dataklasse die gegevens tussen lagen transporteert) en hun validatieregels nodig. Wat voorheen ongeveer 90 minuten handmatig werk kostte, werd teruggebracht tot 35 minuten toen het door AI werd geproduceerd en beoordeeld; Omdat de codeherhaling hoog is en het patroon duidelijk is, werkte AI hier op het meest efficiënte gebied.

Vier kopieerbare sjablonen

Contractgebaseerde functiegeneratie:

Rol: je bent een ijverige {{taal}}-ontwikkelaar. Functiecontract:- Naam: {{naam}}- Invoer: {{types en hun betekenis}}- Uitvoer: {{type en betekenis}}- Foutstatus: {{wat wordt gegenereerd/geretourneerd wanneer}} Beperkingen: {{geen externe afhankelijkheden / stijl / prestaties}} Voorbeelden: - {{input_1}} -> {{output_1}}- {{entry_2}} -> {{error_2}}Geef eerst handtekening + kort plan en codeer vervolgens. Tests schrijven, gewoon functioneren.

Om de bestaande stijl aan te passen (aan te passen aan de codebasis):

Hieronder ziet u een voorbeeldfunctie uit ons project; Leer hier naamgeving, foutafhandeling en commentaarstijl. Schrijf een functie voor {{new_task}} met DEZELFDE stijl. Voorbeeld: {{current_code}}

Van skelet tot vulling (stomp → uitvoering):

Vul onderstaand functieskelet in volgens de TODO's in de opmerkingen. WIJZIG het handtekening- en retourtype. Maak geen helperfunctie die niet bestaat; laat me indien nodig weten "deze helper is nodig". {{skelet_kod}}

Alternatieve app-vergelijking:

Geef twee verschillende implementaties voor {{taak}}: (a) prioriteit geven aan leesbaarheid, (b) prioriteit geven aan prestaties. Schrijf onder elke zin één zin 'wanneer heeft de voorkeur'.

Zwakke prompt/sterke prompt

Zwak: "Schrijf mij een e-mailverificatiefunctie."
Strong: "TypeScript 5, alleen standaardbibliotheek. Schrijf isValidEmail(input: string): boolean. Knip spaties af, maak het niet hoofdlettergevoelig, a@b.co is geldig, a@, @b.co, lege string is ongeldig. Als je regex gaat gebruiken, wees dan niet al te complex; voeg 2 regels commentaar toe."

Krachtige versie; Retourneert de taal, versie, handtekening, randgevallen en een stijlbeperking. De gegenereerde code werkt dus en past in uw project.

Benadering

Wanneer te gebruiken

Aandacht

Inline-voltooiing

Kleine inzetstukken in stroom

Accepteer de suggestie niet zonder deze te hebben gelezen

Contractgebaseerde productie in chat

Nieuwe functie/klasse

Geef voorbeeld en randgeval

Productie per stijlmonster

Toevoegen aan bestaande code

Selecteer de huidige voorbeeldcode

skelet vulling

Handtekening vast, body blanco

Het wijzigen van de handtekening

Codeduplicatie en de afhankelijkheidsval

De AI beveelt vaak een nieuwe bibliotheek aan om zijn werk gemakkelijker te maken. Soms klopt dit, soms voegt het een onnodige afhankelijkheid toe aan uw project of suggereert het een pakket dat niet bestaat (een hallucinatie). Regel: u bevestigt elke nieuwe afhankelijkheid. Voeg het niet aan het project toe zonder te verifiëren dat het pakket daadwerkelijk bestaat, wordt onderhouden en over de juiste licentie beschikt. Meestal is een helper die al in het project zit beter dan een nieuw pakket.

Let op: Controleer de importregels die door AI worden voorgesteld. Een niet-bestaande pakketnaam (die ook kan lijken op valse pakketten genaamd "typo-squatting") verbreekt de compilatie en vormt een veiligheidsrisico.

Veel voorkomende fouten

  • De handtekening laten bepalen door het model. Als je de input/output-types niet vastlegt, komt er bij elke productie een andere signatuur en wordt integratie moeilijk.
  • Om nog maar te zwijgen van randgevallen. Lege invoer, nul, negatief getal, zeer grote waarde — als u deze niet opgeeft, schrijft het model het "gelukkige pad", waarbij de randen worden overgeslagen.
  • De suggestie combineren zonder deze te testen. Code die lijkt te werken, betekent niet dat het werkt.
  • Het accepteren van onnodige afhankelijkheid. Het toevoegen van een hele bibliotheek voor een oneliner creëert technische schulden.
  • Stijl inconsistentie. Verschillende naamgeving en foutafhandeling ten opzichte van de rest van het project zorgen ervoor dat de codebasis fragmentarisch is.

Samengevat

Het genereren van code is krachtig als u de intentie vertaalt naar een duidelijk contract. Gebruik inline voltooiing voor kleine, in-stream taken en voor taken die structuur aanbrengen in het gesprek. U specificeert invoer-/uitvoertypen, randgevallen, versie en stijl; Geef een voorbeeld van het model; verifieer elke nieuwe afhankelijkheid; en ren en lees elk geproduceerd stuk. AI betaalt zich het beste uit in formule-achtige, repetitieve code: voer het daar uit, binnen de limieten die u stelt.

Applicatie taak

Kies een echte kleine functie uit uw project die u moet schrijven. Druk het eerst af naar de AI met de sjabloon ‘contractgebaseerde functiegeneratie’, met invoer-/uitvoertypen, twee randgevallen en een stijlbeperking. Compileer de gegenereerde code en probeer deze met twee verschillende ingangen. Vraag vervolgens opnieuw dezelfde functie, deze keer "schrijf me dit" zonder enige context, en vergelijk de twee resultaten regel voor regel: welke randgevallen zijn gemist, hoeveel correcties waren er nodig?

controlelijst

  • [ ] Ik weet waar ik de chatmodus met inline voltooiing moet gebruiken.
  • [ ] Ik bepaal het input/output-contract en de randgevallen bij het genereren van functies.
  • [ ] Ik heb er een gewoonte van gemaakt om taal- en versie-informatie aan de prompt toe te voegen.
  • [ ] Ik compileer en test elk geproduceerd stuk voordat ik het assembleer.
  • [ ] Ik bevestig elke nieuwe afhankelijkheid die de AI voorstelt door het bestaan ​​en de noodzaak ervan te verifiëren.
  • [ ] Ik controleer of de gegenereerde code overeenkomt met de stijl van het project.