ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Bing-gestützte Suche nach Einstellungen in VS Code

25. April 2018 von Rob Lourens @roblourens und Ankith Karat ankar@microsoft.com

Hatten Sie jemals Schwierigkeiten, eine bestimmte Einstellung in VS Code zu finden? Sie sind nicht allein. Wenn wir uns gängige GitHub-Probleme, StackOverflow-Fragen, Tweets und durchgeführte Benutzerstudien ansehen, stellen wir fest, dass viele Benutzer Probleme beim Finden von Einstellungen haben. Das ist keine Überraschung, da VS Code out-of-the-box mehr als 400 Einstellungen enthält und mit installierten Erweiterungen viele Benutzer erheblich mehr haben können. Wenn Sie typische Benutzerfehler wie Tippfehler und die Herausforderung, die richtigen Suchbegriffe auszuwählen, berücksichtigen, haben Benutzer Schwierigkeiten.

Vor einigen Monaten begannen wir also, mit dem Bing-Team darüber zu sprechen, ob sie ihre Suchkompetenz auf unser Problem anwenden könnten. Und vor zwei Monaten haben wir das Ergebnis ausgeliefert – eine intelligente Suche nach Einstellungen, die von Bing angetrieben wird.

Vorher

Before example

Nachher

After example

Wie es funktioniert

Nach einer Phase der Diskussion und des Prototypings entschieden wir uns für eine Vereinbarung, bei der das Bing-Team einen Dienst für die Suche nach Einstellungen betreiben würde, der intelligente, unscharfe Übereinstimmungen für Abfragen liefert, nach denen Benutzer im Einstellungseditor von VS Code suchen.

Die Integration von Bings Fähigkeiten zur Verarbeitung natürlicher Sprache in VS Code erwies sich als herausfordernd. Um Dokumente im Web zu durchsuchen, berücksichtigt Bing Tausende von Signalen in Bezug auf Seitenähnlichkeit, Klickdaten, Benutzerverhaltensdaten usw. Aber wir hatten diese Art von reichhaltigen Metadaten für unsere Einstellungen nicht – nur einen kurzen Namen und eine Beschreibung für jede einzelne. Also kombinierte das Bing-Team kundenspezifische Dienste und Bings grundlegende Suchfunktionen, um ein System zu schaffen, das auf unser Suchszenario zugeschnitten ist.

Hier ist ein grober Überblick über das System

Bing Diagram

Werfen wir einen Blick auf jeden Teil.

Dieses System hat im Wesentlichen zwei Seiten: das Sammeln und Indizieren von Einstellungsdetails offline und das Bereitstellen von Ergebnissen online. Der erste Teil davon wird vom Ingestion Service implementiert. Er ist verantwortlich für die Erstellung eines reichhaltigen Index, der Einstellungen aus VS Code selbst und aus Erweiterungen enthält. Da wir die Antwortzeit der Abfrage so kurz wie möglich halten wollen, erledigen wir bei der Aufnahme von Einstellungen so viel Arbeit wie möglich im Voraus, um den Aufwand bei der Bearbeitung der Abfrage zu reduzieren.

Bing Ingestion Service

Sammeln von VS Code- und Erweiterungseinstellungsdaten

Während jedes Builds startet VS Code in einem Modus, in dem es seine gesamte Konfiguration in eine JSON-Datei schreibt. Wir müssen VS Code tatsächlich starten, da wir nicht alle Konfigurationsmetadaten statisch ermitteln können. Die Datei enthält einige Informationen pro Einstellung – den Namen, die Beschreibung, den Typ, den Standardwert und für "enum"-Typ-Einstellungen die Liste der gültigen Werte und deren Beschreibungen. Dann laden wir die Datei in Azure Storage hoch. Wenn Sie neugierig sind, können Sie hier ein aktuelles Beispiel sehen

https://ticino.blob.core.windows.net/configuration/123000832/c1cd4378.../configuration.json

123000832 ist eine eindeutige Build-Nummer, die sich aus der Produktversion plus der Anzahl der Git-Commits seit der vorherigen Version ergibt. c1cd4378... ist die Git-Commit-ID, auf der der Build basiert. Und ticino, das sich vielleicht einige von Ihnen treuen Fans erinnern, war unser ursprünglicher kurzlebiger Codename.

Bings Polling Service überwacht den Azure Storage-Container, bemerkt einen neuen Build und benachrichtigt den Ingestion Service. Gleichzeitig crawlt Bing ständig den VS Code Extension Marketplace und wartet auf Erweiterungsaktualisierungen und neue Erweiterungen. Wenn es eine findet, lädt es deren package.json-Datei herunter (bei Erweiterungen sind alle Konfigurationsmetadaten in der package.json enthalten. Es muss nicht gestartet werden.) und übergibt diese Einstellungen ebenfalls an den Ingestion Service.

