DeepSeek APIをECAIXを介してOpenAI互換リクエストで利用するガイド
DeepSeek APIをECAIXを介してOpenAI互換リクエストで利用するガイド
このガイドでは、ECAIXを介してDeepSeekのモデルIDをOpenAI互換のAPIエンドポイントを使用してテストする方法を説明します。最小限のリクエスト、Pythonおよびcurlの例、モデルIDの検証、ストリーミング、構造化された出力、ツールの使用、および一般的なエラーの診断について説明します。
このガイドでは、現在のECAIXカタログに公開されているモデルIDへのECAIXゲートウェイへのアクセスについて説明します。ECAIXがDeepSeekの公式APIエンドポイントであるか、すべてのDeepSeek機能がすべてのゲートウェイ経路で利用可能であると主張することはありません。生産環境へのワークロードを移行する前に、ライブモデルページとプロバイダのドキュメントを確認してください。
このガイドが検証する内容
この例では、公開カタログに公開されているモデルIDを使用したECAIXのOpenAI互換パスを使用しています。利用可能性、ルーティング、制限、価格、およびサポートする機能は変更される可能性があります。カタログとAPIドキュメントを現在の情報源として使用してください。
簡単な開始方法
既にOpenAI SDKのアプリケーションを持っている場合は、以下の手順を実行してください。
- DeepSeek v4.1 Flashモデルページを開き、IDが利用可能であることを確認します。
- ECAIX APIキーを作成します。
- OpenAI互換のベースURLを
https://ecaix.com/api/ai/v1に設定します。 - SDKおよびアプリケーションコードを可能な限り変更しません。
- 以下の最小リクエストを実行します。
- ストリーミング、JSON出力、またはツールを基本的なリクエストが正しく動作するまで追加します。
エンドポイントとモデルID
OpenAI互換のクライアントでは、以下のように使用します。
Base URL: https://ecaix.com/api/ai/v1
Model: deepseek-v4.1-flash
モデルIDはブログ記事での永続的な保証ではありません。ライブモデルディレクトリを確認してください。新しい統合やデプロイメント前にモデルIDをコピーしてください。必要な場合は、モデルの詳細ページから正確なIDをコピーしてください。
エンドポイントの形式も重要です。SDKは/v1をベースパスとして受け取る必要があり、クライアントが/chat/completionsなどの操作パスを追加します。base_urlに/chat/completionsを追加することは避けます。
PythonでOpenAI SDKを使用する
仮想環境でOpenAI Python SDKをインストールまたはアップグレードします。
python -m pip install --upgrade openai
その後、ECAIXのベースURLとAPIキーを使用して以下のように実行します。
const client = new OpenAI({
apiKey: process.env.ECAIX_API_KEY,
baseURL: "https://ecaix.com/api/ai/v1",
});
const response = await client.chat.completions.create({
model: "deepseek-v4.1-flash",
messages: [
{ role: "user", content: "Return one short sentence about API testing." },
],
max_tokens: 128,
});
console.log(response.choices[0].message.content);
APIリクエストはサーバーサイドコードで実行してください。ブラウザアプリケーションは、ECAIXキーを直接クライアントサイドJavaScriptに暴露することは避けます。
cURLによる診断リクエスト
SDKが失敗した場合は、SDKを排除してエンドポイントを直接テストします。ヘッダーとボディを分けて保存し、HTTP問題とレスポンスフォーマット問題を区別できます。
curl -sS -D /tmp/ecaix-deepseek-headers.txt \
-o /tmp/ecaix-deepseek-response.json \
-w '\nHTTP %{http_code}\n' \
"https://ecaix.com/api/ai/v1/chat/completions" \
-H "Authorization: Bearer ${ECAIX_API_KEY}" \
-H "content-type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"messages": [
{"role": "user", "content": "Reply with one short sentence."}
],
"max_tokens": 128
}'
公開されたトラブルシューティングにAPIキー、リクエストID、プロンプト、リポジトリパス、および顧客データを含めないようにしてください。
レスポンスの診断方法
以下の順序で使用してください。
- HTTPステータス: 有効なエンドポイントにリクエストが到達したかどうかを判断します。
- レスポンスボディ: プロバイダまたはゲートウェイのエラーコードを読み取ります。
- モデルID: 現在のモデルディレクトリから正確なIDをコピーします。
- 認証: ヘッダー、アカウント、および権限を確認します。
- リクエストの形状: ボディを
model,messages, および小さな出力制限に削減します。 - 機能フィールド: ストリーミング、JSON、ツールを1つずつ追加します。
- SDKの動作: SDKリクエストと直接のcURLリクエストを比較します。
これにより、クライアントライブラリの問題がモデルルーティングやアカウント権限と混同されることを防ぎます。
ストリーミングレスポンス
アプリケーションがインクリメンタルな出力が必要な場合は、正常なリクエストが成功した後にストリーミングを追加します。
stream = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "Summarize API retries in three points."}],
stream=True,
max_tokens=256,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
エンドポイントとSDKの具体的なイベント動作は異なります。空のdelta、最終使用イベント、接続中断、および[DONE]スタイルの終了をどのように処理するかを確認してください。ストリーミング実装が生産環境に適切であると判断できるまで、断綴とリトライをテストするまで呼び出しを避けてください。
構造化された出力とJSON
マシン可読の出力が必要な場合は、通常のリクエストから始めて、エンドポイントとモデルがサポートする最小限の構造化出力オプションを追加します。実際のJSONパーサで返された内容を検証してください。"JSONを返す"といったプロンプトは、スキーマ強制されたレスポンスとは異なります。
import json
response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[
{
"role": "user",
"content": "Return a JSON object with keys title and priority."
}
],
response_format={"type": "json_object"},
max_tokens=128,
)
payload = json.loads(response.choices[0].message.content)
print(payload["title"])
response_formatが受け入れられるかどうかはモデルとルートに依存します。エンドポイントがサポートされていないパラメータのエラーを受け取った場合は、フィールドを削除してルートドキュメントを確認してください。
関数呼び出しとツール
ツール呼び出しはテキスト生成から別のテストとなります。無害な関数を1つだけテストし、返された名前と引数を確認してから実行してください。
tools = [
{
"type": "function",
"function": {
"name": "get_demo_status",
"description": "Return a fixed status for a local compatibility test.",
"parameters": {
"type": "object",
"properties": {},
"additionalProperties": False,
},
},
}
]
response = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "Check the demo status."}],
tools=tools,
tool_choice="auto",
max_tokens=128,
)
print(response.choices[0].message.tool_calls)
モデルが有効なテキストレスポンスを返しながら、ツール呼び出しが失敗する可能性があります。スキーマ変換、サポートされていないパラメータ、またはクライアント特有の動作のためです。生産システムに返されたツール引数を実行する前に、スキーマの検証と認証チェックを追加してください。
OpenAI互換とAnthropic互換のパス
ECAIXは異なる互換性表面を異なるクライアントに公開します。
| クライアントまたはワークフロー | ドキュメントパス | 検証する内容 |
|---|---|---|
| OpenAI Python/Node SDK | /api/ai/v1 | チャットコンプリテイションズ、レスポンス、ストリーミング、ツール |
| Anthropicスタイルのクライアント | /api/ai/v1/anthropic | メッセージフィールド、ヘッダー、コンテンツブロック |
| Claude Codeの第三者ワークフロー | /api/ai/v1/anthropic | プロバイダ特有の動作; Anthropicの公式サポートではない |
チャットコンプリテイションズドキュメント、レスポンスドキュメント、Anthropicメッセージドキュメントを読む前にパスを選択してください。同じモデルIDは、すべての互換性表面で同じフィールドや動作を公開するわけではありません。
現在のモデル詳細
利用可能性と能力を確認するためにライブの詳細ページを使用してください。
これらのページは、静的な記事よりも現在のモデルID、コンテキスト情報、および価格リンクに信頼性があります。
一般的なエラー
| ステータスまたは症状 | 可能な原因 | 診断アクション |
|---|---|---|
401 | 無効なベアートークンまたは欠落 | Authorizationヘッダー、環境変数、およびキーの状態を確認 |
403 | キーまたはアカウントに権限がない | アカウントアクセスとモデルの利用可能性を確認 |
404 | 間違ったベースURLまたはルートのサフィックス | /api/ai/v1/chat/completionsを使用して直接のcURLテストを行う |
400 | 無効なボディまたはサポートされていないフィールド | 任意のフィールドを |