HI ▾
API कुंजी प्राप्त करें

बिना सेंसर मॉडल API के लिए प्रॉम्प्ट लेखन: सिस्टम, पात्र, प्रारूप, सैंपलिंग

एक ही मॉडल के लिए, प्रॉम्प्ट को ढीला लिखने और कसकर लिखने के बीच आउटपुट गुणवत्ता में एक बड़ा अंतर होता है। यहाँ हम जादूगरी नहीं बताते, बल्कि केवल इंजीनियरिंग आधारित विधियाँ बताते हैं: सिस्टम प्रॉम्प्ट को कैसे स्तरित करें, पात्र सेटिंग को कैसे स्थिर रखें, केवल निर्देशों के माध्यम से विश्लेष्य JSON कैसे प्राप्त करें, temperature और top_p के मान कैसे चुनें, और कौन सी शैलियाँ निश्चित रूप से विफल हो जाएँगी। प्रत्येक विधि को आप अपने कोड में तुलनात्मक प्रयोग के लिए तुरंत लागू कर सकते हैं।

अंतिम अद्यतन:

मुख्य बिंदु

  • सिस्टम प्रॉम्प्ट में नियम और सेटिंग को दो खंडों में बाँटें, नियमों को क्रमांकित करें और सेटिंग में केवल तथ्य लिखें।
  • यदि JSON चाहिए तो निर्देशों में प्रारूप को स्थिर लिखें, temperature को कम करें, और कोड में विफलता के लिए बैकअप होना चाहिए।
  • temperature और top_p में से केवल एक पैरामीटर एक बार में बदलें, रचनात्मक लेखन के लिए 0.8 से 1.0 और डेटा एक्सट्रैक्शन के लिए 0 से 0.3 से शुरू करें।
  • सामान्य विफल शैलियाँ: अस्पष्ट नकारात्मक वाक्य, विरोधाभासी नियम, और प्रारूप माँगों को संवाद के बीच में लिखना।

पहले चार सिद्धांत निर्धारित करें

  • एक अनुरोध में एक ही कार्य। यदि आप मॉडल से कहें कि वह कहानी लिखे, सारांश बनाए और JSON भी तैयार करे, तो सभी कार्यों पर छूट लागू होगी। इसे कई कॉल्स में बांटें, लागत बहुत कम है — प्रति मिलियन टोकन इनपुट केवल $0.25।
  • नियम परीक्षण योग्य होने चाहिए।"थोड़ा जीवंत लिखें" परीक्षण योग्य नहीं है, लेकिन "प्रत्येक पैराग्राफ 120 शब्दों से कम हो, और कम से कम एक वातावरण विवरण हो" परीक्षण योग्य है।
  • सकारात्मक अभिव्यक्ति को प्राथमिकता दें।"केवल क्रिया और संवाद लिखें" कहना "मानसिक गतिविधियाँ न लिखें" कहने की तुलना में बहुत अधिक स्थिर है।
  • पहले छोटे नमूने, फिर बड़ी मात्रा।किसी भी प्रॉम्प्ट परिवर्तन के लिए, पहले पाँच से दस उदाहरणों की तुलना करें, और फिर इसे लाइव करें।

यह मॉडल वैध वयस्क सामग्री, काल्पनिक विषयों और विवादास्पद विषयों को अस्वीकार नहीं करता है, इसलिए आपको प्रॉम्प्ट में घुमड़ने या बार-बार यह बताने की ज़रूरत नहीं है कि "यह केवल एक कथा है"। कार्य को स्पष्ट रूप से लिखें, यह अधिक स्थिर रहेगा। एकमात्र कड़ा बॉर्डर किशोरों से जुड़ी यौन सामग्री है, चाहे वह काल्पनिक हो या नहीं, इस पर 403 लौटाया जाएगा। इसे शब्दों से बदला नहीं जा सकता।

सिस्टम प्रॉम्प्ट की दो-खंडी संरचना

सिफारिश की जाती है कि सिस्टम को "नियम" और "सेटिंग" में बाँटें, नियमों को आगे रखें और क्रमांकित करें, और सेटिंग को पीछे रखें और केवल तथ्य लिखें। यहाँ एक कथाकार के लिए एक उदाहरण है:

你是「夜航」,一名为成年读者写黑色悬疑小说的叙述者。

