Mit LLMs können Sie Software in einer neuen Programmiersprache erstellen: Englisch (oder was auch immer Ihre Muttersprache ist). Wird Prompt-Engineering die Kunst des Programmierers ersetzen oder werden Software-Ingenieure, die Code verstehen, auch in Zukunft einen Platz in den Software-Lebenszyklen haben? Wir sprachen mit Greg Benson, Professor für Informatik an der Universität von San Francisco und Chief Scientist bei SnapLogic, über Prompt Engineering, seine Stärken und Grenzen und darüber, ob die Zukunft der Software ein Verständnis für Code erfordert.
Verstehen von Sofortengineering
Viele Programmiersprachen haben versucht, die Feinheiten des Maschinencodes durch einen der natürlichen Sprache ähnlichen Code zu abstrahieren. Mit LLMs scheint Prompt-Engineering die Krönung dieser Entwicklung zu sein. Was müssen Entwickler beachten, wenn sie Prompts schreiben, um sie wie eine Programmiersprache zu behandeln?
Frühe deklarative Sprachen wie SQL haben versucht, ein Gleichgewicht zwischen strukturiertem Code und einem Vokabular zu finden, das näher an der natürlichen Sprache ist. SQL ist jedoch im Grunde eine strukturierte Sprache mit einer formalen Syntax. Die Verarbeitung natürlicher Sprache (Natural Language Processing, NLP) gibt es zwar schon seit geraumer Zeit, aber erst mit dem Aufkommen der LLMs wurde der heilige Gral der Umsetzung menschlicher Absichten in natürlicher Sprache in Code zu einer praktischen Realität. LLMs haben die Möglichkeit eröffnet, ein gewünschtes Programm, einen Ausdruck oder ein Ergebnis mit natürlicher Sprache zu beschreiben. LLMs sind besonders gut darin, Daten aus unstrukturierten und multimodalen Quellen zu extrahieren, Text zusammenzufassen und neue Daten und Code zu synthetisieren.
In vielen Fällen können Prompts und LLMs verwendet werden, um entweder komplexen Code zu ersetzen oder Funktionen auszuführen, die mit konventionellem Code kaum zu erreichen wären oder deren Formulierung als konventionelles Problem des maschinellen Lernens, für das viele markierte Daten zum Trainieren spezieller Modelle benötigt werden, sehr zeitaufwändig wäre. Auf diese Weise kann man sich die Eingabeaufforderung als ein Programm vorstellen. Oder besser gesagt: Englisch und andere Sprachen sind zu neuen Programmiersprachen geworden.
Die Behandlung von Prompts als "Code" birgt jedoch einige Vorbehalte, die berücksichtigt werden müssen. Ein Prompt, der mit einem LLM gut funktioniert, funktioniert möglicherweise nicht gut mit einem anderen LLM. Außerdem werden die Grenzmodelle häufig verbessert, was bedeutet, dass ein Prompt, der mit ChatGPT-4 gut funktioniert hat, mit ChatGPT-4o möglicherweise nicht so gut oder besser funktioniert. Außerdem können LLMs, die auf großen GPU-Clustern laufen, selbst bei einer Einstellung des Zufälligkeitsparameters (Temperatur, wie er genannt wird) auf 0,0 immer noch zu unterschiedlichen Ergebnissen auf der Grundlage derselben Eingabe von einer LLM-Inferenz zur anderen führen. Diese Tatsache macht die Einbindung von LLMs in eine Anwendung zu einer Herausforderung. Es ist eine gute Methode erforderlich, um die Aufgabe zu bewerten, die die LLM ausführen soll, damit Sie sie von LLM zu LLM und von Version zu Version verfolgen können. Der Umgang mit dieser Unvorhersehbarkeit ist der derzeitige Preis, der gezahlt werden muss, um die Leistung von LLMs zu nutzen.
Hinter den Kulissen werden die Prompts natürlich in Code in einer Programmiersprache umgewandelt, der dann in Maschinencode kompiliert oder interpretiert wird. Geht ein gewisses Maß an Kontrolle verloren, wenn man in einer abstrahierten Eingabeaufforderung auf höherer Ebene schreibt (selbst in Programmiersprachen)?
Zur Klarstellung: Prompts werden nicht in Code umgewandelt, sondern Sie können Prompts und LLMs in vielen Fällen als Ersatz für Code verwenden. Anstatt also den LLM Code generieren zu lassen, können Sie einen Prompt entwerfen, um einen LLM zu verwenden, um eine Aufgabe auf gegebenen Eingabedaten auszuführen. In diesem Fall findet keine Umwandlung der Eingabeaufforderung in Code statt. Vielmehr werden die Eingabedaten mit dem Prompt kombiniert und direkt an den LLM zur Inferenz gesendet. Sie können sich das Ergebnis der Schlussfolgerung als die Ausgabe einer Funktion vorstellen, mit deren Ausführung Sie den LLM beauftragt haben.
In diesem Fall werden die Eingabeaufforderung und die Eingabedaten in eine numerische Darstellung (Token) umgewandelt, die dann als Eingabe an den LLM gegeben wird, der über die Token-Sequenz iteriert, um ein Ergebnis zu erzeugen, das dann in Text umgewandelt und vom LLM als Ergebnis zurückgegeben wird. Wenn Sie einen LLM auf diese Weise verwenden, verlassen Sie sich darauf, dass der LLM Ihre Eingabeaufforderung anhand der erwarteten Eingabedaten korrekt interpretiert. Wie der LLM zu seinem Ergebnis kommt, ist in dem Sinne abstrahiert, dass die Schlussfolgerung von den ursprünglichen Trainingsdaten und der Struktur des neuronalen Netzes abhängt. Für diesen Weg ist der LLM also eine Art Blackbox und Sie verlieren die Kontrolle. Aus diesem Grund müssen Sie strenge Bewertungstechniken anwenden, um sicherzustellen, dass Ihre Eingabeaufforderungen, Eingabedaten und LLMs die erwarteten Ergebnisse liefern.
Anpassung der Fähigkeiten an eine neue Umgebung
Gibt es Fähigkeiten, die verloren gehen könnten, wenn wir vom Programmieren zum NL-Prompting übergehen?
Dies ist eine heiß diskutierte Frage in der Informatikausbildung. Da die LLMs immer besser darin werden, Code zu generieren, und da wir natürliche Sprache verwenden können, um das gewünschte Verhalten zu beschreiben, welche Rolle spielen dann die herkömmliche Informatik und die Computerprogrammierung? Es wird wahrscheinlich eine ganze Generation von technischen Angestellten geben, die in der Lage sein werden, nützliche Computerprogramme ohne einen formalen Informatikabschluss zu erstellen. Diese Arbeitnehmer werden nicht über die gleichen grundlegenden Kenntnisse und Fähigkeiten verfügen wie die Informatiker von heute. Ich möchte glauben, dass es weiterhin einen Bedarf an Informatikern geben wird, so wie es auch weiterhin einen Bedarf an Physikern und Biologen geben wird. Allerdings könnte sich die Art und Weise, wie sie lernen und ihre Arbeit verrichten, durch den Einsatz von LLMs stark verändern. Für mich persönlich haben LLMs die Art und Weise, wie ich neue Konzepte und Materialien lerne, stark beschleunigt.
Glauben Sie, dass sich die Entwickler nach mehr Handlungsspielraum sehnen und zurückdrängen werden? Ab welchem Punkt haben diese Tools das Gefühl, die Produktivität zu steigern, und ab welchem Punkt könnten Entwickler das Gefühl haben, dass sie zu Copy-Editoren für KI-Maschinen geworden sind?
Ich glaube, viele Entwickler wehren sich heute gegen den Einsatz von Kodierassistenten, weil sie ihre eigene Handlungsfähigkeit und Kontrolle über die Kunst der Softwareentwicklung nicht verlieren wollen. Ich denke, dass die übermäßige Abhängigkeit von LLM-generiertem Code ein echtes Problem darstellt. Einerseits kann ich mit Hilfe von LLMs viel schneller Prototypensysteme implementieren, wie z. B. die Generierung einer kompletten JavaScript-Frontend-Anwendung, was es mir ermöglicht, Ideen durch funktionierenden Code schnell zu erkunden. Andererseits stellt sich die Frage, welche menschliche Aufsicht erforderlich ist, um dem generierten Code, der in die Produktion geht, zu vertrauen. Vor allem bei lebenswichtigen Systemen, wie chirurgischen Robotern. Ich denke, dass sich die zukünftige Beziehung zwischen menschlichen Entwicklern und LLM-generiertem Code noch entwickeln wird. Ich denke, dass es einen Weg in die Zukunft gibt, auf dem Menschen Systeme und Strategien entwickeln, die LLMs auf eine Art und Weise nutzen, die das Vertrauen in den Prozess sicherstellt und Menschen in den Kreislauf einbezieht, aber nicht zu bloßen Copy-Editoren degradiert wird.
Gibt es Dinge, die ein Prompt tun kann, die der Code nicht kann?
Ja, Prompts und LLMs können Funktionen beschreiben, die sich kaum als Code schreiben lassen. Es gibt offensichtliche Funktionen wie die Stimmungsanalyse oder die Zusammenfassung, aber die wahre Stärke liegt in der Verallgemeinerung anhand einiger weniger Beispiele. Die genaue Extraktion von Informationen aus Dokumenten, wie z. B. PDFs, ist bekanntermaßen schwer in Code zu fassen. Die Eingabe von Beispielen der gewünschten extrahierten Daten in eine Eingabeaufforderung hilft dem LLM zu "lernen", wie das Muster auf zukünftige Eingabedokumente anzuwenden ist. Dies ist zwar mit herkömmlichem maschinellem Lernen möglich, aber der Zeitaufwand und die für das Trainieren und Testen solcher Modelle erforderlichen datenwissenschaftlichen Fähigkeiten sind sehr hoch.
Verwendung großer Sprachmodelle
Wie wichtig ist der jeweilige LLM für einen Promotionsingenieur? Können Sie jeden auswählen, der Ihnen gefällt, oder gibt es bestimmte Merkmale/Größen/Ausbildungsdaten, die berücksichtigt werden sollten?
Zwar scheint es bei einigen Fähigkeiten der Grenzmodelle eine gewisse Konvergenz zu geben, aber es gibt immer noch Abweichungen, die sich auf Ihren speziellen Anwendungsfall auswirken können. Es gibt auch Tausende von spezialisierten LLMs, die von Hugging Face heruntergeladen werden können, die in bestimmten Bereichen gut sind, wie z. B. Zeitreihenanalyse, um nur einen zu nennen. Die Kosten und Fähigkeiten ändern sich ständig, und ein schneller Ingenieur wird sich mit den wichtigsten LLMs vertraut machen wollen. Das Aufspüren von Open-Source-LLMs wird ebenfalls wichtig sein, da diese Datenschutz und Sicherheit bieten, die vom LLM-Cloud-Anbieter nicht erreicht werden können.
Können Sie die zeitnahen Ergebnisse mit den richtigen Daten verbessern?
Ja, die LLM-Ergebnisse können durch die richtigen Beispieldaten beeinflusst werden, die Sie Ihrem Prompt hinzufügen. Außerdem wird die Feinabstimmung immer üblicher, was bedeutet, dass Sie einem Modell große Mengen an Beispieldaten zur Verfügung stellen können, die nicht in einen Prompt selbst passen würden. Welche Arten von Beispielen Sie bereitstellen sollten, hängt stark vom jeweiligen Anwendungsfall ab. Dieser Bereich ähnelt eher wissenschaftlichen Experimenten als der Softwareentwicklung, denn Sie müssen eine Hypothese für die Eingabeaufforderung und die Beispieldaten aufstellen, und dann brauchen Sie eine Möglichkeit, Ihre Hypothese zu bewerten. Dies kann zu einer Menge von Versuch und Irrtum führen.
Ratschläge für künftige Ingenieure
Werden wir in Zukunft alle nur noch Souffleure sein oder wird es immer einen Bedarf an Leuten geben, die Programmiersprachen verstehen?
Ich hoffe, dass es immer einen Bedarf an menschlichen Experten in jedem Bereich geben wird, auch in der Informatik und bei den Programmiersprachen. Alles andere würde bedeuten, dass wir den Fortschritt der Zivilisation der KI unterwerfen würden. Ich sehe eine Zukunft, in der wir LLMs nutzen, um die Softwareentwicklung zu beschleunigen und das menschliche Lernen von Software und Sprachen zu beschleunigen, so dass wir sowohl von der Macht der LLMs als auch von der menschlichen Kreativität und dem Wissen profitieren.
Was würden Sie Absolventen von CS-Studiengängen und frischgebackenen Nachwuchsingenieuren raten, die sich mit einer neuen Landschaft in der Welt der Softwareentwicklung auseinandersetzen müssen?
Ich sage meinen Informatikstudenten, dass ihr euch in einer erstaunlichen Phase der Computergeschichte befindet. Zu meinen Lebzeiten ist dies der bedeutendste technologische Fortschritt, den wir erlebt haben, und in den nächsten fünf Jahren wird sich alles ändern. Alles wird sich ändern, von der Art und Weise, wie Unternehmen geführt und betrieben werden, über die Effizienz in der Wirtschaft bis hin zur Schaffung neuer Arten von Arbeitsplätzen. Wir befinden uns in einer Zeit des Wandels, und in gewisser Weise ist es ein Experiment, genau wie bei vielen anderen Technologien, die wir erlebt haben, z. B. Kryptowährungen. Wir müssen also die sich uns bietenden Möglichkeiten ergreifen. Man muss sie annehmen, denn es gibt eine zunehmende Verbreitung von Programmierhilfen, die sowohl die Softwareentwicklung als auch die Informatikausbildung verändern. Die Art und Weise, wie wir damit umgehen, kann nicht ignoriert werden.
Dies ist eine Anpassung eines Artikels, der ursprünglich auf dem StackOverflow-Blog.