Das Streben nach teuflischer Klugheit in VS Code
13. November 2023 von Chris Dias, @chrisdias
Wenn Sie letzte Woche GitHub Universe verfolgt haben, haben Sie eine enorme Menge an Fortschritten, Innovationen und Visionen für künstliche Intelligenz im gesamten Entwickler-Workflow gesehen. Was wir in diesem Blogbeitrag tun möchten, ist, uns auf die Fortschritte rund um Visual Studio Code in den letzten Monaten zu konzentrieren, die dazu beitragen, diese breitere Vision zu verwirklichen.
"Teuflisch schlau"
Eine meiner Lieblingszeilen im wegweisenden Film "Good Will Hunting" von Matt Damon und Ben Affleck ist "Mein Junge ist teuflisch schlau" (lesen Sie es mit einem Bostoner Akzent für den vollen Effekt).
Die Zeile wird von Morgan (Casey Affleck, Bens Bruder) gesprochen, nachdem Will (Matt Damon) eine Konfrontation zwischen Chuckie (Ben Affleck) und einem übermäßig selbstbewussten "Erstsemester-Studenten" unterbricht, indem er seitenweise, wort für wort Fakten über die amerikanische Geschichte wiedergibt. Man könnte sagen, Will wurde von all den Büchern trainiert, die er gelesen hat, und konnte sie basierend auf dem Gespräch wiedergeben.
KI ist ähnlich wie Will – sie kennt eine Menge Text. Aber was der KI fehlt – was Menschen haben, KI aber nicht – ist der Kontext einer bestimmten Interaktion, um die bestmögliche Antwort zu geben. Und in Wills Fall, weil er auch "den Raum lesen" kann, kann er seinen Bücherwissen nutzen, um eine sorgfältig ausgearbeitete Widerlegung zu liefern.
Große Sprachmodelle (LLM) werden zu einem bestimmten Zeitpunkt auf öffentlichen Repository-Daten trainiert. Das bedeutet, dass sie nichts über Ihren aktuellen Code wissen. Sie wissen etwas über Code im Allgemeinen, aber sie haben nicht den notwendigen Kontext, um Fragen dazu genau zu beantworten oder neuen Code vorzuschlagen, der der Form und Funktion Ihres Arbeitsbereichs entspricht.
Um dies zu umgehen, sendet GitHub Copilot Chat Codeausschnitte, die dem Modell helfen, Fragen besser zu beantworten (dies wird als Retrieval Augmented Generation oder "RAG" bezeichnet). Antworten werden besser, indem der relevanteste Code gesehen wird. Es gibt jedoch Grenzen für die Menge an Code (und Anleitungen durch den Prompt), die an das LLM gesendet werden kann. Für ein kleines Projekt ist dies normalerweise kein Problem. Aber betrachten Sie jedes große Quellcode-Repository, und Sie werden schnell feststellen, dass es unmöglich ist, den Inhalt jeder Datei an das Modell zu senden. Die Lösung für bessere Antworten besteht darin, den relevanten Kontext mit der richtigen Menge an Ressourcen in einer angemessenen Zeit zu senden. Um dabei zu helfen und viele andere Szenarien zu erschließen, haben wir das Konzept der **Teilnehmer** zu Copilot Chat hinzugefügt.
Teilnehmer
Chat-Teilnehmer sind Domänenexperten, die die Benutzeranfrage nach Belieben beantworten können – entweder durch vollständige Nutzung von KI bei der Anfrageverarbeitung oder auf traditionelle Weise durch Weiterleitung an einen Backend-Dienst. Teilnehmer können auch dem großen Sprachmodell Zugriff auf domänenspezifische Tools ermöglichen. Mit Hilfe des LLM kann der Teilnehmer ein Tool auswählen und definieren, wie es aufgerufen wird. Ein Beispiel für einen solchen Chat-Teilnehmer ist @workspace. Der @workspace-Teilnehmer kennt Ihren Arbeitsbereich und kann Fragen dazu beantworten. Intern wird der Teilnehmer von verschiedenen Tools angetrieben: dem Wissensgraphen von GitHub kombiniert mit semantischer Suche, lokalen Codeindizes und den Sprachdiensten von VS Code.
Chat-Teilnehmer können vom Client oder vom Dienst beigesteuert werden. Auf der GitHub Universe gab es eine Demo eines serverseitigen Teilnehmers, eines "Docs Agent" in der github.com Chat-Erfahrung, der weiß, wie Dokumentationen durchsucht werden, die in Repositories gefunden werden (bald auch für VS Code verfügbar).
Clientseitige Teilnehmer können über traditionelle VS Code-Erweiterungen beigesteuert werden. Mehr dazu im Abschnitt Erweiterbarkeit, aber schauen wir uns zwei Chat-Teilnehmer an, die heute in VS Code verfügbar sind: @workspace und @vscode.
@workspace
Der @workspace-Teilnehmer weiß, wie er Kontext über den Code in Ihrem Arbeitsbereich sammelt, kann Ihnen helfen, ihn zu navigieren, relevante Klassen, Dateien usw. zu finden. Stellen Sie sich vor, Sie sind im VS Code-Repository und möchten mehr über den Dienst erfahren, der für die aktuelle ICodeEditor zuständig ist; Sie können den Teilnehmer wie folgt verwenden:

