GitHub Copilot – So viel schneller macht es dich wirklich

15.02.2023Frederik Möllers
Tech Artificial Intelligence Machine Learning Neural Networks tech

banner

Was ist GitHub-Copilot?

GitHub Copilot ist ein von OpenAI und GitHub entwickeltes Tool, welches Code aus schon geschriebenen Code oder natürlicher Sprache vervollständigen soll.

Copilot basiert auf OpenAI Codex, einem LLM (Large Language Model), welches auf GPT-3 aufbaut und sowohl auf natürlicher Sprache als auch auf Code trainiert wurde. Einfach gesprochen ist es ein Tool, welches ein vortrainiertes Machine-Learning-Modell verwendet und damit versucht den schon eingegebenen Text und Code zu vervollständigen.

copilot-solve-problem

Wie gut und wie schlecht so etwas funktionieren kann, werde ich in diesem TechUp veranschaulichen.

Angekündigt wurde Copilot im Juni 2021 und ist seit dem 20. Oktober 2021 für alle GitHub-Nutzer verfügbar. Die Nutzung war zunächst kostenlos, mitlerweile kostet Copilot 10$ pro Monat.

Voraussetzungen

  • Unterstützte IDE: Um GitHub Copilot nutzen zu können benötigt man neben einem GitHub-Account eine unterstützte IDE. Neben den geläufigsten IDEs wie Visual Studio Code und IntelliJ wird auch Atom, Emacs und Vim aktuell unterstützt.

  • Verbindung zu GitHub: Die IDEs müssen mit GitHub verbunden sein, damit Copilot die eingegebenen Texte und Code Snippets an Copilot senden kann.

  • GitHub Copilot Account: Natürlich muss man sich für GitHub Copilot anmelden, aktuell kann man eine 2-Monatige kostenlose Testphase nutzen, bevor es kostenflichtig wird.

Meine Erfahrungen mit GitHub Copilot

Ich habe Copilot sowohl in IntelliJ, als auch in VS-Code getestet, die Erfahrungen waren je nach IDE unterschiedlich.

In VS-Code wirkten die Vervollständigungen von Copilot ziemlich snappy, in Intellij auf der anderen Seite überschrieb die Code-Vervollständigung von Copilot die Vervollständigungen von IntelliSense, was zum Teil einer sehr unangenehmen Benutzererfahrung führte. Die Qualität der Vorschläge unterscheidet sich je nach Situation erheblich. Wie man sich die Arbeit mit Copilot vorstellen kann werde ich im Folgenden an ein paar Beispielen darstellen.

GitHub Copilot versucht grundsätzlich den schon eingegebenen Code weiter zu vervollständigen. Der Input des von Copilot verwendeten LLM ist also der schon vorhandene Code, der Output des Modells ist jeweils immer das nächste Token, bzw. der nächste Codeschnipsel. Da diese Vorschläge natürlich direkt von der Lesbarkeit und dem gegebenen Kontext des Inputs abhängen, unterscheiden die Ergebnisse sich hier erheblich. Mittels Tab lassen sich die Vorschläge von Copilot direkt in den Code einfügen.

showcase-copilot

Figure: Erfolgreiches Beispiel

Einen Fehler, welchen LLMs durch diese Art der Vervollständigung haben können ist, dass Rekursion auftritt; Der Input generiert in diesem Fall einen Output, welcher als Input genommen wieder den selben Output vorschlägt. In der Arbeit mit Copilot kommt es immer mal wieder zu solchen Vorfällen:

recursive-completion

Figure: Fehlerhaftes Beispiel

Vor allem in Situationen, in welchen eine gewisse Grundstruktur standard ist, wie in Tests, (Standard-)Konfigurationen oder gut strukturiertem Code wie z.B. in CSS oder HTML, funktioniert Copilot optimal. Sehr angenehm waren die Vorschläge in Bezug auf Übersetzungen von Textbausteinen (i18n-Dateien).

Im Allgemeinen lässt sich festhalten, dass Copilot vor allem repetitive Codestrukturen gut vervollständigen kann.

i18n-showcase

Figure: Beispiel mit repetitiver Codestruktur, i18n

html-showcase

Figure: Beispiel mit repetitiver Codestruktur, HTML

Wenn es um sinnvolle Vervollständigung von anspruchsvolleren logischen Strukturen geht, unterscheidet sich die Qualität erheblich. Vor allem, wenn man aktuell selbst auf der Suche nach einer guten Lösung ist und Standardtools von z.B. Intellij verwendet, um die möglichen Funktionen auf einem Objekt zu finden, kommt es häufig vor, dass Copilot zu invasiv versucht den Code anhand des Kontexts zu vervollständigen. Dies blockiert im schlimmsten Fall den Workflow komplett.

Die aktuelle Lösung, welche mir in diesen Situationen geholfen hat ist Copilot kurzerhand für die Zeit zu deaktivieren, bis ich eine Lösung gefunden habe. Dies ist sowohl in Intellij, als auch in VS-Code mit zwei Mausklicks möglich.

