OpenAI API 置換:移行チェックリスト
OpenAI API 置換は、まず3つのことを確認したときにのみスムーズに機能します。コードが呼び出すエンドポイント、依存する機能、そして新しいモデルがプロンプトでどのように振る舞うかです。このチェックリストはこれら3つすべてをカバーしており、今日実行できるコマンドが含まれています。

まとめ
- チャット補完エンドポイント、レスポンス、ストリーミング、ツール、JSON モードは、ベース URL の変更後、標準的な OpenAI SDK で機能します。
- 埋め込み、画像、音声、ファインチューニングのエンドポイントは利用できません。それらは既存のプロバイダーのままにしてください。
- モデルが異なるため、本番切り替え前にプロンプトでテストしてください。戻すためのフラグを確保してください。
- 請求は前払いでトークン単位です:入力 1Mトークンあたり $0.15、出力 1Mトークンあたり $0.50。
ステップ 1:コードが呼び出すものを調査する
何かを変更する前に、実際に使用している OpenAI の機能をリストアップしてください。ほとんどのプロジェクトは思っているよりも少ない機能しか使用していません。このリストは、この置換が5分のタスクになるのか部分的なものになるのかを決定します。プロジェクトのルートからこれらを実行してください:
# New values you will point the project at:
export OPENAI_BASE_URL="https://api.alternativeapiopenai.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
export MODEL="uncensored"
# What does the code call today?
grep -rnE "embeddings|images\.|audio\.|fine_tuning|moderations|assistants|batches" --include="*.py" --include="*.js" --include="*.ts" .
grep -rnE "model *[=:] *['\"]" --include="*.py" --include="*.js" --include="*.ts" .
最初の grep は、この API が提供しないエンドポイントを検出します。2 番目は変更が必要なすべてのハードコードされたモデル名をリストします。結果を機能ごとに 1 行ずつ持つ短いテーブルにまとめてください:使用済み、未使用、およびそれに対する対応策。
ステップ 2:サポートされているものと比較する
| OpenAI の機能 | こちら | 注記 |
|---|---|---|
| チャット補完 | はい | POST /v1/chat/completions |
| レスポンス API | はい | POST /v1/responses |
| モデルのリスト | はい | GET /v1/models は uncensored を返します |
| ストリーミング | はい | 末尾に使用量情報を含む SSE |
| ツール呼び出し | はい | tools、tool_choice、ストリーミングされた tool_calls、role: "tool" 結果 |
| JSON モード | はい | response_format: {"type":"json_object"} |
| サンプリングパラメータ | はい | temperature、top_p、stop、seed、ペナルティ |
| 埋め込み | なし | 提供不可 |
| 画像、音声、動画の生成 | なし | テキストのみ |
| ファインチューニング | なし | 提供不可 |
この表のサポート対象側にあるもの以外は、ドキュメントで確認するまで利用不可として扱ってください。これにはスキーマ制約付きの出力が含まれます。JSON モードはモデルに有効なJSONを返させますが、独自のスキーマを強制するわけではないため、検証コードを維持してください。チャットメッセージへの画像入力もリストされていないため、テキストプロンプトのみの計画を立ててください。
このモデルは独立したプロバイダーが実行する単一のオープンウェイトモデルです。OpenAI のモデルではなく、いかなるベンダーの公式 API でもなく、ベンダー間でルーティングもされません。異なるスタイル、異なる強み、異なる失敗モードを期待してください。
ステップ 3:置き換える
公式の Python SDK では、3 つの値が変更されます:
from openai import OpenAI
client = OpenAI(
base_url="https://api.alternativeapiopenai.com/v1", # was the default OpenAI URL
api_key="YOUR_API_KEY", # was your old key
)
resp = client.chat.completions.create(
model="uncensored", # was your old model name
messages=[{"role": "user", "content": "Give me three names for a coffee shop."}],
)
print(resp.choices[0].message.content)
さらに良いのは、ベース URL、キー、モデル名を構成に保持し、同じビルドでどちらのプロバイダーにも接続できるようにすることです。簡単なパターンは 3 つの環境変数です:LLM_BASE_URL、LLM_API_KEY、LLM_MODEL。そうすれば、ロールバックは新しいリリースを送信するのではなく、3 つの値を変更して再起動するだけです。
コードがレスポンス API を使用する場合、同じ 3 つの値が適用されます。LangChain や LlamaIndex などのフレームワークの場合、OpenAI 互換のコネクタを探し、同じベース URL とモデル名を渡してください。
ステップ 4:本番環境前にテストする
モデルの置換におけるリスクは接続ではなく動作です。次の順序でテストしてください:
- 接続。 curl で 1 リクエストを送ってください。返信があれば、キーと URL が正しいことを意味します。
- 実際のプロンプト。 少なくとも20個の運用環境でのプロンプトを再送し、出力を確認してください。トーン、長さ、指示の遵守を確認します。
- ツール呼び出し。 各ツールを実行し、モデルが生成する引数を確認してください。ストリーミングされたレスポンスで
tool_callsを処理できることを確認します。 - JSON 出力。 JSON モードで 100 回の呼び出しを実行し、パーサーまたはスキーマに失敗する回数をカウントします。
- 長い入力。 コンテキストウィンドウは、プロンプトと生成トークンの合計で 100,000 トークンです。所要時間を把握するために、大きなプロンプトを 1 回テストしてください。
- 制限。 完全なキーは最大 8 同時リクエストと 1 分あたり 300 リクエストを許可します。実際のピークで負荷テストを実行してください。
トークン数は異なります
コードが他のモデル用に構築されたトークナイザーライブラリを使用してトークンを推定する場合、結果を概算として扱ってください。請求と予算のために各レスポンスの usage オブジェクトを使用し、100,000 トークンのウィンドウに収めるために履歴を切り捨てる際に安全マージンを残してください。max_tokens の設定はオプションですが、合理的な上限は暴走する応答が計画した予算を超えて消費するのを防ぎます。
エラーの振る舞い
制限を超えると、API はコード rate_limited(1 分あたりのリクエスト)または concurrency(一度に多すぎる)で HTTP 429 を返します。一時的な過負荷も 429 を返し、Retry-After: 5 ヘッダーを含みます。ストリーミングされたリクエストはストリームが終了するまで同時実行スロットを保持するため、低速なクライアントはあなたの制限枠を消費します。失敗または拒否されたリクエストは請求されません。
ステップ 5:コストを確認する
価格は入力トークン 1Mあたり $0.15、出力トークン 1Mあたり $0.50 で、前払いクレジットから支払われます。現在の請求書と比較するには、usage フィールドから独自のトークン数を使用し、次の式を適用してください:コスト = input_tokens x 0.15 / 1,000,000 + output_tokens x 0.50 / 1,000,000。他のプロバイダーについては、現在の価格表を確認し、同じカウントを適用してください。
具体的な例:あるサポートツールは月間 30,000 件のリクエストを処理し、各リクエストで 1,200 トークンの入力と 250 トークンの出力を使用します。入力は 36M トークンで、コストは $5.40 です。出力は 7.5M トークンで、コストは $3.75 です。月間の合計は $9.15 です。同じワークロードがコンテキストウィンドウを埋める場合、入力が 100,000 トークンの場合、各リクエストの入力コストは $0.015 となり、プロンプトのサイズが注目すべき数値となります。
料金ページにはチャージ金額が記載されています。料金は$20から$500までで、$50以上で+5%、$100以上で+10%、$200以上で+15%のボーナスが付きます。支払いには暗号資産のみ(TRC20上のUSDTまたはBase上のUSDC)が利用可能です。クレジットは期限切れせず、サブスクリプションもありません。関連ガイド「uncensoredモデルのAPI料金」では、コスト構造についてさらに詳しく解説しています。
ステップ6: 展開とロールバック体制の確保
まず新しいエンドポイントにトラフィックの一部を送信してください。X-Request-IdヘッダーからリクエストIDをログに記録し、誤った回答を追跡できるようにしてください。また、呼び出し後にX-Balance-USDを記録し、クレジットが気づかずに枯渇しないようにしてください。残高が数日分の支出を下回った場合にアラートを通知します。
シャドウトラフィックの動作が良好であれば、段階的にトラフィックの割合を増やし、旧プロバイダーのキーを1週間有効に保ってください。成人向けコンテンツに関連する場合は、このモデルは合法的な成人利用を目的としており、未成年者を含む性的コンテンツは常に拒否されます。プロンプトはトレーニングに使用されません。
新規アカウントは、APIキーページでワンクリックで$0.50の無料トライアルクレジットを取得できます。これは7日間有効で、トラフィックのサンプルに対してチェックリスト全体を実行するのに十分な期間です。
その他のガイド
よくある質問
既存のOpenAI SDKコードは機能しますか?
チャット補完とレスポンスについては、はい。ベースURL、キー、モデル名を変更してください。埋め込み、画像、音声、ファインチューニングへの呼び出しは機能しません。
回答の品質はOpenAIのモデルと同じですか?
いいえ、これは異なるオープンウェイトモデルです。どちらの方向でも同等と推測するのではなく、独自のプロンプトでテストしてください。
何かが壊れた場合、ロールバックするにはどうすればよいですか?
構成にベースURL、キー、モデルを保持し、旧プロバイダーのキーを有効に保ってください。そうすれば、ロールバックは構成変更のみで完了します。
関数呼び出しをサポートしていますか?
はい。ツールとtool_choiceを使用し、role toolのメッセージとして結果を返します。ストリーミングされたtool_callsもサポートされています。
キーの生成にはフォームへの入力のみが必要です
サインアップしてキーをコピーし、ベースURLを更新してください。これですべての構成は完了です。