Natürliche Sprache wird verwendet, um den @workspace-Teilnehmer zu fragen "welche Serviceklasse verwende ich, um die aktuelle ICodeEditor zu erhalten". Von dort aus tut der Teilnehmer Folgendes, um genau die richtige Menge an Kontext zu erhalten, die an das LLM gesendet werden kann:
-
Das vscode-Repo wurde vom GitHub Search Blackbird Service indiziert. Der
@workspace-Teilnehmer nutzt diesen Index als Werkzeug, um auf den Wissensgraphen des Repos zuzugreifen. Der@workspace-Teilnehmer führt eine semantische Suche durch, die relevante Codeausschnitte und Metadaten zurückgibt. Der GitHub-Suchdienst hat die Top 10.000 GitHub-Repositories indiziert, mit Plänen, weitere hinzuzufügen. -
Das nächste Werkzeug, das der
@workspace-Teilnehmer verwendet, ist die lexikalische Textsuche über den lokalen Index, um zusätzlichen Code wie lokale, unbestätigte Änderungen und die Copilot-Konversationshistorie zu finden. -
Dann verwendet
@workspaceein letztes Werkzeug – die Sprachintelligenz von VS Code –, um entscheidende Details wie Funktionssignaturen, Parameter und sogar Inline-Dokumentation hinzuzufügen.
Alle diese Kontextteile werden vom @workspace-Teilnehmer bewertet, geschnitten und zusammengefasst und dann an das LLM gesendet, um die Frage zu beantworten.
Da er über den gesamten notwendigen Kontext verfügt, kann der @workspace-Teilnehmer die Arten von Fragen beantworten, die Entwickler viel eher stellen würden. Zum Beispiel Fragen, die sich darauf beziehen, wie verschiedene Teile des Codes interagieren
- "
@workspace, wie werden Benachrichtigungen geplant?"
Oder Fragen, die Kenntnisse über verwandten Code, Abhängigkeiten und Entwurfsmuster erfordern
- "
@workspace, füge Formularvalidierung hinzu, ähnlich der Newsletter-Seite"
@vscode
VS Code kann auf so viele Arten angepasst werden, dass selbst Mitglieder des VS Code-Teams angenehm überrascht sind, wenn sie versteckte Funktionalitäten entdecken. Um unseren Benutzern und Teammitgliedern gleichermaßen zu helfen, die volle Leistungsfähigkeit von VS Code zu erschließen, haben wir den @vscode-Teilnehmer entwickelt.
Dieser Teilnehmer kennt sich mit VS Code aus und kann Ihnen helfen, die Lücke zwischen natürlicher Sprache und VS Code-Befehlen und Anpassungen zu schließen. Der @vscode-Teilnehmer verwendet intern Tools, die ihm Zugriff auf den Index aller Einstellungen und Befehle geben, und wir sind dabei, ein Tool hinzuzufügen, damit dieser Teilnehmer auch die Dokumentation von VS Code nutzen kann. Jetzt können Sie vage Fragen stellen wie "@vscode, wie heißt das Ding, wenn VS Code eine Datei fiktiv öffnet? Und wie deaktiviert man es?".

