- Zed ist ein auf Geschwindigkeit ausgelegter Editor und hatte schon immer das Ziel, ein stets
instantes Bearbeitungserlebnis zu bieten
- Um noch schneller als
instant zu werden, setzt Zed auf einen Ansatz, der die „nächste Bearbeitungsaktion“ des Nutzers vorhersagt
- Dafür hat Zed nun die neue Funktion edit prediction vorgestellt, die auf einem Open-Source-Modell namens Zeta basiert
- Während der Nutzung lassen sich vorhergesagte Bearbeitungen sofort mit der
tab-Taste übernehmen, und auch mehrere nachfolgende Bearbeitungen können nacheinander ausgeführt werden
- Diese Funktion wurde häufig angefragt und so entwickelt, dass sie sich möglichst natürlich in die Bearbeitungsumgebung von Zed einfügt
- Derzeit kann Zeta während der Public Beta kostenlos genutzt werden, wenn man Zed herunterlädt und sich mit einem GitHub-Konto anmeldet
- edit prediction könnte später allerdings nicht kostenlos bleiben; aktuell wird es jedoch veröffentlicht, um gemeinsam zu experimentieren und zu lernen
Thoughtful Integration
- Mit der Ergänzung von edit prediction ist die
tab-Taste noch mächtiger geworden
- Allerdings kann dies mit der bisherigen Nutzung von
tab zum Einrücken oder zum Prüfen von Vorschlägen des Language Servers (LS) kollidieren
- Wenn Code-Vorschläge des Language Servers angezeigt werden, wird die vorhergesagte Bearbeitung erst als Vorschau eingeblendet, wenn die
option-/alt-Taste gedrückt wird
- Unter macOS lässt sich die vorhergesagte Bearbeitung mit
tab bestätigen; wenn option losgelassen wird, kehrt die Ansicht zu den ursprünglichen Vorschlägen des Language Servers zurück
- Da
alt-tab unter Linux häufig vom Window Manager reserviert ist, wird standardmäßig alt-l angeboten
- Falls
alt-tab in der Linux-Umgebung nicht kollidiert, kann es weiterhin verwendet werden
Introducing Zeta: Zed's Open Source Edit Prediction Model
- Zeta ist ein auf Qwen2.5-Coder-7B basierendes Open-Source-Modell
- Ein offenes Dataset (Link) ist ebenfalls verfügbar
- Wer in Open-Source-Repositories arbeitet, wird gebeten, zum Dataset beizutragen, um Zeta weiter zu verbessern
- Zu Beginn werden Daten erst nach einer Überprüfung auf Sicherheit und Datenschutz übernommen
- Gemeinsam soll edit prediction insgesamt zu einer besseren Funktion gemacht werden
- Video-Link: How Zed’s Open-Source Edit Predictions Work
Editing By Rewriting
- Die meisten Coding-Modelle werden mit dem Verfahren „fill in the middle“ trainiert
- Dabei werden Prefix und Suffix vorgegeben, und das Modell generiert den Teil dazwischen
- Zeta hingegen muss Bearbeitungen an beliebigen Positionen vorhersagen, was nicht gut zu dieser bestehenden Struktur passt
- Dabei fiel auf, dass das Modell weniger für sehr feingranulare Änderungen geeignet ist, sondern eher für das Umschreiben vergleichsweise größerer Code-Blöcke
- Deshalb wurde ein Ansatz gewählt, bei dem die jüngste Bearbeitungshistorie und die Cursor-Position als Eingabe dienen und das betreffende Code-Fragment neu geschrieben wird
Evaluating Predictions
- Die Ergebnisse großer Sprachmodelle fallen nicht immer identisch aus, was Tests schwierig macht
- Durch das Setzen von
temperature auf 0 oder die Angabe eines RNG-Seeds lässt sich diese Variabilität bis zu einem gewissen Grad kontrollieren
- Bei Code sind jedoch oft mehrere richtige Lösungen möglich, sodass ein Ergebnis auch dann korrekt sein kann, wenn es nicht der erwarteten Antwort entspricht
- Da klassische Unit-Tests schwierig sind, wurde ein Ansatz ausprobiert, bei dem ein größeres LLM die Ergebnisse von Zeta in natürlicher Sprache prüft
- Beispiel: Anhand einer Anforderung wie „ob die quicksort-Funktion rekursiv für das linke und rechte Array aufgerufen wird“ lässt Claude beurteilen, ob das Ergebnis der Absicht entspricht
Prompt Engineering
- Zunächst wurde das Modell Qwen2.5-Coder-32B verwendet, um einen Prompt zu entwerfen, der klar vorgibt, welche Bearbeitung vorhergesagt werden soll
- Die ersten wenigen Tests (evals) wurden bestanden, doch mit zunehmender Zahl von Tests wurde es schwierig, allein durch Prompt-Änderungen konsistente Ergebnisse zu erzielen
- Das 32b-Modell hatte zudem hohe Antwortlatenzen und erfüllte damit nicht die strengen Performance-Anforderungen von Zed
Supervised Fine-Tuning
- Nach verschiedenen Versuchen wurde auf Supervised Fine-Tuning mit Unsloth und LoRA umgestellt
- Ziel war es, aus der jüngsten Bearbeitungshistorie die vom Nutzer gewünschte Veränderung abzuleiten und dem Modell beizubringen, das Code-Fragment ohne ungenaue Einfügungen sauber zu schreiben
- Anfangs gab es jedoch zu wenig reale Nutzerdaten, daher wurden mit Claude etwa 50 synthetische Beispiele erzeugt und dem Dataset hinzugefügt
- Anschließend wurde eine frühe Version per Feature-Flag in Zed ausgerollt, damit das interne Team reale Nutzungsbeispiele erzeugen und das Dataset erweitern konnte
- Mit rund 400 Beispielen wurde die Modellgenauigkeit verbessert, doch bei Bearbeitungen nur einzelner Dateibereiche blieb das Problem bestehen, dass das Modell unnötige Änderungen vornahm
Direct Preference Optimization
- Um dieses Problem zu lösen, wurde die Methode DPO (Direct Preference Optimization) eingeführt
- Statt nur „gute Beispiele“ zu zeigen, wurden auch ausdrücklich „zu vermeidende Beispiele“ angegeben, damit das Modell ungeeignete Bearbeitungen unterscheiden lernt
- Schon mit etwa 150 sorgfältig ausgewählten Beispielen verbesserte sich das Verhalten des Modells in schwierigen Fällen deutlich
- Mit einer größeren Vielfalt an Beispielen werden weitere Verbesserungen erwartet
Minimizing Latency: Speculative Decoding
- Wie bei allen Funktionen von Zed ist auch bei edit prediction die Minimierung der Latenz zentral
- Zielwerte sind ein p50 von unter 200 ms und ein p90 von unter 500 ms
- Da beim Umschreiben von Code-Teilen viele Tokens erzeugt werden müssen, kann dies langsamer sein als der übliche fill-in-the-middle-Ansatz
- Es wurde jedoch ausgenutzt, dass beim Rewrite viele Teile dem ursprünglichen Code stark ähneln, und deshalb die Technik des speculative decoding angewendet
- Dabei werden unter Bezug auf die Eingabe per n-gram-Suche Tokens parallel erzeugt, um die Geschwindigkeit ohne Qualitätsverlust zu erhöhen
Minimizing Latency: Serving The Model
- Neben der Geschwindigkeit der Modellinferenz war auch die Bereitstellung des Modells im Server-Umfeld eine große Herausforderung
- Es handelt sich um das rechenintensivste Problem, an dem das Team bislang gearbeitet hat
- Zum Launch wurde nach einem kurzen Evaluierungsprozess Baseten ausgewählt
- Die Ingenieure von Baseten optimierten das Zeta-Modell, sodass die gewünschten Latenzziele erreicht wurden
- Da auch die Netzwerkübertragungszeit ein wesentlicher Faktor ist, wurden GPUs in den USA und in Europa platziert, um Anfragen physisch näher zu den Nutzern zu verarbeiten
- Über Cloudflare Workers werden Anfragen aus dem dem Nutzer nächstgelegenen Rechenzentrum weitergeleitet
Conclusion
- Künftig sollen verschiedene Richtungen erkundet werden, um edit prediction noch leistungsfähiger zu machen
- Geplant sind mehr Kontext für das Modell, zusätzliches Fine-Tuning und eine Erweiterung des Zeta-Datasets zur weiteren Verbesserung
- Seit dem Start von Zed AI im vergangenen Herbst wurde viel gelernt
- Da sich die Welt schnell verändert, werden kontinuierlich Funktionen erprobt und gebaut, die Nutzer lieben könnten
- Auch AI soll im Sinne des Open-Source-Geists, den Zed seit jeher verfolgt, gemeinsam weiterentwickelt werden
- Gewünscht ist, dass sich jeder als Nutzer, Mitwirkender oder Teammitglied beteiligen kann, um gemeinsam eine noch bessere Zukunft zu gestalten
2 Kommentare
Neuer Editor von den Atom-Entwicklern. Open Beta gestartet
Kollaborativer Code-Editor „Zed“ ist jetzt Open Source
Zed AI vorgestellt (mit Anthropic)
Hacker-News-Kommentare