LLM API の基礎
Anthropic API(Claude)を中心に、メッセージ形式、トークン、温度、出力制御を一通り。
API キーを取得する
- console.anthropic.com で登録
- API Keys で
sk-ant-...を発行 - 環境変数
ANTHROPIC_API_KEYにセット - クレジットを購入(Tier に応じてレート制限が緩和される)
API キーをフロントエンドに埋め込むと盗まれて勝手に使われる。必ず自前バックエンドを経由。
SDK のインストール
# Node.js
npm install @anthropic-ai/sdk
# Python
pip install anthropic
最初の 1 リクエスト
import Anthropic from "@anthropic-ai/sdk"
const client = new Anthropic() // ANTHROPIC_API_KEY を環境変数から自動取得
const res = await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [
{ role: "user", content: "Hello, Claude!" }
]
})
console.log(res.content[0].text)
メッセージの構造
Anthropic API は messages 配列に会話履歴を渡す形式。role は user または assistant。
{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"system": "あなたは熱心なプログラミング講師です。",
"messages": [
{ "role": "user", "content": "TypeScript の型って何?" },
{ "role": "assistant", "content": "型とは値の集合を..." },
{ "role": "user", "content": "もう少し簡単に" }
]
}
- system: システムプロンプト(モデルの役割・制約)
- messages: 会話履歴(user / assistant 交互)
- max_tokens: 出力の最大トークン数(必須)
主要モデル(2026 年初頭)
| モデル ID | 特徴 | 用途 |
|---|---|---|
claude-opus-4-7 | 最高性能 / 1M コンテキスト | 複雑な推論・エージェント |
claude-sonnet-4-6 | バランス / 高速 | 多くの一般タスク |
claude-haiku-4-5 | 最速 / 最安 | 大量処理・分類・抽出 |
パラメータ
max_tokens
出力の最大トークン数。Claude では必須。長すぎる出力を防ぐ。
temperature
- 0.0: 決定的(同じ入力で同じ出力に近い)
- 0.7: バランス(デフォルト 1.0)
- 1.0: 創造的(バラつく)
コード生成や JSON 抽出は 0、文章生成は 0.7、ブレストは 1.0 が目安。
top_p / top_k
サンプリング方法の調整。普通は temperature だけ調整すれば十分。
stop_sequences
指定文字列が出たら出力を打ち切る。
await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
stop_sequences: ["\n\n###"],
messages: [...]
})
レスポンスの構造
{
"id": "msg_...",
"type": "message",
"role": "assistant",
"content": [
{ "type": "text", "text": "..." }
],
"model": "claude-sonnet-4-6",
"stop_reason": "end_turn",
"usage": {
"input_tokens": 12,
"output_tokens": 84,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0
}
}
- content: 配列(text / tool_use / image など複数 block 可)
- stop_reason:
end_turn/max_tokens/stop_sequence/tool_use - usage: トークン消費数(料金計算に使う)
トークンとは
テキストをモデルが扱う単位に分割した結果。日本語は1 文字 ≒ 1〜2 トークン、 英語は3〜4 文字で 1 トークン程度。
- 「こんにちは」 → 約 3 トークン
- 「Hello world」 → 約 2 トークン
- JSON や HTML はトークンが嵩む(余白や記号がコスト)
トークン数の事前計算
const count = await client.messages.countTokens({
model: "claude-sonnet-4-6",
messages: [{ role: "user", content: "..." }]
})
console.log(count.input_tokens)
マルチモーダル入力
画像
await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [{
role: "user",
content: [
{ type: "image", source: { type: "base64", media_type: "image/jpeg", data: base64 } },
{ type: "text", text: "この画像を説明して" }
]
}]
})
{
type: "document",
source: { type: "base64", media_type: "application/pdf", data: base64 }
}
Prompt Caching
繰り返す巨大な System Prompt や RAG コンテキストをキャッシュして、再利用時の入力コストを最大 90% 削減。
await client.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
system: [
{
type: "text",
text: "巨大なドキュメント...",
cache_control: { type: "ephemeral" }
}
],
messages: [...]
})
- キャッシュ TTL:
ephemeral(5 分)/1h(1 時間) - 初回: 通常の 1.25 倍のコスト(書き込み)
- 2 回目以降: 0.1 倍のコスト(読み出し)
Batch API
非同期で大量リクエストを50% 割引で処理。最大 24 時間以内に結果が返る。
レート制限
Tier で1 分あたりリクエスト数 / トークン数が決まる。429 が返ったら Retry-After 秒待ってリトライ。
- Tier 1(最初): かなり厳しい
- Tier 4: 大規模に使える
エラーハンドリング
| コード | 意味 | 対処 |
|---|---|---|
| 400 | リクエスト不正 | パラメータ修正 |
| 401 | 認証エラー | API キー確認 |
| 403 | 権限なし | プラン確認 |
| 404 | モデル不在 | モデル ID 確認 |
| 413 | コンテキスト超過 | 履歴を圧縮 |
| 429 | レート制限 | 指数バックオフでリトライ |
| 500/529 | サーバ側 | リトライ |
SDK の自動リトライ
const client = new Anthropic({
maxRetries: 3 // デフォルト 2
})
OpenAI 互換
ChatGPT 系の chat.completions.create 形式と Claude の messages.create は形が違う。
OpenAI / Vercel AI SDK / LangChain などのレイヤを噛ませると統一できる。
Bedrock / Vertex AI 経由
- AWS Bedrock: AWS 内で Claude を呼ぶ。VPC 内通信、IAM、CloudTrail で監査
- Google Vertex AI: GCP 内で Claude を呼ぶ。Service Account 認証
企業環境ではコンプライアンス要件でBedrock 経由必須のことも。