Dieser gesamte Prozess ist vollständig automatisiert und aktualisiert die indizierten Einstellungen in Echtzeit für jeden unserer stabilen Release-Builds und unsere täglichen Insiders-Builds. Innerhalb von Minuten nach Abschluss eines Builds wird Bings Index aktualisiert, um neu hinzugefügte Einstellungen einzuschließen.

1. Pipeline für alternative Wörter

Benutzer suchen manchmal mit Wörtern, die sich von den Wörtern in den Einstellungsnamen und -beschreibungen unterscheiden, aber äquivalent sind. Um sicherzustellen, dass wir diese Fälle bearbeiten können, haben wir die "Alternative Word"-Generierungspipeline von Bing integriert. Diese Pipeline sammelt Wörter mit ähnlicher Bedeutung aus Bings Suchdaten mithilfe von Signalen wie Benutzerverhalten, Klicks, Online-Ranking und Seitenähnlichkeit. Zum Beispiel werden "update" und "upgrade" als "alternative Wörter" festgelegt, und eine Suche nach einem gibt Einstellungen zurück, die das andere enthalten.

2. Stemmer- und Speller-Pipeline

Wir wollen den Benutzer nicht für Tippfehler im Namen einer Einstellung bestrafen, aber wir stellten frühzeitig fest, dass eine einfache Fuzzy-Suche entweder Variationen eines englischen Wortes, die ein Mensch verstehen könnte, übersehen oder zu viele falsch-positive Übereinstimmungen einschließen würde. Daher haben wir auch einen Speller- und einen Stemmer-Dienst integriert, die aus den vollumfänglichen Diensten stammen, die auf Bing.com verwendet werden. Diese reichern den Index mit gängigen Tippfehlern und alternativen Formen desselben Wortstamms an. Zum Beispiel werden "formatted", "formatter", "format" – alle für eine Einstellung indiziert, die das Wort "formatting" verwendet.

3. Pipeline für natürliche Sprachverarbeitung (NLP)

Wir möchten es Benutzern auch ermöglichen, ihre Abfragen in ihrer eigenen natürlichen Sprache zu beschreiben, daher haben wir die Natural Language Processing-Pipeline von Bing hinzugefügt. Die Pipeline sammelt gängige Sprach- und Textmuster und fügt sie den Indexen hinzu. Zum Beispiel ermöglicht sie dem System, die wichtigen Wörter in "how to disable css validation" zu identifizieren, um "css.validate" zu finden.

4. Feedback/Ranking-Pipeline

Wir haben einen Feedback-Mechanismus entwickelt, der es uns ermöglicht, aus Benutzerfeedback zu lernen und uns zu verbessern. Er ermöglicht uns, neue Wortpaare manuell festzulegen oder erwartete Ergebnisse für bestimmte Abfragen zu verstärken. Das Feedback wird an den Dienst hochgeladen und spiegelt sich fast sofort in den Suchergebnissen wider.

Gating-Modul

Jede Aufnahme in den Index durchläuft das Gating-Modul, das lediglich sicherstellt, dass der Index aufgrund eines Programmierfehlers nicht beschädigt wurde. Wir haben Testfälle geschrieben, die Folgendes überprüfen:

  • Der neue Index ist abwärtskompatibel und unterstützt alle VS Code-Builds
  • Unser Golden Query-Set liefert die erwarteten Ergebnisse

Ein Fehler im Gating-Modul verhindert eine Indexaufnahme und benachrichtigt das Team sofort. Ein Dashboard-Dienst wurde ebenfalls erstellt, der es uns ermöglicht, den Zustand aller Pipeline-Stufen zu überwachen. Er verfügt über Alarmierungsmechanismen und die Möglichkeit, zum letzten bekannten guten Zustand zurückzukehren, um sicherzustellen, dass jedes Problem schnell mit minimaler Ausfallzeit behoben werden kann.

Suchdienst

Schließlich trifft zur Laufzeit die Abfrage unserer Benutzer auf den Azure Load Balancer-Dienst, der einen unserer Geo-replizierten Server auswählt, um die Abfrage zu bearbeiten, basierend auf seiner physischen Nähe oder aktuellen Auslastung. Der Suchdienst, der sich an diesem Standort befindet, ruft die relevanten Ergebnisse durch eine Abfrage im Index ab, wendet in einigen Fällen manuelle Ranking-Überschreibungen an und gibt sie an den VS Code-Client zurück.

Alles zusammen

