Eine der häufigsten Möglichkeiten, neue Node.JS -Projekte zu starten, bestand darin, die Boilerplate -Vorlagen zu verwenden. Diese Vorlagen helfen Entwicklern dabei, vertraute Codestrukturen wiederzuverwenden und Standardfunktionen zu implementieren, z. B. Zugriff auf Cloud -Dateispeicher. Mit den neuesten Entwicklungen in LLM scheinen Projektkessel nützlicher als je zuvor zu sein.

Aufbauend auf diesem Fortschritt habe ich meinen vorhandenen Node.js erweitert API Kesselplatte mit einem neuen Werkzeug LLM -Codegen. Mit dieser eigenständigen Funktion können die Boilerplate den Modulcode für einen beliebigen Zweck basierend auf Textbeschreibungen automatisch generieren. Das generierte Modul verfügt über E2E -Checks, Datenbankmigrationen, Saatgutdaten und die erforderliche Geschäftslogik.

Geschichte

Ich habe zunächst a erstellt Github -Repository Für einen Node.js -API -Kesselplatte, um die besten Praktiken zu konsolidieren, die ich im Laufe der Jahre entwickelt habe. Ein Großteil der Implementierung basiert auf Code einer realen Node.js -API, die in der Produktion auf AWS ausgeführt wird.

Ich bin leidenschaftlich für vertikale Schnittarchitektur und saubere Code -Prinzipien, um die Codebasis aufrechterhalten und sauber zu halten. Angesichts der jüngsten Fortschritte in LLM, insbesondere in der Unterstützung großer Kontexte und der Fähigkeit, qualitativ hochwertige Code zu generieren, habe ich beschlossen, mit meinem Boilerplate mit dem Generieren von Clear Typscript-Code zu experimentieren. Diese Kesselplatte folgt bestimmte Strukturen und Muster, von denen ich glaube, dass sie von hoher Qualität sind. Die Schlüsselfrage battle, ob der generierte Code dieselben Muster und Struktur folgen würde. Basierend auf meinen Erkenntnissen tut es das.

Zum Zusammenhang finden Sie einen kurzen Spotlight der wichtigsten Funktionen des Node.js -API -Boilerplate:

  • Vertikale Schnittarchitektur basierend auf DDD & MVC Prinzipien
  • Dienste Eingabevalidierung verwendet ZOD
  • Entkopplung von Anwendungskomponenten mit Abhängigkeitsinjektion (InversifyJS)
  • Integration und E2E Testen mit Supertest
  • Multi-Service-Setup verwendet Dockerkomponieren

Im vergangenen Monat habe ich meine Wochenenden damit verbracht, die Lösung zu formalisieren und die erforderliche Code-Era-Logik zu implementieren. Im Folgenden werde ich die Particulars teilen.

Implementierungsübersicht

Lassen Sie uns die Einzelheiten der Implementierung untersuchen. Alle Codegenerierung Die Logik ist auf der Projektrouchebene im Inneren der organisiert llm-codegen Ordner, um eine einfache Navigation zu gewährleisten. Der Code von Node.js Boilerplate hat keine Abhängigkeit von llm-codegenso kann es als reguläre Vorlage ohne Änderung verwendet werden.

LLM-Codegen-Ordnerstruktur

Es deckt die folgenden Anwendungsfälle ab:

  • Generieren von sauberem, intestine strukturiertem Code für ein neues Modul basierend auf der Eingangsbeschreibung. Das generierte Modul wird Teil der Node.js -REST -API -Anwendung.
  • Erstellen von Datenbankmigrationen und Erweiterung von Saatgutskripten mit grundlegenden Daten für das neue Modul.
  • Generieren und Fixieren von E2E -Checks für den neuen Code und sicherstellen, dass alle Checks bestehen.

Der generierte Code nach der ersten Stufe ist sauber und hält sich an vertikalen Slicing -Architekturprinzipien an. Es enthält nur die erforderliche Geschäftslogik für CRUD -Operationen. Im Vergleich zu anderen Ansätzen zur Codegenerierung erzeugt es saubere, wartbare und kompilierbare Code mit gültigen E2E -Checks.

