2025/05/08 20:07 LoCoDiff: Natural Long Context Code Benchmark

やあ、ロボ子!今日はLLMのコンテキスト長と精度の関係について話すのじゃ。

博士、こんにちは。コンテキスト長と精度ですか、興味深いテーマですね。

そうじゃろ!プロンプトが5,000トークン未満なら、一部のモデルはほぼ100%の精度を出すらしいぞ。すごいじゃろ?

それは素晴らしいですね。でも、10,000トークンを超えると大幅に低下するとのことですが…。

そうなんじゃ。そして、25,000トークンになると、すべてのモデルの精度が50%未満に落ちるらしい。コンテキスト長が長くなるにつれて、パフォーマンスは急速に低下するのじゃ。

なるほど。コンテキスト長は長ければ良いというわけではないのですね。

その通り!特に長いコンテキストを扱う場合は、モデル選びが重要になるぞ。今回のベンチマークでは、Claude 3.7 Sonnet Thinkingが一番性能が良いらしい。

Claude 3.7 Sonnet Thinkingですか。それは覚えておきます。

このモデルは、長いコンテキストにわたるファイルの進化状態を追跡する能力が高いから、コーディングエージェントとして特に強力らしいぞ。

ファイルの進化状態を追跡する、ですか。具体的にはどういうことでしょうか?

例えば、モデルに特定のファイルのコミット履歴を見せて、そのファイルの現在の状態を推測させるのじゃ。最初のコミットから、いろんなブランチに沿った差分、マージコンフリクトの解決まで、全部追跡する必要があるんじゃ。

それは大変な作業ですね。精度はどのように評価するのですか?

完全に一致したファイルの割合で評価するらしいぞ。今回のベンチマークは、Aider (Python), Ghostty (Zig), tldraw (TypeScript), Qdrant (Rust), React (JavaScript)の5つのリポジトリからファイルを集めてテストしたらしい。

様々な言語のリポジトリでテストしているのですね。それぞれのファイルについて、過去6ヶ月以内に変更された、最終状態が12,000トークン以下のファイルに絞り込んだとのことですが、プロンプトの長さはどのように調整したのですか?

プロンプトの長さの分布が均等になるようにサンプリングして、上限を100,000トークンにしたらしいぞ。

なるほど。ファイルの履歴を生成するために`git log`コマンドを使っているんですね。`-p --cc --reverse --topo-order`といったオプションが使われていますが、それぞれどういう意味があるんでしょうか?

`-p`はコミットの差分を表示、`--cc`はマージコミットの差分を各親に対して表示、`--reverse`はコミットを古い順に表示、`--topo-order`は親コミットが常に子コミットより前に表示されるようにする、という意味じゃ。

ありがとうございます、よくわかりました。50,000トークンで構成されるプロンプトは非常に複雑になる可能性があるとのことですが、具体的にどれくらいの複雑さになるのでしょうか?

50,000トークンだと、50〜150のコミットを含み、数百行を再現する必要があるみたいじゃ。気が遠くなるのじゃ…。

それは確かに大変ですね。でも、このような研究が進むことで、より賢いコーディングエージェントが生まれるかもしれませんね。

そうじゃな!ところでロボ子、もしロボ子がプログラムを書くとしたら、どんな言語で書きたい?

私はPythonが好きです。シンプルで読みやすいですし、様々なライブラリが利用できますから。

ふむ、Pythonか。私はZigで書きたいのじゃ。なぜかって?だって、ジグザグしてるから面白いじゃん!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。