ChatGPTやClaude、Geminiなどの生成AIを使っていて、「長い文章を入力したら途中で切れてしまった」「会話が長くなると過去の内容を忘れる」といった経験はないだろうか。
この現象は、AIモデルのコンテキストウィンドウ(Context Window)と呼ばれる制約によって起きている。
コンテキストウィンドウは、AIが一度に処理できる情報量の上限を定めるもので、AIの実用性を大きく左右する重要なスペックだ。
本記事では、コンテキストウィンドウとは何か、トークンとの関係、主要モデル(GPT-4o、Claude 3.5、Gemini 1.5)の比較、コンテキスト長の拡大トレンド、実用上の制約と対策まで、初心者にもわかりやすく解説する。
コンテキストウィンドウとは
コンテキストウィンドウとは、AIモデルが一度に参照できるトークン数の上限を指す。
トークンとは、AIが文章を処理する際の最小単位で、英語なら単語の一部や単語、日本語なら1文字〜数文字に相当する。
具体例:コンテキストウィンドウの制約
例1:GPT-3.5(コンテキストウィンドウ = 4,096トークン)の場合
入力:3,000トークンの文章 + 質問100トークン
→ 残り:996トークン(回答に使える最大長)
→ 結果:短い回答しか生成できない
例2:Claude 3.5(コンテキストウィンドウ = 200,000トークン)の場合
入力:100,000トークンの文章(約500ページ分)+ 質問100トークン
→ 残り:99,900トークン
→ 結果:長大な文章を読み込んでも十分な回答が可能
このように、コンテキストウィンドウが大きいほど、長い文書の処理や、長い会話履歴の保持が可能になる。
トークンとコンテキストウィンドウの関係
トークンとは
トークンは、AIモデルが文章を処理する際の「単位」だ。
英語の場合:
"Hello, how are you?" → 約5トークン
- "Hello" → 1トークン
- "," → 1トークン
- " how" → 1トークン
- " are" → 1トークン
- " you" → 1トークン
- "?" → 1トークン
日本語の場合:
"こんにちは、元気ですか?" → 約15トークン
(日本語は1文字あたり約1.5〜2トークン)
コンテキストウィンドウに含まれるもの
コンテキストウィンドウには、以下のすべてが含まれる。
- システムプロンプト(AIの振る舞いを指定する指示)
- ユーザーの入力(質問、文書、会話履歴)
- AIの出力(生成された回答)
- ツール呼び出し(Function Callingなどの追加情報)
例:ChatGPT API利用時
システムプロンプト:100トークン
会話履歴(過去10ターン):2,000トークン
新しい質問:50トークン
→ 合計:2,150トークン
→ 残り(GPT-4oの場合、128k):125,850トークン
主要AIモデルのコンテキストウィンドウ比較
2026年3月時点の主要モデル
| モデル | コンテキストウィンドウ | 日本語換算(概算) | 料金(入力) |
|---|---|---|---|
| GPT-4o | 128,000トークン | 約6万文字 | $2.50 / 1M tokens |
| GPT-4 Turbo | 128,000トークン | 約6万文字 | $10 / 1M tokens |
| GPT-3.5 Turbo | 16,385トークン | 約8,000文字 | $0.50 / 1M tokens |
| Claude 3.5 Sonnet | 200,000トークン | 約10万文字 | $3 / 1M tokens |
| Claude 3 Opus | 200,000トークン | 約10万文字 | $15 / 1M tokens |
| Gemini 1.5 Pro | 2,000,000トークン | 約100万文字 | $1.25 / 1M tokens |
| Gemini 1.5 Flash | 1,000,000トークン | 約50万文字 | $0.075 / 1M tokens |
※料金は変動する可能性があります。最新情報は各社公式サイトをご確認ください。
実用上の違い
GPT-3.5 Turbo(16k)の場合:
– 論文1本(約8,000文字)を要約可能
– 長い会話(10〜15ターン)で履歴が保持される
GPT-4o/Claude 3.5(128k-200k)の場合:
– 書籍1冊分(約10〜20万文字)を要約可能
– 長時間の会話でも文脈を保持
Gemini 1.5 Pro(2M)の場合:
– 書籍10冊分以上を一度に処理可能
– 1時間以上の動画の文字起こしを解析可能
コンテキストウィンドウの拡大トレンド
歴史的推移
| 年 | モデル | コンテキストウィンドウ |
|---|---|---|
| 2020 | GPT-3 | 2,048トークン |
| 2022 | ChatGPT(GPT-3.5) | 4,096トークン |
| 2023 | GPT-4 | 8,192トークン(後に32k版も登場) |
| 2023 | Claude 2 | 100,000トークン |
| 2024 | GPT-4 Turbo | 128,000トークン |
| 2024 | Claude 3 | 200,000トークン |
| 2024 | Gemini 1.5 | 1,000,000トークン → 2,000,000トークン |
| 2026 | 次世代モデル | 10,000,000トークン超? |
わずか4年で、2,048トークンから200万トークンへと約1,000倍に拡大している。
なぜコンテキストウィンドウが重要か
コンテキストウィンドウの拡大により、以下のような新しいユースケースが可能になった。
- 長文書の一括処理:数百ページの契約書、技術仕様書を一度に分析
- マルチターン会話:数時間にわたる会話の文脈を保持
- コードベース全体の解析:複数ファイルのコードを同時に理解
- 動画・音声の解析:1時間以上のコンテンツを文字起こし&要約
実用上の制約と対策
コンテキストウィンドウが大きくても、実際には以下のような制約がある。
1. コストの増加
コンテキストウィンドウが大きいほど、処理するトークン数が増え、API料金が高額になる。
例:Claude 3.5で10万トークンの文書を処理
入力:100,000トークン × $3 / 1M = $0.30
出力:2,000トークン × $15 / 1M = $0.03
合計:$0.33 / リクエスト
月間1,000回実行すると $330 のコストになる。
対策:
– 必要最小限のコンテキストのみ使用
– RAGで関連部分のみを検索して渡す
– 要約→詳細分析の2段階処理
2. 処理速度の低下
コンテキストが長いほど、推論時間が増加し、レスポンスが遅くなる。
対策:
– バッチ処理で非同期実行
– ストリーミング出力で体感速度を改善
3. 「中間部分の忘却」問題
コンテキストが長すぎると、中間部分の情報を見落とす現象が報告されている。
例:
入力:10万トークンの文書
質問:「中盤(5万トークン目付近)の情報について教えて」
→ AIが見落とす可能性がある
これは「Lost in the Middle」問題として知られている。
対策:
– 重要な情報を冒頭または末尾に配置
– チャンク分割して複数回処理
4. トークン数の見積もりミス
日本語は英語に比べてトークン数が多く、見積もりを誤るとコンテキストをオーバーしてしまう。
対策:
– tiktoken(OpenAI公式ライブラリ)でトークン数を事前計算
import tiktoken
encoding = tiktoken.encoding_for_model("gpt-4o")
tokens = encoding.encode("これはテストです")
print(len(tokens)) # トークン数を確認
コンテキストウィンドウを超えた場合の対処法
1. チャンク分割
長文を複数の小さな塊(チャンク)に分割し、順次処理する。
def split_text(text, chunk_size=10000):
chunks = []
for i in range(0, len(text), chunk_size):
chunks.append(text[i:i+chunk_size])
return chunks
chunks = split_text(long_document)
summaries = [llm.summarize(chunk) for chunk in chunks]
final_summary = llm.summarize(" ".join(summaries))
2. RAG(検索拡張生成)
ベクトルデータベースで関連部分のみを検索し、コンテキストに含める。
from langchain.vectorstores import Chroma
from langchain.embeddings.openai import OpenAIEmbeddings
# 長文をベクトルDBに保存
vectorstore = Chroma.from_texts(
texts=long_document_chunks,
embedding=OpenAIEmbeddings()
)
# 質問に関連する部分のみを検索
docs = vectorstore.similarity_search("質問内容", k=3)
context = "\n".join([doc.page_content for doc in docs])
# 検索結果のみをLLMに渡す
llm.generate(f"以下の情報に基づいて回答してください:\n{context}\n\n質問:...")
詳細は以下の記事で解説している。
– ベクトルデータベースとは?AI検索を支える次世代DB技術を解説
3. 会話履歴の削減
長い会話では、古いメッセージを削除し、直近のやり取りのみ保持する。
MAX_HISTORY = 10 # 直近5ターン(user + assistant x 5)
if len(messages) > MAX_HISTORY:
# システムプロンプト + 直近の会話のみ保持
messages = [messages[0]] + messages[-(MAX_HISTORY-1):]
4. 要約の活用
長い文書を要約してからメインタスクを実行する。
# ステップ1: 要約
summary = llm.summarize(long_document, max_tokens=500)
# ステップ2: 要約を使って詳細分析
analysis = llm.analyze(f"以下の要約に基づいて分析してください:\n{summary}")
ChatGPT APIでのコンテキスト管理例
from openai import OpenAI
import tiktoken
client = OpenAI()
def count_tokens(messages, model="gpt-4o"):
encoding = tiktoken.encoding_for_model(model)
num_tokens = 0
for message in messages:
num_tokens += 4 # メッセージのメタデータ
for key, value in message.items():
num_tokens += len(encoding.encode(value))
return num_tokens
# 会話履歴
messages = [
{"role": "system", "content": "あなたは親切なアシスタントです。"},
{"role": "user", "content": "こんにちは"},
{"role": "assistant", "content": "こんにちは!何かお手伝いできることはありますか?"},
]
# トークン数を確認
total_tokens = count_tokens(messages)
print(f"現在のトークン数: {total_tokens}")
# 上限を超えそうなら古いメッセージを削除
MAX_TOKENS = 100000
if total_tokens > MAX_TOKENS:
messages = [messages[0]] + messages[-10:] # システムプロンプト + 直近10件
# API呼び出し
response = client.chat.completions.create(
model="gpt-4o",
messages=messages
)
print(f"使用トークン数: {response.usage.total_tokens}")
よくある質問
Q1. コンテキストウィンドウを超えるとどうなりますか?
APIがエラーを返します(OpenAIの場合はInvalidRequestError)。Web版ChatGPTの場合は、古い会話履歴が自動的に削除されます。
Q2. コンテキストウィンドウが大きいほど高性能ですか?
必ずしもそうではありません。コンテキストが大きいとコストや処理時間が増加します。また、「Lost in the Middle」問題により、長すぎるコンテキストは逆効果になることもあります。タスクに応じて適切なサイズを選びましょう。
Q3. 画像や音声もトークン数にカウントされますか?
はい。マルチモーダルモデル(GPT-4o、Gemini 1.5 Pro)では、画像や音声もトークン換算されます。たとえば、高解像度画像は数百〜数千トークンに相当します。
Q4. Web版ChatGPTとAPIでコンテキストウィンドウは同じですか?
基本的には同じですが、Web版では会話履歴が自動管理されるため、ユーザーが意識する必要は少ないです。APIでは、開発者が明示的に会話履歴を管理する必要があります。
まとめ
コンテキストウィンドウは、AIモデルが一度に処理できる情報量の上限を定める重要なスペックだ。
ポイント:
– コンテキストウィンドウ = AIが一度に参照できるトークン数の上限
– GPT-4o: 128k、Claude 3.5: 200k、Gemini 1.5 Pro: 2M トークン
– 大きいほど長文処理や長い会話が可能だが、コスト・速度に影響
– 対策:RAG、チャンク分割、会話履歴の削減、要約の活用
– 「Lost in the Middle」問題に注意
ChatGPT APIやClaude APIを使った開発では、コンテキストウィンドウを意識した設計が不可欠だ。まずは自分のタスクに必要なトークン数を見積もり、適切なモデルを選ぼう。
関連記事
- ChatGPT APIの使い方入門|Python実装からコスト管理まで
- Temperature(温度パラメータ)とは?AIの出力を制御する重要設定
- ベクトルデータベースとは?AI検索を支える次世代DB技術を解説
参考リンク
- OpenAI Models: platform.openai.com/docs/models
- Anthropic Claude Models: docs.anthropic.com/claude/docs/models-overview
- Google Gemini Models: ai.google.dev/gemini-api/docs/models
- tiktoken(トークンカウントツール): github.com/openai/tiktoken


コメント