LLM API の基礎

Anthropic API(Claude)を中心に、メッセージ形式、トークン、温度、出力制御を一通り。

API キーを取得する

  1. console.anthropic.com で登録
  2. API Keys で sk-ant-... を発行
  3. 環境変数 ANTHROPIC_API_KEY にセット
  4. クレジットを購入(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 配列に会話履歴を渡す形式。roleuser または assistant

{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "system": "あなたは熱心なプログラミング講師です。",
  "messages": [
    { "role": "user", "content": "TypeScript の型って何?" },
    { "role": "assistant", "content": "型とは値の集合を..." },
    { "role": "user", "content": "もう少し簡単に" }
  ]
}

主要モデル(2026 年初頭)

モデル ID特徴用途
claude-opus-4-7最高性能 / 1M コンテキスト複雑な推論・エージェント
claude-sonnet-4-6バランス / 高速多くの一般タスク
claude-haiku-4-5最速 / 最安大量処理・分類・抽出

パラメータ

max_tokens

出力の最大トークン数。Claude では必須。長すぎる出力を防ぐ。

temperature

コード生成や 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
  }
}

トークンとは

テキストをモデルが扱う単位に分割した結果。日本語は1 文字 ≒ 1〜2 トークン、 英語は3〜4 文字で 1 トークン程度。

トークン数の事前計算

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: "この画像を説明して" }
    ]
  }]
})

PDF

{
  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: [...]
})

Batch API

非同期で大量リクエストを50% 割引で処理。最大 24 時間以内に結果が返る。

レート制限

Tier で1 分あたりリクエスト数 / トークン数が決まる。429 が返ったら Retry-After 秒待ってリトライ。

エラーハンドリング

コード意味対処
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 経由

企業環境ではコンプライアンス要件でBedrock 経由必須のことも。