Messages
POST /v1/messages と POST /anthropic/v1/messages はAnthropic Messages互換のエンドポイントです。
2つのパスの動作は同じです。
公式Anthropic SDKの baseURL に /anthropic を指定すると、後者のパスが使われます。
リクエスト
curl "$AI_GATEWAY_BASE_URL/v1/messages" \
-H "x-api-key: $AI_GATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "<GET /v1/modelsが返したモデルID>",
"max_tokens": 512,
"system": "簡潔に答えてください。",
"messages": [
{ "role": "user", "content": "ロリポップ!AIゲートウェイとは?" }
]
}'受け付けるフィールド
model と messages は必須です。
ほかに max_tokens、system、temperature、top_p、top_k、stop_sequences、tools、tool_choice、thinking、stream、service_tier、cache_control、prompt_cache_key、prompt_cache_retention を受け付けます。
一覧にないフィールドは読み飛ばされます。
metadata も受け付けますが、モデルへは渡しません。
モデルへ渡るフィールド
変換の対象は次のフィールドです。
| リクエストのフィールド | モデルへの渡り方 |
|---|---|
model | そのまま |
messages | role が assistant 以外はユーザーとして扱う |
system | system メッセージとして先頭に置く |
max_tokens | 未指定なら4096を補う |
temperature、top_p、service_tier | そのまま |
stop_sequences | stop として渡す |
tools | name、description、input_schema を関数ツールへ変換。input_schema が無ければ空のオブジェクトスキーマ |
tool_choice | auto はそのまま、any は必須指定、type が tool は名前を指定した関数呼び出し |
top_k と thinking は受け付けはするものの、現在モデルへ渡していません。
拡張思考の設定は反映されません。
コンテンツブロック
content には文字列か、コンテンツブロックの配列を指定します。
扱えるブロックは次のとおりです。
| ブロック | 扱い |
|---|---|
text | テキストとして渡す |
image | source.type が base64 で media_type と data があるものだけ。URLからの取得は非対応 |
tool_use | アシスタントのメッセージでtool callへ変換。同じメッセージ内の他のブロックは text のみ可 |
tool_result | ユーザーのメッセージでtoolの結果へ変換。中身は文字列か text ブロックのみ |
これ以外のブロックを含めると 400 が返り、メッセージは Unsupported Anthropic content block になります。
text と image のブロック、および tools に付けた cache_control は変換後も保持されます。
レスポンス
{
"id": "...",
"type": "message",
"role": "assistant",
"model": "<実際に応答したモデル>",
"content": [{ "type": "text", "text": "..." }],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": { "input_tokens": 0, "output_tokens": 0 }
}ツール呼び出しがある場合は、content に type が tool_use のブロックが続きます。
テキストもツール呼び出しもない場合は、空文字列の text ブロックがひとつ返ります。
model にはリクエストの指定ではなく、実際に応答したモデルの公開名が入ります。
出力が上限に達した場合、stop_reason は max_tokens になります。
ツール呼び出しで止まった場合は tool_use、内容フィルターで止まった場合は stop_sequence、それ以外は end_turn になります。
stop_sequence はつねに null です。
ストリーミング
stream: true を指定すると、message_start から message_stop までのServer-Sent Eventsで返ります。
エラーの形式
推論まで進んだリクエストのエラーはAnthropic互換の形式で返ります。 ただし、リクエストボディの検証で失敗した場合はOpenAI互換の形式で返ります。 両方の形を受け取れるようにしてください。