Docs

qzira AI API Gateway
テクニカルリファレンス

複数のAIモデルを「たった1つのキー」で管理・統合する

Ver 2.4 最終更新: 2026-02-26

qzira は、複数のAI APIプロバイダー(OpenAI・Anthropic・Google AI・DeepSeek)を 1つのエンドポイント で統合管理できるAI APIゲートウェイです。

BYOK(Bring Your Own Key)方式 — お持ちのAPIキーをそのまま使えます。qziraがリクエストのプロキシ、使用量の可視化、フェイルオーバー、レート制限を自動処理します。

qzira を使うメリット

  • コスト可視化: ダッシュボードでリクエスト数・トークン消費量をリアルタイム確認
  • フェイルオーバー: プロバイダー障害時に自動で別プロバイダーに切替
  • レート制限の自動処理: 429エラーのリトライをqziraが代行
  • APIキー管理の統一: 複数プロバイダーのキーをqzira側で一元管理し、アプリには gw_ キー1つだけ
  • 予算アラート・自動停止: AIエージェントの暴走によるコスト超過を防止
  • 使用量エクスポート: CSV形式でログをダウンロードし、社内報告や経費精算に活用NEW

アーキテクチャ概要

qziraはアプリケーションとAIプロバイダーの間に位置するプロキシ(中継サーバー)です。APIキーは gw_ の1本だけで、すべてのプロバイダーにアクセスできます。

Your App Cursor / Cline / SDK gw_xxxxxxxx API Key は1本だけ HTTPS qzira Gateway 🔑 APIキー認証・管理 💰 予算管理・Auto-Stop 📊 キャッシュ・ログ 🔄 フェイルオーバー 🛡️ レート制限・リトライ OpenAI Your Key: sk-proj-... Anthropic Your Key: sk-ant-... Google AI Your Key: AIza... BYOK: 各プロバイダーのAPIキーはお客様ご自身のもの
ℹ️ qziraはプロキシ(中継)です。リクエストはqziraサーバーを経由してプロバイダーに転送されます。qziraがAPIキーを発行しているわけではなく、お客様が各プロバイダーで取得したキー(BYOK)を安全に管理・使用します。

⚠️ 本ドキュメントについて(As-Is)
本ドキュメントは現状有姿(As-Is)で提供されています。AIサービスは日々進化しており、各プロバイダーのAPI仕様・料金・制限は予告なく変更される場合があります。記載内容は作成時点での情報に基づいており、将来の動作を永久に保証するものではありません。最新の情報は各プロバイダーの公式ドキュメントをご確認ください。

1. アカウント作成

1ダッシュボードにアクセス

https://app.qzira.com にアクセスします。

2Googleアカウントでログイン

「Googleでログイン」ボタンをクリックし、お使いのGoogleアカウントで認証します。

ℹ️ ログイン時に利用規約への同意が必要です。

2. APIキー発行

ログイン後、サイドバーの「APIキー」をクリックします。

1新しいAPIキーを作成

「新しいAPIキーを作成」ボタンをクリックし、キーの名前を入力します(例: my-app-keycursor-dev など)。

2APIキーをコピー

作成直後に表示される gw_xxxxxxxx 形式のキーを 必ずコピーして安全な場所に保存 してください。このキーは一度しか表示されません。

⚠️ 重要: APIキーは作成時に一度だけ表示されます。紛失した場合は新しいキーを発行するか、ローテーション機能で既存キーを再発行してください。
💡 このAPIキーが、qzira経由で全プロバイダーにアクセスするための統一キーになります。キーの定期的なローテーションを推奨します(セクション11参照)。

3. プロバイダーAPIキー登録(BYOK)

サイドバーの「プロバイダー」をクリックします。

対応プロバイダー

プロバイダーAPIキーの取得先キー形式
OpenAI platform.openai.com/api-keys sk-...
Anthropic console.anthropic.com/settings/keys sk-ant-...
Google AI aistudio.google.com/apikey AIza...
DeepSeek platform.deepseek.com/api_keys sk-...

登録手順

  1. 使用するプロバイダーの「APIキーを登録」をクリック
  2. お持ちのAPIキーを入力
  3. 「登録」をクリック — qzira側でキーの有効性を自動検証します
🔒 登録されたAPIキーは暗号化して保存され、リクエストのプロキシにのみ使用されます。全プランで3社すべてのAPIキーを登録できます。

4. プロバイダー有効化

APIキーを登録しただけでは、まだそのプロバイダー経由でのリクエストはできません。有効化 が必要です。

有効化の手順

プロバイダー画面で、使用したいプロバイダーの「有効化」ボタンをクリックします。

プラン別の同時有効化数

プラン同時有効化数
Free1社
Starter3社
Pro以上無制限
💡 Freeプランでは1社のみ有効化できます。別のプロバイダーに切り替えたい場合は、新しいプロバイダーを有効化すると自動的に切り替わります(APIキーの再入力は不要)。

5. コード移行

qziraはOpenAI互換のAPIエンドポイントを提供します。既存コードの Base URLAPIキー を変更するだけで移行完了です。

基本情報

項目
Base URLhttps://api.qzira.com/v1
エンドポイント(OpenAI互換)/chat/completions
エンドポイント(Anthropic互換)/v1/messages NEW
認証Authorization: Bearer gw_xxxxxxxx または x-api-key: gw_xxxxxxxx

移行例: Python(OpenAI SDK)

Before(直接呼び出し):

from openai import OpenAI

client = OpenAI(
    api_key="sk-xxxxxxxx"  # OpenAI APIキー
)

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Hello"}]
)

After(qzira経由):

from openai import OpenAI

client = OpenAI(
    api_key="gw_xxxxxxxx",                  # qzira APIキー
    base_url="https://api.qzira.com/v1"     # qzira エンドポイント
)

response = client.chat.completions.create(
    model="gpt-4o",  # モデル名はそのまま
    messages=[{"role": "user", "content": "Hello"}]
)

移行例: Python(Anthropic SDK → OpenAI互換形式)

Before(Anthropic SDK 直接呼び出し):

import anthropic

client = anthropic.Anthropic(api_key="sk-ant-xxxxxxxx")

response = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    system="You are a helpful assistant.",
    messages=[{"role": "user", "content": "Hello"}]
)

After(qzira経由 — OpenAI互換形式):

from openai import OpenAI

client = OpenAI(
    api_key="gw_xxxxxxxx",
    base_url="https://api.qzira.com/v1"
)

response = client.chat.completions.create(
    model="claude-sonnet-4-20250514",  # Claudeモデルもそのまま指定
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello"}
    ]
)
ℹ️ qziraがモデル名からプロバイダーを自動判定し、Anthropic APIの形式に変換します。system メッセージも自動で処理されます。

移行例: Python(Google Gemini → OpenAI互換形式)

from openai import OpenAI

client = OpenAI(
    api_key="gw_xxxxxxxx",
    base_url="https://api.qzira.com/v1"
)

response = client.chat.completions.create(
    model="gemini-2.0-flash",  # Geminiモデルもそのまま指定
    messages=[{"role": "user", "content": "Hello"}]
)

移行例: JavaScript / TypeScript

import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "gw_xxxxxxxx",
  baseURL: "https://api.qzira.com/v1",
});

const response = await client.chat.completions.create({
  model: "claude-sonnet-4-20250514",
  messages: [{ role: "user", content: "Hello" }],
});

環境変数での管理(推奨)

.env ファイル:

QZIRA_API_KEY=gw_xxxxxxxx
QZIRA_BASE_URL=https://api.qzira.com/v1

Python:

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("QZIRA_API_KEY"),
    base_url=os.getenv("QZIRA_BASE_URL")
)

ストリーミング対応

qziraはSSE(Server-Sent Events)形式のストリーミングに全プロバイダーで対応しています。

stream = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Tell me a story"}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

移行例: Anthropic SDK(ネイティブ形式) NEW

Anthropic SDKを使用している場合、/v1/messages エンドポイントでネイティブ形式のまま利用できます。

⚠️ base_urlhttps://api.qzira.com/v1 なし)を指定してください。SDKが自動的に /v1/messages を付加します。

Before(直接呼び出し):

import anthropic

client = anthropic.Anthropic(
    api_key="sk-ant-xxxxxxxx"  # Anthropic APIキー
)

message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}]
)

After(qzira経由 — 2行変更するだけ):

import anthropic

client = anthropic.Anthropic(
    api_key="gw_xxxxxxxx",       # qzira APIキー
    base_url="https://api.qzira.com"  # ⚠️ /v1 なし
)

message = client.messages.create(
    model="claude-sonnet-4-20250514",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}]
)

移行例: TypeScript / JavaScript(Anthropic SDK)

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: "gw_xxxxxxxx",        // qzira APIキー
  baseURL: "https://api.qzira.com"  // ⚠️ /v1 なし
});

const message = await client.messages.create({
  model: "claude-sonnet-4-20250514",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }]
});

対応モデル一覧(主要なもの)

プロバイダーモデル例
OpenAIgpt-4o, gpt-4o-mini, gpt-4-turbo, o1, o3-mini
Anthropicclaude-sonnet-4-20250514, claude-3-5-haiku-20241022, claude-3-opus-20240229
Google AIgemini-2.0-flash, gemini-2.5-flash, gemini-2.5-pro
DeepSeekdeepseek-chat, deepseek-reasoner
💡 OpenAIのo1/o3シリーズ(Reasoningモデル)にも対応しています。モデル名をそのまま指定してください。全プロバイダーでTool Calling(Function Calling)にも対応しています。

6. curlでのテスト

qziraの動作をすぐに確認したい場合は、curlコマンドで試せます。

OpenAIモデル

curl -X POST https://api.qzira.com/v1/chat/completions \
  -H "Authorization: Bearer gw_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

Anthropicモデル

curl -X POST https://api.qzira.com/v1/chat/completions \
  -H "Authorization: Bearer gw_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-3-5-haiku-20241022",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

Google AIモデル

