Prompt Engineering ist tot - Lang lebe das Model Programming (DSPy)

Donnerstag, 10.10.2024

dspy

Unsicher welcher Prompt der richtige für die eigene LLM-Anwendung ist? RAG- oder Agentensysteme, die Anweisungen von Prompt-Templates ignorieren oder sensibel auf dessen Änderungen reagieren? Unschlüssig, welche Few-Shot-Beispiele verwendet werden sollen? All diesen Herausforderungen begegnen Data Scientists regelmäßig; insbesondere bei der Optimierung, dem Debuggen oder dem Ausrollen von LLM-Systemen. 
Ein neues Tool namens DSPy, das dem Ansatz des Prompt Programmings folgt, bietet eine Lösung. Denn es hilft, optimierte Prompts automatisch zu generieren - ganz ohne vordefinierte Anweisungen. Dadurch werden Prompt-Templates aus der Entwicklung verbannt und zusätzlich die Performance der Anwendung optimiert.

2022 hat angerufen und möchte seine Prompt-Templates zurück

Anwendungen erhalten durch die Integration von Large Language Models (LLMs) zunehmend intelligente Funktionen. Für die entwickelnden Data Scientists stellt sich hierbei die grundlegende Herausforderung, dass die Qualität der LLM-Integrationen maßgeblich von der Eingabe bzw. der sogenannten (System-)Prompts abhängt. Zusammen mit dem Nichtdeterminismus und der Komplexität der Modelle ergibt sich die mühselige und kaum zu meisternde Aufgabe des Prompt Engineerings: Prompts  werden manuell und per trial-and-error optimiert, um die erwünschten Ergebnisse zu erhalten.

Hierfür gibt es keinen universellen Lösungsweg. Der gleiche Prompt performt – je nach Anwendungsfall und Modell - unterschiedlich gut, wodurch die Prompt-Suche erschwert wird. Chain-of-Thought und Self-Criticism bieten - neben einer Vielzahl weiterer Techniken – einen systematischen Ansatz, um LLMs die gewünschten Ausgaben zu entlocken. Jedoch benötigten sie ebenso einen vordefinierten Prompt und führten nach langem Experimentieren bestenfalls zum lokalen Optimum. Ein Update des Modells oder Änderungen der Aufgabenstellung genügen anschließend, damit der Prompt überholt ist und der Prozess wiederholt werden muss.

Somit ist klar: „Prompt Engineering is dead“, denn es ist ineffektiv und skaliert nicht. Es eignet sich bestenfalls für den manuellen Umgang mit ChatGPT und co. und sollte nicht in Form von hard-coded Prompt-Templates in Anwendungen eingesetzt werden.

Ein Paradigmenwechsel begleitet durch DSPy

Stattdessen versucht sich ein neuer Ansatz durchzusetzen: das Prompt Programming. Hierbei werden Prompts als das betrachtet, was sie letztlich sind. Nämlich Parameter, die analog zu Modell-Parametern automatisiert und anwendungsspezifisch trainiert bzw. optimiert werden müssen. Grundlegend hierfür ist die Interaktion mit dem Modell während des Tunings, das genutzt wird, um optimale Prompts zu finden. Zuzüglich einiger Input/Output Beispiele, einer quantitativen Erfolgsmetrik und einem Algorithmus kann der Prompt nun automatisiert optimiert werden.

DSPy (Declarative Self-Improving Language Programs for Python) hat sich in der Kategorie der vielversprechenden Prompt-Autotuner bereits einen Namen gemacht. Das an der Stanford University entwickelte Python-Tool stellt ein neuartiges Programmiermodell bereit, das LLM-Pipelines als Text Transformation Graphs durch deklarative Module abstrahiert und somit u.a. manuelle Prompt-Templates ablöst. Diese Module sind parametrisiert und können unter Hinzunahme einer Metrik lernen bzw. trainiert werden und so bestimmte Techniken, wie Few-Shot Learning oder Chain-of-Thought gezielt einsetzen und optimieren. DSPy erlaubt es den Data Scientists, eigene Module zu definieren und diese innerhalb von Pipelines zu verbinden. Der Compiler wird anschließend die optimalen Parameter/Prompts finden, die den Output der gesamten Pipeline optimieren.

Prompt-Templates

