TokenLab

核心指南

API 格式

選擇 Chat Completions、Responses、Messages 或 Gemini

一把 TokenLab API Key 可用於四種 API 格式。優先保留應用程式現有的格式,並在模型頁或 GET /v1/models/{model} 檢查 tokenlab.accepted_request_formats;並非每個模型都支援四種格式。

Chat Completions

POST /v1/chat/completions · openai_chat_completions

適合既有 OpenAI 相容聊天客戶端、訊息歷史、串流和模型支援的函式呼叫。其他格式的專用欄位不保證可用。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["TOKENLAB_API_KEY"],
    base_url="https://api.tokenlab.sh/v1",
)

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

print(response.choices[0].message.content)

Responses

POST /v1/responses · openai_responses

僅在模型的 accepted_request_formats 包含 openai_responses 時使用。Responses 提供建立、讀取、壓縮、刪除、串流、WebSocket 建立與延續,以及受支援模型的背景回應。刪除已儲存回應不會取消進行中的回應。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["TOKENLAB_API_KEY"],
    base_url="https://api.tokenlab.sh/v1",
)

response = client.responses.create(
    model="gpt-5.6-terra",
    input="Explain why the sky is blue in two sentences.",
)

print(response.output_text)

Anthropic Messages

POST /v1/messages · anthropic_messages

Anthropic SDK 的 base URL 使用 TokenLab 主機,不加 /v1。Claude 的工具呼叫、thinking 區塊和提示快取欄位應保留在 Messages 格式中。

import os
from anthropic import Anthropic

client = Anthropic(
    api_key=os.environ["TOKENLAB_API_KEY"],
    base_url="https://api.tokenlab.sh",
)

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

print(message.content[0].text)

Gemini

POST /v1beta/models/:model:generateContent · gemini_generate_content

適合既有 Gemini contents、parts、檔案、快取和工具。支援 ProtoJSON lowerCamelCase 與原始 snake_case 欄位名稱,但不要在同一請求中同時傳送同一欄位的兩種拼寫。

curl "https://api.tokenlab.sh/v1beta/models/gemini-3.5-flash:generateContent" \
  -H "Authorization: Bearer $TOKENLAB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contents": [{"parts": [{"text": "Hello!"}]}]
  }'

保持對話格式一致

四種格式對對話狀態和工具結果的表示不同。完整對話應使用同一格式;遷移歷史時,先在應用程式中轉換並驗證。

未知欄位

傳送成功或欄位被轉交不代表模型支援它。只依賴所選模型明確列出的功能,並處理不支援欄位的錯誤。

相關文件

本頁內容