Der zweite Anwendungsfall beinhaltet die Generierung von DB -Migration mit dem entsprechenden Schema und die Aktualisierung des Saatgutskripts mit den erforderlichen Daten. Diese Aufgabe ist besonders intestine für LLM geeignet, was sie außergewöhnlich intestine umgeht.

Der endgültige Anwendungsfall ist die Generierung von E2E -Checks, die bestätigen, dass der generierte Code korrekt funktioniert. Während des Ausführens von E2E -Checks wird eine SQLite3 -Datenbank für Migrationen und Samen verwendet.

Hauptsächlich unterstützte LLM -Kunden sind Openai und Claude.

Wie man es benutzt

Navigieren Sie zu dem Stammordner, um zu beginnen llm-codegen und installieren Sie alle Abhängigkeiten durch Ausführen:

npm i

llm-codegen Stützt sich nicht auf Docker oder andere starke Abhängigkeiten von Drittanbietern, wodurch Setup und Ausführung einfach und unkompliziert werden. Stellen Sie vor dem Ausführen des Instruments sicher, dass Sie mindestens einen festlegen *_API_KEY Umgebungsvariable in der .env Datei mit dem entsprechenden API -Schlüssel für Ihren ausgewählten LLM -Anbieter. Alle unterstützten Umgebungsvariablen sind in der aufgeführt .env.pattern Datei (OPENAI_API_KEY, CLAUDE_API_KEY usw.) Sie können verwenden OpenAIAnwesend Anthropic Claudeoder OpenRouter LLaMA. Ab Mitte Dezember, OpenRouter LLaMA ist überraschend frei zu verwenden. Es ist möglich, sich zu registrieren Hier und erhalten Sie ein Token für den freien Gebrauch. Die Ausgangsqualität dieses kostenlosen Lama -Modells könnte jedoch verbessert werden, da der größte Teil des generierten Codes die Kompilierungsphase nicht übertrifft.

Anfangen llm-codegenFühren Sie den folgenden Befehl aus:

NPM Run Begin

Als nächstes werden Sie gebeten, die Beschreibung und den Namen der Modul zu geben. In der Beschreibung der Modul können Sie alle erforderlichen Anforderungen angeben, z. B. Entitätsattribute und erforderliche Vorgänge. Die verbleibenden Kernarbeiten werden von Mikroagenten ausgeführt: DeveloperAnwesend TroubleshooterUnd TestsFixer.

Hier ist ein Beispiel für eine erfolgreiche Codegenerierung:

Erfolgreiche Codegenerierung

Unten ist ein weiteres Beispiel, das zeigt, wie ein Kompilierungsfehler behoben wurde:

Das Folgende ist ein Beispiel für eine generierte orders Modulcode:

Ein wichtiges Element ist, dass Sie Schritt für Schritt Code erstellen können, beginnend mit einem Modul und anderen Hinzufügen, bis alle erforderlichen APIs abgeschlossen sind. Mit diesem Ansatz können Sie Code für alle erforderlichen Module in nur wenigen Befehlsläufen generieren.

Wie es funktioniert

Wie bereits erwähnt, werden alle Arbeiten von diesen Mikroagenten ausgeführt: DeveloperAnwesend Troubleshooter Und TestsFixerkontrolliert von der Orchestrator. Sie laufen in der aufgelisteten Reihenfolge mit der Developer Generierung des größten Teils der Codebasis. Nach jedem Code -Erzeugungsschritt wird eine Prüfung für fehlende Dateien basierend auf ihren Rollen (z. B. Routen, Controller, Dienste) durchgeführt. Wenn Dateien fehlen, wird ein neuer Versuch der Codegenerierung durchgeführt, einschließlich Anweisungen in der Eingabeaufforderung zu den fehlenden Dateien und Beispielen für jede Rolle. Einmal der Developer Vervollständigt seine Arbeit, Typscript Compilation beginnt. Wenn Fehler gefunden werden, die Troubleshooter Übernimmt die Fehler an die Eingabeaufforderung und wartet auf den korrigierten Code. Wenn die Zusammenstellung erfolgreich ist, werden E2E -Checks durchgeführt. Immer wenn ein Check fehlschlägt, die TestsFixer Schritte mit spezifischen Eingabeaufentwicklungsanweisungen, um sicherzustellen, dass alle Checks bestehen und der Code sauber bleibt.

