Re Reference AI

技術

コンテキストウィンドウとは

Context Window

LLMが一度の推論で参照できる入力・出力トークンの合計量の上限

LLMトークン

ひとことで言うと

AIが一度に読んだり覚えたりできる文章の量の上限。

概要

コンテキストウィンドウとは、LLMが一度の推論で参照できる入力・出力トークンの合計量の上限。 会話履歴・プロンプト・システム指示・生成される出力まで全てがこの範囲内にエンコードされる必要があり、上限を超えた古い情報はモデルから見えなくなる(切り捨てられる)。 コンテキストウィンドウのサイズはモデルによって異なり、初期のLLMでは数千トークン程度だったが、長文書の要約や大規模コードベースの解析など用途の広がりに伴い、数十万トークン規模まで拡大したモデルも登場している。 コンテキストウィンドウが大きいほど多くの文書やコードを一度に扱えるが、入力トークン数に応じて推論コストや処理時間も増加するため、必要な情報だけに絞り込むRAGのような工夫と組み合わせて使われることも多い。

背景

Transformer自己注意機構は入力系列の全トークンペア間の関連度を計算するため、計算量・メモリ使用量が系列長の2乗で増加する。 この制約により、モデルが一度に処理できるトークン数には実用上の上限が生じ、これがコンテキストウィンドウとして扱われる。

歴史

2018年: GPT-1やBERTなど初期のTransformerベースモデルは512〜1024トークン程度のコンテキストウィンドウを持つ。 2023年: GPT-4が3.2万トークンClaude 2が10万トークンのコンテキストウィンドウを提供し拡大が進む。 2024年以降: Gemini 1.5等が100万トークン超のコンテキストウィンドウを実現し、長文書レベルの入力を一度に処理できるモデルが登場。

アーキテクチャ

コンテキストウィンドウの拡大には、Attention計算の効率化(FlashAttention等)、位置エンコーディングの改良(RoPEの外挿・スケーリング等)、スパースアテンションといった手法が用いられる。 ウィンドウを長くするほど計算コスト・メモリ使用量が増えるため、性能とコストのトレードオフが生じる。

ワークフロー

入力(システムプロンプト・会話履歴・ユーザー入力等)をトークン化 → コンテキストウィンドウの上限内に収まるよう古い履歴を切り詰めるか要約 → モデルへ入力 → 出力トークンも含めた合計がウィンドウ上限を超えないよう管理。

コード例

tiktokenでトークン数を数え上限を確認

import tiktoken

enc = tiktoken.encoding_for_model("gpt-4")
tokens = enc.encode(prompt_text)
print(len(tokens), "tokens used")
assert len(tokens) < 128_000  # モデルのコンテキストウィンドウ上限の例

利点

  • ウィンドウが大きいほど、長文書や大量の会話履歴を一度に参照できる
  • 外部検索と組み合わせず、必要な情報をプロンプトへ直接含める運用がしやすくなる

欠点

  • ウィンドウが大きいほど計算コスト・レイテンシ・APIの利用料金が増える
  • 上限を超える入力は切り捨てまたはエラーになるため、長文処理には要約やRAGなど別の工夫が必要になる
  • ウィンドウ内の情報量が多いほど、モデルが重要な情報を見落とす現象(Lost in the Middle等)が起きやすい

比較

  • LLMコンテキストウィンドウはLLMが一度に処理できる入出力量の上限を規定する
  • トークンコンテキストウィンドウの大きさはトークン数で計測される
  • RAGRAGはコンテキストウィンドウに収まる範囲だけを都度検索して補うことで、上限を超える知識にも対応する
  • ロングコンテキストコンテキストウィンドウは上限そのものを指すのに対し、ロングコンテキストはその上限を拡大し実際に活用できる能力・技術を指す
  • Attentionコンテキストウィンドウの拡大は、Attention計算の効率化と密接に関連する
  • KVキャッシュコンテキストウィンドウが長いほど、KVキャッシュのサイズも大きくなる
  • エージェントメモリ短期記憶は多くの場合コンテキストウィンドウ内に保持され、長期記憶はその外側に保存される

関連用語

LLMトークンRAGAttentionKVキャッシュエージェントメモリNeedle in a HaystackRoPEプロンプトキャッシュロングコンテキストコンテキストエンジニアリング

よくある質問

コンテキストウィンドウが大きいほど良い?

一概には言えない。 大きいほど多くの情報を扱えるが、コスト・レイテンシが増え、関連情報が埋もれて精度が落ちる場合もある。 扱う文書量や許容コストに応じたサイズ選択とRAG等の併用が重要。

コンテキストウィンドウを超えるとどうなる?

モデルやAPIの実装によるが、多くの場合は超過分がエラーになるか、古い履歴から自動的に切り捨てられる。

参考文献

関連する年表

Claudeの歴史

Anthropicが2023年に公開した対話型AI「Claude」の、Claude 2・Claude 3ファミリー・Computer Use・Claude Codeを経てClaude Sonnet 5に至るまでの変遷。

モデル8件のイベント / 2023 - 2026

関連Zenn記事