OpenClaw の Gateway は、小さな OpenAI 互換 Chat Completions エンドポイントを提供できます。 このエンドポイントはデフォルトで無効です。先に設定で有効化してください。Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
POST /v1/chat/completions- Gateway と同じポート(WS + HTTP 多重化):
http://<gateway-host>:<port>/v1/chat/completions
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/responses
openclaw agent と同じコードパス)として実行されるため、ルーティング、権限、設定は Gateway と一致します。
認証
Gateway の認証設定を使用します。 一般的な HTTP 認証パス:- 共有シークレット認証(
gateway.auth.mode="token"または"password"):Authorization: Bearer <token-or-password> - 信頼された ID 付き HTTP 認証(
gateway.auth.mode="trusted-proxy"): 設定済みの ID 認識プロキシ経由でルーティングし、必要な ID ヘッダーを注入させます - プライベート入口のオープン認証(
gateway.auth.mode="none"): 認証ヘッダーは不要です
gateway.auth.mode="token"の場合は、gateway.auth.token(またはOPENCLAW_GATEWAY_TOKEN)を使用します。gateway.auth.mode="password"の場合は、gateway.auth.password(またはOPENCLAW_GATEWAY_PASSWORD)を使用します。gateway.auth.mode="trusted-proxy"の場合、HTTP リクエストは設定済みの信頼されたプロキシソースから送信される必要があります。同一ホストのループバックプロキシには、明示的にgateway.auth.trustedProxy.allowLoopback = trueが必要です。gateway.auth.rateLimitが設定されていて認証失敗が多すぎる場合、エンドポイントはRetry-After付きで429を返します。
セキュリティ境界(重要)
このエンドポイントは、Gateway インスタンスに対する完全なオペレーターアクセスサーフェスとして扱ってください。- ここでの HTTP ベアラー認証は、狭いユーザー別スコープモデルではありません。
- このエンドポイントの有効な Gateway トークン/パスワードは、所有者/オペレーター資格情報と同様に扱う必要があります。
- リクエストは、信頼されたオペレーター操作と同じコントロールプレーンエージェントパスを通じて実行されます。
- このエンドポイントには、別個の非所有者/ユーザー別ツール境界はありません。呼び出し元がここで Gateway 認証を通過すると、OpenClaw はその呼び出し元をこの Gateway の信頼されたオペレーターとして扱います。
- 共有シークレット認証モード(
tokenとpassword)では、呼び出し元がより狭いx-openclaw-scopesヘッダーを送信しても、エンドポイントは通常の完全なオペレーターデフォルトを復元します。 - 信頼された ID 付き HTTP モード(たとえば信頼済みプロキシ認証や
gateway.auth.mode="none")では、x-openclaw-scopesが存在する場合はそれを尊重し、存在しない場合は通常のオペレーターデフォルトスコープセットにフォールバックします。 - 対象エージェントポリシーが機密性の高いツールを許可している場合、このエンドポイントはそれらを使用できます。
- このエンドポイントは loopback/tailnet/プライベート入口のみに置いてください。公開インターネットへ直接公開しないでください。
gateway.auth.mode="token"または"password"+Authorization: Bearer ...- 共有 Gateway オペレーターシークレットの所持を証明します
- より狭い
x-openclaw-scopesを無視します - 完全なデフォルトオペレータースコープセットを復元します:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - このエンドポイント上のチャットターンを所有者送信者ターンとして扱います
- 信頼された ID 付き HTTP モード(たとえば信頼済みプロキシ認証、またはプライベート入口上の
gateway.auth.mode="none")- 何らかの外側の信頼された ID またはデプロイ境界を認証します
- ヘッダーが存在する場合は
x-openclaw-scopesを尊重します - ヘッダーが存在しない場合は通常のオペレーターデフォルトスコープセットにフォールバックします
- 呼び出し元が明示的にスコープを狭め、
operator.adminを省略した場合にのみ所有者セマンティクスを失います
エージェント優先モデル契約
OpenClaw は OpenAI のmodel フィールドを、生のプロバイダーモデル ID ではなくエージェントターゲットとして扱います。
model: "openclaw"は設定済みのデフォルトエージェントへルーティングします。model: "openclaw/default"も設定済みのデフォルトエージェントへルーティングします。model: "openclaw/<agentId>"は特定のエージェントへルーティングします。
x-openclaw-model: <provider/model-or-bare-id>は選択されたエージェントのバックエンドモデルを上書きします。x-openclaw-agent-id: <agentId>は互換性のための上書きとして引き続きサポートされます。x-openclaw-session-key: <sessionKey>はセッションルーティングを完全に制御します。x-openclaw-message-channel: <channel>は、チャネル対応プロンプトとポリシー用の合成入口チャネルコンテキストを設定します。
model: "openclaw:<agentId>"model: "agent:<agentId>"
エンドポイントを有効化する
gateway.http.endpoints.chatCompletions.enabled を true に設定します。
エンドポイントを無効化する
gateway.http.endpoints.chatCompletions.enabled を false に設定します。
セッション動作
デフォルトでは、このエンドポイントはリクエストごとにステートレスです(各呼び出しで新しいセッションキーが生成されます)。 リクエストに OpenAI のuser 文字列が含まれる場合、Gateway はそこから安定したセッションキーを導出するため、繰り返し呼び出しでエージェントセッションを共有できます。
このサーフェスが重要な理由
これは、セルフホストのフロントエンドとツール向けに最も効果の高い互換性セットです。- ほとんどの Open WebUI、LobeChat、LibreChat セットアップは
/v1/modelsを期待します。 - 多くの RAG システムは
/v1/embeddingsを期待します。 - 既存の OpenAI チャットクライアントは通常、
/v1/chat/completionsから開始できます。 - よりエージェントネイティブなクライアントでは、
/v1/responsesがますます好まれています。
モデル一覧とエージェントルーティング
`/v1/models` は何を返しますか?
`/v1/models` は何を返しますか?
OpenClaw のエージェントターゲット一覧です。返される ID は、
openclaw、openclaw/default、および openclaw/<agentId> エントリです。
それらを OpenAI の model 値として直接使用してください。`/v1/models` はエージェントまたはサブエージェントを一覧表示しますか?
`/v1/models` はエージェントまたはサブエージェントを一覧表示しますか?
バックエンドプロバイダーモデルでもサブエージェントでもなく、トップレベルのエージェントターゲットを一覧表示します。サブエージェントは内部実行トポロジーのままです。疑似モデルとしては表示されません。
なぜ `openclaw/default` が含まれていますか?
なぜ `openclaw/default` が含まれていますか?
openclaw/default は、設定済みのデフォルトエージェントに対する安定したエイリアスです。つまり、環境間で実際のデフォルトエージェント ID が変わっても、クライアントは予測可能な 1 つの ID を使い続けられます。バックエンドモデルを上書きするにはどうすればよいですか?
バックエンドモデルを上書きするにはどうすればよいですか?
x-openclaw-model を使用します。例:
x-openclaw-model: openai/gpt-5.4
x-openclaw-model: gpt-5.5省略した場合、選択されたエージェントは通常の設定済みモデル選択で実行されます。埋め込みはこの契約にどのように適合しますか?
埋め込みはこの契約にどのように適合しますか?
/v1/embeddings は同じエージェントターゲット model ID を使用します。model: "openclaw/default" または model: "openclaw/<agentId>" を使用してください。
特定の埋め込みモデルが必要な場合は、x-openclaw-model で送信します。
そのヘッダーがない場合、リクエストは選択されたエージェントの通常の埋め込み設定へ渡されます。ストリーミング(SSE)
Server-Sent Events(SSE)を受信するにはstream: true を設定します。
Content-Type: text/event-stream- 各イベント行は
data: <json>です - ストリームは
data: [DONE]で終了します
チャットツール契約
/v1/chat/completions は、一般的な OpenAI Chat クライアントと互換性のある関数ツールサブセットをサポートします。
サポートされるリクエストフィールド
tools:{ "type": "function", "function": { ... } }の配列tool_choice:"auto","none"messages[*].role: "tool"のフォローアップターン- 以前のツール呼び出しへツール結果を結び付けるための
messages[*].tool_call_id max_completion_tokens: 数値。完了トークン合計(推論トークンを含む)の呼び出しごとの上限です。現在の OpenAI Chat Completions フィールド名です。max_completion_tokensとmax_tokensの両方が送信された場合はこちらが優先されます。max_tokens: 数値。後方互換性のために受け付けられるレガシーエイリアスです。max_completion_tokensも存在する場合は無視されます。
max_completion_tokens、レガシー名のみを受け付けるプロバイダー(Mistral や Chutes など)では max_tokens です。
サポートされないバリアント
このエンドポイントは、サポートされないツールバリアントに対して400 invalid_request_error を返します。例:
- 配列でない
tools - 関数でないツールエントリ
tool.function.nameの欠落allowed_toolsやcustomなどのtool_choiceバリアントtool_choice: "required"(ランタイムではまだ強制されません。強制が実装されるとサポートされます)tool_choice: { "type": "function", "function": { "name": "..." } }(requiredと同じ理由)- 指定された
toolsと一致しないtool_choice.function.name値
非ストリーミングツール応答の形状
エージェントがツールを呼び出すと決定した場合、応答は次を使用します。choices[0].finish_reason = "tool_calls"- 次を含む
choices[0].message.tool_calls[]エントリ:idtype: "function"function.namefunction.arguments(JSON 文字列)
choices[0].message.content に返されます(空の場合があります)。
ストリーミングツール応答の形状
stream: true の場合、ツール呼び出しは増分 SSE チャンクとして送出されます。
- 初期のアシスタントロールデルタ
- 任意のアシスタントコメントデルタ
- ツール ID と引数フラグメントを運ぶ 1 つ以上の
delta.tool_callsチャンク finish_reason: "tool_calls"を含む最終チャンクdata: [DONE]
stream_options.include_usage=true の場合、[DONE] の前に末尾の使用量チャンクが送出されます。
ツールフォローアップループ
tool_calls を受信した後、クライアントは要求された関数を実行し、次を含むフォローアップリクエストを送信する必要があります。
- 以前のアシスタントツール呼び出しメッセージ
- 一致する
tool_call_idを持つ 1 つ以上のrole: "tool"メッセージ
Open WebUI クイックセットアップ
基本的な Open WebUI 接続の場合:- ベース URL:
http://127.0.0.1:18789/v1 - macOS 上の Docker ベース URL:
http://host.docker.internal:18789/v1 - API キー: Gateway ベアラートークン
- モデル:
openclaw/default
GET /v1/modelsはopenclaw/defaultを一覧表示する必要があります- Open WebUI は
openclaw/defaultをチャットモデル ID として使用する必要があります - そのエージェントに特定のバックエンドプロバイダー/モデルを使いたい場合は、エージェントの通常のデフォルトモデルを設定するか、
x-openclaw-modelを送信します
openclaw/default を返す場合、ほとんどの Open WebUI セットアップは同じベース URL とトークンで接続できます。
例
非ストリーミング:/v1/modelsは未加工のプロバイダーカタログではなく、OpenClaw エージェントターゲットを返します。openclaw/defaultは常に存在するため、1 つの安定した id が環境をまたいで機能します。- バックエンドのプロバイダー/モデルのオーバーライドは、OpenAI の
modelフィールドではなくx-openclaw-modelに指定します。 /v1/embeddingsは、inputを文字列または文字列の配列としてサポートします。