बड़े मॉडल API एंडपॉइंट पैरामीटर विस्तृत विवरण: रिक्वेस्ट फ़ील्ड्स से रिस्पॉन्स फ़ील्ड्स तक
चैट कंप्लीशन इंटरफ़ेस के दस्तावेज़ को पहली बार देखने पर लंबी सूची में पैरामीटर भयानक लग सकते हैं। वास्तव में, एक कॉल को रेस्तरां में ऑर्डर देने की तरह कल्पना करें: messages आप और वेटर्स के बीच संवाद का रिकॉर्ड है, temperature यह नियंत्रित करता है कि आप शेफ़ को कितना स्वतंत्र रहने दें, max_tokens यह निर्धारित करता है कि डिश की अधिकतम मात्रा कितनी हो सकती है, और tools शेफ़ को सामग्री के लिए किचन को फोन करने की अनुमति देते हैं। इस दृष्टिकोण का उपयोग करते हुए, हम प्रत्येक फ़ील्ड को तालिका दर तालिका विस्तार से समझाएंगे।
को अपडेट किया गया
मुख्य बिंदु
- messages system, user, assistant, tool चार भूमिकाओं से मिलकर बनते हैं। मॉडल के पास मेमोरी नहीं है, इतिहास आपको ही साथ रखना होगा।
- temperature यादृच्छिकता को नियंत्रित करता है, top_p उम्मीदवार सीमा को। दोनों का प्रभाव समान है, आमतौर पर केवल एक को ही समायोजित करें।
- finish_reason तय करता है कि आपको परिणाम को कैसे संभालना है: stop का अर्थ है सामान्य समाप्ति, length का अर्थ है ट्रंकेटेड, और tool_calls का अर्थ है कि आपको फ़ंक्शन कॉलिंग करनी है।
- usage फ़ील्ड बिलिंग और बजट का एकमात्र विश्वसनीय स्रोत है, इसे हर बार पढ़ना चाहिए।
एक रिक्वेस्ट कैसा दिखता है
एंडपॉइंट URL है POST https://api.apidamoxing.com/v1/chat/completions, प्रमाणीकरण हेडर Authorization: Bearer <key> है, अनुरोध शरीर JSON है, जो OpenAI की चैट पूर्ति के संगत है। पहले एक पूर्ण अनुरोध देखें जिसमें सभी सामान्य फ़ील्ड्स शामिल हों:
curl https://api.apidamoxing.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "你是一位耐心的天文科普作者。"},
{"role": "user", "content": "为什么月亮总是同一面朝向地球?"}
],
"temperature": 0.7,
"top_p": 0.9,
"max_tokens": 400,
"stop": ["###"]
}'ध्यान दें कि model केवल uncensored हो सकता है, क्योंकि सेवा में केवल एक ही मॉडल है, कोई विकल्प नहीं है। GET /v1/models से पुष्टि करें। नीचे प्रत्येक फ़ील्ड को अलग-अलग समझाया गया है।
पूरा लेख पढ़ने पर आपको पता चलेगा कि ये पैरामीटर तीन श्रेणियों में बांटे जा सकते हैं: 'क्या कहना है' (messages, tools), 'कैसे कहना है' (temperature, top_p), और 'कितना बोलना है, कब रुकना है' (max_tokens, stop, stream)। इस वर्गीकरण को याद रखें; भविष्य में जब कोई अज्ञात फ़ील्ड मिले, तो पहले तय करें कि वह किस श्रेणी में आता है, और अधिकांश मामलों में आप उसका प्रयोजन अनुमान लगा सकते हैं।
messages: इस संवाद का "रिकॉर्ड बुक"
messages एक सरणी है, जिसमें प्रत्येक तत्व में role और content होता है। इसे एक मीटिंग नोट्स की किताब की तरह कल्पना करें जिसमें हर पृष्ठ पर नोट लिखे गए हैं। मॉडल हर बार शुरुआत से फिर से पढ़ता है और अगला पृष्ठ लिखता है। यह याद नहीं रखता कि उसने पिछली बार क्या पढ़ा था, इसलिए मल्टी-टर्न संवाद के दौरान इतिहास को आपको पूर्ण रूप से प्रदान करना होगा।
| role | किसने लिखा | उद्देश्य |
|---|---|---|
| system | आप (डेवलपर) | पहचान, नियम, आउटपुट फॉर्मेट सेट करें, आमतौर पर सबसे पहले रखा जाता है |
| user | अंतिम उपयोगकर्ता | प्रश्न या निर्देश |
| assistant | मॉडल (या आपका लिखा हुआ इतिहास) | पिछला उत्तर, मल्टी-टर्न संदर्भ के लिए |
| tool | आपका प्रोग्राम | फ़ंक्शन कॉल का निष्पादन परिणाम, tool_call_id होना चाहिए |
एक सामान्य तकनीक: यदि आप चाहते हैं कि मॉडल किसी विशेष टोन में लिखना जारी रखे, तो आप एक assistant संदेश बनाकर इतिहास में जोड़ सकते हैं। याद रखें कि प्रॉम्प्ट और आउटपुट का योग 100,000 टोकन से अधिक नहीं होना चाहिए; इतिहास जितना लंबा होगा, उतना ही अधिक स्थान लेगा।
एक विशिष्ट उदाहरण लें। आपने एक ग्राहक सहायक बनाया है, system में लिखा है "केवल ऑर्डर से संबंधित प्रश्नों का उत्तर दें, उत्तर तीन वाक्यों से अधिक न हो"। उपयोगकर्ता पहले चरण में शिपिंग समय के बारे में पूछता है, दूसरे चरण में "तो वापसी के बारे में?" पूछता है। दूसरे अनुरोध में, messages में क्रमशः शामिल होने चाहिए: system, पहले चरण का user, पहले चरण का assistant उत्तर, दूसरे चरण का user। यदि कोई भी टुकड़ा गायब है, तो मॉडल नहीं जानता कि "तो" किसका संदर्भ है।
सैम्पलिंग पैरामीटर: "स्वतंत्रता की सीमा" को समायोजित करें
जब मॉडल प्रत्येक वर्ण उत्पन्न करता है, तो यह पहले सभी उम्मीदवार वर्णों को प्रायिकता स्कोर देता है और फिर लॉटरी निकालता है। नीचे दिए गए दो पैरामीटर लॉटरी के नियमों को समायोजित करने वाले नियंत्रक हैं:
| पैरामीटर | उपमा | इसे कैसे समझें | सामान्य मान |
|---|---|---|---|
| temperature | रचनात्मकता का स्तर | कम मान अधिक संरचित और स्थिर आउटपुट देता है; उच्च मान अधिक विविध और रचनात्मक आउटपुट देता है | 0 से 1.2 तक; प्रश्न-उत्तर के लिए कम मान और रचनात्मक लेखन के लिए उच्च मान चुनें |
| top_p | केवल शीर्ष N परिणामों से चुनता है | संचयी प्रायिकता p तक पहुंचने वाले उम्मीदवारों से चुनता है | 0.8 से 1.0 तक; डिफ़ॉल्ट मान अक्सर पर्याप्त होता है |
दोनों ही 'कितनी यादृच्छिकता' को नियंत्रित करते हैं, केवल दृष्टिकोण अलग है। एक साथ दोनों को समायोजित करना प्रभाव को समझना मुश्किल बना देता है, इसलिए एक बार में केवल एक को बदलने की सलाह दी जाती है। ये मानक सैंपलिंग फ़ील्ड्स को मूल रूप से पास किया जाएगा, एंडपॉइंट स्वयं उन्हें नहीं बदलेगा।
एक और स्पष्ट संख्यात्मक उदाहरण से समझें: मान लीजिए कि मॉडल के लिए अगले सबसे संभावित तीन शब्दों की प्रायिकताएं क्रमशः 60%, 30% और 10% हैं। temperature को कम करने पर 60% वाले विकल्प की बढ़त और बढ़ जाती है, जिससे आउटपुट हर बार शीर्ष विकल्प चुनने जैसा दिखता है; इसे बढ़ाने पर तीनों के बीच का अंतर कम हो जाता है और कम संभावित शब्दों के चुने जाने की संभावना बढ़ जाती है। यदि top_p 0.9 सेट है, तो केवल वे शब्द बचते हैं जिनकी संचमी प्रायिकता 90% तक पहुंचती है, और तीसरा शब्द बाहर हो जाता है। ये संख्याएं केवल सिद्धांत समझाने के लिए मानी गई हैं, वास्तविक प्रायिकताएं नहीं हैं।
लंबाई और स्टॉप शर्तों को नियंत्रित करें: max_tokens, stop, stream
| पैरामीटर | कार्य | मुख्य बातें |
|---|---|---|
| max_tokens | इस बार अधिकतम कितने टोकन जनरेट करने हैं, इसकी सीमा तय करता है | डिफ़ॉल्ट 2048, अधिकतम 32,000; यह मान प्रॉम्प्ट के टोकन के साथ मिलकर 100,000 से अधिक नहीं होना चाहिए |
| stop | निर्दिष्ट स्ट्रिंग मिलने पर जनरेशन रोक देता है | संगत स्ट्रिंग्स का एक सरल है, जो विभाजन और निश्चित-प्रारूप ट्रंकेशन के लिए उपयुक्त है |
| stream | क्या आउटपुट स्ट्रीमिंग मोड में वापस किया जाए | true सेट करने पर SSE के माध्यम से डेटा ब्लॉक भेजे जाते हैं; अंत में स्वचालित रूप से usage जानकारी वाला एक ब्लॉक जोड़ा जाता है |
max_tokens एक प्लेट के साइज जैसा है। यदि प्लेट छोटी है, तो भोजन पूरा होने से पहले ही उसे हटा लिया जाता है, और finish_reason length होगा। stop एक तय शर्त की तरह है; जब शर्त पूरी होती है, तो प्रक्रिया रुक जाती है। stream सामग्री नहीं बदलता, केवल डिलीवरी का तरीका बदलता है: 'सब कुछ तैयार होकर एक साथ आने' की जगह 'एक-एक करके आने' का अनुभव होता है, जिससे उपयोगकर्ता को प्रतिक्रिया तेज़ लगती है।
stop का एक बहुत उपयोगी उपयोग यह है: यदि आप मॉडल को 'प्रश्न: ... उत्तर: ...###' जैसे निश्चित फ़ॉर्मेट में आउटपुट देने को कहते हैं और ### को stop स्ट्रिंग सेट करते हैं, तो मॉडल उस डिलीमिटर तक ही जनरेट करेगा और रुक जाएगा। इससे टोकन बचते हैं और मॉडल के बाद में अनावश्यक बातें न कहने की संभावना कम हो जाती है। ध्यान रखें कि जब stop ट्रिगर होता है, तो finish_reason भी 'stop' ही आता है। यदि आपको अलग पहचानना है, तो आपको आउटपुट की सामग्री स्वयं चेक करनी होगी।
tools और tool_choice: मॉडल को 'कॉल' करने दें
मॉडल के पास रीयल-टाइम डेटा एक्सेस नहीं होता। function calling का तरीका यह है: आप पहले मॉडल को बताते हैं कि कौन से फ़ंक्शन उपलब्ध हैं। जब मॉडल को लगता है कि उसे डेटा चाहिए, तो वह सीधे जवाब देने के बजाय 'किसी फ़ंक्शन को कॉल करें, इसके पैरामीटर ... हैं' लौटाता है। आपका प्रोग्राम फ़ंक्शन चलाकर परिणाम वापस भेजता है, और मॉडल उसी आधार पर जवाब तैयार करता है। फ़ॉर्मेट OpenAI के समान है।
| पैरामीटर | मान | विवरण |
|---|---|---|
| tools | फ़ंक्शन विवरण सरणी | प्रत्येक में name, description और JSON Schema में parameters होते हैं |
| tool_choice | "auto" / "none" / निर्दिष्ट फ़ंक्शन | auto मॉडल पर छोड़ दिया जाता है, none फ़ंक्शन कॉलिंग को रोकता है, और निर्दिष्ट फ़ंक्शन मॉडल को उस फ़ंक्शन को कॉल करने के लिए मजबूर करता है |
import json
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.apidamoxing.com/v1", api_key=os.environ["API_KEY"])
tools = [{
"type": "function",
"function": {
"name": "get_tide_time",
"description": "查询某港口今天的高潮时刻",
"parameters": {
"type": "object",
"properties": {"port": {"type": "string", "description": "港口名称"}},
"required": ["port"],
},
},
}]
messages = [{"role": "user", "content": "青岛今天几点涨潮?"}]
first = client.chat.completions.create(
model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)
msg = first.choices[0].message
if msg.tool_calls:
call = msg.tool_calls[0]
args = json.loads(call.function.arguments)
result = {"port": args["port"], "high_tide": "14:20"} # 这里换成你自己的查询
messages.append(msg)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result, ensure_ascii=False)})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)
else:
print(msg.content)प्रक्रिया दो चरणों में होती है: पहले चरण में tool_calls प्राप्त करें, दूसरे चरण में role: tool के परिणाम को जोड़कर फिर से अनुरोध करें। description जितना अधिक विशिष्ट होगा, मॉडल उतनी ही बेहतर ढंग से जान पाएगा कि कब कॉल करना है। पैरामीटर एक JSON स्ट्रिंग है, इसे json.loads से पार्स करें और सत्यापित करें, सीधे भरोसा न करें।
प्रतिक्रिया फ़ील्ड्स: वापस आए 'रसीद' को समझें
एक सफल प्रतिक्रिया का स्वरूप कुछ इस प्रकार होता है, फ़ील्ड्स निश्चित होते हैं:
{
"id": "chatcmpl-xxxx",
"object": "chat.completion",
"model": "uncensored",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "因为潮汐锁定……"},
"finish_reason": "stop"
}
],
"usage": {"prompt_tokens": 38, "completion_tokens": 212, "total_tokens": 250}
}| फ़ील्ड | अर्थ |
|---|---|
| choices | परिणामों का सरल, आमतौर पर इसमें केवल एक आइटम होता है; मुख्य सामग्री choices[0].message.content में होती है |
| finish_reason | समाप्ति का कारण: 'stop' सामान्य समाप्ति; 'length' का अर्थ है कि max_tokens की सीमा पर पहुँचकर आउटपुट काट दिया गया; 'tool_calls' का अर्थ है कि मॉडल ने फ़ंक्शन कॉल की मांग की |
| usage.prompt_tokens | इनपुट में खपत हुए टोकन |
| usage.completion_tokens | आउटपुट में खपत हुए टोकन |
| usage.total_tokens | दोनों का योग |
कोड में पहले finish_reason देखें: यदि यह length है तो उपयोगकर्ता को सूचित करें कि सामग्री काट दी गई है या स्वचालित रूप से जारी रखें; यदि यह tool_calls है तो फ़ंक्शन निष्पादन शाखा पर जाएं। usage का उद्देश्य टोकन और बिलिंग वाले लेख में बजट विधि के रूप में अधिक विस्तार से बताया गया है।
कुछ सबसे आम पैरामीटर गलतफहमियाँ
- max_tokens को 'इनपुट लिमिट' समझ लेना। यह केवल आउटपुट पर लागू होता है, इनपुट आप ही नियंत्रित करते हैं।
- यह मान लेना कि मॉडल पिछले अनुरोध को याद रखता है। हर अनुरोध स्वतंत्र होता है, इतिहास स्वयं भेजें।
- temperature को 0 सेट करने पर यह मान लेना कि हर बार आउटपुट बिल्कुल समान आएगा। यह अधिक स्थिर होगा, लेकिन शब्द-दर-शब्द समानता की गारंटी नहीं है।
- स्ट्रीमिंग मोड में सीधे choices[0].message पढ़ लेना। स्ट्रीमिंग ब्लॉक्स में फ़ील्ड 'delta' होता है, आपको इसे स्वयं जोड़ना होगा।
- tool कॉल के बाद assistant मैसेज (जिसमें tool_calls होता है) को जोड़ना भूल जाना, जिससे दूसरे चरण में त्रुटि आती है।
अक्सर पूछे जाने वाले प्रश्न
क्या मैं एक साथ temperature और top_p सेट कर सकता हूँ?
हाँ, लेकिन प्रभाव को अलग-अलग समझना कठिन होता है। अधिकांश मामलों में केवल temperature बदलना पर्याप्त होता है; जब उम्मीदवारों की सीमा को सटीक रूप से नियंत्रित करना हो, तब top_p बदलें।
finish_reason 'length' आने पर क्या करें?
इसका अर्थ है कि आउटपुट max_tokens की सीमा पर पहुँच गया है और काट दिया गया है। आप max_tokens को बढ़ा सकते हैं (अधिकतम 32,000 तक), या मॉडल को भागों में जनरेट करने को कह सकते हैं।
क्या tools का फ़ॉर्मेट OpenAI जैसा ही है?
हाँ, OpenAI फ़ॉर्मेट के tools और tool_choice का उपयोग करें। प्रतिक्रिया में tool_calls की संरचना भी समान ही होती है।
स्ट्रीमिंग प्रतिक्रिया में usage (उपयोग) कैसे प्राप्त करें?
stream को सक्षम करने पर, अंत में स्वचालित रूप से usage जानकारी वाला एक डेटा ब्लॉक जोड़ा जाता है। उसे पढ़ें, किसी अतिरिक्त पैरामीटर की आवश्यकता नहीं है।
कुंजी प्राप्त करने के लिए केवल फ़ॉर्म भरें
खाता बनाएँ, कुंजी कॉपी करें, Base URL बदलें। कॉन्फ़िगरेशन इतना ही सरल है।