API リファレンス

Chat Completions

チャット補完の作成、ストリーミング応答、ツール呼び出し、画像処理 — すべて200以上のモデルを備えた単一のOpenAI互換エンドポイントを通じて行えます。

エンドポイント

http
POST https://api.tokspan.com/v1/chat/completions

クイック例

すべてのモデルで同じ API。言語を選択してください:

python
from openai import OpenAI
client = OpenAI(api_key="sk-your-key", base_url="https://api.tokspan.com/v1")
response = client.chat.completions.create(model="gpt-4o", messages=[{"role":"user","content":"Hello"}])
print(response.choices[0].message.content)
javascript
import OpenAI from 'openai';
const client = new OpenAI({ apiKey: process.env.TOKSPAN_API_KEY, baseURL: 'https://api.tokspan.com/v1' });
const response = await client.chat.completions.create({ model: 'gpt-4o', messages: [{ role: 'user', content: 'Hello' }] });
console.log(response.choices[0].message.content);
shell
curl -X POST "https://api.tokspan.com/v1/chat/completions" \
  -H "Authorization: Bearer sk-your-key" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-4o","messages":[{"role":"user","content":"Hello"}]}'

リクエストボディ

パラメータ必須説明
modelstringはいモデル ID(例:gpt-4oclaude-opus-4-8)。全カタログは モデル をご参照ください。
messagesarrayはいrolesystem / user / assistant / tool)と content を持つメッセージオブジェクトの配列。
temperaturenumberいいえサンプリング温度(0~2)。高いほどランダムになります。デフォルト値はモデルにより異なります。
max_tokensintegerいいえ生成する最大トークン数。省略時は、残りコンテキストに基づいてモデルが判断します。
streambooleanいいえSSE ストリーミングを有効にします。デフォルト:false。下記の ストリーミング をご参照ください。
top_pnumberいいえ核サンプリング — 温度パラメータの代替(0~1)。
stopstring / arrayいいえモデルが生成を停止する1つ以上の文字列。
frequency_penaltynumberいいえトークンの繰り返しを抑制します(-2.0~2.0)。
presence_penaltynumberいいえ新しいトピックの出現確率を高めます(-2.0~2.0)。
seedintegerいいえ再現可能な出力のための決定論的サンプリングシード。
response_formatobjectいいえJSON 出力を強制します:{"type": "json_object"} または {"type": "json_schema", "json_schema": {...}}
toolsarrayいいえ関数呼び出し用のツール/関数定義。下記の ツール呼び出し をご参照ください。
tool_choicestring / objectいいえツール選択の制御:"auto""none""required"、または特定のツールオブジェクト。
nintegerいいえ生成する補完の数。デフォルト:1
userstringいいえ不正利用監視のためのエンドユーザー識別子。

リクエストとレスポンスの例

json — Request
{
  "model": "gpt-4o",
  "messages": [
    { "role": "system", "content": "You are a helpful assistant." },
    { "role": "user", "content": "What is the capital of France?" }
  ],
  "temperature": 0.7,
  "max_tokens": 256
}
json — Response
{
  "id": "chatcmpl-abc123",
  "object": "chat.completion",
  "created": 1700000000,
  "model": "gpt-4o",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "The capital of France is Paris."
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 8,
    "total_tokens": 33
  }
}

レスポンスフィールド

フィールド説明
idstring一意のリクエスト識別子 — サポート問い合わせ時に使用します
objectstring常に "chat.completion"
createdintegerレスポンスが生成された Unix タイムスタンプ(秒)
modelstringリクエストを実際に処理したモデル(自動フェイルオーバーやルーティングが有効な場合に有用です)
choicesarray補完選択肢の配列。各要素は indexmessagerole + content)、finish_reasonstop / length / tool_calls / content_filter)を含みます
usageobjectトークン数:prompt_tokenscompletion_tokenstotal_tokens。下記の トークン使用量 をご参照ください。

トークン使用量について

usage オブジェクトは課金対象の消費トークンを報告します:

  • prompt_tokens — 入力メッセージ内のトークン(システムプロンプト、履歴、トークン換算された添付メディアを含む)
  • completion_tokens — レスポンスでモデルが生成したトークン
  • total_tokens — プロンプトトークンと補完トークンの合計 = 課金対象

マルチモーダル入力(画像、音声)の場合、プロバイダーはメディアをトークン換算します。GPT-4o では低解像度画像で約 85 トークン、高解像度で約 170 以上とカウントされます。ダッシュボードでは、リクエストごとの最終トークン数とコストが表示されます。

ストリーミング(SSE)

stream: true を設定すると、モデルがトークンを生成するたびにリアルタイムで受信できます。TokSpan は標準の Server-Sent Events(SSE) を使用しており、OpenAI ストリーミング形式と完全に互換性があります。

python
from openai import OpenAI

