लाभ:
- एलएलएम एपीआई अनुरोध की मूल संरचना का वर्णन कर सकते हैं (समाप्ति बिंदु, मॉडल, संदेश, max_tokens)
- सिस्टम, उपयोगकर्ता और सहायक भूमिकाओं और स्टेटलेस वार्तालाप इतिहास के बीच अंतर को समझता है
- लौटाई गई प्रतिक्रिया के फ़ील्ड (सामग्री ब्लॉक, स्टॉप_कारण, उपयोग) को पढ़ और व्याख्या कर सकते हैं
पिछले मॉड्यूल में, हमने चैट विंडो से कृत्रिम बुद्धिमत्ता का उपयोग किया था। लेकिन यदि आप एआई को अपने उत्पाद, स्वचालन या वर्कफ़्लो में एम्बेड करना चाहते हैं, तो चैट इंटरफ़ेस इसमें कटौती नहीं करेगा; आपको मॉडल से प्रोग्रामेटिक रूप से, यानी कोड या ऑटोमेशन टूल से कनेक्ट करना होगा। इस ब्रिज का नाम एपीआई (एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस, वह अनुबंध है जो दो सॉफ़्टवेयर को कुछ नियमों के साथ बात करने की अनुमति देता है) है। जब आप इस इकाई को समाप्त कर लेंगे, तो आपको पता चल जाएगा कि एलएलएम (बड़ी भाषा मॉडल) एपीआई अनुरोध क्या होता है, संदेश भूमिकाएँ क्या होती हैं, और प्रतिक्रिया कैसे पढ़ें। यह वह नींव है जिस पर बाकी मॉड्यूल का निर्माण किया जाएगा।
एपीआई कैसे काम करता है?
एपीआई में मूल प्रवाह यह है: आप एक निश्चित प्रारूप में अनुरोध भेजते हैं; सर्वर एक विशिष्ट प्रारूप में प्रतिक्रिया देता है। एलएलएम में, यह आमतौर पर एक एकल पते (एंडपॉइंट, सर्वर पर निश्चित पता जो आपके अनुरोध को संभालता है) पर एक HTTP कॉल (HTTP: वेब पर अनुरोध-प्रतिक्रिया ले जाने के लिए मानक प्रोटोकॉल) है। उदाहरण के लिए, एक मैसेजिंग एपीआई में, सभी अनुरोध एक ही पते पर जाते हैं और मुख्य भाग में JSON (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन - एक टेक्स्ट प्रारूप जिसमें कुंजी/मूल्य जोड़े होते हैं जिन्हें मानव और मशीन दोनों द्वारा पढ़ा जा सकता है) के रूप में ले जाया जाता है।
किसी अनुरोध में, आप कम से कम ये तीन चीज़ें निर्दिष्ट करते हैं:
- मॉडल: आप कौन सा मॉडल उपयोग करेंगे (उदाहरण के लिए एक तेज़ और सस्ता मॉडल या एक शक्तिशाली मॉडल)।
- max_tokens: टोकन की अधिकतम संख्या (सबसे छोटी इकाई जिसमें पाठ संसाधित किया जाता है, जिसे अगली इकाई में विस्तार से संसाधित किया जाएगा) जो मॉडल उत्पन्न कर सकता है; यानी आउटपुट सीमा.
- संदेश: उन संदेशों की सूची जिनसे वार्तालाप बनता है।
चरण दर चरण: अनुरोध कैसे सेट करें
- समापन बिंदु और क्रेडेंशियल तैयार करें. आप हेडर में अनुरोध में अपनी एपीआई कुंजी (गुप्त स्ट्रिंग जो आपकी पहचान साबित करती है) जोड़ते हैं। आप कभी भी कुंजी को कोड में एम्बेड नहीं करते हैं; हम इकाई 9 में सुरक्षित भंडारण को कवर करेंगे।
- मॉडल और आउटपुट सीमा का चयन करें. एक साधारण कार्य के लिए हल्के मॉडल + छोटे max_tokens; शक्तिशाली मॉडल + जटिल कार्य के लिए बड़ी सीमा।
- संदेश सूची सेट करें. List the system instruction, user message, and past rounds (if any).
- अनुरोध भेजें और प्रतिक्रिया को पार्स करें। लौटाए गए JSON से पाठ सामग्री पढ़ें, कारण रोकें और टोकन उपयोग करें।
संदेश भूमिकाएँ: सिस्टम, उपयोगकर्ता, सहायक
वार्तालाप में एक क्रम में व्यवस्थित संदेश शामिल होते हैं और प्रत्येक संदेश की एक भूमिका होती है। भूमिका यह निर्धारित करती है कि मॉडल उस पाठ के साथ कैसा व्यवहार करता है।
भूमिका
कौन लिखता है
प्रयोजन
प्रणाली
डेवलपर/ऑपरेटर
स्थायी निर्देश, व्यक्तित्व और नियम जो पूरी बातचीत पर लागू होते हैं
उपयोगकर्ता
अंतिम उपयोगकर्ता
उपयोगकर्ता का वर्तमान प्रश्न या इनपुट
सहायक
मॉडल
मॉडल द्वारा उत्पन्न प्रतिक्रिया (और पिछली प्रतिक्रियाएँ)
अधिकांश प्रदाताओं में सिस्टम भूमिका अनुरोध निकाय में एक अलग सिस्टम फ़ील्ड के रूप में उपलब्ध है; उपयोगकर्ता और सहायक को संदेश सूची में क्रमिक रूप से सूचीबद्ध किया गया है। Critical point: the system instruction is the high-level instruction, the user message is the request to be answered at that moment.
{ "मॉडल": "क्लाउड-ओपस-4-8", "मैक्स_टोकेंस": 1024, "सिस्टम": "आप एक कॉर्पोरेट सहायता सहायक हैं। एक संक्षिप्त, औपचारिक और सत्यापित प्रतिक्रिया दें। ऐसी जानकारी न बनाएं जिसके बारे में आप निश्चित नहीं हैं।", "संदेश": [ { "भूमिका": "उपयोगकर्ता", "सामग्री": "मैं अपनी वापसी प्रक्रिया कैसे शुरू करूं?" } ]}
भाषण राज्यविहीन है
यहां सबसे आम ग़लतफ़हमी है: एलएलएम एपीआई कॉल स्टेटलेस हैं - सर्वर दो अनुरोधों के बीच कोई मेमोरी नहीं रखता है। मॉडल को आपका पिछला अनुरोध याद नहीं है. यदि आप मल्टी-राउंड चैट सेट अप कर रहे हैं, तो आपको प्रत्येक नए अनुरोध के साथ पिछले राउंड को फिर से भेजना होगा। मॉडल की "मेमोरी" में आपके द्वारा भेजे गए संदेशों की एक सूची होती है।
{ "मॉडल": "क्लाउड-ओपस-4-8", "मैक्स_टोकेंस": 512, "संदेश": [ { "भूमिका": "उपयोगकर्ता", "सामग्री": "हैलो, मेरा नाम डेनिज़ है।" }, { "भूमिका": "सहायक", "सामग्री": "हैलो डेनिज़, मैं आपकी कैसे मदद कर सकता हूं?" }, { "भूमिका": "उपयोगकर्ता", "सामग्री": "मैंने अभी अपना नाम बताया, क्या आपको याद है?" } ]}
तीसरे संदेश का सही उत्तर देना आपके पिछले दोनों संदेशों को भेजने पर निर्भर करता है। यदि आप इसे नहीं भेजते हैं, तो मॉडल को "समुद्र" का पता नहीं चलेगा और वह गलत उत्तर देगा। इसका लागत पर भी सीधा प्रभाव पड़ता है: बातचीत जितनी लंबी होगी, सूची उतनी ही बड़ी होगी, प्रत्येक अनुरोध अधिक टोकन का उपभोग करेगा।
युक्ति: लंबी बातचीत में, संपूर्ण इतिहास भेजने के बजाय पुराने दौर (सारांश + पिछले कुछ दौर) को सारांशित करने और आगे बढ़ाने से लागत कम हो जाती है और संदर्भ विंडो सुरक्षित रहती है। हम इकाई 6 और 11 में इसे और गहरा करेंगे।
उत्तर पढ़ें
जब मॉडल प्रतिक्रिया देता है, तो आपको एक संरचित ऑब्जेक्ट प्राप्त होता है, सादा पाठ नहीं। विशिष्ट क्षेत्र:
{ "आईडी": "msg_01ABC...", "मॉडल": "क्लाउड-ओपस-4-8", "भूमिका": "सहायक", "सामग्री": [ { "प्रकार": "पाठ", "पाठ": "रिटर्न शुरू करने के लिए, अपने खाते में 'मेरे ऑर्डर' पृष्ठ पर जाएं..." } ], "stop_reason": "end_turn", "उपयोग": { "input_tokens": 47, "आउटपुट_टोकन": 88 }}
- सामग्री: प्रतिक्रिया ही; यह सामग्री ब्लॉकों की एक सूची है. टेक्स्ट ब्लॉक का टेक्स्ट फ़ील्ड वास्तविक उत्तर है।
- stop_reason: मॉडल क्यों रुका. अंत_मोड़ = प्राकृतिक अंत; max_tokens = आउटपुट सीमा पर अटका हुआ (प्रतिक्रिया अधूरी हो सकती है); इनकार = सुरक्षा कारणों से मना कर दिया। आपके कोड को हमेशा पहले stop_reason को देखना चाहिए।
- उपयोग: इनपुट और आउटपुट टोकन नंबर। यह लागत और सीमा ट्रैकिंग का आधार है।
ध्यान दें: यदि stop_reason max_tokens है, तो प्रतिक्रिया पूरी नहीं होती है। इसे "सफल प्रतिक्रिया" मानना और उपयोगकर्ता को आधा पाठ दिखाना उत्पादन में सबसे आम गलतियों में से एक है। या तो max_tokens बढ़ाएँ या स्ट्रीमिंग का उपयोग करें।
कमजोर संकेत/मजबूत संकेत
दो भिन्न सिस्टम संकेतों के साथ एक ही कार्य:
#कमजोरआप एक सहायक हैं. प्रश्नों के उत्तर दें।
#मजबूतआप एक कॉर्पोरेट सहायता सहायक हैं। नियम:- प्रदान किए गए पॉलिसी दस्तावेज़ में दी गई जानकारी पर पूरी तरह भरोसा करें; यदि यह दस्तावेज़ में नहीं है, तो कहें "मेरे पास यह जानकारी नहीं है, मैं इसे संबंधित इकाई को निर्देशित कर रहा हूं।" - उत्तर तीन वाक्यों से अधिक नहीं होने चाहिए, औपचारिक और स्पष्ट होने चाहिए। - व्यक्तिगत डेटा (टीसी आईडी नंबर, कार्ड नंबर) न मांगें और न ही दोहराएं। - जब आप आश्वस्त न हों तो अनुमान न लगाएं।
शक्तिशाली संस्करण; यह अनिश्चितता में दायरे, रूप, सुरक्षा मार्जिन और व्यवहार को परिभाषित करता है। मॉडल आउटपुट की स्थिरता सीधे इस स्पष्टता से आती है।
तीन मिनी मामले
केस 1 - सपोर्ट बॉट (स्टेटलेसनेस ट्रैप)। एक ई-कॉमर्स टीम ने बॉट को लाइव लिया; जब उपयोगकर्ता ने कहा "पिछला ऑर्डर रद्द करें", तो बॉट ऑर्डर संख्या "भूल गया"। कारण: वे प्रत्येक अनुरोध को केवल अंतिम संदेश के साथ भेज रहे थे। समाधान: उन्होंने अंतिम 6 राउंड को संदेश सूची में जोड़ा। परिणाम: संदर्भ संरक्षित है, लेकिन प्रति अनुरोध इनपुट 40 टोकन से बढ़कर ~600 टोकन हो गया है - हम इकाई 2 में लागत पाठ को कवर करेंगे।
केस 2 - अधूरा अनुबंध सारांश। एक कानूनी टीम 10 पेज के अनुबंधों की रूपरेखा तैयार कर रही थी; max_tokens: 300 कम रहे, सारांश वाक्य के मध्य में कट रहे थे। stop_reason हर बार max_tokens था लेकिन कोई नहीं देख रहा था। max_tokens को बढ़ाकर 1500 कर दिया गया और stop_reason चेक जोड़ा गया; संक्षिप्त सारांश दर 18% से घटकर 0% हो गई।
केस 3 - भूमिकाओं का मिश्रण। एक मार्केटिंग टीम उपयोगकर्ता संदेश में सभी निर्देश लिख रही थी, और सिस्टम को खाली छोड़ रही थी। जब उपयोगकर्ता इनपुट निर्देश के साथ मिश्रित होता है, तो मॉडल कभी-कभी "पिछले नियमों को भूल जाने" के उपयोगकर्ता के आदेश का अनुपालन करता है। उन्होंने सिस्टम में स्थायी नियम लाये; उपयोगकर्ता इनपुट को निर्देश से अलग करने से, नियम उल्लंघन में काफी कमी आई।
सामान्य गलतियां
- अतीत भेजना भूल जाना: ऐसा माना जाता है कि मॉडल "याद नहीं" है; जबकि यह राज्यविहीन है. आप संदर्भ लेकर चलते हैं।
- `stop_reason` को नहीं देख रहा: max_tokens के साथ रोकी गई प्रतिक्रिया को पूर्ण माना जाता है।
- `उपयोगकर्ता` में निर्देश एम्बेड करना: सिस्टम में लगातार नियम; तत्काल इनपुट उपयोगकर्ता के पास चला जाता है। मिश्रण से सुरक्षा संबंधी कमज़ोरियाँ पैदा होती हैं.
- `सामग्री` को एक सादे स्ट्रिंग के रूप में समझना: उत्तर ब्लॉकों की एक सूची है; पहले टेक्स्ट ब्लॉक के टेक्स्ट फ़ील्ड को पढ़ें, ब्लाइंड इंडेक्स के साथ सामग्री [0] प्राप्त करने से पहले उसके प्रकार को सत्यापित करें।
- कोड में कुंजी एम्बेड करना: एक पर्यावरण चर (इकाई 9) का उपयोग करें।
गहरा: सामग्री ब्लॉक और बहु-भागीय उत्तर
यह समझना कि प्रतिक्रिया में सामग्री फ़ील्ड एक सूची क्यों है, उन उन्नत सुविधाओं के लिए मौलिक है जिनका आप बाद में सामना करेंगे। कभी-कभी मॉडल टेक्स्ट का एक ब्लॉक नहीं, बल्कि कई ब्लॉक लौटाता है: सोच का एक ब्लॉक, उसके बाद टेक्स्ट का एक ब्लॉक; या टेक्स्ट का एक ब्लॉक जिसके बाद टूल उपयोग ब्लॉक आता है। इसीलिए आँख बंद करके सामग्री[0] को "उत्तर" के रूप में गिनना नाजुक है। सही दृष्टिकोण सूची के माध्यम से जाना और इसे प्रकार के आधार पर क्रमबद्ध करना है: आप उन ब्लॉकों की पाठ्य सामग्री एकत्र करते हैं जिनका प्रकार फ़ील्ड पाठ है, और अन्य प्रकारों (सोच, उपकरण) को अलग से मानते हैं।
व्यवहार में यह भेद यह करता है कि आप उपयोगकर्ता को बताए बिना मॉडल के तर्क (यदि कोई हो) को लॉग कर सकते हैं, टूल कॉल को अलग तर्क पर रीडायरेक्ट कर सकते हैं, और केवल स्क्रीन पर वास्तविक उत्तर प्रिंट कर सकते हैं। जैसे-जैसे मॉड्यूल आगे बढ़ता है (विशेषकर इकाइयों 4 और 11 में) आप देखेंगे कि यह ब्लॉक संरचना आउटपुट को सत्यापित और निर्देशित करने के लिए कितनी उपयोगी है।
एक और व्यावहारिक बिंदु: आप एक ही मॉडल को विभिन्न प्रदाता प्लेटफार्मों (क्लाउड प्रदाता के माध्यम से प्रत्यक्ष एपीआई) से एक्सेस कर सकते हैं। यद्यपि समापन बिंदु पता और प्रमाणीकरण प्रारूप बदल सकता है, संदेश भूमिकाएं, स्टेटलेसनेस और प्रतिक्रिया संरचना जैसी बुनियादी अवधारणाएं वही रहती हैं। इसलिए इस इकाई में बुनियादी बातें लागू होती हैं, चाहे आप किसी भी प्लेटफ़ॉर्म का उपयोग करें।
संक्षेप में
एलएलएम एपीआई अनुरोध में मॉडल, आउटपुट सीमा और संदेश सूची शामिल होती है; भूमिकाएँ (सिस्टम, उपयोगकर्ता, सहायक) मॉडल के व्यवहार को निर्धारित करती हैं। कॉल स्टेटलेस हैं: आप प्रत्येक अनुरोध के साथ संदर्भ लेकर चलते हैं। प्रतिक्रिया एक संरचित वस्तु है; सामग्री, stop_reason और उपयोग क्षेत्रों को पढ़ना और व्याख्या करना उत्पादन में स्थायित्व का आधार है।
आवेदन कार्य
अपने पेशे से एक कार्य चुनें (उदाहरण के लिए आने वाले ई-मेल को सॉर्ट करना, संक्षिप्त सारांश बनाना)। कागज के एक टुकड़े पर: (1) 4-5 नियमों के साथ सिस्टम प्रॉम्प्ट लिखें, (2) एक नमूना उपयोगकर्ता संदेश और यदि कोई हो तो 2-राउंड इतिहास सेट करें, (3) max_tokens के लिए एक उचित मूल्य निर्धारित करें और औचित्य लिखें, (4) सूचीबद्ध करें कि आप लौटाए गए प्रतिक्रिया में कौन से stop_reason मानों को संभालेंगे और कैसे।
चेकलिस्ट
- [ ] मैं अनुरोध के तीन अनिवार्य भागों (मॉडल, मैक्स_टोकन, संदेश) की गिनती कर सकता हूं।
- [ ] मैं सिस्टम, उपयोगकर्ता और सहायक भूमिकाओं के बीच अंतर समझा सकता हूं।
- [ ] मैं जानता हूं कि कॉल स्टेटलेस हैं और मुझे अतीत को साथ रखना होगा।
- मैं [ ] सामग्री, stop_reason और उपयोग फ़ील्ड को पढ़ और टिप्पणी कर सकता हूं।
- [ ] max_tokens के साथ मैं काटी गई प्रतिक्रिया को देख सकता हूं और संभाल सकता हूं।