Beachten Sie, dass es im Antwortfeld eine Schaltfläche **In den Einstellungen-Editor anzeigen** gibt. Das liegt daran, dass der @vscode-Teilnehmer nicht nur weiß, wie VS Code funktioniert, sondern auch ein Werkzeug hat, um den Einstellungen-Editor oder die Befehlspalette aufzurufen.
Darüber hinaus unterstützt die Befehlspalette jetzt Ähnlichkeitssuche, sodass Sie nicht mehr den genauen Namen des Befehls kennen müssen, wenn Sie danach suchen. Sie müssen die eindeutige VS Code-Terminologie nicht mehr sprechen, um all die Güte zu erschließen, die das Team Monat für Monat liefert.
Dies ist erst der Anfang des @vscode-Teilnehmers. Wir planen, immer mehr Szenarien zu unterstützen, die es den Benutzern ermöglichen, VS Code besser zu verstehen und vollständig zu steuern.
Slash-Befehle
Chat-Teilnehmer können auch sogenannte **Slash-Befehle** beisteuern, die Abkürzungen zu spezifischen Funktionalitäten sind, die vom Teilnehmer bereitgestellt werden. Eine der Aufgaben bei der Beantwortung von Fragen ist die Bestimmung der Absicht, also das Verständnis dessen, was Sie tun möchten.
Wir können daraus schließen, dass "Erstelle einen neuen Arbeitsbereich mit Node.js Express Pug TypeScript" bedeutet, dass Sie ein neues Projekt möchten, aber "@workspace /new Node.js Express Pug TypeScript" ist explizit, prägnant und spart Ihnen Tippzeit.

Sobald die Absicht klar ist, hat der @workspace-Teilnehmer eine viel bessere Chance, die Bedürfnisse des Benutzers zu erfüllen, trotz der inhärenten Mehrdeutigkeit natürlicher Sprache. @workspace kann eine Verzeichnisstruktur vorschlagen, und Benutzer können auf die vorgeschlagenen Dateien klicken, um sie in der Vorschau anzuzeigen. Es gibt eine Schaltfläche **Arbeitsbereich erstellen**, die diese Dateien in einem neuen Ordner generiert.

Erweiterbarkeit
"VS Code ist nur eine Hülle, Sie brauchen Erweiterungen, um es glänzen zu lassen!" – die übliche Antheme der Microsoft-Teams, die an VS Code-Erweiterungen arbeiten und stolz ihre Rolle beim Erfolg von VS Code zur Schau stellen. Wir, das VS Code-Kernteam, stimmen dem voll und ganz zu – VS Code wäre ohne das reiche Erweiterungs-Ökosystem nicht das Produkt, das es heute ist! KI ist nicht anders, und während die Core AI-Erfahrung mit Copilot erstrahlt, ist unsere Vision, dass alle Erweiterungen aus unserem Ökosystem teilnehmen und es den LLM-Modellen ermöglichen, den bestmöglichen Kontext und die beste Bodenhaftung zu haben. Heute legen wir den Grundstein für diese Vision, indem wir die Chat-Teilnehmer-API in einem vorgeschlagenen Zustand hinzufügen.
Die Chat-Teilnehmer-API ermöglicht es Erweiterungen, Teilnehmer beizusteuern, die spezifische Fragen des Benutzers beantworten können. Sowohl der @workspace- als auch der @vscode-Teilnehmer sind unter Verwendung dieser API implementiert. Mit Chat-Teilnehmern können Benutzer reiche und aktuelle Informationen aus ihren inneren und äußeren Werkzeugen in KI-Konversationen einbringen und dabei im Editorfluss bleiben. Teilnehmer sind wie Experten für einen Bereich, und wenn ein Benutzer einen @Teilnehmer explizit in seinem Prompt erwähnt, wird dieser Prompt an die Erweiterung weitergeleitet, die diesen spezifischen Teilnehmer beigesteuert hat.
Teilnehmer können mit Markdown für einfache Text- und Bildantworten antworten, oder sie können mit einer Dateistruktur oder mit Schaltflächen für ein interaktiveres Erlebnis antworten. Zum Beispiel kann eine Dateistruktur als Vorschau verwendet werden, wenn ein Teilnehmer vorschlägt, einen neuen Arbeitsbereich für den Benutzer zu erstellen. Teilnehmer können Follow-ups für jede Antwort bereitstellen, stellen Sie sich diese als Vorschläge vor, wie die Konversation weitergeführt werden kann. Um eine reibungslose Benutzererfahrung zu gewährleisten, ist die gesamte API Streaming-basiert. Wie bereits erwähnt, können Teilnehmer Slash-Befehle beisteuern – Abkürzungen zu spezifischer Funktionalität. Zum Beispiel könnte der @docker-Teilnehmer einen /generate-Slash-Befehl beisteuern, was zu folgendem Beispiel-Benutzer-Prompt führt: "@docker /generate ein DOCKERFILE für den Arbeitsbereich". Die aktuelle Syntax, die explizit und prägnant ist, kann eine praktische Zeitersparnis sein. Dennoch arbeiten wir an der Erkennung von Absichten, damit VS Code Core den richtigen Teilnehmer und Slash-Befehl automatisch anhand des natürlichsprachlichen Prompts des Benutzers auswählen kann.
Stellen Sie sich vor, Sie installieren einen Chat-Teilnehmer, der alles über Azure oder Docker weiß, direkt in VS Code. Oder Sie benötigen vielleicht einen DALL-E-Teilnehmer, der Bildgenerierung als Werkzeug verwendet, um ein süßes Tier zu präsentieren, das Ihnen bestätigt, dass Sie einen großartigen Job machen.

