4 ポイント 投稿者 GN⁺ 2025-02-15 | 2件のコメント | WhatsAppで共有
  • 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件のコメント

 
GN⁺ 2025-02-15
Hacker Newsの意見
  • Zedの予測編集機能は現在無料だが、今後は有料化される可能性がある。ユーザーは価格が決まったら、ワークフローに組み込むかどうかを判断するつもりだという。無料で試したいが、価格が高ければ使わないだろう
    • Zedはファイルタイプごとに1つのLSPしか実行できない。RustとC++はうまく動作するが、Angularはそうではない
    • リモート編集機能はWindowsでは動作しない。Windowsでリモート編集機能を使うにはSSHサポートが必要である
  • 予測機能があまりに過剰に使われている。ユーザーは予測機能を邪魔だと感じており、自分の作業フローを妨げていると考えている
    • 予測機能が多すぎるとかえって役に立たない。アルゴリズムは人の思考を読めるわけではないので、ユーザーの作業を妨げないようにすべきである
  • コードが第三者に送信されることを望まない。特に秘密ファイルを編集しているとき、秘密鍵やAPIキーが送信される可能性がある
    • ローカルオプションが提供されることを望む
  • Zedの新機能の宣伝方法が気に入っている。左上にバナーとして表示され、ユーザーの作業を妨げない
    • 他のソフトウェアのように、ユーザーに新機能の確認を強制しない
  • Zedはコメントの自動補完を試みる。ユーザーはコメント部分で自動補完を望んでおらず、これを無効化できるオプションが追加された
  • CoPilotの提案受け入れインターフェースは使いにくい。Tabキーを使うと、望まないAI提案が多く表示される
  • テキストエディタには安定性を求める。AI関連機能が多いとかえって不便である
    • Zedを使ってみたところ良かった
  • 現代のIntellisenseは適切な予測機能を提供している。AI予測は過剰に使われすぎている
    • AIがプログラムの構造やパターンの提案を提供すれば有用だろう。プログラムが大きくなるほど構造化は難しくなる
  • Zedの機能をローカルで使うためのモデルファイルを定義できる。ただし、Zedがこの機能のエンドポイントを変更できるかどうかは不明である