Gewinne:
- Möglichkeit, den Chat-Modus dem richtigen Aufgabentyp mit Inline-Abschluss zuzuordnen
- Fähigkeit, leistungsstarke Produktionsaufforderungen zu schreiben, die Eingabe-/Ausgabeverträge, Randfälle und Stilbeschränkungen umfassen
- Möglichkeit, generierten Code und alle neuen vorgeschlagenen Abhängigkeiten vor dem Zusammenführen zu validieren
Der erste Kontakt eines Entwicklers mit KI ist oft die automatische Vervollständigung – eine Funktion, die Ihnen während der Eingabe die nächste Zeile vorschlägt – oder die Aussage „Geben Sie diese Funktion ein“ in ein Chatfenster. Beide nutzen die gleiche Engine, erfordern aber unterschiedliche Disziplinen. In dieser Einheit verwandeln wir die Codegenerierung von einem zufälligen „Aufschreiben“ in einen Engineering-Schritt, dessen Ergebnis vorhersehbar und überprüfbar ist.
Das Ziel besteht darin, die KI von einem Werkzeug, das Ihre Schreibmaschine beschleunigt, in einen Lehrling zu verwandeln, der innerhalb der von Ihnen festgelegten Einschränkungen arbeitet. Ein gut geführter Lehrling spart Zeit; Ein unbegleiteter Lehrling verursacht eine Sauerei, die Sie später beseitigen müssen.
Zwei Nutzungsmodi: Inline-Vervollständigung und Chat
Die Inline-Vervollständigung kommt zum Tragen, während Sie in Ihrem Editor etwas eingeben. Sie geben eine Funktionssignatur oder eine Kommentarzeile ein und der Rest wird vorgeschlagen. Es ist großartig für die Geschwindigkeit, hat aber einen engen Kontext: Es erkennt nur Code in der unmittelbaren Umgebung. Deshalb funktioniert es am besten, wenn Sie Ihre Absicht klar in einem Kommentar formulieren. Beispiel: //validate user email, throw ValidationError if invalid comment verbessert den folgenden Vorschlag erheblich.
Der Chat-Modus ist für größere und strukturierte Aufgaben gedacht: „Paginierung zu dieser Klasse hinzufügen“, „Eine Schnittstelle dieses Dienstes extrahieren“. Hier haben Sie den Luxus, Rolle, Kontext und Format anzugeben. Generell gilt: Abschluss bei kleinen und fließenden Aufgaben, Konversation bei Aufgaben, die Nachdenken und Struktur erfordern.
Tipp: Übernehmen Sie den Vervollständigungsvorschlag mit „Tab“ nicht blind. Lesen Sie die vorgeschlagene Zeile eine Sekunde lang. Hier kommt es am häufigsten zu einem falschen Variablennamen oder einer invertierten Bedingung.
Schritte zum Übersetzen von Absichten in Code
- Vertrag definieren. Wie ist das Eingabe-, Ausgabe- und Fehlerverhalten der Funktion? Wie „E-Mail abrufen, bei Gültigkeit normalisieren, bei Ungültigkeit einen Fehler auslösen“.
- Nennen Sie die Einschränkungen. Keine externe Abhängigkeit verwenden? Ein bestimmter Styleguide? Gibt es eine Leistungsgrenze?
- Geben Sie ein Beispiel. Ein Eingabe-Ausgabe-Paar („ali@x.com → valid, ali@ → error“) verschiebt das Absichtsverständnis des Modells von der Vorhersage zur Präzision.
- Fragen Sie nach kleinen Stücken. Eine Funktion, eine Verantwortung. Fahren Sie dann mit dem nächsten fort.
- Lesen Sie den generierten Code und führen Sie ihn aus. Kompilieren + ein kurzer manueller Versuch ist der günstigste Sicherheitsschritt.
Drei Mini-Hüllen
Fall 1 – Kommentargesteuerte Produktion erhöht die Genauigkeit. Ein Entwickler forderte zunächst eine Datumsanalysefunktion mit einem leeren Textkörper an und erhielt nach drei Runden das richtige Ergebnis. Im zweiten Versuch, als ich die Funktion mit einem 4-zeiligen Kommentar (akzeptierte Formate, Zeitzonenregel, Fehlerbedingung) definierte und anforderte, kam der Code, der in der ersten Runde funktionierte. Gleiches Modell, gleicher Tag; Der Unterschied bestand lediglich in der Klarheit der Absicht.
Fall 2 – Keine Version anzugeben ist teuer. Ein Team hatte Probleme damit, dass die alte Callback-basierte API fs.promises im für Node.js erstellten Code ersetzte. Als der Eingabeaufforderung die Zeile „Use Node 20, ESM, async/await“ hinzugefügt wurde, folgte die Produktion beim ersten Mal dem Projekt; Der durchschnittliche Korrekturaufwand von 12 Minuten wurde zurückgesetzt.
Fall 3 – Echter Gewinn beim Boilerplate-Code. Ein Microservice erforderte 6 neue DTO (Data Transfer Object – eine einfache Datenklasse, die Daten zwischen Schichten überträgt) und deren Validierungsregeln. Was früher etwa 90 Minuten manuelle Arbeit erforderte, konnte bei der Erstellung und Überprüfung durch KI auf 35 Minuten reduziert werden; Da die Codewiederholung hoch ist und das Muster klar ist, hat die KI hier in ihrem effizientesten Bereich gearbeitet.
Vier kopierbare Vorlagen
Vertragsbasierte Funktionsgenerierung:
Rolle: Sie sind ein fleißiger {{Sprache}}-Entwickler. Funktionsvertrag: – Name: {{Name}} – Eingabe: {{Typen und ihre Bedeutung}} – Ausgabe: {{Typ und Bedeutung}} – Fehlerstatus: {{Was wird wann geworfen/zurückgegeben?} Einschränkungen: {{keine externen Abhängigkeiten/Stil/Leistung}}Beispiele: – {{Eingabe_1}} -> {{Ausgabe_1}} – {{Eingabe_2}} -> {{error_2}}Geben Sie zuerst die Unterschrift + den kurzen Plan und dann den Code an. Tests schreiben, einfach funktionieren.
So passen Sie den vorhandenen Stil an (an die Codebasis anpassen):
Nachfolgend finden Sie eine Beispielfunktion aus unserem Projekt; Erfahren Sie hier Benennung, Fehlerbehandlung und Kommentarstil. Schreiben Sie eine Funktion für {{new_task}} mit dem gleichen Stil. Beispiel: {{current_code}}
Vom Skelett zur Füllung (Stub → Implementierung):
Füllen Sie das Funktionsgerüst unten entsprechend den TODOs in den Kommentaren aus. ÄNDERN Sie die Signatur und den Rückgabetyp. Erstellen Sie keine Hilfsfunktion, die nicht existiert. Teilen Sie mir bei Bedarf mit, dass dieser Helfer benötigt wird. {{skelet_kod}}
Alternativer App-Vergleich:
Geben Sie zwei verschiedene Implementierungen für {{task}} an: (a) Priorisierung der Lesbarkeit, (b) Priorisierung der Leistung. Schreiben Sie unter jeden einen Satz „wann ist vorzuziehen“.
Schwache Eingabeaufforderung / Starke Eingabeaufforderung
Schwach: „Schreiben Sie mir eine E-Mail-Bestätigungsfunktion.“
Strong: „TypeScript 5, nur Standardbibliothek. Schreiben Sie isValidEmail(input: string): boolean. Leerzeichen entfernen, Groß- und Kleinschreibung ignorieren, a@b.co ist gültig, a@, @b.co, leere Zeichenfolge ist ungültig. Wenn Sie Regex verwenden möchten, seien Sie nicht zu komplex; fügen Sie zwei Kommentarzeilen hinzu.“
Leistungsstarke Version; Gibt die Sprache, Version, Signatur, Randfälle und eine Stileinschränkung zurück. Somit funktioniert der generierte Code und passt in Ihr Projekt.
Ansatz
Wann zu verwenden
Achtung
Inline-Vervollständigung
Kleine Einsätze im Flow
Akzeptieren Sie den Vorschlag nicht, ohne ihn gelesen zu haben
Auftragsbasierte Produktion im Chat
Neue Funktion/Klasse
Geben Sie ein Beispiel und einen Randfall an
Produktion nach Stilmuster
Hinzufügen zu vorhandenem Code
Wählen Sie den aktuellen Beispielcode aus
Skelettfüllung
Unterschrift fixiert, Korpus leer
Signatur ändern
Codeduplizierung und die Abhängigkeitsfalle
Die KI empfiehlt oft eine neue Bibliothek, um ihre Arbeit zu erleichtern. Manchmal ist dies richtig, manchmal fügt es Ihrem Projekt eine unnötige Abhängigkeit hinzu oder deutet auf ein Paket hin, das nicht existiert (eine Halluzination). Regel: Sie bestätigen jede neue Abhängigkeit. Fügen Sie es nicht zum Projekt hinzu, ohne zu überprüfen, ob das Paket tatsächlich existiert, gepflegt wird und über die entsprechende Lizenz verfügt. Meistens ist ein bereits im Projekt enthaltener Helfer besser als ein neues Paket.
Achtung: Überprüfen Sie die von AI vorgeschlagenen Importzeilen. Ein nicht vorhandener Paketname (der auch gefälschten Paketen namens „Typo-Squatting“ ähneln kann) unterbricht die Kompilierung und stellt ein Sicherheitsrisiko dar.
Häufige Fehler
- Die Signatur wird vom Modell bestimmt. Wenn Sie die Eingabe-/Ausgabetypen nicht festlegen, erhält jede Produktion eine andere Signatur und die Integration wird schwierig.
- Ganz zu schweigen von Grenzfällen. Leere Eingabe, Null, negative Zahl, sehr großer Wert – wenn Sie diese nicht angeben, schreibt das Modell den „glücklichen Pfad“ und überspringt Kanten.
- Kombinieren Sie den Vorschlag, ohne ihn zu testen. Code, der zu funktionieren scheint, bedeutet nicht, dass er auch funktioniert.
- Unnötige Abhängigkeit akzeptieren. Das Hinzufügen einer ganzen Bibliothek für einen Einzeiler führt zu technischen Schulden.
- Stilinkonsistenz. Eine andere Benennung und Fehlerbehandlung als im Rest des Projekts führt dazu, dass die Codebasis lückenhaft ist.
Zusammenfassend
Die Codegenerierung ist leistungsstark, wenn Sie die Absicht in einen klaren Vertrag umsetzen. Verwenden Sie die Inline-Vervollständigung für kleine In-Stream-Aufgaben und für Aufgaben, die der Konversation Struktur verleihen. Sie geben Eingabe-/Ausgabetypen, Randfälle, Version und Stil an; Geben Sie ein Beispiel für das Modell. Überprüfen Sie jede neue Abhängigkeit. und jedes produzierte Stück laufen lassen und lesen. KI zahlt sich am besten bei formelhaftem, sich wiederholendem Code aus – führen Sie ihn direkt dort aus, innerhalb der von Ihnen festgelegten Grenzen.
Anwendungsaufgabe
Wählen Sie eine tatsächliche kleine Funktion aus Ihrem Projekt aus, die Sie schreiben müssen. Drucken Sie es zunächst mit der Vorlage „Vertragsbasierte Funktionsgenerierung“ an die KI aus und geben Sie Eingabe-/Ausgabetypen, zwei Randfälle und eine Stilbeschränkung an. Kompilieren Sie den generierten Code und testen Sie ihn mit zwei verschiedenen Eingaben. Fragen Sie dann dieselbe Funktion erneut, dieses Mal „schreib mir das“ ohne Kontext, und vergleichen Sie die beiden Ausgaben Zeile für Zeile: Welche Randfälle wurden übersehen, wie viele Korrekturen waren erforderlich?
Checkliste
- [ ] Ich weiß, wo ich den Chat-Modus mit Inline-Vervollständigung verwenden kann.
- [ ] Ich bestimme den Ein-/Ausgabevertrag und Randfälle bei der Funktionsgenerierung.
- [ ] Ich habe es mir zur Gewohnheit gemacht, der Eingabeaufforderung Sprach- und Versionsinformationen hinzuzufügen.
- [ ] Ich kompiliere und teste jedes produzierte Stück, bevor ich es zusammenbaue.
- [ ] Ich bestätige jede neue Abhängigkeit, die die KI vorschlägt, indem ich deren Existenz und Notwendigkeit überprüfe.
- [ ] Ich überprüfe, ob der generierte Code zum Stil des Projekts passt.