生成AI入門 2026.04.19
Claude 200Kトークンの実用ガイド【2026年版】コスト計算・大規模処理コード・実務5パターン
200Kトークンの実際のサイズ感
# token_size_reference.py
# 200,000トークンがどのくらいの分量か確認する
import anthropic
import os
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
def count_tokens(text: str) -> int:
"""テキストのトークン数を確認(無料・実際のリクエストなし)"""
result = client.messages.count_tokens(
model="claude-sonnet-4-5",
messages=[{"role": "user", "content": text}]
)
return result.input_tokens
# サイズ感を確認
samples = [
("A4用紙1枚(1600字)", "あ" * 1600),
("1万字のドキュメント", "あ" * 10000),
("コード1000行(Python)", "x = 1\n" * 1000),
]
print("=== トークン数の目安 ===")
for label, text in samples:
tokens = count_tokens(text)
capacity = 200_000 / tokens
print(f"{label}: {tokens:,}トークン → 200K枠に{capacity:.0f}個入る")
# 日本語の目安
# 日本語1文字 ≈ 0.3〜0.5トークン
# 200,000トークン ≈ 40〜70万字 ≈ A4用紙250〜450ページ
大規模ドキュメントの一括処理
# bulk_document_analysis.py
# 複数ファイルをまとめてClaude Sonnetに投入する
import anthropic
import pathlib
import os
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
MAX_INPUT_TOKENS = 180_000 # 出力用に余裕を残す
def load_files(directory: str, extensions: list[str] = [".py", ".ts", ".md"]) -> dict[str, str]:
"""ディレクトリ内のファイルを一括読み込み"""
files = {}
for path in pathlib.Path(directory).rglob("*"):
if path.suffix in extensions and path.is_file():
try:
files[str(path)] = path.read_text(encoding="utf-8")
except Exception:
pass
return files
def build_context(files: dict[str, str], max_tokens: int = MAX_INPUT_TOKENS) -> str:
"""ファイルをコンテキストとしてまとめる(トークン上限付き)"""
parts = []
total = 0
for filepath, content in files.items():
# ファイルヘッダー付きでフォーマット
block = f"\n### ファイル: {filepath}\n```\n{content}\n```\n"
# トークン数を確認してから追加
result = client.messages.count_tokens(
model="claude-sonnet-4-5",
messages=[{"role": "user", "content": "\n".join(parts) + block}]
)
if result.input_tokens > max_tokens:
print(f"⚠️ {filepath}: コンテキスト上限超過のためスキップ")
break
parts.append(block)
total = result.input_tokens
print(f"✅ {len(parts)}ファイルをロード(合計{total:,}トークン)")
return "\n".join(parts)
def analyze_codebase(directory: str, question: str) -> str:
"""コードベース全体を分析する"""
files = load_files(directory)
context = build_context(files)
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=4096,
messages=[{
"role": "user",
"content": f"以下のコードベースを分析してください。\n{context}\n\n質問: {question}"
}]
)
return response.content[0].text
# 使用例
result = analyze_codebase(
"./src",
"このコードベースの設計上の問題点と、リファクタリングの優先順位を教えて"
)
print(result)
200Kを超える文書のチャンク処理
# chunk_processor.py
# 200Kを超える文書をチャンク分割して処理し、結果を統合する
import anthropic
import os
from typing import Generator
client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
def chunk_text(
text: str,
chunk_size: int = 150_000, # トークン数(余裕を持たせる)
overlap: int = 5_000, # チャンク間の重複(文脈を引き継ぐ)
) -> Generator[str, None, None]:
"""テキストをオーバーラップ付きで分割"""
# 文字数ベースで概算(日本語: 1文字≈0.4トークン)
chars_per_chunk = int(chunk_size / 0.4)
overlap_chars = int(overlap / 0.4)
start = 0
while start < len(text):
end = start + chars_per_chunk
yield text[start:end]
start = end - overlap_chars # 前のチャンクの末尾と重複させる
def map_reduce_analysis(document: str, task: str) -> str:
"""
Map: 各チャンクを個別に分析
Reduce: 各チャンクの分析結果を統合
"""
chunks = list(chunk_text(document))
print(f"チャンク数: {len(chunks)}")
# Map フェーズ
chunk_results = []
for i, chunk in enumerate(chunks):
print(f"チャンク {i+1}/{len(chunks)} を処理中...")
response = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=2048,
messages=[{
"role": "user",
"content": f"文書の一部({i+1}/{len(chunks)}):\n{chunk}\n\nタスク: {task}\n\n要点だけ箇条書きで出力してください。"
}]
)
chunk_results.append(response.content[0].text)
# Reduce フェーズ:全チャンクの結果を統合
combined = "\n\n".join([
f"=== チャンク{i+1}の分析 ===\n{r}"
for i, r in enumerate(chunk_results)
])
final = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=4096,
messages=[{
"role": "user",
"content": f"以下は文書を分割して分析した結果です。これらを統合して最終的な回答を出してください。\n\n{combined}\n\n元のタスク: {task}"
}]
)
return final.content[0].text
200K処理のコスト計算
# large_context_cost.py
SONNET_INPUT_PER_1M = 3.00 # USD
SONNET_OUTPUT_PER_1M = 15.00 # USD
BATCH_DISCOUNT = 0.5 # バッチ処理で50%割引
def estimate_large_doc_cost(
input_tokens: int,
output_tokens: int = 2000,
use_batch: bool = False,
) -> dict:
multiplier = BATCH_DISCOUNT if use_batch else 1.0
input_cost = input_tokens * SONNET_INPUT_PER_1M / 1_000_000 * multiplier
output_cost = output_tokens * SONNET_OUTPUT_PER_1M / 1_000_000 * multiplier
total = input_cost + output_cost
return {
"input_tokens": input_tokens,
"input_cost": input_cost,
"output_cost": output_cost,
"total_usd": total,
"total_jpy_ref": int(total * 150),
}
# 代表的なシナリオのコスト
scenarios = [
("A4 50ページ(約80,000トークン)", 80_000),
("A4 200ページ(約200,000トークン)", 180_000),
("コードベース全体(100,000トークン)", 100_000),
]
print(f"{'シナリオ':<35} {'通常':>12} {'バッチ50%引き':>15}")
print("-" * 65)
for label, tokens in scenarios:
normal = estimate_large_doc_cost(tokens)
batch = estimate_large_doc_cost(tokens, use_batch=True)
print(f"{label:<35} ${normal['total_usd']:>10.3f} ${batch['total_usd']:>10.3f}")
シナリオ 通常 バッチ50%引き
-----------------------------------------------------------------
A4 50ページ(約80,000トークン) $0.270 $0.135
A4 200ページ(約200,000トークン) $0.570 $0.285
コードベース全体(100,000トークン) $0.330 $0.165
実務での5パターン活用例
1. コードレビュー: src/ 全体(〜5万行)を投入 → 設計方針の問題点を発見
2. 法務チェック: 契約書100ページをまるごと投入 → 特定条項のリスクを洗い出し
3. 顧客分析: アンケート500件を投入 → テーマ別の傾向と改善案を生成
4. 技術仕様統合: 仕様書+実装コード+テストを投入 → 仕様と実装の乖離を検出
5. 会議ログ分析: 6ヶ月分の議事録を投入 → 意思決定の経緯と決定事項を整理
あわせて読みたい
- Claude Sonnet APIコスト完全解説|トークン計算・バッチ割引・月額試算
- Claude APIプロキシサーバーをFastAPI+Dockerで作る【curlテスト付き】
- ローカルLLM運用で失敗しない|VRAM・トークン数の計算方法とPythonスクリプト