Die grundlegende Idee des Prompt Programmings: Die bisher manuell erstellten Prompt-Templates (oben) sollen nun durch DSPy automatisiert erstellt und optimiert werden. Hierfür wird eine deskriptive Signatur bereitgestellt, die In- und Outputs des Programms beschreiben. Die dazu passenden Module beschreiben, welche Techniken DSPy anwenden soll. Zusätzlich werden Trainingsdaten bzw. Few-Shot-Beispiele bereitgestellt. Diese werden vom Compiler unter Anwendung einer Optimierungsstrategie genutzt, um die Module zu optimieren und so das Prompt-Templates zu erstellen. Strategie-Beispiele, die vom Compiler genutzt werden können, sind der LabeledFewShot, der lediglich Few-Shot-Prompts mit zufällig ausgewählten Instanzen der Trainingsdaten erstellt. Der BootstrapFewShot generiert darüber hinaus gänzlich neue Few-Shots für den Prompt mittels des LLMs. Die bereitgestellte Metrik gibt abschließend durch den Test auf den Trainingsdaten Auskunft darüber, wie gut das Ergebnis im Vergleich zu anderen Prompt-Kandidaten ist. Metriken sind anwendungsspezifisch und können auf einfachen String-Vergleichen basieren oder auch LLMs hinzuziehen, um zu ermitteln, ob Beispiel und Vorhersage semantisch gleich sind. Letztlich werden also LLM und Trainingsdaten genutzt, um systematisch neue Prompts zu finden, die messbar gut abschneiden.

Das folgende Beispiel veranschaulicht die Nutzung von DSPy am Beispiel des GSM8K-Datensatzes. Dieser beinhaltet Mathematikaufgaben, die genutzt werden sollen, um einem LLM das Beantworten mathematischer Fragen zu vereinfachen. Dazu wird ein Chain-of-Thought Modul erstellt, das bzgl. des Rechenwegs reflektiert, bevor ein Ergebnis berechnet wird. Die Beispiele des Datensatzes werden dafür zusammen mit dem BootstrapFewShotWithRandomSearch Optimierer genutzt, um einen möglichst optimalen Prompt zu erstellen. Das bedeutet, dass den Prompt-Kandidaten ‘bootstrapped’ Rechenbeispiele hinzugefügt werden. Diese werden durch das LLM auf Basis zufällig ausgewählter Trainingsdaten neu erzeugt. Das Modell wird somit sein eigener Lehrer und findet iterativ einen Prompt mit neu generierten Few-Shot-Beispielen, der zur messbar besseren Beantwortung der Testfragen führen.

 

 

 

optimiert beantwortet

Doch welche In- und Outputs werden denn nun dem LLM übermittelt? Hier sehen wir das generierte Prompt-Template, das die Mathe-Fragen bzgl. der Metrik optimiert beantwortet. Stellen wir nun eine eigene Frage, wird diese in das Prompt-Template eingesetzt und das Modell generiert das korrekte Ergebnis inkl. Rechenweg - so wie es durch die programmierten Prompts unterrichtet wurde.

Bei dem aufgeführten, simplen Beispiel erzielten die Data Scientists der Stanford University einen Anstieg der Accuracy (je nach Modell) von 4-20% auf 49-88% gegenüber einem naiven bzw. manuellen Optimierungsansatz. Doch auch in anderen, komplexeren Szenarien wird von deutlichen Verbesserungen gegenüber manuellem Prompt Engineering berichtet. Wir finden darüber hinaus besonderen Gefallen an der automatischen Optimierung. Diese erspart massiv Zeit in Erstellung und Wartung der LLM-Systeme, denn für alle Änderungen am System können durch den Trainingsprozess automatisch wieder neue optimale Prompts gefunden werden. Diese lassen sie sich dann ganz nebenbei qualitativ mit den bereitgestellten Trainingsdaten und vorherigen Systemiterationen vergleichen. Um es auf den Punkt zu bringen: Niemand würde sein Machine Learning Model per Hand trainieren - wieso sollten wir das also bei LLM-Prompts tun?

Sollten Sie mehr über das Thema darüber erfahren wollen, wie sich DPSy zur Verbesserung Ihrer LLM-Systeme einsetzen lässt, dann kommen Sie gern auf uns zu! Wir beraten Sie gern, wie Sie ihre RAG- und Agentensysteme optimieren und in die Produktion überführen können.


Haben wir Ihr Interesse geweckt? Melden Sie sich gerne bei uns.

Jetzt kontaktieren


zurück zur Blogübersicht

Diese Beiträge könnten Sie ebenfalls interessieren

Keinen Beitrag verpassen – viadee Blog abonnieren

Jetzt Blog abonnieren!

Kommentare

Tobias Goerke

Tobias Goerke

Tobias Goerke ist Berater bei der viadee IT-Unternehmensberatung. Als Data Scientist liegen seine Schwerpunkte in der Einführung künstlich intelligenter Systeme und der Erforschung verschiedener Verfahren des erklärbaren Maschinenlernens.   Tobias Goerke bei LinkedIn