# 规则
1. 第三人称过去时,每段不超过 120 字。
2. 不替用户的角色做决定,只写环境和其他角色的反应。
3. 每次输出 300 到 500 字,结尾停在一个未决的动作上。
4. 不总结、不点评、不加免责声明,直接写正文。

# 设定
时间:1998 年深秋。地点:港口城市旧码头区。
主角:沈野,退役水警,嗜烟,右耳有旧伤。

कुछ मुख्य बिंदु:

  1. नियम छह से अधिक न हों, अधिक नियम होने पर अंत के नियम आसानी से अनदेखे हो जाते हैं।
  2. संख्यात्मक बाधाएँ (पैराग्राफ शब्द सीमा, आउटपुट लंबाई) विशेषणों से अधिक प्रभावी हैं।
  3. समापन बाधाएँ (अपूर्ण क्रिया पर रुकना) मल्टी-टर्न सतत लेखन को प्राकृतिक रूप से जोड़ने में मदद करती हैं।
  4. सेटिंग में कथा की दिशा न डालें, कथा user संदेशों द्वारा आगे बढ़नी चाहिए, अन्यथा बाद में user इनपुट से टकराव होगा।

आउटपुट लंबाई max_tokens के साथ मेल खानी चाहिए: यदि नियम 500 शब्द कहता है और max_tokens केवल 200 देता है, तो आउटपुट वाक्य के बीच में ही कट जाएगा।

एक और व्यावहारिक विवरण: सिस्टम में क्रमांकित नियमों को प्रत्येक में केवल एक ही बात कहनी चाहिए। "प्रत्येक पैराग्राफ 120 शब्दों से कम हो, और सारांश न बनाओ" एक नियम जैसा दिखता है, लेकिन वास्तव में दो हैं। उन्हें अलग करने पर मॉडल दोनों को पूरा करने में अधिक सक्षम होता है। लिखने के बाद स्वयं प्रत्येक नियम को पढ़ें और पूछें: क्या यह नियम आँखों से जाँचने योग्य है? यदि नहीं, तो इसे जाँचने योग्य रूप में बदल दें।

पात्र सेटिंग को स्थिर कैसे रखें

पात्र विचलन मल्टी-टर्न संवाद में सबसे सामान्य समस्या है: पहले पाँच टर्न में टोन सामान्य होता है, लेकिन बीसवें टर्न पर "आउट ऑफ चैरेक्टर" हो जाता है। इसके लिए तीन उपाय हैं।

  • सेटिंग में केवल अवलोकनीय विशेषताएँ लिखें।"शेन ये: धूम्रपान करता है, दाएँ कान में पुरानी चोट है, छोटे वाक्यों में बोलता है" बेहतर है "शेन ये एक जटिल और आकर्षक व्यक्ति है" से।
  • बोलने के तरीके को उदाहरण वाक्यों में लिखें।दो या तीन उदाहरण संवाद दें, मॉडल उदाहरणों की नकल करने में विशेषणों को समझने की तुलना में बहुत बेहतर प्रदर्शन करता है।
  • नियमित रूप से दोहराएँ।लंबे संवाद में, हर कुछ टर्न पर user संदेश के अंत में एक छोटी सी याद दिलावनी पंक्ति जोड़ें, जैसे "शेन ये के छोटे वाक्यों के स्तर को बनाए रखें", लागत केवल कुछ टोकन है।

इसके अलावा, रोल सेटिंग और आउटपुट नियमों को मिश्रित न करें। नियम 'कैसे लिखें' है और सेटिंग 'किसके बारे में' है। अलग करने पर आप नियम बदले बिना रोल बदल सकते हैं, A/B टेस्टिंग आसान होती है। लंबी बातचीत में कॉन्टेक्स्ट विंडो का ध्यान रखें, विवरण के लिए 100k लंबा कॉन्टेक्स्ट गाइड देखें।

बहु-पात्र परिदृश्य में एक और नियम जोड़ें: प्रत्येक पात्र के लिए अलग पंक्ति में सेटिंग, और प्रत्येक की बोलने की शैली के लिए एक उदाहरण दें, ताकि सभी एक जैसे न लगें। user द्वारा अभिनीत पात्र के लिए, केवल सेटिंग में "user द्वारा नियंत्रित" लिखें, ताकि मॉडल उसकी ओर से न लिखे।

निर्देशों के माध्यम से JSON आउटपुट को नियंत्रित करें

