ChatGPT API ドキュメント:クイックリファレンスと最初の呼び出し
ほとんどのチャットAPIは、ChatGPT APIで普及したリクエスト形式を共有しています。このページは、本サイト上の互換エンドポイントの短縮リファレンスであり、コピー&ペースト可能な例が含まれています。
最終更新

まとめ
- ベースURL https://api.gptsemfiltro.com/v1, ベアートークン認証、モデルIDはuncensored。
- チャット補完、レスポンス、モデルリストの3つのメソッド;残高には独自のエンドポイントがあります。
- ストリーミング、ツール呼び出し、JSON モードをサポートしています。コンテキストは 100,000 トークンです。
- 429エラーにはコードが含まれます:rate_limitedまたはconcurrency。
このページで扱う内容
chatgpt api documentationをお探しの場合、OpenAI 自身のモデルのための OpenAI 公式ドキュメントをご覧になることをお勧めします。このページは別のものです:このサイトでホストされている OpenAI 互換 API 用の実用的なリファレンスです。このモデルは uncensored というオープンウェイトモデルを実行しており、法的な成人向け利用のためにコンテンツ拒否なしで回答するように調整されています。これは OpenAI または他のベンダーの公式 API ではありません。
リクエストとレスポンスの形式は馴染み深いOpenAI形式に従っているため、ベースURLとキーを変更すれば公式SDKとほとんどのツールが動作します。完全なリファレンスはAPIドキュメントにあります。このページでは、実行可能な例付きのクイックバージョンを提供します。
接続の基本と最初の呼び出し
接続の基本
| 項目 | 内容 |
|---|---|
| ベース URL | https://api.gptsemfiltro.com/v1 |
| 認証 | Authorization: Bearer YOUR_KEY |
| モデル ID | uncensored |
| チャットエンドポイント | POST /v1/chat/completions |
| レスポンスエンドポイント | POST /v1/responses |
| モデル一覧 | GET /v1/models |
| 残高 | GET /v1/balanceまたはGET /v1/dashboard/billing/credit_grants |
| 最大リクエストボディ | 8 MB |
| コンテキストウィンドウ | 100,000 トークン(プロンプトと補完を含む) |
APIキーページでキーを取得してください。新規ユーザーはワンクリックで$0.50のトライアルクレジットを取得でき、7日間有効で支払い不要です。キーはいつでも再生成でき、チャージ済みのアカウントは最大5つのキーを保持し、ラベル付けしたり、無効化したりできます。
最初の呼び出し
curl https://api.gptsemfiltro.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You answer in plain language."},
{"role": "user", "content": "What is a context window?"}
],
"temperature": 0.7
}'
from openai import OpenAI
client = OpenAI(base_url="https://api.gptsemfiltro.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You answer in plain language."},
{"role": "user", "content": "What is a context window?"},
],
)
print(resp.choices[0].message.content)
print(resp.usage)
返信にはchoices[0].message.contentと、プロンプトおよび補完トークンのカウントを含むusageオブジェクトが含まれます。
リクエストパラメータ
最も使用するパラメータ:
model:常にuncensoredです。messages:role(system、user、assistantまたはtool)とcontentを持つオブジェクトのリスト。max_tokens:オプション。省略した場合、補完は100,000トークンのコンテキストウィンドウの残りをすべて使用できます。temperature、top_p、stop、seed、frequency_penalty、presence_penalty:モデルに渡されます。stream:サーバー送信イベント用にtrueに設定し、最後に使用状況が含まれます。toolsとtool_choice:モデルが呼び出す可能性のある関数を記述します。response_format:{"type": "json_object"}でJSONモードが有効になります。
利用不可:画像、音声、動画の生成、埋め込み、ファインチューニング。サービスはテキストのみを処理します。
役割はOpenAI形式と同様に機能します。systemメッセージはチャット全体の動作を設定し、userメッセージはユーザーの入力を運び、assistantメッセージは以前の返信を含み、toolメッセージは関数の結果を返します。APIは呼び出し間でメモリを保持しないため、すべてのリクエストにはモデルに表示したい履歴を含める必要があります。プロンプトと補完は100,000トークンのコンテキストウィンドウを共有するため、長い履歴は回答の余地を減らします。
ストリーミング、ツール呼び出し、JSON モード
ストリーミング
streamをtrueに設定し、順次届くイベントを読み取ってください。各チャンクには小さなテキストの差分が含まれており、使用状況は最後に届きます。
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.gptsemfiltro.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "List five uses of a context window." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
ストリーミングリクエストはストリームが終了するまで同時実行数のスロットを保持するため、不要なストリームは閉じてください。
ツール呼び出しとJSONモード
toolsで関数を宣言します。モデルが関数を呼び出したい場合、返信にはテキストの代わりにtool_callsが含まれます。関数を実行し、結果をrole: "tool"のメッセージとして送信します。
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.gptsemfiltro.com/v1", api_key="YOUR_KEY")
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the weather for a city",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"],
},
},
}]
messages = [{"role": "user", "content": "What is the weather in Lisbon?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]
messages.append(first.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps({"city": "Lisbon", "temp_c": 21}),
})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
本番環境では、モデルがプレーンテキストで回答する可能性があるため、tool_calls が存在することを確認してください。ツールなしで構造化出力を得るには、"response_format": {"type": "json_object"} を追加し、プロンプトでJSONを希望することを伝えます。
制限、エラー、ヘッダー
| 制限 | フルキー | トライアルキー |
|---|---|---|
| 同時リクエスト | 8 | 2 |
| 1分あたりのリクエスト数 | 300 | 60 |
| ボディサイズ | 8 MB | 8 MB |
制限を超えると、APIはHTTP 429を返します。エラーコードrate_limitedは1分あたりのリクエストが多すぎることを意味し、concurrencyは一度に多すぎることを意味します。一時的な過負荷時には、Retry-After: 5ヘッダー付きで429も返されます。失敗または拒否されたリクエストは課金されません。
有用なレスポンスヘッダー:X-Request-Id(サポートに連絡する際に引用)、X-Balance-USD、X-RateLimit-Limit-Requests、X-RateLimit-Limit-Concurrency。
Node用の小さなリトライヘルパー:Retry-Afterの時間を待ち、試行ごとにさらにバックオフします。
async function chat(messages, tries = 4) {
for (let n = 0; n < tries; n++) {
const res = await fetch("https://api.gptsemfiltro.com/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ model: "uncensored", messages: messages }),
});
if (res.status === 429) {
const wait = Number(res.headers.get("Retry-After") || 5);
await new Promise(function (r) { setTimeout(r, wait * 1000 * (n + 1)); });
continue;
}
return res.json();
}
throw new Error("still rate limited");
}既存コードの移行と残高の確認
既存コードをこのエンドポイントに移行
コードがすでにOpenAIスタイルのチャットエンドポイントを呼び出している場合、移行は小さく済みます。次の3つの値を変更し、他はそのままにしてください。
- ベースURLは
https://api.gptsemfiltro.com/v1になります。 - キーはAPIキーページからのものになります。
- モデルは
uncensoredになります。
次に、コードが何に依存しているかを確認してください。テキストベースでチャット形式のものはすべて移行可能です:システムプロンプト、履歴、ストリーミング、ツール呼び出し、JSONモード。それ以外はここでは存在しません。画像生成、音声、動画、埋め込み、ファインチューニングがないため、それらのルートを呼び出すコードには別のプロバイダーが必要です。
その形式を好むクライアント向けに、レスポンスエンドポイントも利用可能です。
curl https://api.gptsemfiltro.com/v1/responses \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "uncensored", "input": "Summarise what a context window is in one sentence."}'
リリース前にテストしてください。異なるモデルは同じプロンプトで異なる動作をするためです。拒否、トーン、長さのすべてが変わる可能性があるため、重要なプロンプトを再実行してください。
コードから残高を確認する
残高は3つの方法で確認できます。すべてのレスポンスにはX-Balance-USDヘッダーが含まれます。また、GET /v1/balanceを呼び出すか、すでに一部のダッシュボードが読み込みに対応しているOpenAI互換のGET /v1/dashboard/billing/credit_grantsを使用することもできます。
curl https://api.gptsemfiltro.com/v1/balance \
-H "Authorization: Bearer YOUR_KEY"
有用なパターンとして、各呼び出し後にヘッダーを読み取り、それを保存し、選択した閾値を下回った場合にアラートを発生させる方法があります。クレジットは前払いであり期限が切れることがないため、残高が低いのは期限ではなくチャージを促す合図です。
料金の概要
入力は 1M トークンあたり $0.15、出力は 1M トークンあたり $0.50 で、前払いクレジットから差し引かれます。例:入力 3,000 トークンと出力 600 トークンのコストは、3,000 x $0.15 / 1M + 600 x $0.50 / 1M = $0.00045 + $0.0003 = $0.00075 です。チャージは $20 から $500 の整数金額で行われ、$50 以上で +5%、$100 以上で +10%、$200 以上で +15% のボーナスが付きます。USDT (TRC20) または USDC (Base) で支払います。詳細は 価格ページをご覧ください。プロンプトはトレーニングに使用されません。
初回統合のためのトラブルシューティングチェックリスト
初回の呼び出しで失敗する場合は、限られた原因のリストに起因することがほとんどです。サービスの不具合を疑う前に、順番に確認してください。
- ステータス401。キーが存在しないか、誤入力されています。クライアントが実際に送信するヘッダーを出力し、
Authorization: Bearer YOUR_KEYと比較してください。キーが公開された場所に貼り付けられた場合は、APIキーページで再生成してください。古いキーは直ちに無効になります。 - ステータス404。パスが誤っています。ベースURLは
/v1で終わり、SDKは/chat/completionsを自動的に追加します。プレーンなHTTPでAPIを呼び出す場合は、完全なパスを指定してください。 - モデルに関するエラー。唯一のモデルIDは
uncensoredです。他のプロバイダーのドキュメントからコピーした名前では一致しません。GET /v1/modelsは、キーで利用可能なモデルの一覧を示します。 - 非常に大きなリクエストが失敗する。ボディの制限は8 MBです。長い履歴は、そのサイズに達する前に早めに切り捨てるか要約するのが望ましく、100,000トークンのコンテキストウィンドウはプロンプトと補完で共有されます。
- 断続的な429エラー。エラーコードを確認してください。
concurrencyは一度に呼び出しが多すぎること、つまりワーカー数を減らす必要があることを意味します。rate_limitedは1分あたりの呼び出しが多すぎることです。Retry-After: 5ヘッダーは一時的な過負荷を示し、短時間の待機で解決します。 - 返信が途中で切れる。
max_tokensを設定した場合、返信はそこで停止し、finish_reasonはlengthとなります。上限を引き上げるか、設定を削除してください。
説明できない呼び出しからのX-Request-Idの値を保持してください。サポートに連絡する際、特定の1つのリクエストを指し示す最も速い方法です。
その他のガイド
よくある質問
これは公式のChatGPT APIですか?
いいえ。これはOpenAI互換のインターフェースを持つ独立したホスト型のオープンウェイトモデルです。OpenAIによって運営されているわけではありません。
サポートされているエンドポイントはどれですか?
POST /v1/chat/completions、POST /v1/responses、GET /v1/models、および/v1/balanceと/v1/dashboard/billing/credit_grantsの残高エンドポイント。
別のSDKが必要ですか?
いいえ。ベースURL、キー、モデル名を変更した後であれば、公式のPythonおよびNode.js用SDKが動作します。
残りのクレジットを確認するにはどうすればよいですか?
任意のレスポンスのX-Balance-USDヘッダーを読み取るか、GET /v1/balanceを呼び出してください。
APIキーを取得
登録し、キーをコピーしてベースURLを更新してください。セットアップは完了です。