curl -X POST https://api.qzira.com/v1/chat/completions \
  -H "Authorization: Bearer gw_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-2.0-flash",
    "messages": [{"role": "user", "content": "Hello"}]
  }'

Anthropicネイティブ形式(/v1/messages) NEW

curl -X POST https://api.qzira.com/v1/messages   -H "x-api-key: gw_xxxxxxxx"   -H "Content-Type: application/json"   -H "anthropic-version: 2023-06-01"   -d '{
    "model": "claude-sonnet-4-20250514",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello"}]
  }'

/v1/messages ストリーミング

curl -N -X POST https://api.qzira.com/v1/messages   -H "x-api-key: gw_xxxxxxxx"   -H "Content-Type: application/json"   -H "anthropic-version: 2023-06-01"   -d '{
    "model": "claude-sonnet-4-20250514",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Count from 1 to 5"}],
    "stream": true
  }'

ストリーミングテスト

curl -N -X POST https://api.qzira.com/v1/chat/completions \
  -H "Authorization: Bearer gw_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [{"role": "user", "content": "Count from 1 to 5"}],
    "stream": true
  }'

PowerShell(Windows)

$headers = @{
  "Authorization" = "Bearer gw_xxxxxxxx"
  "Content-Type"  = "application/json"
}
$body = '{"model":"gpt-4o-mini","messages":[{"role":"user","content":"Hello"}]}'