Teilnehmer können beliebige domänenspezifische Inhalte einbringen und gleichzeitig auf die Werkzeuge dieser Domäne zugreifen. Beispielsweise steht 1ES für One Engineering System und ist das interne Microsoft-Engineering-System. Die 1ES VS Code-Erweiterung steuert einen @1es-Teilnehmer bei, der spezifische Fragen für interne Microsoft-Ingenieure beantworten kann. Der @1es-Teilnehmer plant dynamisch und zeigt, was er gerade tut. Er nutzt einige der öffentlich verfügbaren Daten in LLM-Modellen, erkennt aber auch interne Microsoft-Spezifika und kombiniert beides, um die beste Antwort zu geben.

Und da ein Teilnehmer den aktuellen Kontext hat, kann er die Diskussion fortsetzen

Wir fügen auch eine API hinzu, die Erweiterungen Zugriff auf das LLM ermöglicht und wählen können, ob sie das LLM zur Verarbeitung und Beantwortung der Benutzeranfrage verwenden möchten. Derzeit ist diese API auf Erweiterungen beschränkt, die einen Teilnehmer implementieren. Die Chat-Teilnehmer-API leitet die genauen Benutzer-Prompts an die beigesteuerten Teilnehmer weiter, und mit dem LLM-Zugriff können Teilnehmer diese Sprach-Prompts bequem in spezifische Backend-API-Aufrufe umwandeln. Wir werden die Nutzung dieser API mit Sorgfalt und Transparenz handhaben, damit die Benutzer wissen, wie viele Anfragen und Token von einem Teilnehmer verwendet wurden.
Die Chat-Teilnehmer-API ist noch vorgeschlagen, und wir suchen Feedback, wie wir sie verbessern können, mit dem Ziel, die API in naher Zukunft zu finalisieren. Sie können heute schon Dinge ausprobieren, und der beste Weg, um loszulegen, ist mit unserem Chat-Teilnehmer-Erweiterbarkeitsbeispiel. Wir können es kaum erwarten, die KI-gesteuerten Innovationen für Entwickler zu sehen, die Sie schaffen.
Bequemlichkeit
Wir sind sehr begeistert von den Teilnehmern und den endlosen Möglichkeiten, die sie bieten, aber wir möchten auch über die praktischen kleinen Copilot-gestützten Interaktionen sprechen, die wir in VS Code direkt in Ihren regulären Workflow integrieren. Sie müssen Ihren Editor nicht neu lernen, um KI zu nutzen.
Intelligente Aktionen
Intelligente Aktionen sind nahtlos in Ihren VS Code-Workflow integriert (z. B. in Quick Fix und Kontextmenüs) und erfordern keinerlei Prompt-Eingabe. Die mächtigste intelligente Aktion ist /fix. Hier ist ein relativ einfacher TypeScript Quick-Sort-Algorithmus mit der Fehlermeldung, dass "Argument vom Typ 'number' nicht zu einem Parameter vom Typ 'never' zugewiesen werden kann". Klicken Sie auf die Glühbirne und wählen Sie **Mit Copilot beheben**.

