26. Ollama利用におけるコンテキスト長(num_ctx)の最適化戦略

LLMの性能とコンテキスト長のトレードオフ

LLMの性能を向上させるためには、より多くの情報(長いプロンプトや過去の対話履歴)を与えることが有効だと考えられがちです。しかし、コンテキスト長(num_ctx)を無制限に長く設定することは、計算リソースの浪費と、モデルの「注意力の低下」を招くリスクを伴います。

コンテキスト長とは何か?

コンテキスト長とは、モデルが一度の推論処理で参照できるトークン(単語や文字のまとまり)の最大数を指します。これが長いほど、長い文脈や多くの情報を記憶した上で応答を生成できますが、処理負荷も増大します。

タスク目的に合わせたコンテキスト長の決定法

コンテキスト長は、タスクの性質によって最適な値が異なります。一律に最大値に設定するのは非効率です。

タスクの性質 必要な情報量 推奨されるアプローチ
要約・質問応答 入力情報全体を把握する必要があるが、出力は短い 入力プロンプトの前後を適切にトリミングし、必要な情報のみを渡す(情報選別)
長文のコード生成・レビュー コード全体や複数のファイルの内容を一度に参照する必要がある コンテキスト長を最大化し、必要なファイル全体をプロンプトに含める(ただし、トークン制限に注意)
対話履歴の維持 過去のやり取り全体を記憶する必要がある 過去のやり取りを要約し、その「要約」をプロンプトに含める(履歴の圧縮)

トークン効率化のための高度なテクニック

単にnum_ctxを増やすのではなく、プロンプトの「質」を高める工夫が重要です。

  • RAGの導入: 外部知識ベース(ベクトルDBなど)から関連文書を検索し、その「検索結果の抜粋(チャンク)」のみをプロンプトに含めるのが最も効率的です。これにより、LLMのコンテキストウィンドウを「知識の検索」に特化させることができます。
  • Few-Shot Learningの最適化: 例示(Few-Shot)を盛り込む際も、例示の数を増やすのではなく、例示の「質」を高める(より具体的な失敗例や成功例を含める)方が効果的です。

まとめ:コンテキスト長は「必要な情報量」で制御する

コンテキスト長は、単なる数値パラメータではなく、「モデルに与える情報量の予算」と捉えるべきです。タスクごとに最適な情報量を計算し、それを超えないようにプロンプトを設計する能力こそが、高度なLLMアプリケーション開発の鍵となります。