वाक्यांश का अर्थ क्या है
लोग "local LLM OpenAI API" दो संबंधित चीज़ों के लिए उपयोग करते हैं। पहली एक भाषा मॉडल है जिसे आप स्वयं चलाते हैं, लैपटॉप या होम सर्वर पर, जो एक स्थानीय पोर्ट पर सुनता है और OpenAI चैट फॉर्मेट का उपयोग करता है। दूसरी वह आदत है जब आप अपने ऐप को उस फॉर्मेट के लिए लिखते हैं ताकि उसके पीछे का मॉडल बदला जा सके।
यह फॉर्मेट एक सरल अनुबंध है। आपका एप्लिकेशन model नाम और messages की एक सूचना भेजता है, जिनमें से प्रत्येक की भूमिका system, user या assistant होती है। सर्वर उत्पन्न संदेश वाले JSON ऑब्जेक्ट के साथ जवाब देता है, या यदि आप स्ट्रीमिंग अनुरोध करें तो छोटे-छोटे चंक्स की स्ट्रीम के साथ। Python और JavaScript के लिए आधिकारिक SDKs इसका उपयोग करते हैं, और वे आपको बेस URL ओवरराइड करने की अनुमति देते हैं, जो ही मुख्य चाल है।
अनेक स्थानीय उपकरण इस अनुबंध को प्रदर्शित करते हैं। Ollama, LM Studio, llama.cpp सर्वर और vLLM प्रत्येक OpenAI-शैली वाले एंडपॉइंट प्रदान करते हैं। होस्टेड सेवाएं भी ऐसा ही करती हैं, इसलिए क्लाइंट कोड की उन्हीं बीस पंक्तियाँ किसी भी एक से बातचीत कर सकती हैं। इस साइट पर एंडपॉइंट होस्टेड प्रकार का है। यह POST /v1/chat/completions और GET /v1/models स्वीकार करता है, और इसे https://api.onekeyllmapi.com/v1 पर पहुँचा जा सकता है।
लोकल बनाम होस्टेड एक नज़र में
सामान्यतः कोई भी बेहतर नहीं है। वे प्रयास देकर नियंत्रण प्राप्त करते हैं। तालिका श्रेणी के लिए लागू रहने वाले अंतर पर टिकी रहती है, किसी विशेष उत्पाद पर नहीं।
| प्रश्न | लोकल रनर | होस्टेड OpenAI-शैली API |
|---|---|---|
| जहाँ प्रॉम्प्ट जाते हैं | आपके मशीन पर रहते हैं | HTTPS के माध्यम से प्रोवाइडर तक जाएँ |
| हार्डवेर | आप GPU या CPU और मेमोरी प्रदान करते हैं | आपकी ओर से कोई नहीं |
| मॉडल साइज़ | आपकी मेमोरी द्वारा सीमित | जो भी प्रोवाइडर प्रदान करता है |
| लागत मॉडल | हार्डवेयर और पावर | प्रति टोकन, यहाँ प्रीपेड क्रेडिट से |
| उपलब्धता | जब तक आपकी मशीन चालू है | सदैव-चालू सर्वर, साझा सीमाएँ |
| सेटअप | इंस्टॉल करें, वेइट्स डाउनलोड करें, ट्यून करें | एक कुंजी बनाएँ, बेस URL सेट करें |
यदि आपका डेटा कभी भी उस मशीन से बाहर नहीं जाना चाहिए जिसे आप नियंत्रित करते हैं, तो स्थानीय बेहतर है और होस्टेड गलत उपकरण है। यदि आपको अपनी हार्डवेयर से बड़ा मॉडल चाहिए, या एक बॉट जो कई स्थानों से पहुँच योग्य रहे, तो होस्टेड बेहतर है। एक सामान्य सेटअप दोनों को रखता है और कार्य के अनुसार चयन करता है।
स्थानीय से होस्टेड पर क्लाइंट बदलना
यदि आपका कोड पहले से ही एक स्थानीय रनर से बात कर रहा है, तो स्थानांतरण तीन मानों का है। बाकी सब कुछ, जिसमें संदेश बनाने और स्ट्रीम किए गए चंक्स को पढ़ने का तरीका शामिल है, वही रहता है।
- बेस URL. अपने स्थानीय पते के बजाय
https://api.onekeyllmapi.com/v1का उपयोग करें। - API कुंजी. लोकल सर्वर अक्सर कुंजी को नज़रअंदाज़ करते हैं। एक होस्टेड सर्वर इसे
Authorization: Bearer <key>के रूप में आवश्यकता करता है, और SDK इसे आपके लिए भेजता है। - मॉडल ID. स्थानीय नाम वही हैं जो आपने प्राप्त किया है। यहाँ ID
uncensoredहै।
लचीलापन बनाए रखने का एक व्यवस्थित तरीका यह है कि तीनों मान एनवायरनमेंट वेरिएबल्स से पढ़ें, ताकि एक ही फ़ाइल दोनों जगह काम कर सके।
import os
from openai import OpenAI
client = OpenAI(
base_url=os.environ.get("LLM_BASE_URL", "https://api.onekeyllmapi.com/v1"),
api_key=os.environ.get("LLM_API_KEY", "YOUR_KEY"),
)
MODEL = os.environ.get("LLM_MODEL", "uncensored")
models = client.models.list()
print([m.id for m in models.data])
resp = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "Answer in two sentences."},
{"role": "user", "content": "Why do OpenAI-style endpoints make switching models easy?"},
],
temperature=0.5,
)
print(resp.choices[0].message.content)
कमांड लाइन से एक ही कॉल, जो जल्दी सॉफ्टवेयर परीक्षण (smoke test) के लिए उपयोगी है:
curl https://api.onekeyllmapi.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "uncensored", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 20}'
Node.js में पैटर्न समान है:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: process.env.LLM_BASE_URL ?? "https://api.onekeyllmapi.com/v1",
apiKey: process.env.LLM_API_KEY,
});
const res = await client.chat.completions.create({
model: process.env.LLM_MODEL ?? "uncensored",
messages: [{ role: "user", content: "Name three uses for JSON mode." }],
});
console.log(res.choices[0].message.content);
OpenAI-कम्पैटिबल क्या कवर करता है और क्या नहीं
सुसंगत का अर्थ है कि वायर फॉर्मेट मेल खाता है। इसका अर्थ यह नहीं है कि मूल सेवा द्वारा प्रदान की गई हर सुविधा उपलब्ध है। किसी वास्तविक एप्लिकेशन को माइग्रेट करने से पहले, इनमें से प्रत्येक को टारगेट के साथ जाँचें।
यह API क्या सपोर्ट करता है
POST /v1/chat/completionsपर चैट पूर्णताएँ औरGET /v1/modelsपर मॉडल सूची।stream: trueके साथ सर्वर-सेंट इवेंट्स (SSE) पर स्ट्रीमिंग, जिसमें स्ट्रीम के अंत में उपयोग की रिपोर्ट दी जाती है।toolsऔरtool_choiceके माध्यम से फ़ंक्शन कॉलिंग, स्ट्रीम किए गएtool_calls, और परिणामों कोrole: "tool"संदेशों के रूप में भेजा जाना।response_format: {"type": "json_object"}के माध्यम से JSON मोड।- नमूनाकरण नियंत्रण: temperature, top_p, stop, seed और पेनल्टी पैरामीटर पास किए जाते हैं।
यह क्या नहीं करता
- कोई इमेज, ऑडियो या वीडियो जनरेशन नहीं। यह केवल टेक्स्ट है।
- कोई एम्बेडिंग एंडपॉइंट और कोई फाइन-ट्यूनिंग नहीं। यदि आपका ऐप वेक्टर इंडेक्स बनाता है, तो आपको एक अलग एम्बेडिंग स्रोत की आवश्यकता होगी।
- केवल एक मॉडल। मॉडल एक स्वतंत्र प्रोवाइडर द्वारा चलाया जाने वाला ओपन-वेट मॉडल है। यह किसी बड़े वेंडर का आधिकारिक API नहीं है, और न ही यह वेंडर्स के बीच एक रूटर है, इसलिए आप ID बदलकर मॉडल फैमिलीज के बीच चयन नहीं कर सकते।
स्थानीय रनर कभी-कभी दूसरी दिशा में अलग होते हैं: एक स्थानीय सर्वर एम्बेडिंग्स रूट प्रदान कर सकता है या आपको कई मॉडल लोड करने दे सकता है, और कॉन्टेक्स्ट साइज़ वही होती है जिसे आप कॉन्फ़िगर करते हैं। प्रत्येक टारगेट के लिए दस्तावेज़ पढ़ें, और उस सूची की विशेषताओं की एक छोटी सूची बनाए रखें जो आपकी एप्लिकेशन वास्तव में उपयोग करती है। क्विकस्टार्ट दस्तावेज़ अनुरोध फ़ील्ड्स को पूर्ण रूप से दिखाते हैं।
कॉन्टेक्स्ट, लिमिट्स और लागत में अंतर
जब आप एक स्थानीय सर्वर छोड़ते हैं, तो तीन संख्याएँ बदल जाती हैं। पहली विंडो है। एक स्थानीय रनर की कॉन्टेक्स्ट विंडो लंबाई आपकी मेमोरी से जुड़ी एक सेटिंग है। यहाँ यह 100,000 टोकन पर स्थिर है, जो प्रॉम्प्ट और पूर्णता दोनों के लिए साझा है, और max_tokens वैकल्पिक है। दूसरी कन्करेंसी है। आपकी अपनी मशीन जितनी गहरी चाहें कतार में हो सकती है, लेकिन एक पूर्ण API कुंजी यहाँ 8 समानांतर अनुरोध और प्रति मिनट 300 की अनुमति देती है, और एक ट्रायल कुंजी 2 और 60 की। तीसरी बिल है।
होस्टेड उपयोग की लागत 1M इनपुट टोकन के लिए $0.15 और 1M आउटपुट टोकन के लिए $0.50 है, प्रीपेड क्रेडिट से पे-एज़-यू-गो। एक उदाहरण के रूप में दैनिक जॉब पर विचार करें: एक सारांशकारक 400 दस्तावेज़ों को संसाधित करता है, प्रत्येक 3,000 टोकन इनपुट और 300 टोकन आउटपुट के साथ। इनपुट 400 x 3,000 = 1,200,000 टोकन है, जिसकी लागत 1.2 x $0.15 = $0.18 है। आउटपुट 400 x 300 = 120,000 टोकन है, जिसकी लागत 0.12 x $0.50 = $0.06 है। दिन की कुल लागत $0.24 है, और 30-दिन का महीना $7.20 है। निर्णय लेने से पहले एक GPU को पावर करने और कार्ड की स्वयं की लागत की तुलना करें।
जब आप एक सीमा से अधिक हो जाते हैं, तो API HTTP 429 को rate_limited या concurrency कोड के साथ जवाब देता है। संक्षिप्त ओवरलोड के लिए यह Retry-After: 5 जोड़ता है। रीट्राई लॉजिक रखें जो प्रतीक्षा करता है और फिर से प्रयास करता है। विफल या अस्वीकृत अनुरोधों के लिए चार्ज नहीं किया जाता है। क्रेडिट कभी समाप्त नहीं होता, इसलिए एक निष्क्रिय माह का कोई खर्च नहीं होता।
एक स्ट्रीमिंग अनुरोध अपनी कन्करेंसी स्लॉट को तब तक बनाए रखता है जब तक स्ट्रीम समाप्त न हो जाए, इसलिए स्ट्रीम बंद करें जिसे आप पढ़ना बंद कर देते हैं। टॉप-अप $20 से शुरू होते हैं; टियर्स और बोनस मूल्य निर्धारण पृष्ठ पर हैं।
जब स्विच गलत व्यवहार करता है तो डीबगिंग
अधिकतर विफल माइग्रेशन कुछ ही कारणों पर टिकते हैं। इन्हें इस क्रम में काम करें।
- 404 या कनेक्शन त्रुटियाँ। बेस URL में शायद
/v1सफ़िक्स नहीं है, या एक अतिरिक्त पाथ है। इसे बिल्कुल इसी तरह से उपयोग करेंhttps://api.onekeyllmapi.com/v1। - प्रमाणीकरण त्रुटियाँ। कुंजी गायब है या गलत हेडर में भेजी गई है। फॉर्मेट है
Authorization: Bearer <key>। SDK उपयोगकर्ताओं को यह पुष्टि करनी चाहिए कि एन्वायरनमेंट वेरिएबल वास्तव में लोड हो गया है। - मॉडल नहीं मिला। पुराना स्थानीय मॉडल नाम अभी भी आपकी कॉन्फ़िगरेशन में है।
GET /v1/modelsकॉल करें और उस ID का उपयोग करें जो यह सूचीबद्ध करता है, जोuncensoredहै। - 429 लोड के तहत। आपने 8 समानांतर अनुरोध या 300 प्रति मिनट की सीमा को एक पूर्ण कुंजी के लिए पार कर लिया है। एक कतार या सेमाफोर जोड़ें।
- एक पैरामीटर अनदेखा हो रहा है। जांचें कि यह ऊपर सूचीबद्ध पास-थ्रू फ़ील्ड्स में से एक है, और एक स्थिर
seedऔर कम तापमान के साथ व्यवहार की तुलना करें।
प्रत्येक प्रतिक्रिया में एक X-Request-Id हेडर होता है। इसे अपने अनुरोध ID के बगल में लॉग करें ताकि बाद में किसी खराब जवाब का पता लगाया जा सके। यदि आप उत्पादन ट्रैफ़िक चला रहे हैं और समय के साथ गुणवत्ता को मापना चाहते हैं, तो साइट आलेख LLM Observability: Myths vs Facts एक अच्छा अगला पठन है। प्रतिक्रिया हेडर X-Balance-USD, X-RateLimit-Limit-Requests और X-RateLimit-Limit-Concurrency को कैप्चर करने के लिए भी मूल्यवान हैं।
प्रतिबद्धता के बिना आज़माना
कोड को साफ़-साफ़ पोर्ट करने का सबसे सस्ता तरीका यह है कि उसे एक बार चलाकर देखें। Google या ईमेल और पासवर्ड से एक खाता बनाएं, फिर API कुंजी पेज से $0.50 का मुफ़्त ट्रायल क्रेडिट क्लेम करें। इसे एक क्लिक में किया जा सकता है, कार्ड की आवश्यकता नहीं है, यह हर व्यक्ति के लिए एक बार सीमित है और 7 दिनों तक मान्य रहता है। API कुंजी पेज पर अपनी कुंजी प्राप्त करें, ऊपर दिए गए तीन पर्यावरण चर सेट करें और अपना मौजूदा टेस्ट सूइट चलाएं।
यदि टेस्ट पास हो जाते हैं और उपयोग आपकी बजट में फिट बैठता है, तो $20 से टॉप-अप करें, कार्ड (Visa, Mastercard, Apple Pay, Google Pay) या क्रिप्टो (TRC20 पर USDT, Base पर USDC) से। प्रॉम्प्ट्स को ट्रेनिंग के लिए उपयोग नहीं किया जाता है। मॉडल को कानूनी वयस्क उपयोग के लिए बिना कंटेंट रिफ्यूज़ के जवाब देने के लिए ट्यून्ड किया गया है, एक निश्चित नियम के साथ: नाबालिगों से जुड़ी यौन सामग्री नहीं।
