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
Docker
komponieren
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-codegen
so kann es als reguläre Vorlage ohne Änderung verwendet werden.

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 OpenAI
Anwesend Anthropic Claude
oder 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-codegen
Fü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: Developer
Anwesend Troubleshooter
Und TestsFixer
.
Hier ist ein Beispiel für eine 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: Developer
Anwesend Troubleshooter
Und TestsFixer
kontrolliert 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-mini
erzeugt oft nicht kompilierbaren Code. Insgesamt mit gpt-4o-mini
Eine 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