Skip to Content

Messages

POST /v1/messagesPOST /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ゲートウェイとは?" } ] }'

受け付けるフィールド

modelmessages は必須です。 ほかに max_tokenssystemtemperaturetop_ptop_kstop_sequencestoolstool_choicethinkingstreamservice_tiercache_controlprompt_cache_keyprompt_cache_retention を受け付けます。 一覧にないフィールドは読み飛ばされます。 metadata も受け付けますが、モデルへは渡しません。

モデルへ渡るフィールド

変換の対象は次のフィールドです。

リクエストのフィールドモデルへの渡り方
modelそのまま
messagesroleassistant 以外はユーザーとして扱う
systemsystem メッセージとして先頭に置く
max_tokens未指定なら4096を補う
temperaturetop_pservice_tierそのまま
stop_sequencesstop として渡す
toolsnamedescriptioninput_schema を関数ツールへ変換。input_schema が無ければ空のオブジェクトスキーマ
tool_choiceauto はそのまま、any は必須指定、typetool は名前を指定した関数呼び出し

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

コンテンツブロック

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

ブロック扱い
textテキストとして渡す
imagesource.typebase64media_typedata があるものだけ。URLからの取得は非対応
tool_useアシスタントのメッセージでtool callへ変換。同じメッセージ内の他のブロックは text のみ可
tool_resultユーザーのメッセージでtoolの結果へ変換。中身は文字列か text ブロックのみ

これ以外のブロックを含めると 400 が返り、メッセージは Unsupported Anthropic content block になります。 textimage のブロック、および 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 } }

ツール呼び出しがある場合は、contenttypetool_use のブロックが続きます。 テキストもツール呼び出しもない場合は、空文字列の text ブロックがひとつ返ります。 model にはリクエストの指定ではなく、実際に応答したモデルの公開名が入ります。

出力が上限に達した場合、stop_reasonmax_tokens になります。 ツール呼び出しで止まった場合は tool_use、内容フィルターで止まった場合は stop_sequence、それ以外は end_turn になります。 stop_sequence はつねに null です。

ストリーミング

stream: true を指定すると、message_start から message_stop までのServer-Sent Eventsで返ります。

エラーの形式

推論まで進んだリクエストのエラーはAnthropic互換の形式で返ります。 ただし、リクエストボディの検証で失敗した場合はOpenAI互換の形式で返ります。 両方の形を受け取れるようにしてください。