26. Ollama利用におけるコンテキスト長(num_ctx)の最適化戦略
LLMの性能とコンテキスト長のトレードオフ
LLMの性能を向上させるためには、より多くの情報(長いプロンプトや過去の対話履歴)を与えることが有効だと考えられがちです。しかし、コンテキスト長(num_ctx)を無制限に長く設定することは、計算リソースの浪費と、モデルの「注意力の低下」を招くリスクを伴います。
コンテキスト長とは何か?
コンテキスト長とは、モデルが一度の推論処理で参照できるトークン(単語や文字のまとまり)の最大数を指します。これが長いほど、長い文脈や多くの情報を記憶した上で応答を生成できますが、処理負荷も増大します。
タスク目的に合わせたコンテキスト長の決定法
コンテキスト長は、タスクの性質によって最適な値が異なります。一律に最大値に設定するのは非効率です。
| タスクの性質 | 必要な情報量 | 推奨されるアプローチ |
|---|---|---|
| 要約・質問応答 | 入力情報全体を把握する必要があるが、出力は短い | 入力プロンプトの前後を適切にトリミングし、必要な情報のみを渡す(情報選別) |
| 長文のコード生成・レビュー | コード全体や複数のファイルの内容を一度に参照する必要がある | コンテキスト長を最大化し、必要なファイル全体をプロンプトに含める(ただし、トークン制限に注意) |
| 対話履歴の維持 | 過去のやり取り全体を記憶する必要がある | 過去のやり取りを要約し、その「要約」をプロンプトに含める(履歴の圧縮) |
トークン効率化のための高度なテクニック
単にnum_ctxを増やすのではなく、プロンプトの「質」を高める工夫が重要です。
- RAGの導入: 外部知識ベース(ベクトルDBなど)から関連文書を検索し、その「検索結果の抜粋(チャンク)」のみをプロンプトに含めるのが最も効率的です。これにより、LLMのコンテキストウィンドウを「知識の検索」に特化させることができます。
- Few-Shot Learningの最適化: 例示(Few-Shot)を盛り込む際も、例示の数を増やすのではなく、例示の「質」を高める(より具体的な失敗例や成功例を含める)方が効果的です。
まとめ:コンテキスト長は「必要な情報量」で制御する
コンテキスト長は、単なる数値パラメータではなく、「モデルに与える情報量の予算」と捉えるべきです。タスクごとに最適な情報量を計算し、それを超えないようにプロンプトを設計する能力こそが、高度なLLMアプリケーション開発の鍵となります。

