チャット
チャット補完
すべてのテキストモデルでOpenAIのChat Completions APIを利用できます。リクエストとレスポンス、ストリーミング、SDKは同じです。
/v1/chat/completionsリクエスト
modelstring必須- モデル一覧にあるモデルID(
claude-opus-5-5やgpt-6-solなど)。 messagesarray必須- 会話を構成する
system(またはdeveloper)、user、assistant、toolのメッセージ。contentには文字列、または画像、PDF、音声、動画を追加するためのパーツの配列を指定します。 streamboolean- 回答の生成中にserver-sent eventsとして送信します。詳しくは下の「ストリーミング」をご覧ください。
stream_optionsobject{ "include_usage": true }を指定すると、トークン使用量を含む最後のチャンクが追加されます。max_completion_tokensinteger- 生成するトークンの最大数です。推論に使うトークンも含みます。
max_tokensも使えます。 temperaturenumber- 0~2。低いほど出力が絞られ、高いほど多様になります。一部の推論モデルでは無視されます。Claude Opus 4.7以降(Opus 5と5.5、Fable 5と5.1、Sonnet 5.5、Haiku 5.5)では受け付けないため、これらのモデルには送信しません。
top_pnumber- nucleus samplingの値で、0~1です。これかtemperatureのどちらか一方だけを変更してください。同じClaudeモデルでは送信しません。top_kもこれらのモデルとMuse Wonderには送信しません。
stopstring | array- 生成を停止する文字列を最大4つ指定できます。
toolsarray- モデルが呼び出せる関数です。詳しくは下の「ツール呼び出し」をご覧ください。
tool_choicestring | objectauto、none、required、または特定の関数を指定します。モデルの提供元が指定を拒否または無視する場合(Claude Opus 5.5、Sonnet 5.5、Fable 5.1でのツールの強制指定、Muse Wonderでのauto以外の指定、一部のGemini、DeepSeek Flash、MiMo、HY4、MiniMaxモデルでのnone)、モデルが従える形式で送信し、指定内容をモデルに伝えます。名前で指定した関数を強制する場合は、その関数だけを提示します。response_formatobject- JSON形式の出力です。
{ "type": "json_object" }、またはスキーマ付きのjson_schemaを指定します。詳しくは下の「構造化出力」をご覧ください。 reasoning_effortstring- 推論モデルの思考の深さです。
none、minimal、low、medium、high、xhigh、maxから指定します。対応するレベルはモデルごとに異なります(詳しくは下の「推論」をご覧ください)。対応していないレベルを指定すると、最も近い対応レベルで実行します。レベルが高いほど思考時間が長くなり、出力トークンの費用も増えます。 seedinteger- 対応モデルでは、可能な限り再現性を確保します。
modelsarray- このリクエストのスマートルーティング:モデルが利用できない場合に試す代替モデルを優先順に指定します。スマートルーティングをご覧ください。
user と metadata を除き、そのままモデルに渡されます。ツール、JSON スキーマ、推論のどれに対応するかは、提供元のラボで利用する場合と同様、モデルによって異なります。OpenAI Python SDK では、models を extra_body={"models": [...]} として送信してください。レスポンス
{ "id": "chatcmpl-AbC123...", "object": "chat.completion", "created": 1790870400, "model": "claude-opus-5-5", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "Here's the summary..." }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 1204, "completion_tokens": 312, "total_tokens": 1516, "prompt_tokens_details": { "cached_tokens": 1024 }, "completion_tokens_details": { "reasoning_tokens": 128 } }}modelは応答したモデルです。スマートルーティングで代替モデルが応答した場合を除き、指定したモデルが入ります。- 推論モデルが思考過程を公開する場合、メッセージに
reasoning_contentが追加されることがあります。 usageが請求対象です。cached_tokensはモデルのプロンプトキャッシュから読み込まれた入力トークンで、モデルにキャッシュ料金がある場合はその料金が適用されます。
すべてのレスポンスには、次のヘッダーも含まれます:
ストリーミング
stream: trueを指定すると、回答はOpenAIのチャンク形式のServer-Sent Eventsで届き、data: [DONE]で終了します。どのSDKもこれを処理できます。
import osfrom openai import OpenAIclient = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"],)stream = client.chat.completions.create( model="claude-sonnet-5-5", messages=[ { "role": "user", "content": "Write a limerick about databases." } ], stream=True, stream_options={ "include_usage": True },)for chunk in stream: if chunk.choices and chunk.choices[0].delta.content: print(chunk.choices[0].delta.content, end="", flush=True)- モデルが最初のトークンを生成するまで回答は送信されないため、再試行や別の経路への切り替えは利用者には見えません。
- 応答が途切れる間(モデルが処理の合間に考えているとき)は、15秒ごとにSSEコメント行(
: keep-alive)を送信します。クライアントはこれを無視しますが、プロキシによる接続の切断を防げます。最初のトークンまで20秒を超える場合(長いプロンプトや、停止した経路を切り替えている場合)、その時点でストリームを開きます。待機中もヘッダーとキープアライブコメントが届きます。各経路は開始まで最大3分(高い推論レベルでは5分)待ってから次を試すため、クライアントのタイムアウトは10分に設定してください。 - 最初のトークンより前に開いたストリームでは、ほかに応答できるモデルがない場合(スマートルーティングがオフの場合)に限り
x-zurelay-modelが含まれます。ストリームが開いた後に発生したエラーは、エラーステータスではなく、エラーボディと同じ形式のエラーイベントとしてストリーム内に届きます。 include_usageを指定すると、[DONE]の直前の最後のチャンクには、空のchoicesリストとusageが含まれます。
ツール呼び出し
toolsで関数を記述します。モデルが関数を呼び出す場合は、テキストの代わりにtool_callsを返します。関数を実行し、呼び出しIDを付けたtoolメッセージで結果を送り返すと、モデルが続きを生成します。
import osfrom openai import OpenAIclient = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"],)response = client.chat.completions.create( model="gpt-6-sol", messages=[ { "role": "user", "content": "What's the weather in Lisbon right now?" } ], tools=[ { "type": "function", "function": { "name": "get_weather", "description": "Current weather for a city", "parameters": { "type": "object", "properties": { "city": { "type": "string" } }, "required": [ "city" ] } } } ],)print(response.choices[0].message.content)構造化出力
response_formatでJSON形式の出力を指定できます。対応モデルでは、json_schemaを使うと指定したスキーマに従い、json_objectを使うと任意の有効なJSONを返します(プロンプトでもJSONを指定してください)。
import osfrom openai import OpenAIclient = OpenAI( base_url="https://api.zurelay.com/v1", api_key=os.environ["ZURELAY_API_KEY"],)response = client.chat.completions.create( model="gpt-6.1-sol", messages=[ { "role": "user", "content": "Extract the people: 'Ana met Ben and Chloe in Porto.'" } ], response_format={ "type": "json_schema", "json_schema": { "name": "people", "schema": { "type": "object", "properties": { "names": { "type": "array", "items": { "type": "string" } } }, "required": [ "names" ] } } },)print(response.choices[0].message.content)推論
推論モデルは回答前に思考します。reasoning_effortで速度・コストと推論の深さを調整できます。レベルが高いほど長く考え、時間と出力トークンを多く使います。各モデルは、そのラボのドキュメントに記載されたレベルに対応しています。none(思考なし)からminimal、low、medium、high、xhigh(非常に高い)を経てmaxまであり、対応レベルは下の表に示します。省略するとモデルのデフォルト値が使われます。どのOpenAI SDKでも同じように使えます。ダッシュボードのプレイグラウンドで各レベルを試すこともできます。
from openai import OpenAIclient = OpenAI(base_url="https://api.zurelay.com/v1", api_key="YOUR_ZURELAY_KEY")response = client.chat.completions.create( model="zurelay-auto", reasoning_effort="high", messages=[{"role": "user", "content": "How many primes are there below 1,000?"}],)message = response.choices[0].messageprint(getattr(message, "reasoning_content", None)) # the thinking, when the model shares itprint(message.content)思考過程を公開するモデルでは、回答とともにmessage.reasoning_contentで返されます(ストリーミング時はdelta.reasoning_content)。一部のモデルではフィールド名がreasoningです。思考過程は出力トークンとして請求され、必ずcompletion_tokensに含まれます。モデルが内訳を報告する場合は、completion_tokens_details.reasoning_tokensにも個別に計上されます。推論レベルが高いと回答の開始まで数分かかることがあるため、クライアントのタイムアウトは長めに設定してください(信頼性とタイムアウトをご覧ください)。
モデル別のレベル
各ラボのドキュメントに基づいています。モデルが対応しないレベルを指定すると、対応する中で最も近いレベルで実行します(同じ距離のレベルが2つある場合は低い方を使用します。また、思考がオフになるのはnoneを送信した場合のみです)。そのため、スマートルーティングを含め、同じリクエストをどのモデルにも使用できます。実際に使用したレベルはx-zurelay-reasoning-effortレスポンスヘッダーで確認できます。レベルではない値を指定すると、そのモデルの対応レベルを示す400が返されます。
Claudeの思考
このエンドポイントでは、Claudeもほかのモデルと同様にreasoning_effortを受け付けます:low、medium、high、xhigh、max(Opus 4.6はxhighに対応していません)。Anthropic独自の形式では、Claudeは指定したレベルで適応的に思考します。thinking: { type: "adaptive", display: "summarized" }とoutput_config: { effort: "xhigh" }を送信し、思考ブロックを読み取ってください。Anthropic Messagesをご覧ください。
ご質問や不足している情報はありますか? サポートチームにお問い合わせください。通常1分以内にメールで回答します。