Wu Xianzhi APIस्थानांतरण गाइड
API रिले माइग्रेशन गाइड: OpenAI, OpenRouter से बिना सेंसर API पर स्विच करें
अगर आपका प्रोजेक्ट अभी OpenAI, OpenRouter या किसी API रिले का उपयोग कर रहा है और आप एक ऐसे बिना सेंसर API पर स्विच करना चाहते हैं जो वैध रिक्वेस्ट्स को रिजेक्ट नहीं करता, तो आपको सिर्फ तीन कॉन्फ़िगरेशन बदलने होंगे: base_url, कुंजी और मॉडल नाम। यह आर्टिकल पहले रिले और डेडिकेटेड बिना सेंसर मॉडल के बीच अंतर स्पष्ट करता है, फिर पैरामीटर टेबल, एनवायरनमेंट वेरिएबल्स का उपयोग करके पुराने और नए इंटरफ़ेस को समानांतर चलाने का कोड, लॉन्च से पहले की चेकलिस्ट और माइग्रेशन के दौरान सबसे आम गलतियों पर चर्चा करता है।
अपडेट किया गया:
मुख्य बिंदु
- रिले द्वारा पुनः बेचे जाने वाले मॉडल वही हैं, कंटेंट पॉलिसी अपरिवर्तित; रिजेक्शन समस्या केवल डेडिकेटेड बिना सेंसर मॉडल से हल होती है
- माइग्रेशन में सिर्फ तीन जगह बदलें: base_url को https://api.wuxianzhiapi.com/v1,密钥,模型名 uncensored पर सेट करें
- embeddings, इमेज, ऑडियो और फाइन-ट्यूनिंग सपोर्ट नहीं करते; इन क्षमताओं के लिए पुरानी सर्विस का ही उपयोग करें
- ग्रेड स्विचिंग के लिए एनवायरनमेंट वेरिएबल्स का उपयोग करें, समस्या आने पर एक वेरिएबल बदलकर वापस आ सकते हैं
API रिले और डेडिकेटेड बिना सेंसर मॉडल में क्या अंतर है
सबसे पहले अवधारणा स्पष्ट करें, अन्यथा माइग्रेशन के दौरान दिशा गलत चुनने का खतरा रहता है। सामान्य API एग्रीगेटर मूल रूप से बड़ी कंपनियों के मॉडल के कॉल क्रेडिट को पुनर्विक्रित या एकीकृत करते हैं, और बाहर OpenAI-संगत एक URL प्रदान करते हैं, जिससे आप एक ही SDK का उपयोग करके विभिन्न मॉडल स्विच कर सकते हैं। यह 'पहुंच और भुगतान' की समस्या को हल करता है, जैसे कि एक ही प्रवेश द्वार और एक ही बिलिंग, लेकिन मॉडल वही रहता है, मूल कंपनी की सामग्री नीति में कोई कमी नहीं: जिन विषयों को अस्वीकार किया जाना चाहिए, उन्हें वही अस्वीकार किया जाएगा, एक अलग एग्रीगेटर URL बदलने से यह नहीं बदलेगा।
विशेष बिना सेंसर मॉडल एक अलग मामला है। यह किसी अन्य मॉडल को आगे नहीं बढ़ाता, बल्कि एक अलग प्रदान किया गया मॉडल है, जिसमें वयस्क सामग्री, काल्पनिक रचनाएँ और विवादास्पद विषयों के लिए अस्वीकृति नहीं होती। Wu Xianzhi API केवल एक मॉडल प्रदान करता है, मॉडल का नाम uncensored है, इंटरफ़ेस OpenAI प्रारूप के साथ संगत है, इसलिए माइग्रेशन लागत कम है, लेकिन इसकी सीमाएँ स्पष्ट हैं: यह केवल टेक्स्ट करता है, छवि, ऑडियो, एम्बेडिंग्स और फाइन-ट्यूनिंग का समर्थन नहीं करता; यदि इसमें बालकों से संबंधित यौन सामग्री है चाहे वह काल्पनिक हो या नहीं, तो उसे अस्वीकार कर दिया जाएगा और 403 लौटाया जाएगा।
इसलिए माइग्रेशन से पहले खुद से पूछें: क्या आपकी समस्या 'अस्थिर इंटरफ़ेस या महंगा मूल्य' है, या 'मॉडल लगाatik आपकी वैध आवश्यकताओं को अस्वीकार कर रहा है'? यदि दूसरा है, तो एग्रीगेटर बदलने का कोई मतलब नहीं है, विशेष बिना सेंसर API पर जाना ही उपाय है। कई टीमें दोनों को एक साथ रखती हैं: सामान्य कार्यों के लिए मूल इंटरफ़ेस का उपयोग जारी रखें, और बिना सेंसर आउटपुट वाले अनुरोधों को यहाँ अलग से रूट करें, आगे विस्तार से बताया जाएगा कि इसे कैसे करें।
OpenAI या OpenRouter से माइग्रेशन के लिए तीन स्थान बदलें
चाहे आप OpenAI, OpenRouter जैसे एग्रीगेटर या किसी API एंडपॉइंट का उपयोग कर रहे हों, यदि कोड OpenAI-कम्पैटिबल SDK का उपयोग करता है, तो केवल तीन चीज़ें बदलें: base_url को https://api.wuxianzhiapi.com/v1 पर बदलें; api_key को /get-api-key/ से प्राप्त कुंजी से बदलें; model को uncensored पर सेट करें। अन्य कोई मॉडल नहीं है, GET /v1/models में केवल यही है।
import os
from openai import OpenAI
messages = [{"role": "user", "content": "你好"}]
# 迁移前(示意):
# client = OpenAI(api_key=os.environ["OLD_API_KEY"], base_url="旧地址")
# resp = client.chat.completions.create(model="旧模型名", messages=messages)
# 迁移后:只动 base_url、api_key、model 这三处
client = OpenAI(
base_url="https://api.wuxianzhiapi.com/v1",
api_key=os.environ["WUXIANZHI_API_KEY"],
)
resp = client.chat.completions.create(model="uncensored", messages=messages, max_tokens=100)
print(resp.choices[0].message.content)Node.js के लिए भी वही करें: new OpenAI({...}) में baseURL और apiKey को बदल दें। यदि आपका प्रोजेक्ट सीधे HTTP अनुरोध का उपयोग करता है, तो अनुरोध URL को https://api.wuxianzhiapi.com/v1/chat/completions पर बदलें और हेडर में Authorization: Bearer <API कुंजी> रखें। Python, Node.js और cURL के लिए पूर्ण कोड उदाहरण कोड उदाहरण में देखें।
curl https://api.wuxianzhiapi.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $WUXIANZHI_API_KEY" \
-d '{"model":"uncensored","messages":[{"role":"user","content":"你好"}],"max_tokens":50}'
पैरामीटर तुलना: कौन सा उपयोगी है, कौन सा अनुपयुक्त है
नीचे दी गई तालिका माइग्रेशन के दौरान सबसे अधिक सामने आने वाले फ़ील्ड्स को कवर करती है। सिद्धांत यह है: संवाद से संबंधित, OpenAI प्रारूप के मुख्य फ़ील्ड्स सामान्यतः उपयोग किए जा सकते हैं; 'अन्य मॉडल, अन्य मोडैलिटी' से संबंधित फ़ीचर्स यहाँ नहीं हैं।
| पुराना उपयोग | इस पर कैसे हैंडल करें |
|---|---|
model (जैसे विभिन्न GPT मॉडल) | uncensored को बदलना आवश्यक है |
messages (सिस्टम / उपयोगकर्ता / सहायक / टूल) | फॉर्मेट समान है, सीधे उपयोग करें |
max_tokens | डिफ़ॉल्ट 2048, अधिकतम 32,000; इससे अधिक पर 400 लौटेगा |
stream: true | सपोर्टेड है, अंत में एक यूसेज ब्लॉक स्वचालित रूप से जोड़ा जाएगा |
tools / tool_choice | सपोर्टेड है, OpenAI फॉर्मेट में |
| कॉन्टेक्स्ट विंडो लंबाई | प्रॉम्प्ट और आउटपुट का संयुक्त कुल 100,000 टोकन |
| रिक्वेस्ट बॉडी साइज | 8 MB से अधिक नहीं |
| रेट लिमिट | प्रति कुंजी प्रति मिनट 300 अनुरोध |
| वेक्टर एम्बेडिंग्स | समर्थित नहीं |
| छवि निर्माण / छवि पहचान, ऑडियो, वीडियो | समर्थित नहीं, केवल टेक्स्ट संसाधित करता है |
| फाइन-ट्यूनिंग | समर्थित नहीं |
| एक से अधिक मॉडल में स्विच करें | केवल एक मॉडल है, स्विच करने के लिए कोई सूची नहीं है |
तालिका में सूचीबद्ध अन्य वैकल्पिक फ़ील्ड्स के लिए, यह न मानें कि वे मूल कंपनी की तरह ही काम करेंगे। सुरक्षित तरीका यह है कि परीक्षण वातावरण में अलग से चलाकर व्यवहार की पुष्टि करें, फिर लाइव करें, विशिष्ट समर्थन स्थिति API दस्तावेज़ पर निर्भर करती है।
अनुपलब्ध क्षमताओं के लिए: वेक्टर, इमेज और ऑडियो के विकल्प
यदि आपका पुराना प्रोजेक्ट संवाद और एम्बेडिंग्स रीट्रीवल दोनों का उपयोग करता है, तो माइग्रेशन के दौरान 'सब कुछ यहाँ लाओ' न सोचें। यहाँ केवल टेक्स्ट संवाद प्रदान किया जाता है, इसलिए एम्बेडिंग्स से संबंधित कोड, जैसे कि ज्ञान भंडार रीट्रीवल, अर्थपूर्ण डुप्लिकेट हटाना, आपको अपने मूल एम्बेडिंग्स सेवा का उपयोग जारी रखना चाहिए, या स्वयं तैनात एम्बेडिंग्स समाधान पर स्विच करें। संवाद भाग यहाँ बदलें, रीट्रीवल भाग को वैसे ही रखें, दोनों एक-दूसरे को प्रभावित नहीं करते, यह सबसे आसान विभाजन है।
इमेज और ऑडियो के लिए भी यही लागू होता है। उदाहरण के लिए, यदि आपका उत्पाद 'टेक्स्ट + इमेज' प्रारूप में है, तो टेक्स्ट जनरेशन यहाँ से ले जाएं और इमेज जनरेशन के लिए अपने पुराने इमेज API का उपयोग जारी रखें। ऑडियो नैरेशन की आवश्यकता हो, तो टेक्स्ट जनरेशन के बाद इसे अपने मौजूदा ऑडियो सर्विस को सौंप दें। 'टेक्स्ट जनरेट करें' चरण को एक अलग फ़ंक्शन के रूप में अलग कर दें; भविष्य में अन्य क्षमताओं को कैसे भी जोड़ा जाए, बदलाव की सीमा बहुत कम होगी।
एक अन्य स्थिति यह है कि आपके कोड में कई मॉडल अलग-अलग कार्यों के लिए उपयोग किए जाते हैं, जैसे कि सस्ते मॉडल द्वारा वर्गीकरण और महंगे मॉडल द्वारा क्रिएशन। यहाँ केवल एक मॉडल है, इसलिए वर्गीकरण कार्य भी इसे ही करना होगा। किस्मत से, इनपुट कीमत $0.25 / 1M टोकन है, इसलिए आउटपुट छोटे होने वाले वर्गीकरण जैसे कार्यों का लागत बहुत कम है, max_tokens को छोटा सेट करने पर लागत लगभग नगण्य हो जाती है। मूल्य विवरण के लिए मूल्य पृष्ठ देखें।
समानांतर रन: एनवायरनमेंट वेरिएबल के साथ दो इंटरफ़ेस के बीच स्विच करें
माइग्रेशन में सबसे बड़ी गलती 'एक बार में सब बदल देना' है। अधिक स्थिर तरीका कोड में एक पतली एबस्ट्रैक्शन लेयर बनाना है और एनवायरनमेंट वेरिएबल के आधार पर इंटरफ़ेस चुनना है। इससे आप छोटी मात्रा में ट्राफिक या केवल कुछ फीचर्स को नए इंटरफ़ेस पर भेज सकते हैं। यदि कोई समस्या आती है, तो केवल एक वेरिएबल बदलकर वापस आ सकते हैं। चूंकि दोनों ओर OpenAI-कम्पैटिबल फॉर्मेट है, इसलिए एबस्ट्रैक्शन लेयर बनाना बहुत आसान है।
import os
from openai import OpenAI
PROVIDERS = {
"old": {
"base_url": os.environ.get("OLD_BASE_URL", ""),
"api_key": os.environ.get("OLD_API_KEY", ""),
"model": os.environ.get("OLD_MODEL", ""),
},
"wuxianzhi": {
"base_url": "https://api.wuxianzhiapi.com/v1",
"api_key": os.environ.get("WUXIANZHI_API_KEY", ""),
"model": "uncensored",
},
}
def get_client(name=None):
name = name or os.environ.get("LLM_PROVIDER", "old")
cfg = PROVIDERS[name]
return OpenAI(base_url=cfg["base_url"], api_key=cfg["api_key"]), cfg["model"]
def chat(messages, provider=None, **kwargs):
client, model = get_client(provider)
return client.chat.completions.create(model=model, messages=messages, **kwargs)
# 通用任务走旧接口,需要无审查输出的请求显式指定新接口
resp = chat([{"role": "user", "content": "写一个黑色幽默的短故事"}],
provider="wuxianzhi", max_tokens=800)
print(resp.choices[0].message.content)स्विच की ग्रैन्युलarity तीन स्तरों पर हो सकती है: एनवायरनमेंट के आधार पर (पहले टेस्ट एनवायरनमेंट में स्विच करें), फ़ंक्शन के आधार पर (केवल क्रिएशन API को स्विच करें), या यूज़र के आधार पर (कुछ खाते ग्रेड फ़ेज़ में जाएं)। किसी भी स्तर पर, लॉग में provider फ़ील्ड को छोड़ने की सलाह दी जाती है, ताकि अंतर होने पर तुलना करके समस्या का निवारण किया जा सके। चैट इतिहास को मानक messages एरे के रूप में स्टोर करने की भी सलाह दी जाती है, ताकि उसी सत्र को दोनों ओर निरंतर चलाया जा सके।
स्विच चेकलिस्ट
लाइव से पहले निम्नलिखित क्रम में जांच करें, इससे आइटम छूटने की संभावना लगभग शून्य है:
- /get-api-key/ पर रजिस्टर करें, कुंजी प्राप्त करें, और $0.50 के ट्रायल क्रेडिट (7 दिनों के लिए वैध) का उपयोग करके सत्यापित करें, पहले टॉप-अप करने की आवश्यकता नहीं है।
curl /v1/modelsका उपयोग करके सत्यापित करें कि कुंजी मान्य है और नेटवर्क एक्सेस योग्य है।base_url,api_key, औरmodelको एनवायरनमेंट वेरिएबल्स द्वारा संचालित करें, ताकि कुंजी कोड रिपॉजिटरी में न जाए।- कोड में हार्डकोडेड मॉडल नाम,
max_tokensमान और एम्बेडिंग्स कॉल्स की खोज करें। - स्ट्रीमिंग कोड की जांच करें, ताकि अंतिम
choicesखाली होने वाले उपयोग ब्लॉक के साथ संगत हो। - 429 और 503 के लिए एक्सपोनेंशियल बैकऑफ़ रीट्राई जोड़ें, 402 और 403 के लिए स्पष्ट एरर ब्रांच जोड़ें।
- अपने वास्तविक प्रॉम्प्ट्स से एक रीग्रेशन नमूना चलाएं, मुख्य रूप से देखें कि पहले अस्वीकृत किए गए भाग का आउटपुट सामान्य है या नहीं।
- पहले कम ट्रैफ़िक ग्रेड करें, उपयोग और लेटेंसी की तुलना करें, ठीक होने पर विस्तार करें।
- सुनिश्चित करें कि उत्पाद वयस्क उपयोगकर्ताओं के लिए है और इसका उपयोग कानूनी है; यह API का उपयोग करने की पूर्व शर्त है।
माइग्रेशन के दौरान सबसे आम कुछ गलतियाँ
मॉडल नाम भूल जाना। पुराने कोड में gpt मॉडल या किसी एग्रीगेटर प्लेटफ़ॉर्म का मॉडल पथ वैसे ही भेजने पर त्रुटि प्रतिक्रिया मिलेगी। मॉडल नाम का ग्लोबल खोज करें, यह सुनिश्चित करने के लिए कि अंतिम आउटपुट uncensored है।
max_tokens सीमा से अधिक। कुछ परियोजनाएं मॉडल को लंबा लिखने के लिए max_tokens को 32,000 या उससे अधिक पर सेट करती हैं; यहाँ एक बार में अधिकतम 32,000 है, जिससे अधिक होने पर 400 लौटाया जाता है। इसके अलावा, प्रॉम्प्ट में max_tokens 100,000 टोकन से अधिक नहीं हो सकता है, इसलिए लंबे इनपुट अनुरोधों के लिए आउटपुट सीमा को उचित रूप से कम करें।
स्ट्रीमिंग उपयोग ब्लॉक। स्ट्रीम समाप्त होने से पहले सर्वर स्वचालित रूप से एक usage ब्लॉक जोड़ता है, जिसका choices खाली एरे होता है। यदि आपका पार्सिंग कोड chunk.choices[0] से सीधे मान निकालता है, तो अंतिम चरण में यह त्रुटि देगा। कुछ पुराने कोड में उपयोग के लिए stream_options मैन्युअली भेजा जाता है, जो यहाँ आवश्यक नहीं है।
'बिना सेंसर' को 'बिना सीमा' समझना। वैध वयस्क सामग्री, काल्पनिक और विवादास्पद विषयों को रिजेक्ट नहीं किया जाएगा, लेकिन किशोरों से जुड़ी यौन सामग्री को हमेशा ब्लॉक किया जाएगा, चाहे वह काल्पनिक हो या रोलप्ले; 403 content_blocked लौटाया जाएगा। उत्पाद को स्वयं वयस्क उपयोगकर्ताओं की प्रवेश जाँच करनी चाहिए।
बैलेंस और ट्रायल की समाप्ति। ट्रायल क्रेडिट 7 दिनों बाद समाप्त हो जाता है, और बैलेंस खत्म होने पर 402 त्रुटि मिलती है, जिसका कोड no_credit है। एप्लिकेशन में इस त्रुटि को एक स्पष्ट उपयोगकर्ता संदेश में बदलें, न कि सामान्य 'सर्विस एरर' में। विशिष्ट उपयोग मामलों के लिए उपयोग मामले लेख देखें।
अक्सर पूछे जाने वाले प्रश्न
माइग्रेशन के बाद क्या पुराने प्रॉम्प्ट्स को फिर से लिखना होगा?
फॉर्मेट बदलने की आवश्यकता नहीं है, messages संरचना पूरी तरह समान है। लेकिन उन 'जेलब्रेक' शुरुआतों को हटा दें जो पहले रिजेक्शन से बचने के लिए लिखी गई थीं; केवल भूमिका और कार्य को स्पष्ट रूप से लिखें, इससे टोकन बचते हैं और स्थिरता बढ़ती है।
क्या माइग्रेशन के दौरान पुराने और नए API एंडपॉइंट्स दोनों को बनाए रख सकते हैं?
हाँ, और यह अनुशंसित है। एनवायरनमेंट वेरिएबल्स का उपयोग base_url, कुंजी और मॉडल नाम निर्धारित करने के लिए करें, पहले कुछ फ़ीचर्स या कुछ उपयोगकर्ताओं को नए API एंडपॉइंट पर भेजें, और यदि कोई समस्या आए तो केवल एक वेरिएबल बदलकर वापस जा सकते हैं।
क्या पुराने API एंडपॉइंट से एम्बेडिंग्स कॉल्स को यहाँ ले आने पर क्या होगा?
यहाँ एम्बेडिंग्स API नहीं है, इसलिए अनुरोध 404 लौटाएगा। वेक्टर रीट्रीवल के लिए पुरानी सेवा का उपयोग जारी रखें, केवल चैट अनुरोधों को यहाँ स्विच करें।
कैसे पता लगाएं कि माइग्रेशन के बाद प्रदर्शन में सुधार हुआ है या नहीं?
पहले अस्वीकृत या संशोधित किए गए वास्तविक प्रॉम्प्ट्स का एक सेट लेकर रीग्रेशन तुलना करें, अस्वीकृति दर, प्रतिक्रिया की लंबाई और usage में टोकन संख्या को रिकॉर्ड करें। नमूने आपके अपने व्यापार से होने चाहिए, न कि इंटरनेट के सामान्य टेस्ट सेट से।
केवल फॉर्म भरें और कुंजी प्राप्त करें
खाता बनाएं, कुंजी कॉपी करें, Base URL बदलें। कॉन्फ़िगरेशन इतना ही आसान है।
API कुंजी प्राप्त करें