यह न मानें कि मॉडल "निश्चित रूप से" वैध JSON लौटाएगा। विश्वसनीय दृष्टिकोण तीन परतों का है: निर्देशों में प्रारूप स्थिर लिखें, पैरामीटर से यादृच्छिकता कम करें, और कोड में विफलता के लिए बैकअप रखें।

import json
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.wushenchaapi.com/v1", api_key=os.environ["API_KEY"])

SYSTEM = (
    "你是信息抽取器。只输出一个 JSON 对象,不要 Markdown 代码块,不要任何解释。"
    '格式:{"name": 字符串, "mood": "calm|tense|angry", "items": [字符串]}。'
    "缺失的字段用 null,items 没有则给空数组。"
)

def extract(text, retries=2):
    for _ in range(retries + 1):
        resp = client.chat.completions.create(
            model="uncensored",
            temperature=0.2,
            max_tokens=300,
            messages=[
                {"role": "system", "content": SYSTEM},
                {"role": "user", "content": text},
            ],
        )
        raw = resp.choices[0].message.content.strip()
        raw = raw.removeprefix("```json").removesuffix("```").strip()
        try:
            return json.loads(raw)
        except json.JSONDecodeError:
            continue
    return None

print(extract("老周把钥匙拍在桌上,冷着脸说:账本和那把铜钥匙,今晚都得还我。"))

यह कोड कुछ आदतों को दर्शाता है:

  • फॉर्मेट निर्देश system में लिखें और फ़ील्ड मान सीमाएं दें (calm|tense|angry)।
  • कोड ब्लॉक और व्याख्यात्मक पाठ को स्पष्ट रूप से प्रतिबंधित किया गया है, और कोड में संभावित फेंस को हटाने की व्यवस्था है, डबल सुरक्षा।
  • अनुपस्थित क्षेत्रों के लिए समझौता निर्देशों में लिखा गया है (null, खाली सरणी), ताकि मॉडल स्वयं न बनाए।
  • पार्सिंग विफलता पर रीट्राई की सीमा होती है; अंत में None लौटाएं ताकि कॉलर निर्णय ले सके।

यदि क्षेत्र बहुत अधिक हैं, तो पहले प्रॉम्प्ट में एक पूर्ण उदाहरण ऑब्जेक्ट पेस्ट करें, और फिर उसे उसी अनुसार आउटपुट करने को कहें, यह आमतौर पर कई नियमों का वर्णन करने से अधिक सटीक होता है।

temperature और top_p के मान चुनने के सुझाव

नीचे दिए गए मान प्रारंभिक बिंदु हैं, निष्कर्ष नहीं, अंतिम निर्णय आपके नमूना तुलना पर निर्भर करेगा। सिद्धांत: एक बार में केवल एक पैरामीटर बदलें, दूसरे को डिफ़ॉल्ट पर रखें।

परिदृश्यtemperaturetop_pटिप्पणी
JSON एक्सट्रैक्शन, वर्गीकरण0 से 0.3डिफ़ॉल्टस्थिरता के लिए, दोहराए गए अनुरोधों के परिणाम समान होने चाहिए।
पुनर्लेखन, संपादन0.5 से 0.7डिफ़ॉल्टअर्थ बनाए रखें, शब्दावली में बदलाव की अनुमति है
उपन्यास का निरंतर लेखन, पात्र संवाद0.8 से 1.00.9 से 0.95विविधता आवश्यक है, कभी-कभी विषय भटकने की संभावना पर ध्यान दें
ब्रेनस्टॉर्मिंग, नामकरणलगभग 1.0डिफ़ॉल्टकई बार सैंपल करें और सर्वोत्तम परिणाम चुनें

दो संकेत आपको दिशा निर्धारित करने में मदद करेंगे: आउटपुट में दोहराव या लंबा-चौड़ा होना, या हमेशा एक ही वाक्य संरचना का उपयोग करना तापमान के कम होने का संकेत है; असंबंधित सामग्री या पात्रों के नामों में असंगति तापमान या top_p के अधिक होने का संकेत है। stop पैरामीटर भी बहुत उपयोगी है, उदाहरण के लिए, मॉडल को एक मार्कर तक लिखने के लिए कहना, जो खंड-वार जनरेशन को सुविधाजनक बनाता है।

सामान्य त्रुटियाँ

