pay-per-token मॉडल को समझना
पे-एज़-यू-टोकन बिलिंग का अर्थ है कि आप केवल अपने उपभोग के लिए भुगतान करते हैं, न कि सर्वर तक आइडल एक्सेस के लिए। पारंपरिक मासिक सब्सक्रिप्शन के विपरीत, यह मॉडल लागत को सीधे उपयोग वॉल्यूम से जोड़ता है। आपको एंडपॉइंट द्वारा प्रोसेस किए गए वास्तविक इनपुट और आउटपुट टोकन के आधार पर शुल्क लगाया जाता है।
अधिकतर प्रदाता इनपुट और आउटपुट टोकन के लिए अलग-अलग दरें लागू करते हैं। उदाहरण के लिए, कुछ अनसेंसर्ड LLM सेवाएं इनपुट को प्रति मिलियन टोकन $0.15 और आउटपुट को प्रति मिलियन टोकन $0.50 पर प्राइसिंग करती हैं। यह अंतर इसलिए मौजूद है क्योंकि टेक्स्ट जनरेट करने में इसे पढ़ने की तुलना में काफी अधिक कंप्यूट की आवश्यकता होती है।
अपने टोकन गणना की क्लोजली निगरानी करें। यदि आप आउटपुट लंबाई का अनुमान नहीं लगाते हैं, तो एक अकेली लंबी प्रतिक्रिया आपकी इनपुट लागत से अधिक हो सकती है। हमेशा प्रतिक्रिया हेडर्स या बॉडी में लौटाए गए उपयोग मेटाडेटा की जांच करें ताकि आप अपनी खर्च की सटीक निगरानी कर सकें।
आपकी स्ट्रीमिंग प्रतिक्रिया जल्दी क्यों कट जाती है
स्ट्रीमिंग रिस्पॉन्स शुरुआत में ही कट ऑफ हो जाते हैं क्योंकि क्लाइंट अक्सर पहले कुछ चंक्स के बाद सुनना बंद कर देते हैं। सर्वर डेटा रियल-टाइम में भेजता है, लेकिन यदि आपका एप्लिकेशन स्ट्रीम को सही ढंग से हैंडल नहीं करता है, तो यह समय से पहले डिस्कनेक्ट हो सकता है।
प्रत्येक चंक आंशिक पाठ शामिल करता है। आपको इन चंक्स को जोड़कर पूर्ण प्रतिक्रिया बनानी होगी। यदि आप मध्यवर्ती चंक्स को छोड़ देते हैं, तो आप डेटा खो देते हैं। अंतिम चंक आमतौर पर पूर्ण उपयोग आंकड़े शामिल करता है।
अपने टाइमआउट सेटिंग्स की जाँच करें। कुछ नेटवर्क सक्रियता के कुछ सेकंड बाद कनेक्शन तोड़ देते हैं। सुनिश्चित करें कि आपका क्लाइंट स्ट्रीम में अंतरिम विरामों को संभाल लेता है। लंबे पाठ जनरेट करने वाले बड़े भाषा मॉडल्स के साथ यह आम बात है।
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Tell the story in second person."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
100k कॉन्टेक्स्ट विंडो को सही ढंग से हैंडल करना
संदर्भ विंडो की सीमा में आपकी प्रॉम्प्ट और उत्पन्न की गई पूर्णता (completion) दोनों शामिल हैं। आप प्रॉम्प्ट में 100k टोकन नहीं भेज सकते और प्रतिक्रिया में और 100k की उम्मीद कर सकते हैं। कुल संयुक्त लंबाई सीमा के भीतर रहनी चाहिए।
यदि आप एक बड़ा प्रॉम्प्ट भेजते हैं, तो रिस्पॉन्स के लिए आपके पास कम जगह होती है। उदाहरण के लिए, एक 90k टोकन वाला प्रॉम्प्ट आउटपुट के लिए केवल 10k टोकन छोड़ता है। इससे लंबे जवाब अचानक ट्रंक हो सकते हैं।
अपनी ओर से टोकन गिनती लागू करें। मॉडल के एन्कोडिंग से मेल खाने वाला टोकनाइज़र उपयोग करें। इससे सुनिश्चित होता है कि अनुरोध के दौरान आप सीमा से अधिक नहीं जाते। यदि आप ऐसा करते हैं, तो सर्वर एक त्रुटि लौटाएगा।
चैट इतिहास में पुराने संदेशों को ट्रंक करने पर विचार करें। यह सबसे हालिया कॉन्टेक्स्ट को बनाए रखते हुए सीमाओं के भीतर रहता है। लंबी सत्रों के दौरान बातचीत के सहसंबद्धता को बनाए रखने के लिए यह महत्वपूर्ण है।
क्रिप्टो टॉप-अप: आपके बैलेंस में अपडेट क्यों नहीं हुआ
क्रिप्टो टॉप-अप तब अपडेट नहीं होते हैं जब आप गलत नेटवर्ड पर टोकन भेजते हैं। हमारा API TRC20 पर USDT और Base पर USDC स्वीकार करता है। TRC20 पता पर Ethereum पर USDT भेजने से धन खो जाएगा।
भेजने से पहले नेटवर्क प्रीफिक्स की जांच करें। जमा पेज प्रत्येक मुद्रा के लिए विशिष्ट पता और नेटवर्क दिखाता है। सभी USDT पतों को अदला-बदली योग्य मानें नहीं।
आवश्यक पुष्टियों की प्रतीक्षा करें। लेनदेन तुरंत नहीं होते। सिस्टम आपके खाते में तभी क्रेडिट देता है जब ब्लॉकचेन ट्रांसफर की पुष्टि कर देता है। यह डबल-स्पेंडिंग समस्याओं को रोकता है।
ब्लॉक एक्सप्लोरर पर ट्रांजेक्शन हैश की जाँच करें। यदि बैलेंस अपडेट नहीं होता है, तो समर्थन के लिए हैश प्रदान करें। वे ट्रांसफर की मैन्युअल सत्यापन कर सकते हैं। यह असंगतियों को हल करने का सबसे तेज़ तरीका है।
अनसेंसर्ड मॉडल्स में फंक्शन कॉलिंग त्रुटियों को ठीक करना
फंक्शन कॉलिंग त्रुटियां अक्सर अनकैप्ड मॉडल में गैर-मानक JSON फॉर्मेटिंग से उत्पन्न होती हैं। ये मॉडल कठोर संरचना पर रचनात्मकता को प्राथमिकता देते हैं, जिससे कठोर पार्सर टूट सकते हैं।
रिस्पॉन्स फॉर्मेट को json_object कठोर आउटपुट लागू करने के लिए। इससे खराब-प्रारूप वाले JSON की संभावना कम होती है। हालांकि, इससे रचनात्मकता में थोड़ी कमी आ सकती है।
पarsing से पहले प्रतिक्रिया की जांच करें। JSON डिकोड त्रुटियों को संभालने के लिए एक try-catch ब्लॉक का उपयोग करें। पarsing विफल होने पर कम तापमान के साथ पुनः प्रयास करें। यह अधिक निर्धारक आउटपुट को प्रोत्साहित करता है।
from openai import OpenAI
client = OpenAI(base_url="https://api.aiapisubscription.com/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)
रेट लिमिट्स: 300 RPM बर्स्ट्स को संभालना
रेट लिमिट्स आपको प्रति मिनट कितने अनुरोध भेज सकते हैं, इस पर प्रतिबंध लगाते हैं। हमारी API प्रति कुंजी प्रति मिनट 300 अनुरोध की अनुमति देती है। इस सीमा को पार करने पर 429 स्टेटस कोड लौटाया जाता है।
जब आप सीमा पर पहुंच जाएं तो एक्सपोनेंशियल बैकऑफ लागू करें। पीक उपयोग के दौरान सर्वर पर भार न पड़ने के लिए अनुरोध को छोटी देरी के बाद रीट्राई करें।
अपने अनुरोध आवृत्ति की निगरानी करें। यदि आप बहुत तेजी से अनुरोध भेजते हैं, तो आप सीमा को ट्रिगर कर सकते हैं। अपने अनुरोधों को समान रूप से अलग करें। यह स्थिर प्रदर्शन सुनिश्चित करता है।
यदि आपको उच्च थ्रूपुट की आवश्यकता है तो कई कुंजियाँ उपयोग करें। प्रत्येक कुंजी की अपनी सीमा होती है। इससे आपको एकल बाटलनेक को पार किए बिना अपनी एप्लिकेशन को स्केल करने की अनुमति मिलती है।
JSON मोड विफलताएं और रिस्पॉन्स फॉर्मेटिंग
जब मॉडल अमान्य सिंटैक्स लौटाता है, तो JSON मोड विफल हो जाता है। यह उन अनसेंसर्ड मॉडल्स में आम है जो संरचित डेटा के बजाय प्राकृतिक भाषा को प्राथमिकता देते हैं।
का उपयोग करें response_format JSON आउटपुट को लागू करने के लिए पैरामीटर। यह मॉडल को अपनी प्रतिक्रिया को मान्य JSON के रूप में संरचित करने के लिए कहता है। हालांकि, यह सटीकता की गारंटी नहीं देता।
JSON स्कीमा का उपयोग करके आउटपुट की जांच करें। यह सुनिश्चित करता है कि डेटा आपकी अपेक्षित संरचना से मेल खाता है। यदि सत्यापन विफल हो जाता है, तो पुनः प्रयास का अनुरोध करें या प्रॉम्प्ट को समायोजित करें।
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.aiapisubscription.com/v1", apiKey: process.env.API_KEY });
const resp = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);
टोकन गणना असंगतियों को डिबग करना
जब आपका क्लाइंट मॉडल से अलग टोकनाइज़र का उपयोग करता है तो टोकन गिनती में असंगतियां उत्पन्न होती हैं। इससे लागत के अनुमान असटीक हो जाते हैं।
मॉडल वेंडर द्वारा प्रदान की गई आधिकारिक टोकनाइज़र का उपयोग करें। यह सुनिश्चित करता है कि आपकी गणना वास्तविक उपयोग से मेल खाती है। थर्ड-पार्टी टोकनाइज़र विशेष वर्णों को अलग तरह से हैंडल कर सकते हैं।
रिस्पॉन्स में यूसेज मेटाडेटा की जाँच करें। यह सटीक टोकन गणना प्रदान करता है। असंगतियों की पहचान करने के लिए इसे अपने स्थानीय गणना से तुलना करें।
विशेष टोकनों के लिए खाता रखें। इनमें सिस्टम प्रॉम्प्ट और फंक्शन परिभाषाएं शामिल हैं। वे टोकन का उपभोग करते हैं लेकिन कच्चे टेक्स्ट में दिखाई नहीं दे सकते हैं।
जब लोकल से API पर स्विच करें
स्थानीय हार्डवेयर आपकी लेटेंसी या स्केल की आवश्यकताओं को पूरा नहीं कर सकता है, तो एक एपीआई पर स्विच करें। स्थानीय रूप से एक बड़े मॉडल को चलाने के लिए महंगे GPU और महत्वपूर्ण बिजली की आवश्यकता होती है।
APIs हार्डवेयर रखरखाव के बिना स्केलेबिलिटी प्रदान करते हैं। आप अचानक ट्रैफ़िक स्पाइक्स को आसानी से संभाल सकते हैं। यह उत्पादन वातावरण के लिए आदर्श है।
लागत पर विचार करें। यदि आप एक लोकल मॉडल को 24/7 चलाते हैं, तो बिजली और हार्डवेयर लागत API उपयोग से अधिक हो सकती है। पे-पर-टोकन बिलिंग तभी ही लागत-प्रभावी है यदि उपयोग बदलने वाला (variable) है।
curl https://api.aiapisubscription.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Summarize the technical specs of the new GPU."}]
}'