Auf der anderen Seite ist die Vervollständigung von Strukturen wie Lambda-Ausdrücken in Java sehr gut, sowie die Verfollständigung von Klammersetzung und Semikolons, welche Intellij einem nicht in dieser Form bietet. Manche Vorschläge sind teilweise richtig, sodass man diese akzeptiert und kurz anpasst, was für mich persönlich den Workflow nicht wirklich beeinträchtigt hat.

Auf einen Anwendungsfall von Copilot bin ich an Silvester gestossen, als ich mich ein paar Tage mit Textkompression beschäftigt habe. Ich wollte einen Text mit Python nach Symbolhäufigkeiten und ein paar anderen Statistiken analysieren, da meine Python-Kenntnisse aber ein wenig eingerostet waren, fielen mir mehrere Standardbefehle zunächst nicht ein. Da Copilot aktiviert war, kam ich auf die Idee mein Vorhaben zunächst als Kommentar zu verfassen und dann die einzelnen Schritte mit Copilot zu vervollständigen.

python-showcase

Natürlich handelte es sich in diesem Fall um sehr einfache Syntax, dennoch hat Copilot den Workflow in diesem Fall deutlich beschleunigt, da ich die IDE nicht verlassen oder ein weiteres Tool zur Hand nehmen musste, um die benötigten Befehle zu finden. Gleichzeitig kann man an diesem Beispiel deutlich erkennen, dass die Vervollständigung zwar nützlich, aber nicht unbedingt richtig sein muss, da Copilot hier vorgeschlagen hat die falsche Datei einzulesen.

Ein weitere interessante Erkenntnis hat sich wärend des schreibens dieses TechUps ergeben, welches ich in VS-Code mit Copilot aktiviert geschrieben habe. Die Vorschläge waren zum Teil hilfreich, zum Teil irreführend und zum Teil stellte man sich die Frage, ab welchem Punkt man eventuell ein Plagiat erstellt, ohne es zu merken.

Was ich sehr interessant fand waren Vorschläge, in welchen Schlüsselworte vorkamen, die für jemanden, der sich neu mit einer Thematik beschäfigt sicherlich gute Einstiegspunkte in ebendiese Thematik sein könnten. Beispielsweise so:

lossless-compression

sentiment-analysis

alternative-copilot

Pro und Contra

Technologien wie Copilot stecken aktuell noch in den Kinderschuhen, bieten aber einen sehr interessanten Einblick in zukünftige Entwicklungen, was die Möglichkeiten des Einsatzes von LLM und AI-Generierten Code, als auch Text betrifft.

Im bezug auf die Nützlichkeit dieses Tools in der aktiven Softwareentwicklung sehe ich aktuell die Vorteile in der Beschleunigung von repetetiven bzw. stark strukturierten Aufgaben, welche in der Regel nicht viel kreativen Input benötigen. Je nach IDE fand ich Copilot zu inversiv, was den Workflow ins stocken bringen konnte.

Neben der aktiven Entwicklung sehe ich die Interaktion mit Tools wie Copilot im aktuellen Zeitpunkt als sehr interessant und lehrreich an, da es auf der einen Seite ein Verständnis für die zugrundelegende Technologie und deren Limitationen schafft, auf der anderen Seite durch kreativen Umgang mit den Möglichkeiten eines solchen Tools aber auch neue Ideen und Lösungen hervorbringen kann.

Die aktuelle Popularität von Chat-GPT zur Vervollständigung und Generierung von Code ist hier ein gutes Beispiel für die Möglichkeiten, welche sich durch die Verwendung von AI-Generierten Code ergeben, die einen vollständig anderen Ansatz der Interaktion mit KI ermöglichen.

Fazit

Für mich ist ein passender Vergleich zum aktullen Zustand von Copilot das Aufkommen der ersten Navigationsgeräte fürs Auto. Wöchentlich gab es Zeitungsartikel über Personen, die ihrem Navi vertraut haben und sich entweder auf der falschen Seite der Autobahn oder in einem Teich wiederfanden. Copilot befindet sich nach meinem Ermessen aktuell genau an diesem Standpunkt. Als Nutzer ist man auf seine eigene kritische Auseinandersetzung mit den Vorschlägen angewiesen, um die Vorteile dieses Tools nutzen zu können.

Desweiteren kann einem Copilot zwar einfachen Code abnehmen, dennoch ist eigenes Nachdenken und Verständnis für die zugrundeliegenden Konzepte definitiv eine Vorraussetzung, um mit Copilot arbeiten zu können.

Tools wie Copilot werden Entwickler in Zukunft sicherlich nicht ersetzen, eine leichte Produktivitätssteigerung sehe ich aber derzeit schon. Ich werde die weiteren Entwicklungen in diesem Feld auf jeden Fall weiter verfolgen und bin gespannt, was die Zukunft bringt. Bleib dran! 💪

Falls dich das Thema AI interessiert, schau doch in Stefans TechUp zum Thema Grundlagen Neuronaler Netze rein, echt spannend: Die Grundlagen neuronaler Netze - Einfach erklärt 🔥