Diese Option öffnet ein Inline-Chatfenster, das mit /fix und auch der Fehlermeldung gefüllt ist. Im Hintergrund werden zusätzliche diagnostische Kontexte von VS Code geladen, die es Copilot dann ermöglichen, eine Korrektur vorzunehmen – die Aktualisierung der left- und right-Arrays, um die richtige Typdeklaration zu verwenden.

Wir haben festgestellt, dass /fix besonders nützlich für Sprachen wie Shells ist, bei denen traditionelle Tools manchmal fehlen.

Um seine Vorschläge klarer zu machen, versucht Copilot zu erklären, warum es eine bestimmte Korrektur vorgeschlagen hat. Wir haben mit Freude erfahren, dass Benutzer vorgeschlagene Copilot-Korrekturen etwa 60 % der Zeit akzeptieren. Manchmal ist die Korrektur möglicherweise nicht mit dem Quellcode in der Nähe der Glühbirne verbunden, und was benötigt wird, ist die Installation einer fehlenden Abhängigkeit – in diesem Fall schlägt /fix einen Befehl vor, der im integrierten Terminal ausgeführt werden kann.
Ähnlich wie /fix ist die /doc Smart Action bei Benutzern beliebt. Um /doc zu verwenden, wählen Sie einen Codeblock aus, klicken Sie mit der rechten Maustaste und wählen Sie **Copilot** > **Dokumentation generieren**. Copilot generiert einen Dokumentationskommentar für Ihren Code, und wir denken, Sie werden von der Qualität der Dokumentation überrascht sein.

Commit- und Pull-Request-Nachrichten generieren
Manchmal ist die Absicht kristallklar. Wenn das der Fall ist, können Erfahrungen mit KI fast magisch wirken. Mein Favorit im Moment ist die Möglichkeit, Commit-Nachrichten automatisch von Copilot generieren zu lassen. In der Quellcode-Ansicht mit installiertem Copilot sehen Sie ein neues Glitzer-Symbol neben dem Feld für die Commit-Nachricht. Wählen Sie das Glitzersymbol, und Copilot füllt die Nachricht aus!

Ich bin so begeistert von dieser Erfahrung, dass ich neulich diesen Commit gemacht habe, als ich Markdown in vscode.dev/github bearbeitet habe, da die Copilot-Erweiterung noch nicht webfähig ist.
Zurück zu unserem Workflow, lassen Sie uns weitermachen und einen Pull-Request erstellen. Ich habe die Erweiterung GitHub Pull Requests und Issues installiert, die die Anwesenheit der Copilot Chat-Erweiterung kennt. Wenn ich einen PR erstelle, gibt es ein weiteres Glitzer-Symbol neben dem Titel und der Beschreibung. Wählen Sie es aus, und Copilot schreibt automatisch eine schöne Beschreibung!

Dies ist ein weiterer Bereich, in dem KI Ihnen helfen kann, produktiver zu sein, indem sie die einfachen, aber mühsamen Aufgaben, die Sie 10- oder 100-mal pro Woche erledigen, automatisch übernimmt.
Sagen Sie mal?!
Und schließlich, um eine wirklich intelligente KI zu schaffen, müssen die Interaktionen so mühelos wie möglich sein.
Wir sind in der Branche in den letzten Jahren sehr gut in der Spracherkennungstechnologie geworden. Wir wissen, dass viele Leute sich die Kombination von Sprachassistenten mit fortgeschrittenen LLMs gewünscht haben. Jetzt können Sie beides in VS Code nutzen.
Die neue VS Code Speech-Erweiterung bringt Sprache-zu-Text-Unterstützung nach VS Code. Nach der Installation sehen Sie ein Mikrofonsymbol in allen Dialogfeldern für natürliche Spracheingaben. Wählen Sie es aus, stellen Sie Copilot Ihre Frage und genießen Sie die Magie.

Und, was sagst du dazu!? Ich habe dir doch gesagt, mein Junge ist teuflisch schlau!

Die Erweiterung befindet sich noch in der Vorschau und unterstützt derzeit nur Englisch, aber wir werden sie in den kommenden Monaten mit neuen Sprachen und Funktionen weiter aktualisieren.
Arbeiten Sie klüger, nicht härter
All das und noch mehr ist heute in VS Code verfügbar! Sie müssen nur die GitHub Copilot-Erweiterung installieren. Und Sie können mehr über die Copilot Chat-Funktionen in unserer Dokumentation erfahren.
Danke!
Chris und das VS Code-Team
Frohes **intelligentes** Coden!