Invoke-RestMethod -Uri "https://api.qzira.com/v1/chat/completions" `
  -Method POST -Headers $headers -Body $body

正常なレスポンス例

{
  "id": "chatcmpl-xxxxx",
  "object": "chat.completion",
  "model": "gpt-4o-mini",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! How can I help you today?"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 8,
    "completion_tokens": 9,
    "total_tokens": 17
  },
  "provider": "openai"
}
💡 レスポンスに provider フィールドが付加され、どのプロバイダーが応答したか確認できます。

Tool Calling(Function Calling)対応 NEW

qziraは全3プロバイダーでTool Callingに対応しています。OpenAI互換の tools パラメータをそのまま送信するだけで、各プロバイダーに適切な形式で中継されます。

プロバイダー別 Tool Calling 対応状況

プロバイダー方式ステータス
OpenAIパススルー(ネイティブOpenAI形式)✅ 対応済み
Anthropicパススルー(SDK処理)✅ 対応済み
Google (Gemini)自動変換(OpenAI tools → Gemini functionDeclarations✅ 対応済み
DeepSeekパススルー(OpenAI互換)✅ 対応済み
💡 Geminiの自動変換: Geminiモデルを指定した場合、qziraがOpenAI形式の tools を Gemini形式の functionDeclarations に自動変換し、レスポンスも functionCalltool_calls に逆変換します。利用者側の変更は不要です。

Tool Calling テスト(curl)

以下のリクエストで、天気取得ツールを使ったTool Callingをテストできます。

OpenAIモデル

curl -X POST https://api.qzira.com/v1/chat/completions \
  -H "Authorization: Bearer gw_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o-mini",
    "messages": [
      {"role": "user", "content": "What is the weather in Tokyo?"}
    ],
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "get_weather",
          "description": "Get current weather for a location",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "City and country, e.g. Tokyo, Japan"
              }
            },
            "required": ["location"]
          }
        }
      }
    ]
  }'

Geminiモデル(自動変換)

# OpenAIと同じtools形式でOK — qziraが自動変換
curl -X POST https://api.qzira.com/v1/chat/completions \
  -H "Authorization: Bearer gw_xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-2.0-flash",
    "messages": [
      {"role": "user", "content": "What is the weather in Osaka?"}
    ],
    "tools": [
      {
        "type": "function",
        "function": {
          "name": "get_weather",
          "description": "Get current weather for a location",
          "parameters": {
            "type": "object",
            "properties": {
              "location": {
                "type": "string",
                "description": "City and country, e.g. Osaka, Japan"
              }
            },
            "required": ["location"]
          }
        }
      }
    ]
  }'

Tool Calling レスポンス例

モデルがツールの呼び出しを判断した場合、以下のようなレスポンスが返されます。

{
  "id": "chatcmpl-xxxxx",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": null,
        "tool_calls": [
          {
            "id": "call_xxxxx",
            "type": "function",
            "function": {
              "name": "get_weather",
              "arguments": "{\"location\": \"Tokyo, Japan\"}"
            }
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ],
  "usage": {
    "prompt_tokens": 53,
    "completion_tokens": 6,
    "total_tokens": 59
  },
  "provider": "openai"
}

tool_choice オプション

動作Gemini変換先
"auto"(デフォルト)モデルがツール呼び出しの要否を判断AUTO
"required"必ずいずれかのツールを呼び出すANY
"none"ツールを呼び出さないNONE
{"type":"function","function":{"name":"xxx"}}指定したツールを呼び出すANY + allowedFunctionNames

ストリーミング時の Tool Calling

ストリーミング("stream": true)でも Tool Calling は正常に動作します。ツール呼び出し時のチャンク構造:

# チャンク1: role
data: {"choices":[{"delta":{"role":"assistant"},...}]}

# チャンク2: tool_calls(関数名+引数)
data: {"choices":[{"delta":{"tool_calls":[{"index":0,"id":"call_xxx","type":"function","function":{"name":"get_weather","arguments":"{...}"}}]},...}]}

# チャンク3: 完了
data: {"choices":[{"delta":{},"finish_reason":"tool_calls",...}]}

# チャンク4: 使用量
data: {"usage":{"prompt_tokens":24,"completion_tokens":6}}

data: [DONE]
⚠️ 注意: レスポンスキャッシュが有効な場合、Tool Calling以前にキャッシュされた古いレスポンス(toolsなし)がヒットすることがあります。期待通りの結果にならない場合は、メッセージ内容を少し変えてキャッシュを回避してください。

7. Cursor / AIエージェント統合

Cursor 検証済み

Cursorの設定で、OpenAI互換のAPIプロバイダーとしてqziraを追加できます。OpenAI / Anthropic / Google の全モデルを1つのAPIキーで管理できます。

⚠️ Cursorの有料プラン(Pro以上)が必要です。Free版ではBYOK(Bring Your Own Key)機能が利用できないため、カスタムAPIキーやBase URLを設定できません。

前提条件

Step 1: qzira側の準備

  1. app.qzira.com にログイン
  2. サイドバーの「プロバイダー」で、使用したいプロバイダーを有効化:
    • OpenAI: GPT-4o, GPT-4o-mini 等を使う場合
    • Anthropic: Claude Sonnet, Claude Haiku 等を使う場合
    • Google AI: Gemini 2.0 Flash, Gemini 2.5 Pro 等を使う場合
    • DeepSeek: DeepSeek V3 (deepseek-chat), DeepSeek R1 (deepseek-reasoner) を使う場合
  3. サイドバーの「APIキー」で、Cursor用のAPIキーを作成(例: cursor-dev
  4. 表示された gw_xxxxxxxx 形式のキーをコピー(⚠️ 一度しか表示されません)

Step 2: Cursorの設定

  1. Cursorを開き、Settings → Models を開く
  2. OpenAI API Key にqziraのAPIキーを入力:
    gw_xxxxxxxx
  3. Override OpenAI Base URL に以下を入力:
    https://api.qzira.com/v1
  4. 使用したいモデルを手動で追加(「+ Add model」ボタン):
    • gpt-4o-mini(OpenAI)
    • gpt-4o(OpenAI)
    • claude-sonnet-4-20250514(Anthropic)
    • gemini-2.0-flash(Google)
    • gemini-2.5-pro(Google)
  5. 追加したモデルのトグルをONにして有効化
ℹ️ Cursorにプリセットされている claude-3.5-sonnet 等のモデルは、Cursor Proの内蔵APIを使用します。qzira経由で使用するには、上記のように正確なモデル名を手動追加してください。

動作確認ポイント

  • モデル選択: Cursorのチャットやエディタで、手動追加したモデル(例: gemini-2.0-flash)を選択
  • テスト送信: 簡単なプロンプト(「Hello」など)を送信し、応答が返ることを確認
  • ダッシュボード確認: app.qzira.com → 使用量ログにリクエストが記録されていることを確認
  • プロバイダー確認: ログの provider 列に正しいプロバイダー名(openai / anthropic / google)が表示されること

トラブルシューティング

症状原因対処法
401 Unauthorized APIキーが無効 or 入力ミス qziraダッシュボードでキーの状態を確認。必要に応じて新しいキーを作成
403 Provider not enabled プロバイダーが未有効化 ダッシュボード → プロバイダー → 該当プロバイダーを有効化し、APIキーを設定
403 Plan upgrade required qzira Freeプランでは利用不可 qziraのプランをPro以上にアップグレード
モデルが選択肢に表示されない モデルが未追加 or トグルがOFF Settings → Models → 「+ Add model」で手動追加し、トグルをONに
応答が返らない / タイムアウト Base URLの設定ミス https://api.qzira.com/v1 が正しく入力されているか確認(末尾のスラッシュなし)
💡 エージェント別にAPIキーを分けると、Cursor用の使用量を他のツールと分離して管理できます。予算設定(セクション13)と組み合わせることで、Cursorの暴走コストも防止できます。

Claude Code NEW

Claude Codeは環境変数を設定するだけでqzira経由に切り替わります。すべてのリクエストがダッシュボードに記録され、予算管理・自動停止が適用されます。

⚠️ ANTHROPIC_BASE_URLhttps://api.qzira.com/v1 なし)を指定してください。Claude Codeが自動的に /v1/messages を付加します。

Linux / macOS

# 環境変数を設定
export ANTHROPIC_BASE_URL="https://api.qzira.com"
export ANTHROPIC_API_KEY="gw_xxxxxxxx"

# Claude Code 起動
claude

PowerShell(Windows)

# 環境変数を設定
$env:ANTHROPIC_BASE_URL = "https://api.qzira.com"
$env:ANTHROPIC_API_KEY = "gw_xxxxxxxx"

# Claude Code 起動
claude

永続化(~/.bashrc や ~/.zshrc に追記)

# ~/.bashrc または ~/.zshrc に追記
export ANTHROPIC_BASE_URL="https://api.qzira.com"
export ANTHROPIC_API_KEY="gw_xxxxxxxx"

動作確認ポイント

  • 初回起動時: Anthropic OAuthの認証画面が表示されます(Anthropic Console → 組織を選択)。これはClaude Code自体の認証であり、qziraとは無関係です。
  • Auth conflict 警告: 「Using ANTHROPIC_API_KEY instead of Anthropic Console key」と表示されれば、qziraキーが優先使用されています ✅
  • モデル自動使い分け: Claude CodeはHaiku(軽量タスク)とSonnet(応答生成)を自動的に使い分けます。すべてのリクエストがダッシュボードに記録されます。
  • ダッシュボード確認: app.qzira.com → 使用量ログで、provider: anthropic のリクエストが記録されていることを確認してください。

Cline(VS Code拡張)

Clineの設定画面で「API Provider」を「OpenAI Compatible」に変更し、以下を入力します:

  • Base URL: https://api.qzira.com/v1
  • API Key: gw_xxxxxxxx
  • Model: 使用したいモデル名(例: claude-sonnet-4-20250514

Windsurf

⚠️ 現在、Windsurfはqzira経由での利用に対応していません。

WindsurfのBYOK(Bring Your Own Key)機能はClaude 4 Sonnet / Opusのみ対応しており、APIキーはWindsurf管理画面(windsurf.com/subscription/provider-api-keys)で設定します。カスタムBase URLやOpenAI Compatibleプロバイダーの設定項目が存在しないため、qziraのようなAPIゲートウェイ経由でのルーティングはできません。

出典: Windsurf Docs — AI Models(2026年2月確認)

Roo Code(VS Code拡張)

Roo CodeではOpenAI CompatibleモードとAnthropicモードの両方で動作確認済みです(v3.47.3)。

方法A: OpenAI Compatibleモード(推奨)

  • API Provider: OpenAI Compatible
  • Base URL: https://api.qzira.com/v1
  • API Key: gw_xxxxxxxx
  • Model: gpt-4o-mini(または gpt-4o

方法B: Anthropicモード

  • API Provider: Anthropic
  • ☑ Use custom base URL にチェック
  • Base URL: https://api.qzira.com(⚠️ /v1 なし)
  • API Key: gw_xxxxxxxx
  • Model: claude-sonnet-4-20250514

その他のAIエージェント

OpenAI互換のBase URLとAPIキーを設定できるツールであれば、同様の方法で統合可能です。

ツール設定場所
CursorSettings → Models → OpenAI API Key
Claude Code環境変数 ANTHROPIC_BASE_URL=https://api.qzira.com(/v1なし)+ ANTHROPIC_API_KEY=gw_xxx
ClineAPI Provider → OpenAI Compatible
Windsurf❌ カスタムBase URL非対応(BYOKはClaude系のみ、URL変更不可)
Roo CodeAPI Provider → OpenAI Compatible または Anthropic(custom base URL)
Continue.devconfig.jsonapiBase
Aider--openai-api-base オプション
LangChainbase_url パラメータ

ツール × プロバイダー 対応マトリクス

各AIコーディングツールのqzira経由での動作検証状況です(2026年2月時点)。

ツール OpenAI Anthropic Google AI curl Claude Code Anthropic API 専用ツール Cline ⚠️ テキスト生成のみ Roo Code ⚠️ テキスト生成のみ Cursor ⚠️ テキスト生成のみ ※ Pro以上のプラン必須(Freeでは設定が無視されます) Windsurf カスタム Base URL 設定なし 凡例: 対応 ⚠️ 一部制限 非対応 対象外(ツール側の仕様) ⚠️ Google AI「テキスト生成のみ」: qziraからGoogle AI経由でテキスト生成は可能ですが、Tool Calling(関数呼び出し)は 現在未対応です。AIコーディングツールはTool Callingを多用するため、実用的な利用には制限があります。
📎 出典・参考リンク
ℹ️ 上記は2026年2月時点の特定バージョンでの検証結果です。ツールやプロバイダーの更新により対応状況が変わる可能性があります。最新の対応状況は各ツールの公式ドキュメントをご確認ください。
💡 Freeプランでお試しいただけます。ツールの動作報告・フィードバックは @qzira_dev まで。

8. ダッシュボードで使用量を確認

https://app.qzira.com/dashboard にログインすると、以下の情報をリアルタイムで確認できます。

ダッシュボード概要

  • 今月のリクエスト数: 月間の合計リクエスト数(プラン上限との比較)
  • 使用率: プラン上限に対する使用割合
  • 入力トークン / 出力トークン: 合計トークン消費量
  • 日別リクエスト数グラフ: 過去のリクエスト推移を視覚化

最近のリクエスト

各リクエストの詳細を確認できます:

項目内容
APIキー名リクエストに使用されたAPIキーの名前NEW
モデル使用したモデル名(例: claude-sonnet-4-20250514
プロバイダー応答したプロバイダー(例: Anthropic)
トークン入力 / 出力トークン数
レイテンシ応答時間(ミリ秒)
ステータス成功 / エラー
コスト NEW推定コスト(USD / JPY切替可)。失敗リクエストは「—」表示
Tool Calls 🔧 NEWツール呼び出し件数。クリックで関数名・引数の詳細を確認可能
時刻リクエスト日時

使用量エクスポート(CSV)NEW

リクエストログをCSV形式でダウンロードできます。経費精算や社内レポートに活用できます。

ダッシュボードの「リクエストログ」セクションにある 「CSVエクスポート」 ボタンをクリックすると、表示中のログデータがCSVファイルとしてダウンロードされます。

CSVに含まれる項目

カラム内容
idログID
api_key_name使用されたAPIキーの名前
modelモデル名
providerプロバイダー名
input_tokens入力トークン数
output_tokens出力トークン数
latency_ms応答時間(ミリ秒)
statusステータスコード
created_atリクエスト日時
estimated_cost_usd推定コスト(USD)NEW
estimated_cost_jpy推定コスト(円換算)NEW
tool_callsツール呼び出し情報(JSON形式)NEW
ℹ️ CSVエクスポートはログ保持期間内のデータが対象です。定期的にエクスポートして保管することを推奨します。

ログ保持期間NEW

リクエストログはプランに応じた期間で自動的に保持されます。保持期間を過ぎたログは毎日自動削除されます。

プランログ保持期間
Free3日間
Starter30日間
Pro30日間
Business90日間
Scale365日間
⚠️ 重要: 保持期間を過ぎたログは復元できません。長期保存が必要な場合は、保持期間内にCSVエクスポートを実行してください。

9. 予算アラート・自動停止

サイドバーの「予算設定」から、コスト管理の設定ができます(Starter以上)。

⚠️ 予算上限の適用タイミングについて
予算使用量の集計はリアルタイムではなく、一定間隔で更新されます。そのため、集計処理のタイミングにより、設定した上限額を超過する場合があります。

これは多くのAPI利用環境において一般的に見られる挙動であり、qziraでも同様の特性があります。

qziraでは集計間隔を数分単位に保ち、可能な限り超過幅を抑制する設計としています。ただし、完全な即時停止を保証するものではありません
⚡ Realtime Budget Stop(Scaleプラン限定)

通常の予算チェック(KV経由・最大5分の遅延)に加え、D1直接クエリによる即時停止モードを利用できます。

項目内容
対象プランScale(自動停止 ON の場合のみ表示)
効果上限到達後、次のリクエストから即時ブロック(通常の最大5分遅延なし)
追加遅延リクエストあたり+15~40ms(D1クエリ分)
設定場所ダッシュボード「予算設定」→「Realtime Budget Stop」トグル

予算管理モード

qzira では、リクエスト数ベースコスト(USD)ベースの2つのモードで予算管理ができます。ダッシュボードの予算設定ページで切り替えられます。

モード管理単位特徴
リクエスト数APIリクエスト回数シンプル。モデルの種類やトークン数に関わらず1リクエスト=1カウント
コスト(USD)推定APIコスト(USD)トークン使用量に基づく推定コストで管理。高コストモデルの使いすぎを防止

設定項目

項目説明対応プラン
月間上限月間の最大リクエスト数 or 最大コスト(USD)全プラン
日次上限1日の最大リクエスト数 or 最大コスト(USD)Starter以上
予算アラート通知50% / 80% / 100% 到達時にメール通知Starter以上
自動停止上限到達時にリクエストを自動ブロックPro以上

為替レート表示(USD / JPY)NEW

コストモードでは、USD建ての予算設定に加えて日本円(JPY)換算表示に対応しています。

項目詳細
為替レートソースExchangeRate-API(open.er-api.com)— 日次更新
更新頻度1日1回(UTC 15:00 = JST 00:00)
キャッシュKVストアに48時間キャッシュ
フォールバックAPI取得失敗時は固定レート ¥150/USD を使用
通貨切替入力フォームで USD ↔ JPY を切り替え可能
ℹ️ 円換算表示は参考値です。為替レートの変動(特に急変動時)により、qziraダッシュボード上の円換算額と実際のプロバイダー請求額には乖離が生じる場合があります。フォールバック値(¥150/USD)は為替API障害時の最終手段であり、実勢レートと大きく異なる可能性があります。正確な請求額は各プロバイダーのダッシュボードでご確認ください。

コスト推定について

コストモードでの推定コストは、各リクエストのトークン使用量と各モデルの公開料金に基づいて算出されます。以下の点にご注意ください。

  • 推定コストは概算であり、プロバイダーの実際の請求額と一致しない場合があります
  • プロバイダーが料金を変更した場合、反映にタイムラグが生じることがあります
  • 一部のモデルや特殊なリクエスト(画像入力等)では、コスト推定の精度が低下する場合があります
⚠️ AIエージェントが夜間に大量リクエストを送信するケースへの対策として、日次上限+自動停止の設定を推奨します。

10. プランアップグレード

サイドバーの「プラン・請求」からプラン変更が可能です。

プラン比較

プラン月額リクエスト/月同時有効化APIキー数ログ保持
Free¥01,000113日
Starter¥50010,0003230日
Pro¥1,500100,000無制限530日
Business¥4,000500,000無制限5090日
Scale¥10,0003,000,000無制限100365日

プラン別の主要機能

機能FreeStarterProBusinessScale
ストリーミング
APIキーローテーション
使用量エクスポート(CSV)
リトライ(自動再試行)
フェイルオーバー
予算アラート
予算上限・自動停止
レスポンスキャッシュ
セマンティックキャッシュ
APIキー別予算
アクセス制御(Per-Key)NEW
Agent Trace
シークレット・シールド
Smart RoutingNEW
優先サポート

11. APIキーローテーションNEW

セキュリティのベストプラクティスとして、APIキーの定期的なローテーション(再発行)を推奨します。qziraではダッシュボードからワンクリックでローテーションが可能です。

ローテーションとは

ローテーションを実行すると、既存のAPIキーが即座に無効化され、新しい gw_ キーが発行されます。キーのID(内部識別子)と名前はそのまま維持されるため、ダッシュボード上の使用量履歴や設定は引き継がれます。

ローテーション手順

  1. サイドバーの「APIキー」をクリック
  2. ローテーションしたいキーの「ローテーション」ボタン(🔄アイコン)をクリック
  3. 確認ダイアログで「ローテーション実行」を選択
  4. 新しいキーが表示されるので、必ずコピーして安全な場所に保存
🚨 重要: ローテーションを実行すると、旧キーは即座に無効化されます。猶予期間(Grace Period)はありません。旧キーを使用中のリクエストは即座に 401 Unauthorized となります。
⚠️ 推奨手順: ローテーション前に以下の準備を行ってください。
1. 新しいキーを受け取る準備(.env ファイルの編集画面を開いておく)
2. ローテーション実行 → 新しいキーを即座にコピー
3. すべてのアプリ・エージェント・CI/CD で新しいキーに更新
4. ダッシュボードで新しいキーのリクエストが記録されていることを確認
※ 将来的に猶予期間(Grace Period)の実装を検討しています。

ローテーションが推奨されるタイミング

  • APIキーが意図せず公開された可能性がある場合(ログ出力、Git履歴など)
  • チームメンバーの退職・異動時
  • 定期的なセキュリティ対策として(30〜90日ごとを推奨)
  • 不審なリクエストがダッシュボードで確認された場合
💡 環境変数(.envファイル)でAPIキーを管理している場合、ローテーション後は環境変数の値を更新するだけで切り替え完了です。

ローテーション後の更新例

# .env ファイルを更新
QZIRA_API_KEY=gw_yyyyyyyy    # ← 新しいキーに置き換え
QZIRA_BASE_URL=https://api.qzira.com/v1

アプリケーションを再起動(またはデプロイ)すれば、新しいキーが自動的に使用されます。

12. レスポンスキャッシュ

同一リクエストに対するAIプロバイダーの応答をキャッシュし、2回目以降の応答を高速化・トークン節約できます(Pro以上)。

ℹ️ レスポンスキャッシュはデフォルトで 無効 です。ダッシュボードから明示的に有効化してください。LLMの応答キャッシュは意図しない挙動を引き起こす可能性があるため、用途を理解した上で有効化することを推奨します。

メリット

  • コスト削減: 同一リクエストでプロバイダーAPIコールをスキップし、トークン消費ゼロ
  • レスポンス高速化: KVキャッシュから即座に返却(数百ms → 数十ms)
  • プロバイダー障害の緩和: キャッシュ期間中はプロバイダー障害の影響を受けない
  • 設定不要: トグルONにするだけで即座に有効化。コード変更不要

デメリット・注意点

  • ストリーミングリクエストは対象外
  • 完全一致のみ(表現の揺れにはセマンティックキャッシュを併用推奨)
  • TTL期間中は古い回答が返る可能性がある
  • PII(個人情報)を含むリクエストもキャッシュされるリスクがある

向き・不向き

向いているケース向いていないケース
テスト・デバッグの反復実行毎回異なる創作物の生成
バッチ処理(同一プロンプト大量実行)リアルタイム情報の取得
FAQボット・定型応答ストリーミングエージェント
コスト節約を最優先するケースPII(個人情報)を多く含むリクエスト

対応プランとTTL(キャッシュ保持期間)

プラン利用可否デフォルトTTLカスタムTTL
Free
Starter
Pro1時間1時間以下
Business24時間24時間以下
Scale7日間7日間以下

有効化手順

  1. サイドバーの「キャッシュ」をクリック
  2. 「キャッシュを有効にする」トグルをONにする
  3. 必要に応じてカスタムTTLやTemperature制限を設定

設定項目

項目説明デフォルト
キャッシュ有効/無効 レスポンスキャッシュのON/OFF OFF
カスタムTTL キャッシュの保持期間(秒)。プランのデフォルトTTL以下に設定可能 プランのデフォルト値
Temperature制限 指定値を超えるTemperatureのリクエストをキャッシュ対象外にする 制限なし(全てキャッシュ対象)

キャッシュの仕組み

リクエストの以下の要素をSHA-256ハッシュ化し、同一キーのリクエストを検出します:

  • ユーザーID
  • モデル名
  • メッセージ内容
  • temperature / top_p / max_tokens

キャッシュヒット時はプロバイダーへのリクエストをスキップし、保存済みの応答を即座に返却します。これによりトークン消費量が節約されます。

レスポンスヘッダー

キャッシュが有効な場合、レスポンスに以下のヘッダーが付加されます:

ヘッダー説明
X-CacheEXACT_HIT / SEMANTIC_HIT / MISS完全一致ヒット / セマンティックヒット / ミス
X-Cache-TTL秒数適用されたTTL
X-Semantic-Score0.00〜1.00セマンティックキャッシュの類似度スコア(ヒット時のみ)
X-Cache-Skip-Reason文字列キャッシュがスキップされた理由(スキップ時のみ)

キャッシュ対象外のリクエスト

  • ストリーミングリクエスト"stream": true): SSE形式はキャッシュに不向きなため対象外
  • Temperature制限超過: 設定したTemperature制限を超えるリクエスト
  • エラーレスポンス: プロバイダーからのエラー応答はキャッシュされません
⚠️ 注意: レスポンスキャッシュ(完全一致)は、元のリクエストと同一パラメータの場合にのみ返却されます。メッセージ内容が少しでも異なれば新しいリクエストとなります。意味的に類似したリクエストのキャッシュにはセマンティックキャッシュ(セクション15)をご利用ください。

キャッシュ統計の見方

キャッシュ設定ページの下部に、キャッシュの利用状況を示す統計が表示されます。

全期間統計

項目説明
総ヒット数キャッシュが利用された合計回数
節約入力トークンキャッシュヒットにより節約された入力トークンの合計
節約出力トークンキャッシュヒットにより節約された出力トークンの合計
ユニークプロンプト数キャッシュに保存されたユニークなプロンプトの数

今月の統計

当月分のヒット数・節約トークン数が表示されます。月初にリセットされます。

最近のキャッシュヒット

直近のキャッシュヒットが一覧表示されます。各エントリには以下の情報が含まれます:

  • プロバイダー名・モデル名
  • 節約された入力/出力トークン数
  • ヒット回数
  • 最終ヒット日時
💡 キャッシュ統計は「統計をクリア」ボタンでリセットできます。キャッシュされたレスポンス自体はTTL切れで自動削除されます。

13. APIキー別予算設定

APIキーごとに個別の予算上限を設定し、特定のアプリケーションやエージェントのリクエスト数を制御できます(Business以上)。

ℹ️ APIキー別予算は、セクション9の予算アラート(ユーザー単位)とは独立した機能です。両方を組み合わせることで、ユーザー全体 + 個別キーの二重ガードが可能です。

対応プラン

プランAPIキー別予算
Free
Starter
Pro
Business
Scale

設定手順

  1. サイドバーの「APIキー」をクリック
  2. 予算設定したいキーの ウォレットアイコン をクリック
  3. 予算設定モーダルで以下を設定:
    • 月間リクエスト上限: 月間の最大リクエスト数
    • 日次リクエスト上限: 1日の最大リクエスト数
    • 自動停止: 上限到達時にリクエストを自動ブロック
  4. 「保存」をクリック

設定項目

項目説明必須
月間リクエスト上限 このAPIキーで送信できる月間の最大リクエスト数。空欄で無制限。 任意
日次リクエスト上限 このAPIキーで送信できる1日の最大リクエスト数。空欄で無制限。 任意
自動停止 ONにすると、上限到達時にこのキーからのリクエストを自動的にブロックします。 任意

動作の仕組み

リクエスト受信時に以下の順序でチェックされます:

  1. ユーザー単位の予算チェック(セクション9の設定)
  2. APIキー単位の予算チェック(本セクションの設定)
  3. 両方を通過した場合のみ、プロバイダーにリクエストを転送

上限到達時のレスポンス:

{
  "error": {
    "message": "API key budget exceeded",
    "type": "budget_exceeded",
    "code": 403
  }
}

通知

  • 閾値通知: 50% / 80% 到達時にメール通知(5分おきのCronで判定)
  • 上限到達通知: 100% 到達時に即座にメール通知

通知メールにはAPIキー名が記載されるため、どのキーが上限に達したか一目で判別できます。

現在の使用量の確認

予算設定モーダルには、日次・月次のプログレスバーが表示され、現在の使用量をリアルタイムで確認できます。

ユースケース例

  • エージェント別制御: Cursor用キーに日次100件、Claude Code用キーに日次200件など、エージェントごとに上限を設定
  • プロジェクト別管理: プロジェクトAのキーとプロジェクトBのキーで個別に予算管理
  • 夜間実行の安全策: 自律実行するエージェントのキーに日次上限 + 自動停止を設定し、暴走を防止
💡 APIキー別予算とユーザー単位の予算を組み合わせることで、「全体で月10,000件まで」「エージェントAは日500件まで」「エージェントBは日200件まで」のような細かい制御が可能です。

⚠️ 予算停止の仕組みと免責事項

  • qziraの予算チェックは5分間隔のCRON集計を使用しています。リクエストが予算に反映されるまで最大5分の遅延が生じる場合があります。
  • ハードリミット(100%超過時の自動停止)はKVカウンターによりリアルタイムに動作しますが、高負荷時やKV障害時には一時的に機能しない場合があります。
  • 予算停止はベストエフォートでの提供です。集計遅延や障害により、設定値を超過したリクエストが処理される可能性があります。
  • 予算超過による過課金について、qziraは責任を負いません。重要な用途では、AIプロバイダー側の課金上限設定との併用を強く推奨します。

📌 他サービスの時間単位集計と比較して5分間隔は業界最短クラスですが、完全なリアルタイム停止を保証するものではありません。


14. アクセス制御(Per-Key Access Control)

APIキーごとに、使用可能なプロバイダーモデルをホワイトリスト方式で制限できます。チーム内のエージェントごとに「何を使えるか」を細かく制御することで、意図しないプロバイダー利用や高額モデルの誤使用を防ぎます。

ℹ️ アクセス制御は Pro プラン以上 で利用可能です。APIキー別予算(セクション13)と組み合わせることで、「何を使えるか」+「いくらまで使えるか」の二重ガードが実現できます。

対象プラン

プランアクセス制御
Free
Starter
Pro
Business
Scale

設定方法

  1. ダッシュボード → APIキー 画面を開きます
  2. 対象キーの 🔐 アクセス制限 ボタンをクリックします(Pro プラン以上で表示)
  3. プロバイダー制限: 「全プロバイダー許可」または特定のプロバイダーのみを選択します
    • 選択肢: openai / anthropic / google
  4. モデル制限: 「全モデル許可」または特定のモデルのみを入力します
    • 例: gpt-4o, gpt-4o-mini, claude-sonnet-4-20250514
  5. 保存 をクリックして設定を反映します
⚠️ 制限を設定すると、許可されていないプロバイダーやモデルへのリクエストは即座に 403 エラーで拒否されます。AIエージェントが使用するモデルを事前に確認してから設定してください。

チェック優先順位

APIリクエストが送信されると、以下の順序でアクセス制御チェックが行われます。

リクエスト受信
  │
  ├─ 1. プロバイダー制限チェック(先に評価)
  │     allowed_providers が設定されている場合
  │     → 対象プロバイダーがリストにない → 403 provider_not_allowed
  │
  ├─ 2. モデル制限チェック(プロバイダー通過後)
  │     allowed_models が設定されている場合
  │     → 対象モデルがリストにない → 403 model_not_allowed
  │
  └─ 3. 両方通過 → 通常のプロキシ処理へ

エラーレスポンス

アクセス制御に違反したリクエストは、以下の形式でエラーが返されます。

エラーコードHTTPステータス発生条件
provider_not_allowed403許可されていないプロバイダーへのリクエスト
model_not_allowed403許可されていないモデルへのリクエスト

レスポンス例:

// プロバイダー制限エラー
{
  "error": {
    "message": "Provider 'google' is not allowed for this API key",
    "code": "provider_not_allowed"
  }
}

// モデル制限エラー
{
  "error": {
    "message": "Model 'o1-mini' is not allowed for this API key",
    "code": "model_not_allowed"
  }
}

ユースケース

シナリオプロバイダー設定モデル設定効果
Cursor 専用キーopenai のみ全モデル許可OpenAI以外のプロバイダーをブロック
Claude Code 専用キーanthropic のみ全モデル許可Anthropic以外をブロック
コスト制限キー全プロバイダー許可gpt-4o-mini, gemini-2.0-flash低コストモデルのみ許可
本番検証済みキーopenai のみgpt-4o, gpt-4o-mini検証済みモデルのみに限定

デフォルト動作

  • 制限未設定(デフォルト): すべてのプロバイダー・モデルが利用可能(従来と同じ動作)
  • プロバイダーのみ制限: 指定プロバイダー配下の全モデルが利用可能
  • モデルのみ制限: 指定モデルであれば、どのプロバイダーでも利用可能
  • 両方制限: プロバイダーとモデルの両方を満たすリクエストのみ通過
💡 制限の解除: 「Remove All Restrictions」をクリックすると、プロバイダー・モデル制限がすべて解除され、デフォルト状態(全許可)に戻ります。
💡 予算との組み合わせ: アクセス制御とAPIキー別予算(セクション13)を併用すると、エージェントごとに「OpenAIの gpt-4o-mini のみ・月500リクエストまで」のような精密なコスト管理が実現できます。

15. セマンティックキャッシュ

セマンティックキャッシュは、AIベクトル検索を使用して意味的に類似したリクエストを検出し、キャッシュされたレスポンスを再利用する機能です。レスポンスキャッシュ(セクション12)が完全一致のみに対応するのに対し、セマンティックキャッシュは表現が異なっていても同じ意図のリクエストをヒットさせることができます。

ℹ️ セマンティックキャッシュは Business プラン以上 で利用可能です。レスポンスキャッシュ(セクション12)と併用することで、最大限のトークン節約が実現できます。

メリット

  • 表現の揺れに対応: 「TypeScriptのメリットは?」と「なぜTypeScriptを使うべき?」を同一意図として認識
  • 大幅なコスト削減: 完全一致では拾えないリクエストも再利用し、トークン消費を削減
  • 二段構えの最適化: セマンティックヒット時にExact Cache(レスポンスキャッシュ)にも自動保存
  • 安全設計: PII検出・短文・マルチターンのリクエストは自動的に除外

デメリット・注意点

  • 誤ヒットの可能性(類似度閾値を0.95以上に設定することで軽減可能)
  • Embeddingコストが発生(月200Kクエリで約$0.30と低コスト)
  • 非ストリーミング・シングルターンのリクエストのみ対応
  • ベクトルストレージに上限あり(Business: 10,000件 / Scale: 50,000件)
  • eventual consistency(新規キャッシュが検索可能になるまで数分かかる場合あり)

向き・不向き

向いているケース向いていないケース
FAQ・ヘルプデスク(同じ質問が表現違いで来る)毎回ユニークな創作リクエスト
教育・学習系アプリ(似た質問が頻出)マルチターン会話(チャットボット)
コード生成の反復(類似パターン)ストリーミング応答が必須のエージェント
レスポンスキャッシュとの併用で最大効果PII(個人情報)が多いリクエスト

レスポンスキャッシュとの比較

項目レスポンスキャッシュ(セクション12)セマンティックキャッシュ(本セクション)
マッチ方式SHA-256 完全一致AIベクトル検索(コサイン類似度)
対応プランPro以上Business以上
ストリーミング対応非対応(非ストリームのみ)非対応(非ストリームのみ)
マルチターン対応対応非対応(シングルターンのみ)
レイテンシ極めて低い(KV getのみ)やや高い(Embedding生成 + ベクトル検索)
ヘッダーX-Cache: EXACT_HITX-Cache: SEMANTIC_HIT
ストレージKV のみVectorize + KV

動作フロー

セマンティックキャッシュは、レスポンスキャッシュ(完全一致)のに評価されます。完全一致でヒットした場合、セマンティックキャッシュの処理は実行されません。

リクエスト受信
  ↓
認証 + プラン確認(Business以上?)+ Feature Toggle ON?
  │ NO → 通常フロー(セマンティックキャッシュをスキップ)
  ↓ YES
ストリーミング? → YES → スキップ(X-Cache-Skip-Reason: streaming)
  ↓ NO
① Exact Cache Lookup(SHA-256 完全一致、KV get 1回)
  ├─ EXACT_HIT → 即座に返却(Embedding不要、最速)
  └─ MISS ↓
② 除外チェック(PII / 短文 / マルチターン)
  ├─ 除外 → 通常フロー(X-Cache-Skip-Reason で理由表示)
  └─ OK ↓
③ Embedding 生成(@cf/baai/bge-small-en-v1.5、384次元)
  ↓
④ Vectorize 検索(user_scope + meta_group フィルタ)
  ├─ スコア ≥ 閾値 → KV からレスポンス取得
  │   ├─ KV 成功 → SEMANTIC_HIT(+ Exact Cache にも保存)
  │   └─ KV 失敗 → MISS 扱い(X-Cache-Skip-Reason: kv_miss)
  └─ スコア < 閾値 → MISS
       ↓
⑤ プロバイダーにリクエスト送信
  ↓
⑥ レスポンス保存(Vectorize + KV + Exact Cache)
💡 セマンティックキャッシュがヒットすると、そのレスポンスは自動的にExact Cacheにも保存されます。同じリクエストが再度来た場合、次回はExact Cache(KV get 1回のみ)で即座に返却されるため、さらに高速です。

対応プランとストレージ上限

各プランでのベクトルストレージの上限と保持期間は以下の通りです。

項目Business(¥4,000/月)Scale(¥10,000/月)
最大ベクトル数10,00050,000
類似度閾値の範囲0.90 〜 0.990.85 〜 0.99
TTL(保持期間)24時間7日間
Embedding モデル@cf/baai/bge-small-en-v1.5(384次元)
メトリクスコサイン類似度
ℹ️ ベクトル数が上限に達すると、新しいリクエストのキャッシュ保存はスキップされます(既存のキャッシュからの検索は引き続き可能です)。ダッシュボードの「セマンティック」ページで現在の使用量を確認できます。

自動クリーンアップ(CRON)

TTL を超過した古いベクトルは、日次の自動クリーンアップにより削除されます。

  • 実行スケジュール: 毎日 UTC 15:00(JST 00:00)
  • 処理内容: ユーザーごとにTTL切れのベクトルを検出・削除
  • 削除上限: 1ユーザーあたり最大500件/日(5イテレーション × 100件)
  • カウント同期: 削除されたベクトル数はD1のカウンタから自動的にデクリメントされます

手動で全ベクトルを削除したい場合は、ダッシュボードの「セマンティック」ページにある「全削除」ボタンを使用してください。

ダッシュボードでの設定

サイドバーの「セマンティック」をクリックして、セマンティックキャッシュの設定画面を開きます。

ベクトルストレージ

画面上部にベクトルストレージの使用状況がプログレスバーで表示されます。現在の使用量、上限値、使用率が一目で確認できます。TTLと自動クリーンアップの情報も併記されています。

キャッシュ設定

  1. セマンティックキャッシュ ON/OFF: トグルスイッチで有効/無効を切り替えます
  2. 類似度しきい値: スライダーで閾値を調整します(推奨: 0.92)
    • 値が高いほど → 精度重視(ヒット率は下がるが誤ヒットが少ない)
    • 値が低いほど → ヒット率重視(より多くのリクエストがヒットするが誤ヒットのリスクが上がる)
  3. 「保存」をクリックして設定を反映します

キャッシュ統計

セマンティックキャッシュを有効にすると、画面下部にキャッシュの利用統計が表示されます。総ヒット数、節約トークン数、今月のヒット数、ユニークプロンプト数、および最近のセマンティックヒットの詳細が確認できます。

類似度閾値の設定ガイド

閾値特徴推奨ユースケース
0.95〜0.99高精度。ほぼ同じ文のみヒット正確性が最重要な業務用途、金融・医療関連
0.92(推奨)バランス型。意味が十分に近いリクエストにヒット一般的な開発用途、コード生成、QA
0.85〜0.91幅広くヒット。コスト節約を最大化大量の類似リクエストを処理するバッチ処理(Scale限定)

自動除外条件

以下の条件に該当するリクエストは、セマンティックキャッシュの対象外となります。

条件理由X-Cache-Skip-Reason
ストリーミングリクエストレスポンスが逐次送信されるため、完全なレスポンスをキャッシュできないstreaming
マルチターン会話assistant/tool ロールを含む会話は文脈依存性が高く、再利用に適さないmulti_turn
短文リクエスト30文字未満のプロンプトは意味的な比較に不十分too_short
PII検知メールアドレス、電話番号、APIキー等の個人情報を含むリクエストはキャッシュしないpii_detected
Feature Toggle OFF拡張機能画面でセマンティックキャッシュが無効feature_off
プラン対象外Free / Starter / Pro プランはセマンティックキャッシュ非対応plan_not_allowed

レスポンスヘッダー

セマンティックキャッシュに関連するレスポンスヘッダーは以下の通りです。

ヘッダー説明
X-CacheSEMANTIC_HITセマンティックキャッシュからレスポンスを返却
X-Semantic-Score0.00 〜 1.00マッチした類似度スコア(SEMANTIC_HIT 時のみ)
X-Cache-Skip-Reason上記の除外条件参照キャッシュがスキップされた理由
X-Cache-Meta8文字のハッシュmeta_group の識別子(モデル/system/temperature の組み合わせ)

マッチング条件

セマンティックキャッシュがヒットするには、以下のすべての条件を満たす必要があります。

  • 同一ユーザーのリクエストであること
  • 同一の meta_group(モデル名 + system prompt + temperature の組み合わせ)であること
  • ユーザーメッセージのコサイン類似度が設定閾値以上であること
  • ベクトルのTTLが有効期間内であること

つまり、同じモデル・同じシステムプロンプト・同じ温度設定で、意味的に類似した質問をした場合にのみヒットします。異なるモデルや異なるシステムプロンプトのキャッシュが誤って返されることはありません。

⚠️ マルチターン会話の制約: セマンティックキャッシュは messages 配列の最後のユーザーメッセージのみを類似度判定に使用します。会話の文脈全体は考慮されません。そのため、同じ質問でも会話の流れが異なれば意図が異なる場合があり、キャッシュが不適切にヒットする可能性があります。精度を重視する場合は閾値を 0.95 以上に設定するか、マルチターン会話が多いワークロードではセマンティックキャッシュを無効にすることを検討してください。

保存されないレスポンス

以下のレスポンスはセマンティックキャッシュに保存されません。

  • HTTP 4xx / 5xx エラーレスポンス
  • finish_reason"length"(出力が途中で切れたレスポンス)
  • レスポンス本文が80文字未満の短いレスポンス
💡 Smart Routing との併用: Smart Routing が有効な場合、セマンティックキャッシュのマッチングにはルーティング後のモデル名が使用されます。例えば gpt-4oclaude-sonnet-4-20250514 にルーティングされた場合、キャッシュのマッチングは claude-sonnet-4-20250514 で行われます。
ℹ️ Vectorize の特性: 新しくキャッシュされたベクトルが検索可能になるまで、最大数分かかる場合があります(eventual consistency)。これはCloudflare Vectorizeの仕様によるものです。

15. Agent Trace(エージェント・トレース)NEW

Agent Traceは、AIエージェントがqzira経由でリクエストを処理する際の内部処理ステップを可視化するデバッグ・監視機能です。Chrome DevToolsのネットワークパネルに似たWaterfallビューで、どのステップにどれだけ時間がかかったかを確認できます。

対象プラン

Free Pro Business Scale

表示されるトレースステップ

ステップ名 説明
pii_shieldPII(個人情報)スキャン処理時間
cache_checkレスポンスキャッシュ・セマンティックキャッシュの照合時間
provider_selectSmart RoutingまたはManualによるプロバイダー選択時間
api_callAIプロバイダーへの実際のAPI呼び出し時間(TTFB含む)
streamingストリーミングレスポンスの転送時間
usage_record使用量のD1/KV記録時間

ダッシュボードでの確認方法

  1. ダッシュボード左メニュー「エージェント・トレース」をクリック
  2. リクエスト一覧から確認したいトレースを選択
  3. Waterfallバーをクリックして詳細ステップを展開
  4. 各ステップの開始時刻・処理時間(ms)・結果(hit/miss等)を確認

外部トレースIDの付与

Claude CodeやCursorなど外部ツールからのリクエストに独自のトレースIDを付与することで、アプリケーション側のログと紐付けが可能です。

# リクエストヘッダーにトレースIDを付与
curl https://api.qzira.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_QZIRA_KEY" \
  -H "X-Trace-Id: my-agent-session-20260226-001" \
  -d '{"model":"gpt-4o","messages":[{"role":"user","content":"Hello"}]}'

外部IDが付与されたトレースには、ダッシュボード上で [EXT] バッジが表示されます。

データ保持期間・注意事項

  • トレースデータの保持期間は24時間です(日次CRONで自動削除)。
  • プロンプト内容・レスポンス内容はトレースに保存されません(プライバシー保護のため)。
  • トレース書き込みはノンブロッキングで行われ、レスポンス速度への影響はありません。
  • フィーチャートグルからAgent Traceをオン/オフ切り替えできます(デフォルト: オフ)。

活用例

課題 Agent Traceでの確認ポイント
レスポンスが遅いapi_call のTTFBが長ければプロバイダー問題、pii_shield が長ければPIIスキャンの最適化余地あり
キャッシュが効いていないcache_check の結果が常に miss → セマンティックキャッシュの閾値調整を検討
エージェント動作の把握外部トレースIDでセッション単位のリクエスト系列を追跡

16. シークレット・シールド NEW

シークレット・シールドは、AIプロバイダーへ送信するリクエストに含まれる機密情報・個人情報(PII)を自動検出・マスキングする機能です。APIキー、クレジットカード番号、マイナンバーなどを正規表現ルールで定義し、プロバイダーに届く前に自動的に置換します。

対象プラン

Free Pro Business Scale

処理フロー

リクエスト受信(proxy.routes.ts)
  ↓
[シークレット・シールド ON の場合]
  ├─ D1からカスタムルール取得(正規表現リスト)
  ├─ messages[] の全テキストをスキャン
  ├─ マッチ箇所をマスキング文字列に置換
  └─ フェイルオープン(エラー時もリクエスト継続)
  ↓
マスキング済みメッセージをAIプロバイダーへ送信
  ↓
使用ログもマスキング済み内容で記録

マスキング方式

方式 例(入力) 例(出力) 用途
完全マスク[email protected][REDACTED]メール・JWT・マイナンバー
先頭残すsk-ant-api03-xxxxsk-ant-***APIキー種別の識別が必要な場合
末尾残す4111-1111-1111-1234****-1234クレジットカード下4桁確認用

プリセットレシピ(11件)

よく使われるパターンをワンクリックで適用できます。

ラベル マスク方式
AWS アクセスキー先頭残す(AKIA***MPLE)
AWS シークレットキー先頭残す
GCP APIキー先頭残す(AIza***)
OpenAI APIキー先頭残す(sk-***)
Anthropic APIキー先頭残す(sk-ant-***)
クレジットカード番号末尾残す(****-1234)
電話番号(日本)末尾残す(0***-1234)
メールアドレス完全マスク([REDACTED])
JWT Token完全マスク([REDACTED])
マイナンバー完全マスク
郵便番号(日本)完全マスク

設定手順

  1. ダッシュボード左メニュー「シークレット・シールド」をクリック
  2. フィーチャー管理」でシークレット・シールドをオンにする
  3. プリセットから選ぶか、カスタムルールを追加
  4. 「何を隠したいか」を日本語で入力 → ✨ AIで正規表現を生成(Workers AI使用)
  5. 生成された正規表現を確認・編集し、マスキング方式を選択して保存
  6. テスト欄にサンプルテキストを入力して動作確認

注意事項

  • ルール上限は20件/ユーザーです。
  • マスキング処理でエラーが発生しても、リクエストは継続されます(フェイルオープン)。マスキングが確実に必要な場合はプロバイダー側のアクセス制御との併用を推奨します。
  • マスキングはリクエストの messages[] フィールドにのみ適用されます。カスタムヘッダー等は対象外です。
  • 使用ログにはマスキング済みの内容が記録されます。元のテキストはqziraに保存されません。

17. 自動モデルルーティング(Smart Routing)NEW

Smart Routingは、リクエストされたモデルを自動的に最適なプロバイダーのモデルに振り分ける機能です(Scale プラン専用)。コスト最適化やレイテンシ改善を目的として、複数プロバイダーを効率的に活用できます。

⚠️ Smart Routingはデフォルトで無効です。AIエージェントがモデル固有の挙動(JSON出力形式やツール呼び出しの仕様など)に依存している場合、モデルが切り替わることで予期しない動作が発生する可能性があります。用途を十分に理解した上で有効化してください。
ℹ️ ルーティングの仕組み: Smart Routing は事前定義されたモデルマッピングテーブルに基づいて代替プロバイダーを選択します。モデル品質の自動判定(Tier分け)は行いません。フェイルオーバー(セクション16)も同じマッピングテーブルの順序に従って切り替え先を決定します。マッピングに存在しないモデルを指定した場合、ルーティングは発動せず元のプロバイダーにそのままリクエストされます。

3つのルーティング戦略

戦略説明推奨ケース
コスト最適化(デフォルト) 同等性能のモデルの中で最もトークン単価が安いプロバイダーを自動選択 バッチ処理、大量リクエスト、コスト重視のワークロード
レイテンシ最適化 応答速度が最も速いプロバイダーを優先的に選択 リアルタイム応答、チャットボット、ユーザー対面アプリ
ラウンドロビン 有効な全プロバイダーに均等にリクエストを分散 レート制限の分散、プロバイダー負荷分散

メリット

  • コスト最適化: 同等性能で安価なプロバイダーへ自動切替(最大30-50%削減の可能性)
  • レート制限回避: 複数プロバイダーに分散することでスロットリングを軽減
  • コード変更不要: ダッシュボードでトグルONにするだけで有効化

デメリット・注意点

  • モデル固有の挙動(出力形式、ツール呼び出し仕様)に依存するエージェントでは予期しない動作が発生する可能性
  • プロバイダー間でレスポンス品質にばらつきが出る場合がある
  • セマンティックキャッシュ使用時、ルーティング後のモデル名でマッチングが行われる点に注意

設定方法

  1. ダッシュボードの「機能設定」ページを開く
  2. 「自動モデル・ルーティング」のトグルをONにする
  3. ルーティング戦略(コスト最適化 / レイテンシ最適化 / ラウンドロビン)を選択
  4. 2つ以上のプロバイダーのAPIキーが登録・有効化されていることを確認
💡 フェイルオーバーとの違い: フェイルオーバーはプロバイダー障害時の緊急切替、Smart Routingは正常時の最適配分です。両方を有効にすると、Smart Routingで選ばれたプロバイダーが障害の場合にフェイルオーバーが発動します。

18. フェイルオーバー詳細NEW

フェイルオーバーは、AIプロバイダーがエラーを返した際に、自動的に別のプロバイダーの同等モデルに切り替えてリクエストを再送する機能です(Starter プラン以上)。

⚠️ フェイルオーバーはデフォルトで無効です。モデルが切り替わることで、AIエージェントの動作に影響が出る可能性があります。複数プロバイダーのAPIキーを登録・有効化した上で、ダッシュボードから明示的に有効化してください。

プラン別リトライ回数

プランリトライ回数429対応備考
Free0(無効)フェイルオーバーなし
Starter2回5xx エラーのみ対象
Pro3回5xx + 429 対応
Business3回5xx + 429 対応
Scale5回5xx + 429 対応

動作フロー

ℹ️ リクエスト → プロバイダーA(5xx/429エラー)
→ リトライ1: プロバイダーB の同等モデルに自動切替
→ リトライ2: プロバイダーC の同等モデルに自動切替
→ 全プロバイダー失敗: 最後のエラーレスポンスを返却

レスポンスヘッダーで切替状況を確認できます:
X-Gateway-Failover-From: 元のプロバイダー
X-Gateway-Failover-To: 切替先のプロバイダー
X-Gateway-Retries: リトライ回数

フェイルオーバー対象外

  • 400 系エラー(Bad Request, 認証エラーなど): クライアント側の問題のため、別プロバイダーでも同じ結果になる
  • 404 モデル不明: 指定されたモデルが存在しない場合
  • 有効なプロバイダーが1つのみ: 切替先がない場合

設定方法

  1. 2つ以上のプロバイダーのAPIキーを登録・有効化
  2. ダッシュボードの「機能設定」ページを開く
  3. 「フェイルオーバー」のトグルをONにする
💡 モデルティア: フェイルオーバーは同等クラスのモデルに切り替えます。例えば gpt-4o(flagship)が失敗した場合、claude-sonnet-4-20250514(flagship)に切り替わります。gpt-4o-mini(economy)には切り替わりません。

責任分界と免責事項

qziraはBYOK(Bring Your Own Key)方式のAPIゲートウェイです。各領域の責任範囲を明確にしています。

責任分界表

領域qzira の責任ユーザーの責任
APIキー管理 暗号化保存、プロキシ時の安全な取扱い 各プロバイダーのAPIキー取得・管理・更新
リクエスト中継 正確なプロキシ処理、形式変換 リクエスト内容の適切性、プロバイダー利用規約の遵守
コスト管理 使用量の可視化、予算アラート、自動停止機能の提供 予算設定、コスト管理機能の適切な設定・運用
AI生成物 —(関与なし) 生成物の内容確認、利用判断、第三者への影響
プロバイダー障害 フェイルオーバーによる影響軽減(対応プランのみ) プロバイダー自体のSLA・障害はプロバイダーの責任
データ保護 通信の暗号化、ログの適切な管理 送信データの内容管理(個人情報・機密情報の取扱い)
AIエージェント —(関与なし) AIエージェントの設定・監視・制御
プロバイダー規約 —(関与なし) 各プロバイダーの利用規約・ポリシーの遵守
🚨 重要: qziraはリクエストの中継サービスであり、AIの生成物の内容について責任を負いません。生成物の正確性・適切性の確認はユーザーの責任です。

コスト管理機能の限界

qziraの予算アラート・自動停止機能は、コスト管理を支援するものです。以下の点にご注意ください:

  • 予算アラートはリクエスト数ベースで、実際のプロバイダー課金額とは異なる場合があります
  • 自動停止は次のリクエスト受信時に判定されるため、既に処理中のリクエストは停止されません
  • ネットワーク遅延やシステム障害時に、アラート・停止の発動が遅れる可能性があります
  • コスト管理機能は「ベストエフォート」で提供されます
  • 予算使用量の集計は一定間隔で更新されるため、集計タイミングにより設定上限を超過する場合があります

プラン別の保護レベル

保護機能FreeStarterProBusinessScale
月間リクエスト上限
リトライ(自動再試行)
フェイルオーバー
予算アラート通知
日次リクエスト上限
予算上限・自動停止
レスポンスキャッシュ
セマンティックキャッシュ
APIキー別予算
アクセス制御(Per-Key)NEW
Smart RoutingNEW
優先サポート

AIエージェント利用時の注意

AIエージェント(Cursor、Claude Code、Devin等)は自律的にAPIリクエストを送信します。エージェントの動作はユーザーの責任範囲となりますので、以下の対策を推奨します:

  • 日次リクエスト上限を設定する(Starter以上)
  • 自動停止を有効にする(Pro以上)
  • 定期的にダッシュボードで使用状況を確認する
  • 夜間の自動実行タスクには特に注意する

SLA(サービスレベル)

qziraは可用性の維持に努めていますが、現時点ではSLA保証は提供していません。インフラの安全性確保のため、事前通知なくサービスを一時停止する場合があります。詳細は利用規約をご確認ください。


よくある質問(FAQ)

料金について

Q. Freeプランに期間制限はありますか?

いいえ、Freeプランは期間制限なく利用できます。月間1,000リクエストまで、1プロバイダーの有効化が可能です。

Q. qziraの料金以外にコストはかかりますか?

はい。qziraはBYOK方式のため、各AIプロバイダー(OpenAI、Anthropic、Google AI、DeepSeek)の利用料金は別途発生します。qziraの月額料金はゲートウェイ機能の利用料です。

Q. プラン変更はいつでもできますか?

はい、ダッシュボードからいつでもアップグレード・ダウングレードが可能です。アップグレードは即座に反映され、ダウングレードは現在の請求期間の終了時に反映されます。なお、ダウングレードは月1回までの制限があります。

セキュリティについて

Q. 登録したAPIキーはどのように保護されていますか?

APIキーは暗号化して保存されます。通信はすべてHTTPS(TLS 1.3)で暗号化されており、qziraのスタッフがAPIキーの平文を閲覧することはできません。

Q. qziraはリクエスト内容を学習に使用しますか?

いいえ。qziraはリクエスト内容をAIモデルの学習やサービス改善の目的で使用しません。データはリクエストの中継と使用量の計測のみに使用されます。

Q. データはどの地域に保存されますか?

qziraのインフラはCloudflareのグローバルネットワーク上で稼働しています。ユーザーデータはCloudflareのデータセンターに保存されます。

Q. APIキーが漏洩した場合はどうすればいいですか?

ダッシュボードの「APIキー」画面から、該当キーのローテーション(再発行)を即座に実行してください。旧キーは即座に無効化されます。詳しくはセクション11をご確認ください。

サービスについて

Q. qziraがダウンした場合、APIは使えなくなりますか?

qzira経由のリクエストは影響を受けます。即時切り戻し(Base URLとAPIキーを元に戻す)により、プロバイダーへの直接アクセスに切り替えることが可能です。

Q. 対応していないモデルを指定するとどうなりますか?

400 Invalid model エラーが返されます。対応モデル一覧はコード移行セクションをご確認ください。

Q. ストリーミングは全プロバイダーで使えますか?

はい。OpenAI、Anthropic、Google AI、DeepSeekすべてのプロバイダーでSSE形式のストリーミングに対応しています。全プランで利用可能です。

Q. レート制限に引っかかった場合はどうすればいいですか?

qziraのレート制限(429エラー)が発生した場合は、少し時間を置いてからリトライしてください。Starter以上のプランでは、qziraが自動リトライを代行します。

Q. アクセス制御でブロックされたリクエストは課金されますか?

いいえ。アクセス制御チェックはプロバイダーAPIへのリクエスト送信に行われるため、ブロックされたリクエストに対してプロバイダーの課金は発生しません。qziraの使用量カウンターにも加算されません。

Q. アクセス制御はChat Completions APIとResponses APIの両方に適用されますか?

はい。アクセス制御はリクエストのルーティング前にチェックされるため、Chat Completions API(/v1/chat/completions)とResponses API(/v1/responses)の両方に適用されます。

Q. セマンティックキャッシュとレスポンスキャッシュの違いは何ですか?

レスポンスキャッシュ(セクション12)はリクエストが完全に一致した場合にのみヒットします。セマンティックキャッシュ(セクション15)はAIベクトル検索により、表現が異なっていても意味が似たリクエストを検出してキャッシュを再利用します。両方を併用することで、最大限のトークン節約が可能です。

Q. セマンティックキャッシュで誤った応答が返されることはありますか?

類似度閾値を適切に設定することで誤ヒットを最小限に抑えられます。推奨値は0.92です。精度を重視する場合は0.95以上に設定してください。また、ストリーミングリクエストやマルチターン会話は自動的に対象外となるため、AIエージェントの対話型利用では安全に使用できます。

Q. リクエストログはいつまで保持されますか?

プランに応じた期間で自動保持されます: Free(3日)、Starter(30日)、Pro(30日)、Business(90日)、Scale(365日)。保持期間を過ぎたログは自動削除され、復元できません。長期保存が必要な場合はCSVエクスポートをご利用ください。

Q. 使用量データをエクスポートできますか?

はい。ダッシュボードの「リクエストログ」セクションからCSV形式でエクスポートできます。モデル、プロバイダー、トークン数、レイテンシなどの情報が含まれます。全プランで利用可能です。

解約について

Q. 解約するとデータはどうなりますか?

アカウント削除を行うと、登録されたAPIキー、使用履歴、設定情報はすべて削除されます。この操作は取り消せません。

Q. 解約後も請求は発生しますか?

有料プランの場合、解約操作を行うと現在の請求期間の終了時にFreeプランにダウングレードされます。日割り返金には対応していません。

Smart Routing・フェイルオーバーについて

Q. Smart Routing(自動モデルルーティング)とフェイルオーバーの違いは何ですか?

Smart Routingは正常時の最適配分です。コスト・レイテンシ・負荷分散の観点から、リクエストを最適なプロバイダーに振り分けます(Scale専用)。フェイルオーバーは障害時の緊急切替です。プロバイダーが5xxエラーや429エラーを返した際に、自動的に別プロバイダーの同等モデルに切り替えます(Starter以上)。両方を有効にすると、Smart Routingで選ばれたプロバイダーが障害の場合にフェイルオーバーが発動します。

Q. フェイルオーバーでモデルが切り替わると、AIエージェントの動作に影響はありますか?

影響が出る可能性があります。プロバイダーによってJSON出力形式やツール呼び出しの仕様が異なるため、モデル固有の挙動に依存するエージェントでは予期しない動作が発生することがあります。このため、フェイルオーバーはデフォルトで無効に設定されています。有効化する前に、複数プロバイダーでの動作を確認することを推奨します。

Tool Calling(関数呼び出し)について

Q. qziraはプロバイダー間のTool Calling形式の違いを自動変換しますか?

はい。qziraはOpenAI形式の tools / tool_choice パラメータを受け取り、各プロバイダーのネイティブ形式に自動変換します。Cursor、Cline、Roo Code などのAIコーディングツールが送信するTool Calling リクエストは、OpenAI・Anthropic・Google AI のいずれのプロバイダーでも追加設定なしで動作します。

Q. Tool Callingの自動変換で対応していない形式はありますか?

現在の変換は OpenAI 互換形式(tools 配列 + function 定義)を基準としています。Anthropicネイティブの tool_use 形式やGoogleネイティブの function_declarations 形式で直接送信した場合、そのプロバイダーにはそのまま転送されますが、フェイルオーバーやSmart Routingで別プロバイダーに切り替わった際に変換が正しく行われない場合があります。OpenAI互換形式で統一して送信することを推奨します。

画像・マルチモーダルについて

Q. 画像を含むリクエストはqzira経由で送信できますか?

はい。qziraはリクエストボディをパススルー(そのまま中継)するため、各モデルが対応している画像入力(Base64エンコード / URL指定)をそのまま送信できます。

Q. OpenAI形式で送った画像を、Anthropicの形式に自動変換してくれますか?

いいえ。プロバイダー間での画像フォーマットの自動変換機能はありません。OpenAI形式(image_url)で画像を含むリクエストをAnthropicモデルに送信した場合、フォーマット不一致でエラーになります。画像を含むリクエストでは、送信先プロバイダーの仕様に合わせたフォーマットで送信してください。フェイルオーバーで別プロバイダーに切り替わった場合も同様に、画像部分は変換されない点にご注意ください。

緊急時の切り戻し(ロールバック)

Q. qziraの障害時に、最短で復旧する方法は?

以下の2点を変更するだけで、10秒でプロバイダーへの直接通信に復旧できます。

  1. Base URL: 削除(デフォルトに戻す)、または各プロバイダーの公式URLに変更
  2. API Key: gw_... から、各プロバイダー発行の元のキー(sk-... など)に差し替え
⚠️ BYOK方式のため、元のプロバイダーAPIキーは必ず手元に控えておいてください。qziraにキーを登録した後も、プロバイダーのダッシュボードからいつでも確認・再発行が可能です。

qziraはBase URLを変更するだけで導入・切り戻しができる設計です。SDKやコードの大幅な書き換えは不要です。詳しくはセクション16(責任分界と免責事項)の「即時切り戻し方法」をご確認ください。

Agent Traceについて

Q. Agent Traceはどのプランで使えますか?

Agent TraceはScaleプラン専用の機能です。フィーチャートグルからオン/オフを切り替えられます(デフォルト: オフ)。トレースデータは24時間保持後に自動削除されます。

Q. Agent Traceでプロンプトの内容は記録されますか?

シークレット・シールドについて

Q. シークレット・シールドはどのプランで使えますか?

シークレット・シールドはScaleプラン専用の機能です。フィーチャートグルからオン/オフを切り替えられます(デフォルト: オフ)。

Q. マスキングに失敗した場合、リクエストは止まりますか?

いいえ。マスキングエラーが発生してもリクエストはそのまま継続されます(フェイルオープン設計)。機密情報の送信を確実に防ぎたい場合は、Per-Keyアクセス制御やプロバイダー側の制限との併用を推奨します。

Q. マスキングされた元のテキストはどこかに保存されますか?

いいえ。マスキング処理はAPIリクエスト時にメモリ上のみで行われます。使用ログにはマスキング済みの内容のみ記録され、元テキストはどこにも保存されません。

いいえ。プロンプト内容・レスポンス内容はトレースに保存されません。記録されるのは処理ステップ名・処理時間(ms)・キャッシュヒット有無などのメタデータのみです。


トラブルシューティング

よくあるエラー

エラー原因対処法
401 Unauthorized APIキーが無効または未設定 gw_ で始まるqzira APIキーを確認。ローテーション後は新しいキーに更新が必要
400 Provider not configured プロバイダーのAPIキーが未登録 ダッシュボードでプロバイダーAPIキーを登録
400 Invalid model 指定されたモデル名が認識できない 対応モデル一覧を確認し、正しいモデル名を指定
403 Provider not enabled プロバイダーが有効化されていない ダッシュボードでプロバイダーを有効化
403 provider_not_allowed APIキーのプロバイダー制限に違反しています。ダッシュボードのアクセス制限設定を確認してください。
403 model_not_allowed APIキーのモデル制限に違反しています。許可モデルリストにリクエスト先モデルが含まれているか確認してください。
403 Budget Exceeded 予算上限に到達 ダッシュボードで上限を引き上げ or リセットを待つ
403 Plan limit exceeded プランの月間リクエスト上限に到達 上位プランにアップグレード or 翌月のリセットを待つ
429 Rate Limited レート制限に到達 少し待ってからリトライ(Starter以上は自動リトライ)
502 Bad Gateway プロバイダーからの応答が不正 時間を置いてリトライ。フェイルオーバーが自動発動(Starter以上)
503 Service Unavailable プロバイダー側が一時的に利用不可 フェイルオーバーが自動発動(Starter以上)。続く場合はプロバイダーのステータスページを確認
feature_not_available Agent Traceが有効でない ScaleプランかつフィーチャートグルでAgent Traceをオンにする必要があります
feature_not_available(シークレット・シールド) シークレット・シールドが有効でない Scaleプランかつフィーチャートグルでシークレットシールドをオンにする必要があります

即時切り戻し方法

qzira経由で問題が発生した場合、Base URLとAPIキーを元に戻すだけで即座に直接呼び出しに切り替えられます。

# qzira経由 → 直接呼び出しに切り戻し
client = OpenAI(
    api_key="sk-xxxxxxxx",           # 元のAPIキーに戻す
    # base_url を削除(デフォルトに戻る)
)

環境変数で管理している場合は、.env ファイルの値を切り替えるだけです:

# QZIRA_API_KEY=gw_xxxxxxxx          ← コメントアウトで切り戻し
# QZIRA_BASE_URL=https://api.qzira.com/v1
OPENAI_API_KEY=sk-xxxxxxxx            # ← 元のキーがそのまま使える


サポート

ご質問・不具合報告は以下よりお問い合わせください。