सामान्य फ्रेमवर्क में API मध्यस्थ कॉन्फ़िगरेशन: SDK से Dify तक
ट्रांसिट API जोड़ने के लिए सिर्फ तीन मान चाहिए: एंडपॉइंट, API कुंजी, मॉडल। हर फ्रेमवर्क इनका नाम अलग रखता है। हमने हर फ्रेमवर्क के लिए कोड दिया है और एरर ट्रबलशूटिंग लिस्ट भी जोड़ी है।
मुख्य बिंदु
- सभी endpoint और कुंजी को API_BASE और API_KEY पर्यावरण चर में रखें, कोड में प्लेन टेक्स्ट न दिखे।
- endpoint में /v1 सफ़िक्स जोड़ें, मॉडल नाम हमेशा uncensored रखें।
- LangChain base_url का उपयोग करता है, LlamaIndex का OpenAILike api_base का उपयोग करता है, नाम अलग हैं पर अर्थ समान है।
- Dify में "OpenAI-API-compatible" प्रदाता चुनें, मॉडल नाम, endpoint और context window का मान भरें।
पहले तीनों मान तैयार करें
कोई भी फ्रेमवर्क उपयोग करें, पहले इन तीनों चीज़ों की पुष्टि करें, बाकी कॉन्फ़िगरेशन केवल मान भरने का काम है।
- एंडपॉइंट:
https://api.llmzhongzhuan.com/v1। अंत में/v1रखें, लेकिन/chat/completionsन जोड़ें, SDK इसे जोड़ लेगा। - कुंजी: कुंजी प्राप्त करें पेज पर ईमेल और पासवर्ड से रजिस्टर करने पर तुरंत दिखती है, प्रति खाता एक, रीसेट करने पर पुरानी अमान्य हो जाती है।
- मॉडल नाम: केवल एक,
uncensored। आपGET /v1/modelsसे स्वयं पुष्टि कर सकते हैं।
सीमाएँ याद रखें: context window 100,000 token, max_tokens डिफ़ॉल्ट 2048, अधिकतम 32,000, प्रति कुंजी प्रति मिनट 300 अनुरोध। ये मान बाद में बार-बार उपयोग में आएँगे।
पर्यावरण चर की संरचना
API कुंजी को कोड में हार्डकोड करना सबसे आम कारण है। केवल एनवायरमेंट वेरिएबल पढ़ें। नीचे API_KEY और API_BASE का उपयोग करें।
# Linux / macOS:写进 ~/.zshrc 或 .env 加载脚本
export API_KEY="替换为你的密钥"
export API_BASE="https://api.llmzhongzhuan.com/v1"
# Windows PowerShell(仅当前会话)
$env:API_KEY = "替换为你的密钥"
$env:API_BASE = "https://api.llmzhongzhuan.com/v1"
.env फ़ाइल को .gitignore में जोड़ें। Python SDK OPENAI_API_KEY और OPENAI_BASE_URL पढ़ता है। आप कंस्ट्रक्टर में एक्सप्लिसिटली पैरामीटर पास कर सकते हैं ताकि पुराने वेरिएबल से गड़बड़ी न हो।
OpenAI Python SDK और Node SDK
Python के लिए v1+ openai पैकेज, Node के लिए v4+ चाहिए। केवल सिंटैक्स अलग है, कंस्ट्रक्टर में endpoint और कुंजी पास करें। पहले Python नॉन-स्ट्रीमिंग कॉल देखें, usage प्रिंट करें:
import os
from openai import OpenAI
client = OpenAI(
base_url=os.environ.get("API_BASE", "https://api.llmzhongzhuan.com/v1"),
api_key=os.environ["API_KEY"],
)
resp = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "写一条 20 字以内的发布公告标题。"}],
max_tokens=100,
)
print(resp.choices[0].message.content)
print(resp.usage)
Node उदाहरण स्ट्रीमिंग आउटपुट का उपयोग करता है, यह फ्रंटएंड टाइपराइटर इफेक्ट के लिए सामान्य है। स्ट्रीमिंग अनुरोध के अंत में सर्वर स्वचालित रूप से usage सहित एक फ़्रैगमेंट भेजता है:
import OpenAI from "openai";
const client = new OpenAI({
baseURL: process.env.API_BASE ?? "https://api.llmzhongzhuan.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "列出三个命名服务端日志字段的好习惯。" }],
stream: true,
max_tokens: 300,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
process.stdout.write("\n");
Node उदाहरण टॉप-लेवल await का उपयोग करता है, .mjs फ़ाइल या package.json में "type": "module" सेट करें। यदि रनटाइम समर्थन नहीं करता, तो इसे async फ़ंक्शन में रखें।
LangChain: ChatOpenAI का base_url
LangChain में विशेष एडाप्टर की आवश्यकता नहीं, langchain_openai पैकेज के ChatOpenAI का उपयोग करें, base_url सेट करें।
import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="uncensored",
base_url=os.environ.get("API_BASE", "https://api.llmzhongzhuan.com/v1"),
api_key=os.environ["API_KEY"],
temperature=0.7,
max_tokens=500,
timeout=60,
)
print(llm.invoke("把“服务已降级”改写成对用户友好的一句话。").content)
दो छोटी चेतावनी। पहला, max_tokens और timeout स्पष्ट रूप से सेट करें। दूसरा, यदि चेन में फ़ंक्शन कॉलिंग उपयोग करें, हम OpenAI फॉर्मेट के tools समर्थित करते हैं, LangChain का bind_tools काम करेगा; स्ट्रीमिंग में stream() से फ़्रैगमेंट पढ़ें।
LlamaIndex: OpenAILike
LlamaIndex का OpenAI क्लास मॉडल नाम की जाँच करता है, कस्टम नाम पर त्रुटि आती है। llama-index-llms-openai-like का OpenAILike उपयोग करें, यह जाँच नहीं करता, endpoint का नाम api_base है।
import os
from llama_index.llms.openai_like import OpenAILike
llm = OpenAILike(
model="uncensored",
api_base=os.environ.get("API_BASE", "https://api.llmzhongzhuan.com/v1"),
api_key=os.environ["API_KEY"],
is_chat_model=True,
context_window=100000,
max_tokens=500,
)
print(llm.complete("用一句话解释什么是幂等请求。"))
is_chat_model=True महत्वपूर्ण है। context_window को 100000 पर सेट करें ताकि LlamaIndex डिफ़ॉल्ट से कम टोकन पर आपकी डेटा को टंक न करे।
Dify: OpenAI-API-compatible प्रदाता
Dify जैसे विज़ुअल प्लेटफ़ॉर्म में कोड नहीं, केवल फॉर्म होता है। इंटरफ़ेस अलग हो सकता है, लेकिन चरण समान हैं:
- "सेटिंग्स" में जाएँ, "मॉडल प्रदाता" पेज पर "OpenAI-API-compatible" चुनें, मॉडल जोड़ें।
- मॉडल प्रकार "LLM" चुनें, मॉडल नाम
uncensoredभरें। - API Key में अपनी कुंजी, API endpoint URL में
https://api.llmzhongzhuan.com/v1भरें। - मॉडल context window 100000, अधिकतम token सीमा 32000 भरें।
- यदि वर्कफ़्लो में फ़ंक्शन कॉलिंग उपयोग करें, तो फ़ंक्शन कॉलिंग समर्थन सक्षम करें; स्ट्रीमिंग ऑन रखें।
- सहेजें, एक सरल चैट ऐप बनाएँ, मॉडल चुनें और संदेश भेजें, पुष्टि करें कि प्रतिक्रिया आ रही है।
प्लेटफ़ॉर्म सेव करते समय एक टेस्ट अनुरोध भेज सकता है, यदि यह विफल होता है तो endpoint में अतिरिक्त पाथ या कुंजी में स्पेस हो सकता है। यदि Dify कंटेनर में है, तो बाहरी डोमेन एक्सेस की पुष्टि करें।
लाइव से पहले सत्यापित करने योग्य पैरामीटर और डिप्लॉयमेंट
फ्रेमवर्क चलना पहला कदम है, नीचे दिए गए पैरामीटर लाइव से पहले सत्यापित करें, ये लागत और विफलता दर निर्धारित करते हैं।
- max_tokens: डिफ़ॉल्ट 2048, अधिकतम 32,000। इनपुट और आउटपुट का योग 100,000 से अधिक नहीं होना चाहिए, वरना 400 एरर आएगा।
- timeout: लंबे आउटपुट में समय अधिक लगता है, स्ट्रीमिंग में read timeout 60 सेकंड से अधिक सेट करें, नॉन-स्ट्रीमिंग में अधिकतम आउटपुट के अनुसार।
- temperature / top_p / stop: ये मान सीधे पास होंगे। फ्रेमवर्क में सेट मान तुरंत लागू होंगे।
- concurrency: प्रति कुंजी प्रति मिनट 300 अनुरोध, यदि एक ही कुंजी कई इन्स्टेंस साझा करते हैं, तो rate limit मिलाकर लागू होगा, प्रत्येक इन्स्टेंस को 300 न मानें।
- retry: फ्रेमवर्क retry केवल नेटवर्क त्रुटियों के लिए करते हैं, 429 और 503 के लिए backoff स्वयं जोड़ें।
कंटेनर में डिप्लॉय करते समय भी कुंजी इमेज में न रखें, ऑर्केस्ट्रेशन टूल द्वारा इनजेक्ट करें। compose में न्यूनतम संरचना:
# docker-compose.yml 片段
services:
app:
image: your-app:latest
environment:
API_BASE: https://api.llmzhongzhuan.com/v1
API_KEY: ${API_KEY} # 从宿主机环境或 .env 读取,不写进镜像
Kubernetes में Secret रिफ़रेंस का उपयोग करें। अलग-अलग वातावरण के लिए अलग खाते या कुंजी तैयार करें, जैसे डेवलपमेंट, प्रीप्रोड, प्रोड। चूँकि प्रति खात केवल एक कुंजी होती है, इसलिए कई वातावरण के लिए कई खाते बनाएँ और प्रीपेड क्रेडिट जोड़ें।
अंत में लॉग। डीबग मोड में पूरे हेडर प्रिंट होते हैं, जिसमें Authorization होता है, प्रोडक्शन में इसे बंद करें या कुंजी को लॉग फ़िल्टर में छिपाएँ। usage फ़ील्ड रिकॉर्ड करना अच्छा है, यह बिल से मिलाएगा और अचानक लंबे प्रॉम्प्ट की पहचान करेगा।
त्रुटि निवारण क्रम
एकीकरण चरण की 90% समस्याएँ कुछ ही स्थानों पर केंद्रित हैं, नीचे दिए गए क्रम से जाँचें:
- 401: कुंजी खाली है, कॉपी करते समय अतिरिक्त स्पेस आ गया है, या रीसेट करने के बाद भी पुरानी कुंजी का उपयोग कर रहे हैं।
- 404: पता
/v1के बिना रूट पथ पर लिखा गया है, या/chat/completionsदो बार जोड़ दिया गया है। - 402: त्रुटि कोड no_credit है, जिसका अर्थ है कि शेष राशि खत्म हो गई है या मुफ़्त ट्रायल क्रेडिट समाप्त हो गया है; आपको प्रीपेड क्रेडिट टॉप-अप करना होगा।
- 400: सामान्य कारण यह है कि इनपुट में
max_tokens100,000 से अधिक हो गया है, या अनुरोध बॉडी 8 MB से अधिक है। - 429 / 503: पहले मामले में प्रति मिनट 300 अनुरोधों का रेट लिमिट लागू होता है; दूसरा मामला upstream_busy है। कृपया कुछ सेकंड प्रतीक्षा करें और पुनः प्रयास करें, विस्तृत जानकारी के लिए स्थिरता अनुभव देखें।
नेटवर्क वातावरण से जुड़ी एक ऐसी समस्या भी होती है जिसे अक्सर नज़रअंदाज किया जाता है। कंपनी का आंतरिक नेटवर्क, प्रॉक्सी सॉफ़्टवेयर या सुरक्षा समूह नियमों के कारण डोमेन नाम का डीएनएस रज़ॉल्यूशन सफल हो सकता है, लेकिन HTTPS कनेक्शन स्थापित नहीं हो पाता है। इसका परिणाम स्पष्ट त्रुटि कोड के बजाय लंबे समय तक रुकने और फिर टाइमआउट होना होता है। ऐसी स्थिति में, पहले उसी मशीन पर /v1/models एंडपॉइंट पर curl का उपयोग करके परीक्षण करें। यदि कनेक्शन काम करता है, तो समस्या एप्लिकेशन लेवल की है; यदि नहीं, तो प्रॉक्सी और फ़ायरवॉल की जाँच करें। इस डीबगिंग प्रक्रिया को टीम दस्तावेज़ में नोट करें, ताकि भविष्य में नए सदस्यों को कनेक्ट करने में कम दिक्कत हो।
जब तीनों मान सही होते हैं और फिर भी विफलता होती है, तो पहले curl का उपयोग करके एक सीधा अनुरोध भेजें ताकि फ्रेमवर्क से जुड़ी समस्याओं को बाहर किया जा सके। यदि आप यह जानना चाहते हैं कि प्रॉक्सी वास्तव में क्या कर रहा है, तो प्रॉक्सी सिद्धांत लेख को देखें।
सामान्य प्रश्न
base_url में /v1 होना जरूरी है?
हाँ, इसे https://api.llmzhongzhuan.com/v1 लिखें। SDK स्वचालित रूप से /chat/completions जोड़ देगा, इसलिए इसे दोबारा न जोड़ें।
LlamaIndex में OpenAI के बजाय OpenAILike का उपयोग क्यों करें?
OpenAI क्लास मॉडल नाम की जाँच करता है कि क्या वह आधिकारिक सूची में है; कस्टम मॉडल नाम पर त्रुटि आ सकती है। OpenAILike कोई जाँच नहीं करता है, इसलिए यह कम्पैटिबल इंटरफ़ेस से जोड़ने के लिए अधिक उपयुक्त है।
Dify में मॉडल नाम मनमाना रखा जा सकता है?
नहीं, मॉडल फ़ील्ड सही होना चाहिए। अनकेंसर मॉडल का ID अनकेंसर होना चाहिए।
एनवायरनमेंट वेरिएबल्स बदलने के बाद भी प्रभाव क्यों नहीं पड़ रहा?
अक्सर टर्मिनल या प्रोसेस रीस्टार्ट नहीं हुआ होता है। base_url और api_key को कोड में स्पष्ट रूप से पास करने और उपयोग किए जा रहे पते को प्रिंट करके पुष्टि करने की सलाह दी जाती है।
केवल फ़ॉर्म भरें, कुंजी प्राप्त करें
खाता बनाएँ, कुंजी कॉपी करें, Base URL बदलें। कॉन्फ़िगरेशन इतना ही सरल है।