Wir haben jetzt ein System, das Einstellungenabfragen besser versteht und Ergebnisse für viele Abfragen liefert, die zuvor nichts zurückgegeben hätten.

Hier sind einige Beispiele

format on keypress

example - how to open new files on the left

beautify

Wenn Sie ein ähnliches Problem haben und kein Suchteam haben, das Ihnen einen kundenspezifischen Dienst wie den, den das Bing-Team für uns erstellt hat, baut, haben wir trotzdem gute Nachrichten. Sie können mit Bings Cognitive Services beginnen, die Ihnen helfen, Ihren eigenen Apps Intelligenz hinzuzufügen. Zum Beispiel:

Ein Hinweis zum Testen

Bei der Entwicklung dieses Systems benötigten wir eine Möglichkeit, die Ergebnisse quantitativ zu bewerten. Wir entschieden uns, ein Testframework basierend auf dem Konzept des Normalisierten Rabattierten Kumulativen Gewinn, kurz NDCG, zu erstellen. Ohne zu sehr ins Detail zu gehen, ist dies eine Möglichkeit, die Ergebnisse einer Suchmaschine zu bewerten, gegeben eine Abfrage, eine Reihe von Ergebnissen und Bewertungen für diese Ergebnisse. Wir haben viele Testfälle manuell geschrieben, erkannten aber, dass wir eine automatisierte Möglichkeit benötigten, Testfälle für alle Einstellungen zu generieren, einschließlich neuer Einstellungen, sobald sie hinzugefügt werden, und Einstellungen in Erweiterungen. Daher haben wir ein Tool geschrieben, das Testfälle für jede Einstellung automatisch generieren kann. Es verwendet Wörter aus dem Einstellungsnamen und der Beschreibung und durchläuft verschiedene Transformer, die simulieren, dass Benutzer alternative Wörter wählen, Tippfehler machen oder Abfragen mit Mustern natürlicher Sprache ausführen. Wir haben auch Testfälle für Einstellungen aus einigen beliebten Erweiterungen generiert.

Wir führen die vollständige Testsuite alle 6 Stunden aus, und sie kann sich automatisch aktualisieren, sodass sie immer Einstellungen aus dem neuesten Build testet. Die Testsuite versichert uns, dass das System ordnungsgemäß funktioniert, und gibt uns die Gewissheit, dass wir bei Änderungen am Backend die Ergebnisqualität nicht beeinträchtigen.

Was kommt als Nächstes

Es gibt verschiedene Möglichkeiten, wie wir das System weiter verbessern können. Zum Beispiel richten wir auch eine automatisierte Feedbackschleife basierend auf dem Benutzerverhalten ein. Wenn viele Leute ähnliche Abfragen suchen und dann dasselbe Ergebnis auswählen, wissen wir, dass dieses Ergebnis wahrscheinlich gut ist und höher eingestuft werden sollte.

Derzeit indiziert der Dienst nur auf Englisch, aber wir möchten die übersetzten Einstellungsbeschreibungen indizieren und die Suche in nicht-englischen Sprachen unterstützen. Es gibt auch einige Konfigurationsmetadaten, die derzeit nicht indiziert sind, wie z. B. mögliche Werte für die Einstellung "workbench.colorCustomizations". Und die Suche noch weiter zu treiben, möchten wir Ergebnisse für Erweiterungen anzeigen, die derzeit nicht installiert sind. Wenn Sie nach "debug python" suchen und keine starken Übereinstimmungen für lokale Einstellungen finden, möchten wir Sie zu einer Erweiterung führen, die Ihnen bei der Fehlersuche von Python-Code helfen kann. Wir haben auch über andere Anwendungen für diese Technologie innerhalb von VS Code nachgedacht. Vielleicht könnte die Befehlspalette von einem ähnlichen Dienst profitieren.

Wir brauchen Ihr Feedback

Dank unserer Freunde vom Bing-Team ist es jetzt einfacher, Einstellungen zu finden! Benutzerfeedback ist der beste Weg für uns, die Ergebnisse zu verbessern. Wenn Sie also nach Einstellungen suchen, reichen Sie bitte Probleme auf GitHub ein, wenn Sie nicht die erwarteten Ergebnisse sehen. Tatsächlich sehen Sie, wenn Sie VS Code Insiders verwenden, sogar eine Schaltfläche, die unseren neuen Issue Reporter aufruft, um es Ihnen zu erleichtern, ein Problem mit allen benötigten Details einzureichen.

Viel Spaß beim Programmieren!

Rob Lourens, VS Code - @roblourens

Ankith Karat, Bing - ankar@microsoft.com

© . This site is unofficial and not affiliated with Microsoft.