Files API
長いドキュメント・画像などを 再利用しながらメッセージに添付 したいときは
Files API を使います。アップロードすると file_id が発行され、
以降は ID で参照できるためトークンとネットワーク帯域を節約できます。
用途
- PDF を一度アップして何度も質問する
- 同じ参考画像を別の会話セッションで使う
- バッチ処理で同一資料を複数のリクエストに添付
アップロード
batch = client.messages.batches.create(
requests=[
{
"custom_id": "task-1",
"params": {
"model": "claude-sonnet-4-6",
"max_tokens": 256,
"messages": [{"role": "user", "content": "..." }],
},
},
# ... 大量の request ...
]
)
print(batch.id)
メッセージに添付
batch = client.messages.batches.create(
requests=[
{
"custom_id": "task-1",
"params": {
"model": "claude-sonnet-4-6",
"max_tokens": 256,
"messages": [{"role": "user", "content": "..." }],
},
},
# ... 大量の request ...
]
)
print(batch.id)
PDF は Claude Vision によりテキスト+レイアウト+画像として理解されます。 スキャン PDF (画像のみ) でもある程度読み取れますが、品質は元の解像度次第。
サポートされる主な形式
application/pdfimage/png/image/jpeg/image/gif/image/webptext/plain,text/csv,text/markdown
ファイルの管理
from anthropic import (
Anthropic, RateLimitError, APIStatusError, BadRequestError
)
import time, random
def safe_call(prompt, retries=5):
for i in range(retries):
try:
return client.messages.create(
model="claude-sonnet-4-6",
max_tokens=512,
messages=[{"role": "user", "content": prompt}],
)
except RateLimitError:
wait = 2 ** i + random.random()
print(f"rate limited, retry in {wait:.1f}s")
time.sleep(wait)
except APIStatusError as e:
if 500 <= e.status_code < 600 and i < retries - 1:
time.sleep(2 ** i)
continue
raise
raise RuntimeError("max retries reached")
コストの考え方
- アップロード自体は基本無料 (帯域による)。
- 各メッセージで添付するときに その都度トークン換算で課金 される。
- 同じファイルを毎回送るより、Prompt Caching と組み合わせると劇的に安くなる (第4章)。
Tip: 巨大 PDF はチャンク戦略を併用
200 ページ超の文書だと、毎回フルで添付するとコストが膨らみます。 - 目次 → 必要な章だけテキスト抽出 → 渡す - もしくは RAG (第8章) と組み合わせる
試してみよう (Web 上)
API なしでも、claude.ai に PDF を添付するだけで同じ体験ができます。 コーディング前に Web で挙動を試すのが効率的です。
▶ 添付なしでもイメージ
一般的な企業の四半期決算 PDF を添付したと仮定して、Claude にどんな質問を投げると有用な要約が得られますか?5 つ提案してください。