OpenAIの公式APIからLemonDataへの切り替えは、わずか2行の変更で完了します。既存のコード、プロンプト、モデル名はすべてそのまま機能します。また、同じAPI keyを使用して、OpenAI、Anthropic、Google、DeepSeekなど、300以上のモデルにアクセスできるようになります。
移行前にゲートウェイの選択肢を比較したい場合は、料金比較やOpenRouterとLemonDataの比較をご覧ください。チームで特定の地域向けのプレイブックが必要な場合は、中国の開発者向けガイドで支払いと運用面について解説しています。
要約
- lemondata.ccでサインアップし、API keyを取得します($1分の無料クレジットが付与されます)。
base_urlとapi_keyを置き換えます。- 完了です。それ以外はすべて同じです。
Python (OpenAI SDK)
# 変更前:OpenAI公式
from openai import OpenAI
client = OpenAI(api_key="sk-openai-xxx")
# 変更後:LemonData(2行変更)
from openai import OpenAI
client = OpenAI(
api_key="sk-lemon-xxx",
base_url="https://api.lemondata.cc/v1"
)
# その他はすべて同じです
response = client.chat.completions.create(
model="gpt-4.1",
messages=[{"role": "user", "content": "Hello!"}]
)
print(response.choices[0].message.content)
ストリーミング、function calling、visionはすべて同様に動作します。OpenAI Python SDKは、指定されたbase_urlに対してリクエストを送信します。
Node.js (OpenAI SDK)
// 変更前:OpenAI公式
import OpenAI from 'openai';
const openai = new OpenAI({ apiKey: 'sk-openai-xxx' });
// 変更後:LemonData(2行変更)
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: 'sk-lemon-xxx',
baseURL: 'https://api.lemondata.cc/v1',
});
// その他はすべて同じです
const completion = await openai.chat.completions.create({
model: 'gpt-4.1',
messages: [{ role: 'user', content: 'Hello!' }],
});
console.log(completion.choices[0].message.content);
注意:Node.js SDKではbase_urlではなく、baseURL(キャメルケース)となります。
curl
# 変更前:OpenAI公式
curl https://api.openai.com/v1/chat/completions \
-H "Authorization: Bearer sk-openai-xxx" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4.1","messages":[{"role":"user","content":"Hello"}]}'
# 変更後:LemonData(URLとキーを変更)
curl https://api.lemondata.cc/v1/chat/completions \
-H "Authorization: Bearer sk-lemon-xxx" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4.1","messages":[{"role":"user","content":"Hello"}]}'
エンドポイントのパス、リクエストボディ、レスポンス形式はすべて同じです。
環境変数によるアプローチ
コードが環境変数から読み込むようになっている場合(そうあるべきですが)、コードを触る必要すらありません:
# 変更前
export OPENAI_API_KEY="sk-openai-xxx"
export OPENAI_BASE_URL="https://api.openai.com/v1"
# 変更後
export OPENAI_API_KEY="sk-lemon-xxx"
export OPENAI_BASE_URL="https://api.lemondata.cc/v1"
OpenAI SDKは環境からOPENAI_API_KEYとOPENAI_BASE_URLを自動的に読み込みます。コードの変更はゼロです。
移行後に得られるメリット
LemonDataに移行すると、OpenAIとの完全な互換性を維持したまま、追加の機能を利用できるようになります:
1つのAPI Keyで300以上のモデルを利用可能
既存のOpenAIコードで、Claude、Gemini、DeepSeek、Mistralなど数百のモデルが利用可能になります。多くの場合、変更が必要なのはmodelパラメータだけです:
# GPT-4.1 (OpenAI): 100万tokenあたり $2.00/$8.00
response = client.chat.completions.create(model="gpt-4.1", messages=messages)
# Claude Sonnet 4.6 (Anthropic): 100万tokenあたり $3.00/$15.00
response = client.chat.completions.create(model="claude-sonnet-4-6", messages=messages)
# Gemini 2.5 Pro (Google)
response = client.chat.completions.create(model="gemini-2.5-pro", messages=messages)
# DeepSeek V3: 100万tokenあたり $0.28/$0.42 ("deepseek-chat" またはエイリアス "deepseek-v3" を使用)
response = client.chat.completions.create(model="deepseek-chat", messages=messages)
マルチチャネルの冗長性により、アップストリームのプロバイダーに問題が発生した場合、ゲートウェイが自動的に代替チャネルにルーティングします。コードの変更は不要です。
ネイティブプロトコルへのアクセス(オプション)
AnthropicやGoogleのモデルを、そのネイティブ機能(extended thinking、cache_controlによるプロンプトキャッシュ、Google検索によるグラウンディングなど)をフルに活用して使用したい場合、LemonDataは同じbase URLを通じてそれらのネイティブプロトコルをサポートします:
# Anthropicネイティブ: Anthropic SDKを使用
# Extended thinking, cache_control, Citationsはすべてネイティブに動作
from anthropic import Anthropic
client = Anthropic(
api_key="sk-lemon-xxx",
base_url="https://api.lemondata.cc" # /v1は不要。Anthropic SDKが自動的に/v1/messagesを追加します。
)
# Google Geminiネイティブ: Google SDKを使用
# Search grounding, grounding_metadataはすべてネイティブに動作
from google import genai
client = genai.Client(
api_key="sk-lemon-xxx",
http_options={"base_url": "https://api.lemondata.cc"} # パスのサフィックスは不要。SDKが自動的に/v1beta/models/...を追加します。
)
これは完全にオプションです。OpenAI互換のエンドポイントはすべてのモデルで動作します。しかし、Anthropicのextended thinkingやGoogleのグラウンディングが必要な場合、ネイティブプロトコルアクセスを使用することで、フォーマット変換による損失なしにそれらの機能を利用できます。
移行時に通常変更される点
ほとんどの移行は技術的には単純ですが、運用面で疎かになりがちです。チームはしばしばbase URLとキーを変更し、それ以外はすべて同一であると考えます。リクエストスキーマについては通常その通りですが、その周辺のすべてにおいて常にそうであるとは限りません。
トラフィックを切り替える前に確認すべき項目は以下の通りです:
- SDKまたはHTTPクライアントのタイムアウト設定
- アプリケーション設定内のモデル許可リスト
- 単一のプロバイダーを想定したコストダッシュボード
- 特定のアップストリーム向けに調整されたリトライロジック
- レスポンスヘッダーやrate limitに関するハードコードされた前提条件
本番トラフィックを切り替える前にこれら5つの項目を監査すれば、移行は通常スムーズに進みます。
移行チェックリスト
移行を確実に(「退屈なほど」平穏に)進めたい場合は、このチェックリストを使用してください:
- LemonDataのAPI keyを作成する。
base_urlまたはbaseURLを切り替える。/v1/modelsに対してスモークテストを1回実行する。- チャットのcompletion、ストリーミングレスポンス、および失敗パスをそれぞれ1回テストする。
- ログが引き続きリクエストIDとモデル名をキャプチャしていることを確認する。
- 最初の数回の呼び出し後に請求を確認し、コストの想定が正しいことを確認する。
- その後初めて、バックグラウンドジョブと本番トラフィックを移行する。
よくある間違い
間違い1:古いモデル一覧のハードコーディング
一部のチームは、アプリ設定内の静的なリストに対してモデルIDを検証しています。そのリストを保持したままだと、ゲートウェイは動作しても、リクエストが送信される前にアプリケーション自体が有効なモデル名を拒否してしまいます。
間違い2:移行を単なるプロバイダーの入れ替えと考える
真のメリットは、単にOpenAIを離れることではありません。単一プロバイダーのアーキテクチャからゲートウェイモデルに移行することで、アプリケーションの他の部分を二度と変更することなく、Claude、Gemini、DeepSeekなどを追加できるようになることです。
間違い3:失敗パスのテストをスキップする
正常系のテストが成功したことは、API keyが機能することを証明するだけです。リトライロジック、エラーパース、またはオブザーバビリティが移行後も適切に機能することを証明するものではありません。
単なるスクリプトではなく、ユーザー向けのアプリケーションをリリースする場合は、次に読むべき実装ガイドは1つのキーで作成するチャットボットのチュートリアルとrate limitガイドです。
一般的なインテグレーションの移行
Cursor
設定 → モデル → OpenAI API Key:
- API Key:
sk-lemon-xxx - Base URL:
https://api.lemondata.cc/v1
LangChain
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="gpt-4.1",
api_key="sk-lemon-xxx",
base_url="https://api.lemondata.cc/v1"
)
Vercel AI SDK
import { createOpenAI } from '@ai-sdk/openai';
const lemondata = createOpenAI({
apiKey: 'sk-lemon-xxx',
baseURL: 'https://api.lemondata.cc/v1',
});
const result = await generateText({
model: lemondata('gpt-4.1'),
prompt: 'Hello!',
});
LiteLLM
import litellm
response = litellm.completion(
model="openai/gpt-4.1",
messages=[{"role": "user", "content": "Hello!"}],
api_key="sk-lemon-xxx",
api_base="https://api.lemondata.cc/v1"
)
移行の確認
切り替え後の簡単な動作確認:
curl https://api.lemondata.cc/v1/models \
-H "Authorization: Bearer sk-lemon-xxx" | head -c 200
モデルオブジェクトを含むJSONレスポンスが表示されれば、問題ありません。
FAQ
既存のプロンプトは機能しますか? はい。LemonDataはOpenAIと完全に互換性があるため、リクエストとレスポンスの形式は変わりません。
モデル名を変更する必要はありますか? いいえ。gpt-4.1、gpt-4o、gpt-4.1-miniはすべて期待通りに動作します。また、LemonDataには、完全一致、エイリアス検索、ファジー補正の3層のモデル解決システムがあります。つまり、gpt-4-turboのような非推奨の名前や、gpt4oのようなタイポであっても、通常は正しく解決されます。
ストリーミングはどうですか? 同様に動作します。SSE形式、同じチャンク構造です。ネイティブのAnthropic/Geminiプロトコルの場合、各プロバイダーのネイティブSSE形式(extended thinkingの思考デルタを含む)が取得されます。
function calling / toolsはどうですか? 完全にサポートされています。同じスキーマ、同じ動作です。
エラーハンドリングはどうですか? LemonDataは、OpenAI互換のエラーに加えて、retryable、did_you_mean、suggestions、retry_afterなどのエージェントフレンドリーなフィールドを返します。これらのフィールドは追加的なものであるため、標準のOpenAI SDKのエラーハンドリングは引き続き機能します。
元に戻すことはできますか? はい。2行を元に戻すだけです。独自のフォーマットや、元に戻すためのデータ移行は必要ありません。
ここから開始:lemondata.cc/r/devto-migration
APIドキュメント全文:docs.lemondata.cc
クイックスタートガイド:docs.lemondata.cc/quickstart
