4 Punkte von GN⁺ 2025-02-15 | 2 Kommentare | Auf WhatsApp teilen
  • 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

 
GN⁺ 2025-02-15
Hacker-News-Kommentare
  • Die prädiktive Bearbeitungsfunktion von Zed ist derzeit kostenlos, könnte später aber kostenpflichtig werden. Der Nutzer wird entscheiden, ob er sie in seinen Workflow integriert, sobald der Preis feststeht. Er hätte gern eine kostenlose Testphase, würde sie aber nicht nutzen, wenn sie zu teuer ist
    • Zed kann derzeit nur einen LSP pro Dateityp ausführen. Rust und C++ funktionieren gut, Angular jedoch nicht
    • Die Remote-Editing-Funktion funktioniert unter Windows nicht. Um sie unter Windows zu nutzen, ist SSH-Unterstützung erforderlich
  • Die Vorhersagefunktion wird zu aggressiv eingesetzt. Der Nutzer empfindet sie als störend und meint, dass sie seinen Workflow behindert
    • Wenn die Vorhersagefunktion zu häufig eingesetzt wird, hilft sie eher nicht. Der Algorithmus kann die Gedanken eines Menschen nicht lesen und sollte die Arbeit des Nutzers daher nicht stören
  • Man möchte nicht, dass Code an Dritte gesendet wird. Besonders beim Bearbeiten vertraulicher Dateien könnten private Schlüssel oder API-Schlüssel übertragen werden
    • Eine lokale Option wäre wünschenswert
  • Dem Nutzer gefällt, wie Zed neue Funktionen bewirbt. Sie werden oben links als Banner angezeigt und stören die Arbeit nicht
    • Anders als bei anderer Software werden Nutzer nicht dazu gezwungen, neue Funktionen anzusehen
  • Zed versucht, Kommentare automatisch zu vervollständigen. Der Nutzer möchte keine Autovervollständigung in Kommentaren, und es wurde eine Option hinzugefügt, um dies zu deaktivieren
  • Die Oberfläche zum Annehmen von Vorschlägen in CoPilot ist unpraktisch. Bei Verwendung der Tab-Taste erscheinen viele unerwünschte KI-Vorschläge
  • In einem Texteditor wird Stabilität bevorzugt. Zu viele KI-bezogene Funktionen machen ihn eher unbequem
    • Zed auszuprobieren war positiv
  • Moderne Intellisense bietet angemessene Vorhersagefunktionen. KI-Vorhersagen werden zu aggressiv eingesetzt
    • Es wäre nützlich, wenn KI Empfehlungen zur Programmstruktur und zu Mustern geben würde. Je größer Programme werden, desto schwieriger wird ihre Strukturierung
  • Für die lokale Nutzung der Zed-Funktionen kann man Modelldateien definieren. Es ist jedoch unklar, ob Zed den Endpoint für diese Funktion ändern kann