Alle Mikroagenten werden von der abgeleitet BaseAgent Klasse und aktiv seine Basismethodenimplementierungen wiederverwenden. Hier ist das Developer Implementierung als Referenz:

Jeder Agent nutzt seine spezifische Eingabeaufforderung. Schauen Sie sich diesen GitHub an Hyperlink Für die Eingabeaufforderung, die von der verwendet wird Developer.

Nachdem ich erhebliche Anstrengungen zur Erforschung und Prüfung gewidmet hatte, verfeinerte ich die Eingabeaufforderungen für alle Mikroagenten, was zu sauberem, intestine strukturiertem Code mit sehr wenigen Problemen führte.

Während der Entwicklung und des Checks wurde es mit verschiedenen Modulbeschreibungen verwendet, die von einfach bis sehr detailliert waren. Hier sind einige Beispiele:

- The module answerable for library ebook administration should deal with endpoints for CRUD operations on books.
- The module answerable for the orders administration. It should present CRUD operations for dealing with buyer orders. Customers can create new orders, learn order particulars, replace order statuses or data, and delete orders which are canceled or accomplished. Order should have subsequent attributes: identify, standing, positioned supply, description, picture url
- Asset Administration System with an "Property" module providing CRUD operations for firm belongings. Customers can add new belongings to the stock, learn asset particulars, replace data equivalent to upkeep schedules or asset places, and delete data of disposed or bought belongings.

Checks mit gpt-4o-mini Und claude-3-5-sonnet-20241022 zeigten eine vergleichbare Ausgangscodequalität, obwohl Sonett teurer ist. Claude Haiku (claude-3–5-haiku-20241022), obwohl billiger und ähnlich im Preis wie gpt-4o-minierzeugt oft nicht kompilierbaren Code. Insgesamt mit gpt-4o-miniEine einzelne Sitzung der Codegenerierung verbraucht durchschnittlich rund 11.000 Eingangs -Token und 15.000 Ausgangs -Token. Dies entspricht einer Kosten von ca. 2 Cent professional Sitzung, basierend auf Token -Preisen von 15 Cent professional 1 -m -Eingangs -Token und 60 Cent professional 1 -m -Ausgangs -Token (ab Dezember 2024).

Im Folgenden finden Sie anthropische Nutzungsprotokolle, die den Token -Konsum zeigen:

Basierend auf meinen Experimenten in den letzten Wochen schließe ich zu dem Schluss, dass zwar möglicherweise noch einige Probleme beim Bestehen generierten Checks geben, 95% der generierten Zeit -Zeit -Code kompilierbar und laufbar sind.

Ich hoffe, Sie haben hier etwas Inspiration gefunden und es dient als Ausgangspunkt für Ihre nächste API von Node.js oder als Improve auf Ihr aktuelles Projekt. Wenn Sie Vorschläge für Verbesserungen haben, können Sie einen Beitrag leisten, indem Sie PR für Code oder Umformungsaktualisierungen einreichen.

Wenn Sie diesen Artikel genossen haben, können Sie Ihre Gedanken in den Kommentaren klatschen oder teilen, ob Ideen oder Fragen. Danke fürs Lesen und glückliches Experimentieren!

AKTUALISIEREN (9. Februar 2025): Das LLM-Codegen Github-Repository wurde mit aktualisiert Deepseek API Unterstützung. Es ist billiger als gpt-4o-mini und bietet quick die gleiche Ausgangsqualität, hat aber eine längere Reaktionszeit und kämpft manchmal mit API -Anforderungsfehlern.

Sofern nicht anders angegeben, stammen alle Bilder vom Autor


Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert