Prompt Engineering-Grundlagen und bewährte Methoden

Abgeschlossen

Inhalt dieser Einheit:

  • Was ist Prompt Engineering?
  • Grundlagen des Prompt Engineerings
  • Bewährte Methoden im Prompt Engineering
  • Wie Copilot von Ihren Eingabeaufforderungen lernt

Was ist Prompt Engineering?

Prompt Engineering ist der Prozess der Erstellung klarer Anweisungen, um KI-Systeme wie GitHub Copilot zu leiten, damit sie kontextgerechten Code generieren, der auf die spezifischen Anforderungen Ihres Projekts zugeschnitten ist. Dadurch wird sichergestellt, dass der Code syntaktisch, funktional und kontextuell korrekt ist.

Nachdem Sie nun wissen, was Prompt Engineering ist, lernen wir einige zugrundeliegenden Prinzipien kennen.

Prinzipien des Prompt Engineerings

Bevor wir bestimmte Strategien untersuchen, sollten wir zunächst die Grundprinzipien des Prompt Engineerings verstehen, die unter den folgenden 4 S zusammengefasst wurden. Diese Kernregeln sind die Grundlage für die Erstellung effektiver Eingabeaufforderungen.

  • Single: Konzentrieren Sie sich immer auf eine einzelne, gut definierte Aufgabe oder Frage. Diese Klarheit ist entscheidend, um genaue und nützliche Antworten von Copilot zu erhalten.
  • Specific: Ihre Anweisungen müssen explizit und detailliert sein. Die Spezifität führt zu zutreffenderen und präziseren Codevorschlägen.
  • Short: Prompts sollten zwar spezifisch sein, aber dennoch kurz und bündig formuliert werden. Dieses Gleichgewicht sorgt für Klarheit, ohne Copilot zu überladen oder die Interaktion zu erschweren.
  • Surround: Verwenden Sie beschreibende Dateinamen, und lassen Sie verwandte Dateien geöffnet. Dadurch erhält Copilot umfangreichen Kontext, der maßgeschneiderte Code-Vorschläge ermöglicht.

Diese Kernprinzipien bilden die Grundlage für effiziente und effektive Eingabeaufforderungen. Behalten Sie die 4 S im Hinterkopf, und lassen Sie uns tiefer in die fortgeschrittenen bewährten Methoden eintauchen, die sicherstellen, dass jede Interaktion mit GitHub Copilot optimiert ist.

Bewährte Methoden im Prompt Engineering

Die folgenden erweiterten Methoden basieren auf den 4 S und verfeinern und verbessern Ihre Interaktion mit Copilot. Sie stellen sicher, dass der generierte Code nicht nur präzise, sondern perfekt an die spezifischen Anforderungen und Kontexte Ihres Projekts ausgerichtet ist.

Klarheit ist das A und O

Aufbauend auf den Grundsätzen „Single“ und „Specific“ sollten Sie bei Ihren Eingabeaufforderungen stets auf Explizitheit abzielen. Beispielsweise konzentriert sich eine Eingabeaufforderung wie „Schreiben einer Python-Funktion zum Filtern und Zurückgeben von geraden Zahlen aus einer bestimmten Liste“ auf eine einzelne Sache und ist spezifisch.

Screenshot: Copilot-Chat mit einem Python-Prompt

Ausreichend Kontext mit Details

Unterstützen Sie Copilot mit Kontext, nach dem „Surround“-Prinzip. Je mehr kontextbezogene Informationen bereitgestellt werden, desto passender sind die generierten Codevorschläge. Wenn Sie beispielsweise oben im Code einige Kommentare hinzufügen, um Ihre Wünsche konkreter zu machen, können Sie Copilot mehr Kontext geben, um Ihre Eingabeaufforderung zu verstehen und bessere Codevorschläge zu generieren.

Screenshot: Kommentare, die dem Code hinzugefügt wurden, um bessere Copilot-Vorschläge zu erhalten

Im obigen Beispiel haben wir Schritte verwendet, um mehr Details zu geben und den Text trotzdem kurz zu halten. Diese Praxis folgt dem Prinzip „Short“, wobei ein Gleichgewicht zwischen Details und Prägnanz hergestellt wird, um Klarheit und Präzision in der Kommunikation zu gewährleisten.

Hinweis

Copilot verwendet auch parallel geöffnete Registerkarten in Ihrem Code-Editor, um mehr Kontext zu den Anforderungen Ihres Codes zu erhalten.

Lernen anhand von Beispielen

Mithilfe von Beispielen können Sie Ihre Anforderungen und Erwartungen verdeutlichen, abstrakte Konzepte veranschaulichen und die Eingabeaufforderungen für Copilot konkreter gestalten. Gut gestaltete Beispiele helfen Copilot, Muster schnell zu verstehen, was zu genaueren anfänglichen Vorschlägen führt, die weniger Überarbeitungszyklen erfordern. Dieser Ansatz ist besonders effektiv zum Generieren von Codebausteinen, Testvorlagen und sich wiederholenden Implementierungen, die die Grundlage größerer Features bilden.

Screenshot: Beispiel zur Verdeutlichung von Prompts für Copilot

Bestätigen und Durchlaufen

Einer der Schlüssel zum Entsperren des vollen Potenzials von GitHub Copilot und der Beschleunigung Ihres Entwicklungsworkflows ist die Praxis der strategischen Iteration. Ihre erste Eingabeaufforderung liefert möglicherweise nicht immer produktionsfertigen Code, und das ist perfekt. Anstatt Zeit darauf zu verwenden, die Ausgabe manuell zu optimieren, sollten Sie sie als Beginn eines effizienten Dialogs mit Copilot betrachten.

Wenn die erste Ausgabe nicht ganz das ist, wonach Sie suchen, beginnen Sie nicht von Grund auf neu. Löschen Sie stattdessen den vorgeschlagenen Code, bereichern Sie Ihren anfänglichen Kommentar mit hinzugefügten Details und Beispielen, und fordern Sie Copilot erneut auf. Dieser iterative Ansatz führt häufig schneller zu hochwertigem, einsatzbereiten Code als herkömmliche Entwicklungsmethoden, indem jede Iteration auf dem Verständnis von Copilot Ihrer spezifischen Anforderungen aufbaut.

Nachdem Sie nun die bewährten Methoden gelernt haben, um Ihre Eingabeaufforderungskompetenzen zu verbessern, werfen wir einen genaueren Blick darauf, wie Sie Beispiele bereitstellen können, von denen Copilot lernen kann.

Wie Copilot von Ihren Eingabeaufforderungen lernt

GitHub Copilot arbeitet basierend auf KI-Modellen, die mit riesigen Datenmengen trainiert wurden. Um das Verständnis bestimmter Codekontexte zu verbessern, stellen Ingenieur*innen sie häufig mit Beispielen bereit. Diese im Bereich des maschinellen Lernens weit verbreitete Praxis hat zu verschiedenen Trainingsansätzen geführt, z. B.:

Zero-Shot-Learning

Hier generiert GitHub Copilot Code ohne spezifische Beispiele und verlässt sich ausschließlich auf sein grundlegendes Training. Dieser Ansatz eignet sich ideal für die schnelle Implementierung gängiger Muster und Standardfunktionen. Angenommen, Sie möchten eine Funktion erstellen, um Temperaturen von Celsius in Fahrenheit umzuwandeln und vice versa. Sie können zunächst nur einen Kommentar schreiben, der beschreibt, was Sie wünschen, und Copilot kann produktionsbereiten Code für Sie generieren, basierend auf seiner vorherigen Schulung, ohne andere Beispiele.

Screenshot: Erstellung eines Temperaturkonvertierungscodes durch Copilot auf der Grundlage eines Kommentars

One-Shot-Learning

Bei diesem Ansatz wird ein einzelnes Beispiel gegeben, das das Modell dabei unterstützt, kontextbezogenere Antworten zu generieren, die Ihren spezifischen Mustern und Konventionen entsprechen. Dies ist besonders effektiv, um konsistente Implementierungen in Ihrer Codebasis zu erstellen und die Featureentwicklung zu beschleunigen, während Codestandards beibehalten werden. Basierend auf dem vorherigen Zero-Shot-Beispiel können Sie ein Beispiel für eine Temperaturkonvertierungsfunktion bereitstellen und dann Copilot bitten, eine andere ähnliche Funktion zu erstellen. So könnte es aussehen:

Screenshot: Verwendung eines Beispiels zum Erstellen von ähnlichem Temperaturkonvertierungscode durch Copilot

Few-Shot-Lernen

Bei dieser Methode erhält Copilot mehrere Beispiele, die ein Gleichgewicht zwischen der Zero-Shot-Unvorhersehbarkeit und der Genauigkeit der Feinabstimmung herstellen. Dieser Ansatz zeichnet sich durch die Erstellung anspruchsvoller Implementierungen aus, die mehrere Szenarien und Edgefälle behandeln, wodurch die Für manuelle Tests und Verfeinerung aufgewendete Zeit reduziert wird. Angenommen, Sie möchten Code generieren, der Ihnen je nach Tageszeit eine Begrüßung sendet. Hier sehen Sie eine Few-Shot-Version dieser Eingabeaufforderung:

Screenshot: Generierung von Begrüßungscode auf der Grundlage mehrerer Beispiele durch Copilot

Verketten von Prompts und Verwalten des Chatverlaufs

Wenn Sie an komplexen Features arbeiten, die mehrere Schritte erfordern, können Sie sich an erweiterten Unterhaltungen mit GitHub Copilot Chat beteiligen. Während der detaillierte Kontext Copilot dabei hilft, Ihre Anforderungen zu verstehen, kann die Beibehaltung langer Gesprächsverläufe ineffizient und kostspielig in Bezug auf die Verarbeitung werden.

Beispielsweise können Sie mit einer einfachen Implementierung beginnen und dann iterativ Fehlerbehandlung, Tests, Dokumentation und Optimierungen hinzufügen. Jede Runde baut auf dem vorherigen Kontext auf, aber der gesamte Verlauf wird länger.

Turn 1: "Erstellen einer Benutzerauthentifizierungsfunktion" Turn 2: "Hinzufügen der Fehlerbehandlung für ungültige Anmeldeinformationen"
Turn 3: "Komponententests für die Authentifizierungsfunktion hinzufügen" Turn 4: "Fügen Sie JSDoc-Kommentare hinzu, um die Funktion zu dokumentieren" Turn 5: "Optimieren Sie die Funktion für eine bessere Leistung"

Hinweis

Lange Prompts mit vollständiger Unterhaltungshistorie können 2 bis 3 PRUs pro Interaktion verbrauchen. Das Zusammenfassen des Kontexts oder das Zurücksetzen der Unterhaltung kann die Unterhaltung näher an 1 PRU pro Anforderung heranbringen.

So verwalten Sie dies effizient:

  • Fassen Sie den Kontext zusammen, wenn Unterhaltungen langwierig werden: "Basierend auf unserer vorherigen Diskussion zur Benutzerauthentifizierung fügen Sie jetzt die Ratebegrenzung hinzu, um Brute-Force-Angriffe zu verhindern"
  • Zurücksetzen und einen fokussierten Kontext bereitstellen für neue Funktionen: Von Grund auf neu beginnen mit wesentlichen Details, anstatt die gesamte Unterhaltung fortzusetzen
  • Verwenden Sie präzise Verweise auf frühere Arbeiten, anstatt vollständige Implementierungen zu wiederholen.

Rollenanweisung für spezialisierte Aufgaben

Bei der Rollenaufforderung wird GitHub Copilot angewiesen, als bestimmter Expertentyp zu fungieren, der die Qualität und Relevanz des generierten Codes für spezialisierte Domänen erheblich verbessern kann. Dieser Ansatz trägt dazu bei, die Entwicklung zu beschleunigen, indem gezieltere Lösungen für den ersten Versuch bereitgestellt werden.

Rolle "Sicherheitsexperten"

Wenn Sie an sicherheitskritischen Features arbeiten, fordern Sie Copilot auf, wie ein Sicherheitsexperte zu denken:

"Handeln Sie als Cybersicherheitsexperte. Erstellen Sie eine Kennwortüberprüfungsfunktion, die auf allgemeine Sicherheitsrisiken überprüft und OWASP-Richtlinien befolgt."

Dieser Ansatz generiert in der Regel Code, der Folgendes umfasst:

  • Eingabesäuberung
  • Schutz vor häufigen Angriffen
  • Branchenstandardüberprüfungsmuster
  • Bewährte Sicherheitsmethoden

Rolle der Leistungsoptimierung

Verwenden Sie für leistungskritischen Code eine Rolle des Leistungsexperten:

"Handeln Sie als Leistungsoptimierungsexperte. Umgestalten Sie diesen Sortieralgorithmus so, dass große Datasets effizient verarbeitet werden."

Dies führt häufig zu:

  • Optimierte Algorithmen und Datenstrukturen
  • Speichereffiziente Implementierungen
  • Überlegungen zur Skalierbarkeit
  • Vorschläge zur Leistungsüberwachung

Rolle des Testspezialisten

Nutzen Sie beim Erstellen umfassender Testsuiten eine Expertenperspektive für Tests:

"Agieren Sie als Prüffachmann. Erstellen Sie umfassende Unittests für dieses Zahlungsverarbeitungsmodul, einschließlich Randfällen und Fehlerszenarien.

Dies erzeugt in der Regel Folgendes:

  • Umfassende Testabdeckung
  • Randfallbehandlung
  • Simulierte Implementierungen
  • Fehlerzustandstests

Die Rollenaufforderung hilft Ihnen, produktionsbereiten Code schneller zu erhalten, indem Domänenkenntnisse in erste Implementierungen integriert werden, wodurch die Notwendigkeit mehrerer Revisionszyklen reduziert wird.

Nachdem Sie nun wissen, wie Copilot Ihre Eingabeaufforderungen verwendet, um zu lernen, werfen wir einen ausführlichen Blick darauf, wie es Ihre Eingabeaufforderung tatsächlich verwendet, um Ihnen Code vorzuschlagen.