- Zedは速度のために設計されたエディタで、常に
instantな編集体験を目指してきた
instantよりさらに速くするために、ユーザーの「次の編集動作を予測」する方式を採用
- そのためにZedは新たに edit prediction 機能を公開し、これは Zeta というオープンソースモデルを基盤に動作する
- 使用中に
tabキーで予測された編集をすぐに適用でき、複数の後続編集も連続して実行できる
- 多くの要望があった機能であり、できるだけ自然にZedの編集環境と調和するように開発された
- 現在はパブリックベータ期間中のため、ZedをダウンロードしてGitHubアカウントでログインすれば無料で Zeta を利用できる
- ただし edit prediction は今後無料ではなくなる可能性があるが、今は一緒に実験し学ぶために公開している
Thoughtful Integration
- edit prediction 機能の追加によって
tabキーはより強力になった
- ただし従来
tabでインデントしたり、言語サーバー(LS)が提供する提案を確認したりする使い方と衝突する可能性がある
- 言語サーバーが提供するコード提案が表示されている場合、
option/altキーを押して初めて予測編集がプレビュー表示される
- macOSでは
tabで予測編集を確定でき、optionを離すと元の言語サーバー提案画面に戻る
- Linuxでは
alt-tabがウィンドウマネージャに予約されていることが多いため、デフォルトでalt-lを提供する
- Linux環境で
alt-tabが競合しないなら、そのまま使用できる
Introducing Zeta: Zed's Open Source Edit Prediction Model
- Zetaは Qwen2.5-Coder-7B をベースに開発されたオープンソースモデル
- オープンデータセット(リンク)も公開中
- オープンソースリポジトリで作業している場合、Zeta 改善のためにデータセットへ貢献してほしいとしている
- 初期段階では安全性とプライバシーのレビューを経たうえでデータが反映される予定
- ともに取り組み、edit prediction を全体としてより良い機能にしていきたいとしている
- 動画リンク: How Zed’s Open-Source Edit Predictions Work
Editing By Rewriting
- ほとんどのコーディングモデルは「fill in the middle」方式で学習する
- prefix と suffix を与え、その間をモデルが生成する構造
- 一方で Zeta は任意位置の編集を予測する必要があり、既存の構造には合わない課題だった
- モデルが細かな単位の変更よりも、比較的大きなコードの塊の書き換えを得意としている点に注目した
- そのため最近の編集履歴とカーソル位置を入力として受け取り、該当コード片を書き換える方式を採用した
Evaluating Predictions
- 大規模言語モデルの結果は毎回同じになるとは限らず、テストが難しいという問題がある
- 温度(
temperature)を0に設定したり、RNGシードを指定したりすることで変動をある程度制御できる
- しかしコードには複数の正解があり得るため、結果が期待する解答と違っていても正しい場合がある
- 従来の単体テストが難しいため、より大きな LLM を使って Zeta の結果を自然言語で検査する方法を試した
- 例: 「左と右の配列に対して再帰的に quicksort 関数を呼び出しているか」のような要件を与え、Claude に意図に合っているか判定させた
Prompt Engineering
- 当初は Qwen2.5-Coder-32B モデルを使い、どの編集を予測すべきかを明確に指示するプロンプトを構成した
- 初期のいくつかのテスト(eval)は通過したが、テストが増えるにつれてプロンプト変更だけでは一貫した結果を出しにくくなった
- 32b モデルは応答遅延が大きく、Zed の厳しい性能基準にも合わなかった
Supervised Fine-Tuning
- 複数のアプローチを試した末に、Unsloth と LoRA を用いた教師あり学習(fine-tuning)へ切り替えた
- 最近の編集履歴からユーザーが望む変化を推論し、コード片を不正確な挿入なしにうまく書けるよう教えることが目的
- ただし当初は実際のユーザーデータが不足していたため、Claude を通じて50件ほどの合成例を作成し、データセットに追加した
- その後、初期バージョンを機能フラグ付きで Zed にデプロイし、社内チームが実際の利用例を生成してデータセットを拡大した
- およそ400件の例でモデル精度を高めたが、ファイルの一部区間だけを編集する際にモデルが不要な変更を加える問題は残っていた
Direct Preference Optimization
- この問題を解決するため DPO(Direct Preference Optimization) 手法を導入した
- 単に「良い例」を見せるだけでなく「避けるべき例」も明示し、モデルが不適切な編集を見分けられるよう学習させた
- およそ150件の注意深く選ばれた例だけでも、難しいケースでのモデル挙動は大きく改善した
- より多様な例を収集すれば、さらに改善できると期待している
Minimizing Latency: Speculative Decoding
- Zed のあらゆる機能と同様に、edit prediction でも遅延(レイテンシ)を最小化することが重要
- 目標は p50 が 200ms 以下、p90 が 500ms 以下
- コードの一部を書き換えるには生成すべきトークン数が増えるため、一般的な fill-in-middle 方式より遅くなる可能性がある
- しかし rewrite の過程では元のコードとかなり似た部分が多いことを活用し、speculative decoding 手法を適用した
- 入力を参照して n-gram 検索で並列トークン生成を進め、品質を落とさず速度を高める戦略
Minimizing Latency: Serving The Model
- モデル推論速度だけでなく、サーバー環境でのモデル提供(Serving)方式も大きな課題だった
- これまでチームが取り組んできた中でも、最も計算量を要する問題だった
- ローンチ時点で短い検証プロセスを経て Baseten を選択した
- Baseten のエンジニアが Zeta モデルを最適化し、目標の遅延基準を達成した
- ネットワーク転送時間も主要因であるため、米国と欧州に GPU を配置して物理的に近い場所でリクエストを処理する
- Cloudflare Workers を通じて、ユーザーに近いデータセンターからリクエストを中継する
Conclusion
- 今後は edit prediction をさらに強力にするさまざまな方向を探っていく予定
- モデルが受け取るコンテキスト量を増やし、追加の fine-tuning を進め、Zeta データセットを拡張して改善していく計画
- 昨年秋に Zed AI をリリースして以来、多くのことを学んできた
- 世界が急速に変化する中で、ユーザーに愛される機能を継続的に実験し構築している
- AI も Zed が追求してきたオープンソース精神のもとでともに発展させたいとしている
- ユーザー、貢献者、チームメンバーとして誰もが参加できることを願い、より素晴らしい未来を切り開くために走り続けている
2件のコメント
Atom開発者たちが作った新しいエディタ。オープンベータ開始
協業向けコードエディタ「Zed」、ついにオープンソースへ移行
Zed AI公開(with Anthropic)
Hacker Newsの意見