DeepSeek API SDK: OpenAI SDK का उपयोग करें और एंडपॉइंट बदलें
DeepSeek API SDK सेटअप के लिए कोई विशेष क्लाइंट इंस्टॉल करने की आवश्यकता नहीं है: DeepSeek-शैली के API OpenAI प्रारूप का पालन करते हैं, इसलिए OpenAI SDK अलग बेस URL के साथ काम करता है। वह ही तथ्य आपको तीन मान बदलकर किसी अन्य एंडपॉइंट पर स्विच करने की अनुमति देता है।

मुख्य बिंदु
- OpenAI Python और Node SDK किसी भी OpenAI-संगत एंडपॉइंट के साथ काम करते हैं; आपको बेस URL, कुंजी और मॉडल नाम बदलने होते हैं।
- उन तीन मानों को एनवायरनमेंट वेरिएबल्स में रखें ताकि एंडपॉइंट बदलने पर कोड में कोई बदलाव न करना पड़े।
- साधारण चैट, स्ट्रीमिंग और टूल कॉल के लिए यह सुरक्षित है, लेकिन उन पर निर्भर करने से पहले मॉडल-विशिष्ट सुविधाओं का परीक्षण करें।
- इस एंडपॉइंट के लिए https://api.deepseekapi.top/v1 और मॉडल आईडी uncensored का उपयोग करें।
OpenAI SDK ही DeepSeek API SDK क्यों है
जब लोग DeepSeek API SDK के लिए खोजते हैं, तो वे विक्रेता के नाम वाले पैकेज की उम्मीद करते हैं। व्यावहारिक रूप से, DeepSeek की अपनी दस्तावेज़ बताती है कि OpenAI SDK के माध्यम से अलग बेस URL के साथ इसकी API को कॉल किया जाता है, क्योंकि API OpenAI के अनुरोध और प्रतिक्रिया प्रारूप का पालन करती है। सटीक बेस URL और मॉडल नामों के लिए उनकी वर्तमान दस्तावेज़ देखें; वे अपनी सेवा पर विशेषज्ञ स्रोत हैं।
परिणाम उपयोगी है। OpenAI क्लाइंट लाइब्रेरी के लिए लिखा गया कोई भी कोड उस सर्वर से बात कर सकता है जो समान एंडपॉइंट लागू करता है, जो यहाँ POST /v1/chat/completions, POST /v1/responses और GET /v1/models हैं। प्रदाताओं के बीच स्थानांतरण कॉन्फ़िगरेशन बदलाव बन जाता है। इस आलेख का शेष भाग Python, Node और curl में पैटर्न दिखाता है, फिर एक संरचना जो बदलाव को सरल बनाती है।
Python सेटअप
औपचारिक पैकेज इंस्टॉल करें और इसे एंडपॉइंट की ओर इशारा करें:
pip install openai
from openai import OpenAI
client = OpenAI(
base_url="https://api.deepseekapi.top/v1",
api_key="YOUR_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise technical assistant."},
{"role": "user", "content": "Explain idempotency in two sentences."},
],
)
print(resp.choices[0].message.content)
print(resp.usage)
API कुंजी पेज पर एक कुंजी प्राप्त करें। नए उपयोगकर्ता एक क्लिक के साथ $0.50 का मुफ़्त ट्रायल क्रेडिट दावा कर सकते हैं, बिना किसी कार्ड के। DeepSeek API Python आलेख इस भाषा पर अधिक गहराई से जाता है, जिसमें त्रुटि हैंडलिंग शामिल है।
Node.js सेटअप
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.deepseekapi.top/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
stream: true,
messages: [{ role: "user", content: "List four uses of a message queue." }],
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
पैटर्न समान है: बेस URL, कुंजी, मॉडल। स्ट्रीमिंग सर्वर-सेंट इवेंट्स (SSE) लौटाता है, और लाइब्रेरी उन्हें एक async iterator में बदल देती है। टूल कॉलिंग अन्य OpenAI-संगत APIs के समान स्कीमा का पालन करती है: tools पास करें, स्ट्रीम किए गए tool_calls पढ़ें, और परिणामों को role: "tool" संदेशों के रूप में लौटाएं।
एंडपॉइंट को बदलने योग्य बनाएं
तीनों मानों को हार्डकोड न करें। उन्हें एन्वायरनमेंट वेरिएबल से पढ़ें और क्लाइंट निर्माण को एक फ़ंक्शन में लपेटें। फिर एक एंडपॉइंट से दूसरे पर जाने का मतलब एक .env फ़ाइल संपादित करना है, न कि स्रोत कोड।
import os
from openai import OpenAI
def make_client():
return OpenAI(
base_url=os.environ.get("LLM_BASE_URL", "https://api.deepseekapi.top/v1"),
api_key=os.environ["LLM_API_KEY"],
)
MODEL = os.environ.get("LLM_MODEL", "uncensored")
def ask(prompt: str) -> str:
r = make_client().chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
)
return r.choices[0].message.content
अब एक अलग प्रदाता को केवल तीन एन्वायरनमेंट वेरिएबल की आवश्यकता है। आधिकारिक SDKs कुछ संस्करणों में OPENAI_API_BASE और OPENAI_API_KEY भी पढ़ते हैं, लेकिन स्पष्ट वेरिएबल अधिक स्पष्ट हैं और एक साथ कई प्रदाताओं को चलाने पर हैरानियों से बचाते हैं।
यदि आप TypeScript या किसी अन्य भाषा का उपयोग करते हैं, तो विचार वही है: एक फैक्ट्री फ़ंक्शन, तीन वेरिएबल, कोडबेस में बिखरे प्रदाता नाम नहीं। एक आम गलती यह है कि विक्रेता का नाम फ़ंक्शन नामों, लॉग संदेशों और वेरिएबल नामों में लीक होने देना, जो बाद के स्वैप को उससे कहीं अधिक कठिन बना देता है। चीजों को नौकरी (ask, summarise) के बाद नाम दें, न कि प्रदाता के बाद।
एक छोटा परीक्षण रखें जो एक निश्चित प्रॉम्प्ट को ask() के माध्यम से भेजता है और एक गैर-खाली उत्तर की जाँच करता है। हर एंडपॉइंट बदलाव के बाद इसे चलाएँ; यह गलत URLs और कुंजियों को सेकंडों में पकड़ लेता है।
क्या समान रहता है और बदलाव के बाद क्या बदलता है
| आइटम | समान रहता है | बदल सकता है |
|---|---|---|
| अनुरोध का आकार | संदेश, भूमिकाएँ, तापमान, top_p, stop | ऐसे वैकल्पिक पैरामीटर जिन्हें कोई प्रदाता समर्थित नहीं करता |
| स्ट्रीमिंग | डेटा चंक के साथ SSE | उपयोग स्ट्रीम में कहाँ दिखाई देता है |
| टूल कॉलिंग | tools, tool_choice, tool_calls | मॉडल एक स्कीमा का कितनी अच्छी तरह पालन करता है |
| मॉडल का नाम | आवश्यक फ़ील्ड | मूल्य: यहाँ यह uncensored है |
| कॉन्टेक्स्ट विंडो | प्रॉम्प्ट और कम्प्लीशन | आकार: यहाँ 100,000 टोकन |
| व्यवहार | चैट फॉर्मेट | शैली, ताकत, अस्वीकृति व्यवहार |
आखिरी पंक्ति वही है जो लोगों को चौंका देती है। एक एंडपॉइंट प्रोटोकॉल स्तर पर संगत है, व्यवहार स्तर पर नहीं। दो प्रदाता समान अनुरोध स्वीकार कर सकते हैं और बहुत अलग उत्तर दे सकते हैं। यहाँ का मॉडल एक स्वतंत्र प्रदाता से एकल ओपन-वेट मॉडल है, जिसे कानूनी वयस्क उपयोग के लिए बिना सामग्री रिफ्यूज़ल के उत्तर देने के लिए ट्यून किया गया है, और यह DeepSeek या किसी अन्य लैब का आधिकारिक API नहीं है। उन प्रॉम्प्ट्स को पुनः परीक्षण करें जिनके लिए आपने किसी अन्य मॉडल के लिए ट्यूनिंग की थी।
इस एंडपॉइंट में कौन सी सुविधाएँ हैं और कौन सी नहीं
- समर्थित: चैट पूर्णताएँ, Responses प्रारूप, मॉडल सूचीबद्धता, स्ट्रीमिंग, टूल कॉलिंग, JSON मोड (
response_formatjson_objectके साथ), और तापमान, top_p, stop, seed और पेनल्टीज़ का पास-थ्रू। - पेश नहीं किया गया: छवि, ऑडियो या वीडियो जनरेशन, एम्बेडिंग्स, फाइन-ट्यूनिंग।
- सीमाएँ: 100,000 टोकन की विंडो, 8 MB अधिकतम बॉडी, 8 समानांतर अनुरोध और प्रति मिनट 300 पूरे API कुंजी पर (ट्रायल कुंजी पर 2 और 60).
- त्रुटियाँ: HTTP 429, कोड
rate_limitedयाconcurrency, और अस्थायी ओवरलोड परRetry-After: 5हेडर।
यदि आपका कोड एक एम्बेडिंग्स एंडपॉइंट को कॉल करता है, तो आपको उस भाग के लिए एक अन्य प्रदाता की आवश्यकता होगी और आप चैट यहीं रख सकते हैं। कार्य के आधार पर विभाजन ऊपर दिए गए एन्वायरनमेंट वेरिएबल पैटर्न के लिए एक आम कारण है।
एक माइग्रेशन चेकलिस्ट
जब आप किसी मौजूदा प्रोजेक्ट में एक एंडपॉइंट को दूसरे से बदलते हैं, तो एक छोटी सूची के अनुसार काम करें, सब कुछ एक साथ बदलने के बजाय।
- एंडपॉइंट की जाँच करें। curl से एक अनुरोध भेजें और पुष्टि करें कि आपको टेक्स्ट मिल रहा है।
GET /v1/modelsकॉल करें और जाँचें कि iduncensoredसूचीबद्ध है या नहीं। - तीनों मान बदलें। Base URL, कुंजी, मॉडल नाम, कुछ और नहीं। अभी प्रॉम्प्ट्स को न छुएँ।
- अपने मौजूदा टेस्ट चलाएँ। यदि आपके पास प्रॉम्प्ट रीग्रेशन टेस्ट हैं, तो उन्हें चलाएँ और नोट करें कि कौन से विफल होते हैं। विफलताएँ आमतौर पर व्यवहारिक होती हैं, जैसे कि आउटपुट फॉर्मेट में अंतर, न कि प्रोटोकॉल त्रुटियाँ।
- पैरामीटर जाँचें। उन ऑप्शन्स को हटाएँ जिनकी एंडपॉइंट को ज़रूरत नहीं है। तापमान, top_p, stop और seed को रखें यदि आप उनका उपयोग करते हैं।
- स्ट्रीमिंग और टूल्स को अलग-अलग परीक्षण करें। स्ट्रीमिंग बग अक्सर क्लाइंट कोड में छिपे होते हैं जो विशिष्ट चंक लेआउट मानता है। टूल कॉल के लिए एक ऐसा स्कीमा चाहिए जिसका मॉडल अच्छी तरह पालन करे, इसलिए अपने वास्तविक फ़ंक्शंस के साथ परीक्षण करें।
- वास्तविक ट्रैफ़िक पर लागत और लेटेंसी मापें। एक दिन के अनुरोधों की तुलना करें, एक प्रॉम्प्ट की नहीं।
इसे एक ब्रांच में या एक फीचर फ्लैग के साथ करें जो ट्रैफ़िक का एक छोटा हिस्सा नए एंडपॉइंट पर रूट करता है। चूंकि क्लाइंट कोड साझा है, रोलबैक एक एन्वायरनमेंट वेरिएबल बदलना है।
रीट्राइज़ और उपयोग का प्रबंधन करें
SDK डिफ़ॉल्ट रूप से कुछ विफलताओं को पुनः प्रयास करते हैं, लेकिन आपको 429 को स्वयं हैंडल करना चाहिए, क्योंकि प्रोडक्शन में समानांतर अनुरोध सीमाएँ वास्तविक होती हैं। रेट-लिमिट अपवाद को कैच करें, Retry-After (ओवरलोड पर 5) में दिए गए सेकंडों के लिए प्रतीक्षा करें, और कुछ बार पुनः प्रयास करें। विफल अनुरोधों के लिए चार्ज नहीं किया जाता है, इसलिए पुनः प्रयास आपके बैलेंस के लिए सुरक्षित हैं।
हर कॉल पर usage.prompt_tokens और usage.completion_tokens लॉग करें। मूल्य $0.15 प्रति 1M इनपुट टोकन और $0.50 प्रति 1M आउटपुट टोकन है, इसलिए 2,000 इनपुट और 600 आउटपुट टोकन वाली एक कॉल का खर्च 2,000 × $0.15 / 1M + 600 × $0.50 / 1M = $0.0003 + $0.0003 = $0.0006 होता है। रिस्पॉन्स हेडर में शेष क्रेडिट के लिए X-Balance-USD भी शामिल होता है। टॉप-अप और बोनस के लिए मूल्य निर्धारण पेज देखें, और पूर्ण पैरामीटर सूची के लिए दस्तावेज़ देखें।
संपादक और अन्य टूल्स
ये तीन मान किसी भी टूल में OpenAI-कम्पैटिबल प्रोवाइडर सेटिंग के साथ लागू होते हैं। Cursor में DeepSeek-शैली API का उपयोग पर लेख ऐसे एक एडिटर के माध्यम से समझाता है। प्रत्येक टूल में, फ़ील्ड्स थोड़े अलग लेबल किए गए हैं, लेकिन आप हमेशा आधार URL (जो /v1 पर समाप्त होता है), कुंजी और मॉडल नाम दर्ज करते हैं।
अधिक गाइड
प्रश्न और उत्तर
क्या मुझे एक आधिकारिक DeepSeek SDK इंस्टॉल करना है?
आपको वेंडर-विशिष्ट पैकेज की आवश्यकता नहीं है। DeepSeek अलग बेस URL के साथ OpenAI SDK का उपयोग करने का दस्तावेजीकरण प्रदान करता है; वर्तमान विवरण के लिए उनका दस्तावेज़ देखें।
मुझे इस एंडपॉइंट का उपयोग करने के लिए किन तीन मानों को बदलना है?
बेस URL (https://api.deepseekapi.top/v1), आपकी API कुंजी, और मॉडल id uncensored।
क्या मेरा मौजूदा OpenAI कोड बिना किसी बदलाव के काम करेगा?
चैट, स्ट्रीमिंग, JSON मोड और टूल कॉलिंग समान फॉर्मेट का पालन करते हैं, इसलिए ज्यादातर हाँ। एम्बेडिंग्स, इमेजेज और ऑडियो पेश नहीं किए जाते हैं, और उत्तर अलग होते हैं क्योंकि मॉडल अलग है।
क्या SDK कुंजी को सही तरीके से भेजता है?
हाँ, यह अपने आप Authorization: Bearer को आपकी कुंजी के साथ भेजता है।
आपकी कुंजी बस एक फॉर्म दूर है
एक खाता बनाएँ, कुंजी कॉपी करें, बेस URL बदलें। सेटअप यही है।