client = OpenAI(api_key="sk-your-key", base_url="https://api.tokspan.com/v1")

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="", flush=True)
shell
curl -X POST "https://api.tokspan.com/v1/chat/completions" \
  -H "Authorization: Bearer sk-your-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-4o",
    "messages": [{"role": "user", "content": "Tell me a story."}],
    "stream": true
  }'

SSE チャンク形式

各チャンクは data: で始まる JSON オブジェクトです。ストリームは data: [DONE] で終了します:

SSE stream
data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"delta":{"content":"Hello"},"index":0}]}

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"delta":{"content":" world"},"index":0}]}

data: {"id":"chatcmpl-abc","object":"chat.completion.chunk","choices":[{"delta":{},"finish_reason":"stop","index":0}]}

data: [DONE]

各チャンクには deltamessage ではない)オブジェクトが含まれます。content フィールドは最終チャンクでは空または存在しない場合があります。最終チャンクでは finish_reason が設定され、delta は空になります。

ツール呼び出しを伴うストリーミング

ストリーミング中にモデルが関数を呼び出す場合、tool_calls を含むツール呼び出しチャンクがデルタで到着します — 関数名と引数は段階的にストリーミングされます。特定の tool_call_id のすべてのチャンクを蓄積して完全な関数呼び出しを組み立て、role: "tool" メッセージを返送してください。

再接続:SSE ストリームはネットワークの問題で切断される可能性があります。本番環境では、再接続時にジッター付き指数バックオフを実装してください。同じリクエストを再送信してください — ストリームは最初から再開されます(SSE ストリームは途中から再開できません)。

ツール / 関数呼び出し

TokSpan は、すべての対応モデルで OpenAI 互換の関数呼び出しをサポートしています。リクエストでツールを定義すると、モデルはコードで実行可能な構造化 JSON 関数呼び出しで応答します。

ツールの定義

関数定義を含む tools 配列を渡します。各関数には namedescription、および JSON Schema の parameters が必要です:

json
"tools": [{
  "type": "function",
  "function": {
    "name": "get_weather",
    "description": "Get current weather for a city",
    "parameters": {
      "type": "object",
      "properties": {
        "city": { "type": "string" }
      },
      "required": ["city"]
    }
  }
}]

ツール呼び出しを含むモデルレスポンス

モデルが関数を呼び出すと判断した場合、レスポンスにはテキストコンテンツではなく tool_calls が含まれます:

json
{
  "role": "assistant",
  "tool_calls": [{
    "id": "call_abc123",
    "type": "function",
    "function": {
      "name": "get_weather",
      "arguments": "{\"city\": \"Paris\"}"
    }
  }]
}

ツール呼び出しの完全なフロー

  1. リクエストを送信し、tools 定義を含めます
  2. レスポンスで tool_calls を受信 — 関数名と引数を抽出
  3. コード内で関数を実行(天気 API の呼び出し、データベースへのクエリなど)
  4. 結果を返送しますrole: "tool" のメッセージとして送り返し、tool_call_id を参照します
  5. ツール結果を組み込んだ自然言語の回答でモデルが応答

対応モデル

ツール呼び出しは以下のモデルでサポートされています:GPT-4o、GPT-4.1、Claude Opus 4.8、Claude Sonnet 4.6、Gemini 2.5 Pro、Gemini 2.5 Flash、DeepSeek V3、Mistral Large 3、Llama 4、Qwen3 ほか。モデルごとの機能詳細は モデルページ をご参照ください。

プロのヒント:ツール呼び出しの信頼性を最大化するには、構造化出力で定評のあるモデル(GPT-4o および Claude Opus 4.8 が常に最高評価)を使用してください。tool_choice: "required" を使用して、モデルに常にツールを呼び出させることもできます(テキスト応答を例外とすべきエージェントパイプラインで有用です)。

ビジョン / 画像入力

GPT-4o や Claude 4 Vision などのマルチモーダルモデルでは、content 配列に画像を URL または base64 エンコードデータとして含めます:

json
{
  "model": "gpt-4o",
  "messages": [{
    "role": "user",
    "content": [
      { "type": "text", "text": "What's in this image?" },
      { "type": "image_url", "image_url": { "url": "https://example.com/photo.jpg" } }
    ]
  }]
}

サポートされている画像形式:PNG、JPEG、WebP、GIF(非アニメーション)。最大画像サイズはモデルにより異なります — 通常は1画像あたり 20MB です。Claude モデルでは、PDF ドキュメントもビジュアル入力としてサポートされています。

JSON モード / 構造化出力

response_format を設定してモデルに有効な JSON を返させます:

  • JSON モード:{"type": "json_object"} — モデルが有効な JSON を返します。システムプロンプトに「JSON」という単語を含める必要があります。
  • 構造化出力:{"type": "json_schema", "json_schema": {...}} — モデルが指定したスキーマに完全に一致する JSON を返します。GPT-4o 以降のモデルでサポートされています。
ストリーミング + JSON:response_format を設定してストリーミングする場合、モデルは JSON トークンをストリーミングします。すべてのチャンクを組み立てた後の完全なレスポンスが有効な JSON になります — ストリーム完了後に検証してください。