Messages (Anthropic)
Anthropic Messages 形式のアダプターです。base URL を変えるだけで Claude Code・Anthropic SDK をそのまま接続できます。
PleumRouter は Anthropic Messages 形式のインバウンドリクエストを受け取り、 内部でルーティングします。既存の Anthropic SDK コードや Claude Code はコードを変更せず、base URL を PleumRouter に向けるだけで動作します。リクエスト・レスポンスは いずれも Anthropic Messages スキーマに従い、内部では OpenAI 形式に変換されて処理されます。
接続する#
Anthropic SDK では base_url をルート URL https://apirouter.pleum.ai に設定してください。SDK がそこに /v1/messages を付け加えます。
Anthropic Messages API
import Anthropic from "@anthropic-ai/sdk";
const anthropic = new Anthropic({
apiKey: "plm_xxxxxxxxxxxxxxxx",
// Root origin — the SDK appends /v1/messages
baseURL: "https://apirouter.pleum.ai",
});
const message = await anthropic.messages.create({
model: "claude-sonnet-4-6",
max_tokens: 1024,
messages: [{ role: "user", content: "Why is the sky blue?" }],
});
console.log(message.content);Anthropic Messages API
from anthropic import Anthropic
client = Anthropic(
api_key="plm_xxxxxxxxxxxxxxxx",
# Root origin — the SDK appends /v1/messages
base_url="https://apirouter.pleum.ai",
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Why is the sky blue?"}],
)
print(message.content)Anthropic Messages API
curl https://apirouter.pleum.ai/v1/messages \
-H "Authorization: Bearer plm_xxxxxxxxxxxxxxxx" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Why is the sky blue?"}]
}'from anthropic import Anthropic
client = Anthropic(
api_key="plm_...",
base_url="https://apirouter.pleum.ai", # 루트 — SDK가 /v1/messages를 덧붙임
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}],
)
print(message.content[0].text)Claude Code では ANTHROPIC_BASE_URL を /v1 なしのルートに設定し、plm_ キーを ANTHROPIC_API_KEY に設定してください。
export ANTHROPIC_BASE_URL="https://apirouter.pleum.ai"
export ANTHROPIC_API_KEY="plm_..."
claude/v1 を付けないでください。SDK が再度 /v1/messages を付け加え、/v1/v1/messages となって リクエストが失敗します。必ずルートの https://apirouter.pleum.ai のみを指定してください。認証は plm_ API キーを Authorization: Bearer または x-api-key ヘッダーで渡します。Claude Code は両方を送信し、 どちらでも動作します。
メッセージの生成#
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
| thinking | object | 任意 | ネイティブの enabled | adaptive | disabled union。enabled には budget_tokens(1,024〜32,000)が必要です。 |
| model | string | 必須 | モデル ID。GET /v1/models で全一覧を確認できます。 |
| messages | array | 必須 | {role, content} の配列。content は文字列またはブロック配列(text / image / tool_use / tool_result)です。 |
| max_tokens | integer | 任意 | 生成する最大トークン数。デフォルト値 4096。 |
| system | string | array | 任意 | システムプロンプト。文字列またはブロック配列。 |
| temperature | number | 任意 | サンプリング温度。 |
| top_p | number | 任意 | 累積確率に基づくサンプリング(nucleus)。 |
| stop_sequences | array | 任意 | 停止文字列の配列。内部的に stop にマッピングされます。 |
| stream | boolean | 任意 | true の場合は Anthropic SSE ストリーミングレスポンス。 |
| tools | array | 任意 | Anthropic 形式のツール {name, description, input_schema}。内部で OpenAI 形式に変換されます。 |
| tool_choice | object | 任意 | {type: any | none | tool} の形式でツールの使用方法を指定します。 |
| metadata | object | 任意 | 受け付けますが、プロバイダーには転送されません。 |
thinking が有効な場合、PleumRouter は常に upstream に display: "omitted" を要求します。tools と併用する場合、 tool_choice は auto または none のみです。required/特定ツールの強制と最後の assistant メッセージの prefill は、クレジット hold 前に 400 で拒否されます。
curl https://apirouter.pleum.ai/v1/messages \
-H "x-api-key: plm_..." \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"thinking": {"type": "adaptive", "display": "omitted"},
"system": "You are a helpful assistant.",
"messages": [
{"role": "user", "content": "Hello"}
]
}'レスポンスは Anthropic Messages スキーマに従います。content はブロック配列で、 トークン使用量は usage.input_tokens / usage.output_tokens として返されます。ネイティブ thinking は opaque な {type:"thinking", thinking:"", signature} または {type:"redacted_thinking", data} ブロックとしてのみ返され、平文の思考は 公開されません。ツール継続時には、_pleum_source_model 拡張があればそれも含めて ブロックを原文のまま返してください。
stop_reason は内部の終了理由からマッピングされます — stop → end_turn、 length → max_tokens、 tool_calls → tool_use。
{
"id": "msg_01abc...",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-4-6",
"content": [
{"type": "thinking", "thinking": "", "signature": "<opaque>"},
{"type": "text", "text": "Hello! How can I help you?"}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 12,
"output_tokens": 5
}
}ストリーミング#
stream: true でリクエストすると、Anthropic SSE のイベントシーケンスが 送信されます — message_start → content_block_start / content_block_delta(text_delta)/ content_block_stop → message_delta → message_stop。omitted thinking は空の thinking ブロック、signature_delta、stop の順だけで送られ、thinking_delta や 平文の思考は送られません。redacted ブロックは start/stop のみです。ストリーミングモードでは費用ヘッダーは含まれません。
event: message_start
data: {"type":"message_start","message":{"id":"msg_01abc","type":"message","role":"assistant","model":"claude-sonnet-4-6","content":[],"stop_reason":null,"usage":{"input_tokens":12,"output_tokens":0}}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"thinking","thinking":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"signature_delta","signature":"<opaque>"}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"text_delta","text":"Hello! How can I help you?"}}
event: content_block_stop
data: {"type":"content_block_stop","index":1}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":5}}
event: message_stop
data: {"type":"message_stop"}トークン数を数える#
/v1/messages と同じ本文を受け取り、 {"input_tokens": <int>} を返します。この値はヒューリスティックな 推定値であり、実際のトークナイザーの結果ではありません。
curl https://apirouter.pleum.ai/v1/messages/count_tokens \
-H "x-api-key: plm_..." \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-4-6",
"messages": [
{"role": "user", "content": "Hello"}
]
}'{
"input_tokens": 12
}課金方式#
費用はレスポンス本文には含まれません。代わりにレスポンスヘッダー X-Cost-Krw(整数)と X-Cost-Usd(小数)、 および x-request-id で返されます。usage.output_tokens が 唯一の課金対象出力量であり、thinking の内訳が再課金・再加算されることはありません。