Skip to Content

Messages

POST /v1/messages と POST /anthropic/v1/messages はAnthropic Messages互換のエンドポイントです。 2つのパスの動作は同じです。 公式Anthropic SDKの baseURL に /anthropic を指定すると、後者のパスが使われます。

リクエスト

Shell
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そのまま
messagesrole が assistant 以外はユーザーとして扱う
systemsystem メッセージとして先頭に置く
max_tokens未指定なら4096を補う
temperature、top_p、service_tierそのまま
stop_sequencesstop として渡す
toolsname、description、input_schema を関数ツールへ変換。input_schema が無ければ空のオブジェクトスキーマ
tool_choiceauto はそのまま、any は必須指定、type が tool は名前を指定した関数呼び出し

top_k と thinking は受け付けはするものの、現在モデルへ渡していません。 拡張思考の設定は反映されません。

コンテンツブロック

content には文字列か、コンテンツブロックの配列を指定します。 扱えるブロックは次のとおりです。

ブロック扱い
textテキストとして渡す
imagesource.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 は変換後も保持されます。

レスポンス

JSON
{ "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互換の形式で返ります。 両方の形を受け取れるようにしてください。