Back home

LLM Eine stabilere Methode zum Schreiben von Code besteht darin, zuerst DSL zu schreiben

Ausführbare semantische Schichten enthalten eine bessere Ausgabe als lange Eingabeaufforderungswörter

Vor einiger Zeit habe ich die gleiche Situation wiederholt gesehen: Wenn die Anforderungen direkt auf das Modell übertragen werden, ist die Generierungsgeschwindigkeit sehr hoch und die Überarbeitung ist ebenfalls schnell. Legen Sie die Anforderungen zunächst in eine DSL-Schicht und lassen Sie das Modell dann die Implementierung um diese semantische Modellschicht herum schreiben. Die Ausgabe ist offensichtlich stabil. Die Veränderung ist sehr direkt. Der Schlüssel liegt nicht darin, ob das Modell geschrieben werden kann, sondern ob der optionale Raum zuerst geschlossen wurde.

Natürliche Sprache ist geeignet, Anweisungen zu geben, aber nicht dazu geeignet, zu viele implizite Entscheidungen zu treffen. Eine scheinbar einfache Anforderung wird bei der Implementierung in viele kleine Beurteilungen aufgeteilt: Wie soll der Status benannt werden, ob ein Fehler als abgeschlossen gilt, wie oft es erneut versucht werden soll, auf welcher Zeitzone das Zeitfenster basiert und auf welcher Ebene das Protokoll geschrieben wird. Solange diese Urteile im Generierungsprozess noch verborgen sind, wird das Modell gleichzeitig Details ergänzen und Grenzen ändern. Das endgültige Geschriebene kann ausgeführt werden, es ist jedoch schwierig, es zu überprüfen.

Natürliche Sprache eignet sich nur, um über Probleme zu sprechen

LLM ist sehr gut darin, eine vage Beschreibung in einen vollständigen Text zu verwandeln, und auch sehr gut darin, eine Absicht in einen lesbaren Entwurf zu überführen. Was es nicht gut kann, ist die langfristig stabile Benennung und Einschränkung einer Reihe von Geschäftsregeln. Sobald die Anforderungen einen Zustandsfluss, abnormale Verzweigungen, Zeitgrenzen und Berechtigungsgrenzen umfassen, scheinen diese Worte im Kopf klar zu sein, aber sie sind oft noch nicht endgültig, wenn sie tatsächlich in den Code eingefügt werden. Das Modell steht vor einer großen Gruppe offener Probleme, und die Ausgabe wird natürlich entsprechend schwanken.

Aus diesem Grund werden lange Aufforderungswörter oft ermüdender, je mehr man sie schreibt. Nachdem sich das Eingabeaufforderungswort weiter verlängert, erhält das Modell immer noch einen Freitext, der Freitext ist jedoch länger. Es merkt sich mehr Kontext, ohne mehr Grenzen festzulegen. Wenn die Grenze nicht geschlossen ist, kann das Modell nur weiter raten.

DSL wandelt implizites Urteil in explizite Eingabe um

Nach der Umstellung des Eingangs auf DSL ändert sich die Situation. Das Modell errät Geschäfte nicht mehr auf der Grundlage beiläufiger Sätze, sondern füllt die Lücken auf der Grundlage eines klaren semantischen Modells aus. Für ein Testszenario, einen Release-Prozess und eine grafische Beschreibung werden zunächst die Knoten und Beziehungen durch die DSL definiert und anschließend werden Text, Code und Diagramme durch das Modell ergänzt. Das Ergebnis wird eher etwas sein, das aus demselben System herausgewachsen ist.

scenario: payment_timeout
steps:
  - send: order.created
  - wait: 3s
  - if: payment_missing
    then: cancel_order
    audit: required

Der größte Wert dieser Art von Definition besteht nicht darin, dass sie beim Schreiben gut aussieht, sondern darin, dass sie versioniert, geändert und überprüft werden kann. Codegenerierung, Dokumentation, Tests und Diagramme können alle auf demselben semantischen Modell basieren. Das Modell hier ähnelt eher einem Aktuator als einem Erfinder. Es ist für die Durchsetzung der festgelegten Grenzen verantwortlich und nicht dafür verantwortlich, diese vor Ort neu zu formulieren.

Sobald diese Grenze festgelegt ist, werden viele Dinge, die lange Zeit laut gewesen wären, still werden. Was sollte der Test abdecken, ob ein Ausfall zu erwarten ist und wer das letzte Wort über die Rollback-Bedingungen hat? Diese werden nicht mehr vor Ort in einer natürlichen Sprache erklärt, sondern in eine ausführbare Struktur geschrieben. Was Menschen betrachten, ist Semantik, was Maschinen ausführen, ist Semantik, und worauf wir bei der Fehlerbehebung zurückgreifen, ist dieselbe Semantik.

LLM ist geeignet, am Wachstum von DSL teilzunehmen

LLM muss nicht nur außerhalb einer DSL ausgeführt werden. Eine angemessenere Verwendung besteht darin, es zunächst am Wachstum von DSL teilhaben zu lassen. Geben Sie ein paar reale Szenarien ein, lassen Sie es die Grenzwörter, Aufzählungswerte, abnormalen Zweige und Gegenbeispiele vervollständigen und lassen Sie die Leute es dann stoppen. Wenn das DSL fertiggestellt ist, wird dem Modell anschließend keine unbegrenzte natürliche Sprache übergeben, sondern eine eingeschränkte Eingabe.

In diesem Stadium ist LLM sehr nützlich. Es kann dabei helfen, verstreute Aussagen in einer Reihe von Begriffen auszurichten und kann auch Probleme wie Namensinkonsistenzen, Statuslücken und fehlende abnormale Pfade während der Entwurfsphase identifizieren. Nachdem das semantische Modell stabil ist, generiert das Modell Implementierungen, schematische Diagramme und Testbeispiele. Die Ausgabe ähnelt eher dem Laufen auf einer Strecke und führt nicht jedes Mal zu einem anderen Ort.

Ich würde LLM lieber hinter DSL stellen. Machen Sie zuerst die Grenzen klar und lassen Sie sie später beim Ausfüllen der Grenzen helfen, damit das System nicht immer wieder durch Improvisationen abgelenkt wird.

Auch die semantische Ebene wird unhandlich

Mehr DSL ist nicht immer besser. Wenn sich das Feld noch drastisch verändert, wird eine vorzeitige Verfestigung zu falschen Annahmen führen; Wenn die semantische Schicht zu universell gestaltet ist, wird sie zu einem weiteren schweren Framework. Das wirklich kosteneffiziente Szenario liegt normalerweise vor, wenn dieselben Aktionen wiederholt auftreten, die Überprüfungskosten hoch sind und das Verhalten nachvollziehbar sein muss. An diesem Punkt ist DSL keine zusätzliche Belastung mehr, sondern eine Ansammlung verstreuter Urteile zu einem stabilen Zugang.

Daher lautet die praktischere Beurteilung nicht: „Kann LLM mit einem DSL ausgestattet werden?“ aber „Ist es notwendig, zuerst die Semantik dieser Angelegenheit zu klären?“ Sobald die Antwort „Ja“ lautet, sollte das Stichwort nicht mehr die volle Verantwortung haben. Der Prompt ist dafür verantwortlich, die Absicht zu erklären, der DSL ist dafür verantwortlich, die Einschränkungen zu tragen, und das Modell ist dafür verantwortlich, die Einschränkungen in ausführbare Ergebnisse umzuwandeln. Was auf diese Weise geschrieben ist, ähnelt eher einem technischen System als einer Reihe von Improvisationen.

FAQ

What to read next

Related

Continue reading