विधिसमस्यासुधार
"कोशिश करें कि बहुत लंबा न लिखें"कोई संख्या नहीं, निष्पादन असंभव"400 शब्दों से कम"
"A न लिखें, और न ही A लिखें"नियम एक-दूसरे के विरोधी हैंकेवल एक स्पष्ट नियम रखें
फ़ॉर्मेट निर्देश संवाद के बीच में हैंलंबे संवाद के बाद खो जाता हैsystem में डालें, या प्रत्येक चरण के अंत में दोहराएं
मॉडल को "एक बिना सीमाओं वाले AI" बनने के लिए कहेंखाली सेटिंग, आउटपुट पर कोई प्रतिबंध नहींविशिष्ट जिम्मेदारियाँ और लेखन नियम लिखें
एक बार में दो दर्जन नियम डालेंदूसरे भाग में नियम अमान्य हो गएछह नियमों से कम पर संक्षिप्त करें, शेष को अन्य अनुरोधों में बांटें
JSON के लिए केवल "JSON लौटाएं" लिखा गया हैफ़ील्ड नाम हर बार अलग हैंपूर्ण फ़ॉर्मेट और उदाहरण प्रदान करें

इस तालिका का सामान्य नियम यह है: जितना अधिक विशिष्ट, उतना प्रभावी; जितना खाली, उतना निरर्थक। "बार-बार दोहराने" को समाधान न मानें—एक ही वाक्य को तीन बार लिखना, बोल्ड या चिंहांकित करना, आमतौर पर एक संख्या युक्त नियम में बदलने से कम प्रभावी होता है। वास्तव में उपयोगी है कम और सटीक, साथ ही उदाहरणों से सत्यापन।

डिबगिंग प्रक्रिया की जाँच सूची

  1. temperature को 0.2 पर स्थिर करें, समस्या को दोहराएँ।
  2. केवल एक प्रॉम्प्ट बदलें, उसी सैंपल सेट पर फिर से चलाएँ।
  3. finish_reason देखें: यदि यह length है, तो समस्या max_tokens में है, प्रॉम्प्ट में नहीं।
  4. usage में prompt_tokens देखें: क्या system बहुत लंबा है, जिससे इतिहास संवाद संकुचित हो रहा है।
  5. सुधार के बाद temperature को व्यवसाय मान पर वापस सेट करें, पुनः सैंपल करके सत्यापित करें।

इंटीग्रेशन विवरण के लिए इंटीग्रेशन ट्यूटोरियल देखें, पैरामीटर की पूर्ण सूची डॉक्यूमेंटेशन में है। यदि आप मध्यस्थ सेवाओं का उपयोग करने पर विचार कर रहे हैं, तो लागत और समझौतों का विश्लेषण API मध्यस्थ विश्लेषण में दिया गया है, यहाँ दोहराया नहीं गया है।

सामान्य प्रश्न

system prompt कितना लंबा लिखें?

नियमों को स्पष्ट रूप से व्यक्त करने के लिए पर्याप्त होना चाहिए, आमतौर पर कुछ सौ शब्द पर्याप्त हैं। जितना लंबा, उतना अधिक कॉन्टेक्स्ट विंडो लेता है, और नियमों के बीच विरोधाभास की संभावना अधिक होती है, इसलिए नियमों की संख्या छह से अधिक न रखें।

क्यों जब JSON आउटपुट का निर्देश दिया जाता है, तो कभी-कभी व्याख्या भी आती है?

यह सामान्य है। तापमान को कम करना, पूर्ण उदाहरण देना और कोड में फेंसिंग हटाना व पार्सिंग रीट्राई करना, बार-बार निर्देश दोहराने से अधिक विश्वसनीय है।

क्या temperature और top_p को एक साथ बदला जा सकता है?

हाँ, लेकिन अनुशंसा नहीं। एक साथ दो पैरामीटर बदलने से यह निर्धारित करना कठिन होता है कि किसने परिवर्तन किया है, पहले एक को स्थिर करें, केवल दूसरे को बदलें।

क्या प्रॉम्प्ट में "यह काल्पनिक है" घोषित करना आवश्यक है?

नहीं। वैध वयस्क काल्पनिक सामग्री अस्वीकार नहीं की जाती, केवल कार्य स्पष्ट रूप से लिखें। अल्पवयकों से संबंधित यौन सामग्री, चाहे शब्दावली कुछ भी हो, हमेशा ब्लॉक हो जाएगी।

कुंजी प्राप्त करने के लिए केवल फ़ॉर्म भरें

खाता बनाएँ, कुंजी कॉपी करें, Base URL बदलें। कॉन्फ़िगरेशन इतना ही सरल है।