Anthropic 互換 API
公式 Anthropic SDK から Asale ゲートウェイの Messages API を呼び出します。base URL とキーを変えるだけで、リクエストボディはそのままです。
Anthropic 方言は Claude Code とすべての anthropic SDK が話す形式です。クライアントの base URL をゲートウェイに向けるだけで、残りのコードはそのままです。
キー・モデル・課金・エラーコードはまず概要を参照してください。ここでは Anthropic 固有の部分だけを扱います。
接続情報
| Base URL | https://gw.asale.ai |
| 認証ヘッダー | x-api-key: sk-asale-... |
| SDK 環境変数 | ANTHROPIC_API_KEY、ANTHROPIC_BASE_URL |
base URL はホストまでです。Anthropic のクライアントは /v1/messages を自分で付けるため、https://gw.asale.ai/v1 を渡すと /v1/v1/messages になり 404 になります。
Authorization: Bearer しか知らないクライアント向けに、そのヘッダーも受け付けます。
エンドポイント
| メソッド | パス | 備考 |
|---|---|---|
| POST | /v1/messages | 主となるもの。 |
| POST | /v1/messages/count_tokens | 推定値であり、ベンダーのトークナイザによる正確な数ではありません(後述)。 |
anthropic-version: 2023-06-01 は上流と同様に送ってください。SDK が自動で付けます。
呼び出す
curl https://gw.asale.ai/v1/messages \
-H "x-api-key: $ASALE_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'
# pip install anthropic
import os
from anthropic import Anthropic
client = Anthropic(
api_key=os.environ["ASALE_API_KEY"],
base_url="https://gw.asale.ai",
)
msg = client.messages.create(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello"}],
)
print(msg.content[0].text)
// npm i @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: process.env.ASALE_API_KEY,
baseURL: "https://gw.asale.ai",
});
const msg = await client.messages.create({
model: "claude-sonnet-4-5",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello" }],
});
console.log(msg.content[0].text);
ストリーミング
stream: true で Anthropic のイベント列——message_start、content_block_delta、message_delta、message_stop——がそのまま Server-Sent Events として届きます。
with client.messages.stream(
model="claude-sonnet-4-5",
max_tokens=1024,
messages=[{"role": "user", "content": "5 まで数えて"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
システムプロンプト・ツール・thinking
systemはそのまま通ります。プロンプト末尾のキャッシュ区切り——エージェント系クライアントが必ず設定し、もっとも効果の大きいもの——も含みます。tools/tool_use/tool_resultはネイティブの形のまま通ります。thinkingはモデルが対応していれば使えます。thinking ブロックのsignatureは、同じワイヤ形式で処理された場合にのみ返されます。別ベンダー経由で処理された場合は、署名を捏造せず返しません。
トークン数を数える
POST /v1/messages/count_tokens が返すのはヒューリスティックな推定値です。文字種で重み付けし(ラテン文字は約 4 文字/トークン、CJK は約 1.5 文字/トークン)、メッセージごとの枠組み分を加算します:
{ "input_tokens": 1234 }
これは「数えないと送信しない」クライアントのために用意されています。トークン単位の予算には使わないでください——正確な値にはベンダー自身のトークナイザが必要で、ゲートウェイはそれを実行しません。課金の根拠は実測の使用量であり、この数値ではありません。
実務上の注意
max_tokensは Messages API の必須項目であり、残高確保額の計算根拠でもあります。大きめでも損はしません——応答完了後に差額が戻ります。- モデル名はプラットフォームのものです。 一覧は OpenAI パスの
GET /v1/models、供給の有無はマーケットで確認できます。 - リクエストボディの上限は 16 MiB です。