Incident संकेत खोए बिना Node.js OpenAI SDK ऐप माइग्रेट करें
Node.js OpenAI SDK ऐप्स के लिए व्यावहारिक माइग्रेशन गाइड: क्रेडेंशियल और base URL कॉन्फ़िगर करें, Responses API स्ट्रीमिंग संभालें और निगरानी योग्य संकेतों से विफलताओं का पता लगाएँ।
सारांश · TL;DR
माइग्रेशन अधिक सुरक्षित होता है, जब आप endpoint, प्रमाणीकरण, स्ट्रीमिंग व्यवहार और विफलता संकेतों की अलग-अलग पुष्टि करते हैं। इस गाइड में Node.js का एक उदाहरणात्मक पैटर्न और कॉन्फ़िगरेशन, नेटवर्क, rate limit तथा सर्वर-साइड विफलताओं के बीच अंतर करने की चेकलिस्ट दी गई है।
मुख्य बातें
- API क्रेडेंशियल सर्वर के environment में रखें; उन्हें ब्राउज़र पर न भेजें और न ही लॉग में लिखें।
- कस्टम base URL तभी सेट करें, जब destination OpenAI-संगत endpoints का दस्तावेज़ देता हो और आपके ऐप द्वारा भेजे जाने वाले parameters को सपोर्ट करता हो।
- स्ट्रीम पूरा होने तक मिले आउटपुट को आंशिक मानें; दर्ज करें कि अनुरोध पूरा हुआ या त्रुटि के साथ समाप्त हुआ।
- विफलताओं का निदान करने के लिए HTTP status, उपलब्ध होने पर request ID, बीता हुआ समय और साफ़-सुथरी error category दर्ज करें।
इस पृष्ठ पर (6)
माइग्रेशन की सीमा से शुरुआत करें
Node.js ऐप माइग्रेट करते समय SDK, endpoint, model और streaming कोड—सब कुछ एक साथ न बदलें। पहले नए कॉन्फ़िगरेशन के साथ एक non-streaming अनुरोध करें, फिर streaming जाँचें और अंत में विफलताओं को संभालने के तरीके की तुलना करें। इससे पता लगाने में मदद मिलती है कि समस्या क्रेडेंशियल, routing, अनुरोध की संगतता या stream को पढ़ने से जुड़ी है।
OpenAI की library गाइड में server-side JavaScript के लिए आधिकारिक JavaScript/TypeScript SDK की सिफ़ारिश की गई है और दिखाया गया है कि यह environment से API key पढ़ता है। इसमें Responses API के ज़रिए एक बुनियादी अनुरोध का उदाहरण भी है। SDK के मौजूदा विकल्पों और विवरण के लिए OpenAI की SDK और CLI गाइड और openai-node repository देखें।
ज़रूरी चीज़ें और कॉन्फ़िगरेशन
अपने इंस्टॉल किए गए SDK वर्शन के लिए समर्थित Node.js runtime का उपयोग करें, पैकेज इंस्टॉल करें और deployment environment के ज़रिए क्रेडेंशियल उपलब्ध कराएँ:
npm install openai
export OPENAI_API_KEY="your_api_key_here"
Environment variable वाली कमांड स्थानीय Unix-जैसे shell के लिए है। Production में अपने host या container environment में इसके समकक्ष secret सेट करें। इसे source control में commit न करें, logs में प्रिंट न करें और frontend code में उजागर न करें।
मानक OpenAI API के लिए, client को इसके default endpoint के साथ initialize करें:
import OpenAI from "openai";
const client = new OpenAI({
// The SDK reads OPENAI_API_KEY from the environment by default.
timeout: 30_000,
maxRetries: 2,
});
ऊपर दिए गए timeout और retry मान ऐप्लिकेशन के उदाहरणात्मक विकल्प हैं, सार्वभौमिक सिफ़ारिशें नहीं। किसी खास विकल्प या default पर निर्भर होने से पहले इंस्टॉल किए गए SDK वर्शन का दस्तावेज़ देखें।
किसी दूसरे endpoint पर माइग्रेट कर रहे हों, तो baseURL तभी कॉन्फ़िगर करें जब आपने उस provider के दस्तावेज़ में दिए API path और समर्थित request fields की पुष्टि कर ली हो। संगतता कुछ शर्तों पर निर्भर करती है: OpenAI-संगत URL होने भर से यह साबित नहीं होता कि हर model, parameter, streaming event या error response एक-जैसा व्यवहार करेगा। उस endpoint के लिए उपयुक्त key रखें और production में भेजे जाने वाले ठीक उसी अनुरोध के प्रारूप को जाँचें।
const client = new OpenAI({
apiKey: process.env.OPENAI_API_KEY,
baseURL: process.env.OPENAI_BASE_URL,
});
यह कॉन्फ़िगरेशन का उदाहरणात्मक तरीका है। अपने SDK वर्शन और destination के दस्तावेज़ में baseURL के समर्थन और endpoint-विशिष्ट ज़रूरतों की पुष्टि करें। सिर्फ़ विफल अनुरोध को छिपाने के लिए कस्टम URL सेट न करें; पहले पता लगाएँ कि ऐप्लिकेशन को किस host तक पहुँचना चाहिए।
स्ट्रीमिंग से पहले Responses API अनुरोध जाँचें
एक न्यूनतम अनुरोध से endpoint और प्रमाणीकरण की समस्याओं को stream संभालने की समस्याओं से अलग करना आसान होता है:
const response = await client.responses.create({
model: process.env.OPENAI_MODEL,
input: "Reply with the word ready.",
});
console.log(response.output_text);
ऐसा model चुनें जो खाते और endpoint के लिए उपलब्ध हो। उदाहरण में environment variable का उपयोग किया गया है, ताकि model का चयन स्पष्ट रहे और चुपचाप मानकर न चला जाए। अगर यह अनुरोध विफल हो, तो stream logic जोड़ने से पहले status और response का निदान करें।
आउटपुट स्ट्रीम करें और पूरा होने की स्थिति दर्ज करें
Responses API के लिए stream का अनुरोध करें और उसके events को पढ़ें। नीचे दिया गया तरीका उदाहरणात्मक है; इंस्टॉल किए गए SDK वर्शन के अनुसार event types की पुष्टि करें:
try {
const stream = await client.responses.create({
model: process.env.OPENAI_MODEL,
input: "Summarize the incident in one sentence.",
stream: true,
});
let completed = false;
for await (const event of stream) {
if (event.type === "response.output_text.delta") {
process.stdout.write(event.delta);
} else if (event.type === "response.completed") {
completed = true;
} else if (event.type === "response.failed") {
throw new Error("Response stream reported a failure");
}
}
if (!completed) {
throw new Error("Stream ended without a completion event");
}
} catch (error) {
console.error("OpenAI request failed", {
name: error?.name,
status: error?.status,
requestId: error?.request_id,
message: error?.message,
});
throw error;
}
उपयोगकर्ता को पहले से दिखाए गए टेक्स्ट को इस बात का प्रमाण न मानें कि अनुरोध सफल हुआ। Stream आंशिक आउटपुट देने के बाद विफल हो सकती है या अप्रत्याशित रूप से समाप्त हो सकती है। आपके ऐप्लिकेशन को तय करना चाहिए कि आंशिक टेक्स्ट रखना है, फिर से प्रयास करना है या response को अधूरा चिह्नित करना है। अगर UI इसे स्पष्ट रूप से नहीं संभालता, तो आंशिक रूप से दिखाए गए generation को फिर से चलाने पर उपयोगकर्ता को वही सामग्री दोबारा दिख सकती है।
निगरानी योग्य संकेतों से विफलताओं का निदान करें
हर अनुरोध के लिए कुछ निश्चित फ़ील्ड दर्ज करें: timestamp, endpoint host (क्रेडेंशियल के बिना), model identifier, बीता हुआ समय, उपलब्ध होने पर HTTP status, SDK error class/name, उपलब्ध होने पर request ID और stream पूरी हुई या नहीं। जहाँ prompt और response text में संवेदनशील जानकारी हो सकती है, उन्हें redact करें।
| संकेत | जाँच का संभावित क्षेत्र | पहली जाँच |
|---|---|---|
| 401 या प्रमाणीकरण-संबंधी त्रुटि | क्रेडेंशियल मौजूद नहीं, अमान्य है या गलत endpoint पर भेजा गया है | पुष्टि करें कि deployed secret और endpoint एक-दूसरे के अनुरूप हैं; key को कभी प्रिंट न करें |
| 403 या permission error | खाते, project या model की पहुँच | चुने गए model और destination के लिए पहुँच जाँचें |
| 404 | गलत URL, route या model identifier | कॉन्फ़िगर किए गए base URL और request path की provider के दस्तावेज़ से तुलना करें |
| 429 | Rate या quota limit | Response के विवरण और अनुरोधों की मात्रा देखें; जहाँ उचित हो, सीमित retry व्यवहार अपनाएँ |
| 5xx | Provider या intermediary की विफलता | Status, request ID, समय और retry सुरक्षित है या नहीं—यह दर्ज करें |
| Connection या timeout error, HTTP status नहीं | DNS, नेटवर्क, proxy, TLS या timeout पथ | उसी runtime से connectivity जाँचें और proxy/नेटवर्क में बदलाव देखें |
| Stream पूरा हुए बिना समाप्त हो जाए | Stream पढ़ने में रुकावट या विफलता | देखा गया आख़िरी event दर्ज करें और client disconnect तथा timeout handling जाँचें |
ये निदान शुरू करने के संकेत हैं, निश्चित कारण नहीं। केवल status code से यह पता नहीं चलता कि ज़िम्मेदार system कौन-सा है। उपलब्ध होने पर application और provider logs के timestamps और request IDs की तुलना करें, और non-idempotent application workflows को बिना सोचे-समझे retry न करें।
माइग्रेशन चेकलिस्ट
- SDK वर्शन को pin करके दर्ज करें; Node.js और कॉन्फ़िगरेशन से जुड़ी मौजूदा ज़रूरतें देखें।
- Destination URL, प्रमाणीकरण का तरीका, model की उपलब्धता और समर्थित request parameters की पुष्टि करें।
- Production-जैसे runtime से एक non-streaming अनुरोध करें।
- पूरी हुई stream, बीच में बाधित stream और अस्वीकृत अनुरोध की जाँच करें।
- पुष्टि करें कि logs में उपयोगी विफलता-संबंधी metadata है, लेकिन क्रेडेंशियल या संवेदनशील सामग्री नहीं।
- बदलाव को नियंत्रित तरीके से roll out करें और पुराने तरीके से status, latency तथा completion संकेतों की तुलना करें।
माइग्रेशन का अच्छा नतीजा केवल सफल response मिलना नहीं है। ऐप्लिकेशन को पूरा उत्तर और आंशिक आउटपुट अलग-अलग पहचानने में सक्षम होना चाहिए, और अनुरोध विफल होने पर ऑपरेटर को यह बता पाना चाहिए कि आगे कहाँ जाँच करें।
सामान्य प्रश्न
OpenAI Node.js SDK का base URL कैसे बदलें?
SDK endpoint कॉन्फ़िगर करने की सुविधा देता है, लेकिन सटीक विकल्प वर्शन के अनुसार बदल सकते हैं। आम तौर पर client constructor में `baseURL` का उपयोग किया जाता है। Deploy करने से पहले इंस्टॉल किए गए SDK और destination के दस्तावेज़ देखें, और endpoint path तथा ज़रूरी प्रमाणीकरण की पुष्टि करें।
कैसे पता करें कि streamed response पूरा हुआ?
Stream के completion event को ट्रैक करें और अगर iteration इसके बिना समाप्त हो जाए, तो परिणाम को अधूरा चिह्नित करें। केवल text deltas मिलने का मतलब यह न मानें कि पूरा response सफल रहा।
OpenAI API अनुरोध विफल होने पर क्या लॉग करना चाहिए?
Timestamp, secrets के बिना endpoint host, model, बीता हुआ समय, उपलब्ध होने पर status, SDK error name, उपलब्ध होने पर request ID और stream के पूरा होने की स्थिति दर्ज करें। API keys, prompts और संवेदनशील output को redact करें।
क्या विफल streaming अनुरोध को retry करना चाहिए?
Retry तभी करें जब विफलता retry के लिए उपयुक्त हो और आपका ऐप्लिकेशन संभावित आंशिक आउटपुट को संभालता हो। Retry से उपयोगकर्ता को सामग्री दोबारा दिख सकती है, इसलिए तय करें कि UI और application state बाधित streams को कैसे संभालेंगे।
संबंधित लेख
Guides
Node.js OpenAI SDK ऐप्लिकेशन्स का माइग्रेशन: Base URL, स्ट्रीमिंग, और स्ट्रक्चर्ड आउटपुट्स
Node.js डेवलपर्स के लिए OpenAI SDK ऐप्लिकेशन्स माइग्रेट करने हेतु एक तकनीकी गाइड: कस्टम base URLs कॉन्फ़िगर करना, ऑथेंटिकेशन मैनेज करना, स्ट्रीमिंग स्ट्रक्चर्ड आउटपुट्स हैंडल करना और API एरर्स का विश्लेषण करना।
Guides
क्रेडेंशियल उजागर किए बिना OpenAI API की घटनाओं की जाँच
API keys की सुरक्षा, अनुमतियों को सीमित रखने और क्रेडेंशियल बदलने की योजना बनाने के साथ OpenAI API विफलताओं की जाँच के लिए व्यावहारिक मार्गदर्शिका।
Guides
ईकॉमर्स सपोर्ट के लिए GPT 5.6 Sol: इसे एस्केलेशन मॉडल की तरह इस्तेमाल करें, अपना डिफ़ॉल्ट रिप्लाई इंजन न बनाएं
ईकॉमर्स सपोर्ट में GPT 5.6 Sol के उपयोग के लिए एक व्यावहारिक निर्णय ढांचा: एस्केलेशन डिज़ाइन, मॉडल रूटिंग, लागत नियंत्रण, मानव समीक्षा और अंतर्राष्ट्रीय सपोर्ट सत्यापन।
Guides
इंडी हैकर्स के लिए पेश है GPT 6 Astra: फ्रंटियर इंटेलिजेंस का उपयोग वहीं करें जहां यह प्रोडक्ट को वास्तव में बदल सके
एक व्यावहारिक गाइड जो यह तय करने में मदद करती है कि आपके इंडी प्रोडक्ट में GPT 6 Astra का उपयोग कहाँ सही है—कंप्यूटर-यूज़ वर्कफ़्लोज़ और क्रिएटिव रिव्यू से लेकर कॉस्ट कंट्रोल, राउटिंग और लॉन्च ऑपरेशन्स तक।