प्रॉम्प्ट मैक्रो
मैक्रो यानी एक छोटा {{tag}}, जिसकी जगह Marinara प्रॉम्प्ट बनाते समय कोई मौजूदा वैल्यू रख देता है, जैसे आपका नाम या आज की तारीख। इस गाइड में हर बिल्ट-इन मैक्रो की सूची है, साथ ही यह भी कि उन्हें कहाँ लिखा जा सकता है और किन गलतियों से बचना है।
मैक्रो कहाँ काम करते हैं
AI को भेजा जाने वाला टेक्स्ट बनाते समय Marinara हर {{tag}} की जगह उसकी मौजूदा वैल्यू रख देता है। मैक्रो चालू करने के लिए कोई स्विच नहीं है। जो भी फ़ील्ड इन्हें सपोर्ट करती है, वह इन्हें हमेशा हल कर देती है। बिल्ट-इन मैक्रो के नामों में छोटे-बड़े अक्षर से कोई फ़र्क नहीं पड़ता, इसलिए {{user}} और {{USER}} दोनों चलते हैं। एक मैक्रो की वैल्यू में दूसरा मैक्रो भी हो सकता है, और Marinara उसे भी हल कर देता है।
आप इन जगहों पर मैक्रो लिख सकते हैं:
- Character Editor (कैरेक्टर एडिटर) की कैरेक्टर फ़ील्ड: Description, Personality, Backstory, Appearance, Scenario, Example Dialogue, System Prompt, Post-History Instructions, और Depth Prompt।
- Persona Editor (पर्सोना एडिटर) की पर्सोना फ़ील्ड (कार्ड की वही फ़ील्ड)।
- लोरबुक एंट्री की Description और Content फ़ील्ड।
- Preset Editor (प्रीसेट एडिटर) में प्रॉम्प्ट प्रीसेट के सेक्शन।
- रेजेक्स स्क्रिप्ट की Find, Replace और Trim फ़ील्ड।
- एजेंट के प्रॉम्प्ट टेम्पलेट।
- चैट का संदेश बॉक्स। संदेश में
{{roll:1d20}}लिखें, तो भेजने से पहले वह हल हो जाता है।
मैक्रो Marinara के अंदर ही चलते हैं, इसलिए उनके लिए न कोई सेटअप चाहिए, न API कुंजी। दो सुविधाएँ ऐप के दूसरे हिस्सों पर टिकी हैं:
- प्रीसेट वेरिएबल (यानी
{{NAME}}वाला कैच-ऑल) के लिए ऐसा प्रॉम्प्ट प्रीसेट चाहिए जो उन्हें परिभाषित करता हो। देखें प्रीसेट वेरिएबल। - एजेंट मैक्रो
{{agent::TYPE}}तभी टेक्स्ट दिखाता है जब उससे मेल खाने वाला एजेंट चल चुका हो और आउटपुट बना चुका हो।
आइडेंटिटी, कैरेक्टर और पर्सोना मैक्रो
ये मैक्रो बोलने वाले व्यक्ति और जवाब देने वाले कैरेक्टर के नाम और कार्ड फ़ील्ड ले आते हैं। यूज़र आप खुद हैं (या आपका चालू पर्सोना)। कैरेक्टर वह बॉट है जो जवाब दे रहा है।
| मैक्रो | किसमें बदलता है |
{{user}} / {{userName}} | आपका मौजूदा डिस्प्ले नाम (या पर्सोना का नाम)। कोई पर्सोना सेट न हो तो User। |
{{userNamePhonetic}} | आपके पर्सोना का Phonetic नाम, और खाली होने पर {{user}}। |
{{char}} / {{charName}} | मौजूदा कैरेक्टर का नाम। डिफ़ॉल्ट Character है। |
{{21-character-card-ID}} | दूसरे कैरेक्टर का नाम। कार्ड को कॉन्टेक्स्ट में लाने के लिए प्लेसहोल्डर टेक्स्ट की जगह उस कार्ड की ठीक 21 अक्षर वाली ID लिखें। |
{{persona-21-character-card-ID}} | दूसरे पर्सोना का नाम। कार्ड को कॉन्टेक्स्ट में लाने के लिए persona- के बाद वाले प्लेसहोल्डर टेक्स्ट की जगह उस कार्ड की ठीक 21 अक्षर वाली ID लिखें। |
{{charNamePhonetic}} | कैरेक्टर का Phonetic नाम, और खाली होने पर {{char}}। |
{{characters}} | चैट का हर कैरेक्टर, निष्क्रिय कैरेक्टर समेत, कॉमा से जुड़े हुए। यह मैक्रो सिर्फ़ नाम जोड़ता है; निष्क्रिय कैरेक्टर के कार्ड प्रॉम्प्ट में नहीं जोड़ता। |
{{group}} | ग्रुप चैट के बाकी सभी सक्रिय कैरेक्टर, अभी जवाब दे रहे कैरेक्टर को छोड़कर। पर्सोना इस कैरेक्टर सूची में नहीं आता। |
{{persona}} | आपके पर्सोना की Description, Personality, Backstory, Appearance और Scenario, नई पंक्तियों से जुड़ी हुई। |
{{personaDescription}} | आपके पर्सोना की Description फ़ील्ड। |
{{personaPersonality}} | आपके पर्सोना की Personality फ़ील्ड। |
{{personaBackstory}} | आपके पर्सोना की Backstory फ़ील्ड। |
{{personaAppearance}} | आपके पर्सोना की Appearance फ़ील्ड। |
{{personaScenario}} | आपके पर्सोना की Scenario फ़ील्ड। |
कैरेक्टर फ़ील्ड वाले मैक्रो मौजूदा कैरेक्टर का कार्ड पढ़ते हैं:
| मैक्रो | कैरेक्टर कार्ड की फ़ील्ड |
{{description}} | Description |
{{personality}} | Personality |
{{backstory}} | Backstory |
{{appearance}} | Appearance |
{{scenario}} | Scenario |
{{example}} | Example Dialogue |
{{charSysInfo}} | System Prompt |
{{charPostHistory}} | Post-History Instructions |
एक कैरेक्टर वाली चैट में ये उसी कैरेक्टर से हल होते हैं। ग्रुप चैट में डिफ़ॉल्ट रूप से पहले कैरेक्टर से हल होते हैं। किसी टेक्स्ट को हर कैरेक्टर के लिए दोहराना हो, तो उसे कोष्ठक वाले ग्रुप ब्लॉक के अंदर रखें। ग्रुप ब्लॉक के लिए देखें कंडीशनल प्रॉम्प्ट।
{{group}} उसी कैरेक्टर के हिसाब से चलता है जो अभी जवाब दे रहा है, ग्रुप की अलग-अलग जेनरेशन के दौरान भी। मिसाल के तौर पर, Powers That Be, Maukie और Pantalone वाले Roleplay ग्रुप में अगर Pantalone जवाब दे रहा है, तो {{group}} की वैल्यू Powers That Be, Maukie होगी। कोई कैरेक्टर कार्ड इस सूची में तब भी रहता है जब उसका नाम संयोग से {{user}} से मेल खा जाए।
Phonetic नाम वाली फ़ील्ड के दो काम हैं। यह तय करती है कि टेक्स्ट टू स्पीच नाम को कैसे बोलेगा। साथ ही यही {{charNamePhonetic}} और {{userNamePhonetic}} को वैल्यू देती है। यह Character Editor और Persona Editor, दोनों में मिलती है।
मौजूदा चैट से बाहर के किसी कैरेक्टर का ज़िक्र करने के लिए उस कार्ड की ID कॉपी करें और उसे सीधे दोहरे ब्रेस के अंदर रखें, जैसे {{V1StGXR8_Z5jdHi6B-myT}}। अक्षरशः < या > वर्ण न जोड़ें। Marinara मैक्रो को कैरेक्टर के नाम से बदल देता है। प्रॉम्प्ट प्रीसेट वाली Roleplay चैट में यह उस कार्ड के Description, Personality, Appearance, Backstory, Scenario और Example Dialogue भी सिस्टम प्रॉम्प्ट में जोड़ता है; बाकी चैट में मैक्रो सिर्फ़ नाम में बदलता है। यह चैट संदेशों और प्रॉम्प्ट फ़ील्ड में काम करता है, और प्रीसेट वाली Roleplay चैट में सक्रिय हुई लोरबुक एंट्री में भी। उस कार्ड के शुरुआती अभिवादन शामिल नहीं होते। उस कार्ड से जुड़ी चालू लोरबुक पर उनके सामान्य कीवर्ड, Constant, फ़िल्टर, संभावना और टोकन बजट नियम लागू रहते हैं। वह कैरेक्टर पहले से चैट में हो, तब भी मैक्रो उसके नाम में बदल जाता है, और उसका कार्ड दूसरी बार नहीं जुड़ता।
चालू पर्सोना के अलावा किसी दूसरे पर्सोना का ज़िक्र करने के लिए उसकी कॉपी की गई ID के आगे persona- जोड़ें, जैसे {{persona-P1StGXR8_Z5jdHi6B-myT}}। Marinara मैक्रो को पर्सोना के नाम से बदल देता है और उस कार्ड के Description, Personality, Appearance, Backstory और Scenario को उसी ID Macro Cards कॉन्टेक्स्ट में जोड़ता है। उस पर्सोना से जुड़ी चालू लोरबुक अपने सामान्य एक्टिवेशन नियमों पर चलती हैं।
Conversation मोड के मैक्रो
ये चार मैक्रो सिर्फ़ Conversation मोड में चलते हैं। बाकी हर मोड में इनकी वैल्यू हमेशा खाली रहती है, चाहे वही कार्ड या प्रीसेट टेक्स्ट कई मोड में साझा हो।
| मैक्रो | किसमें बदलता है |
{{convo_display}} | कैरेक्टर का Convo Display Name, और खाली होने पर कार्ड का नाम। |
{{char_about}} | कैरेक्टर का मौजूदा About Me (सेट हो तो उस चैट वाला ओवरराइड, वरना कार्ड का डिफ़ॉल्ट)। |
{{persona_about}} | आपके पर्सोना का मौजूदा About Me। |
{{convo_behavior}} | कैरेक्टर का Convo Behavior टेक्स्ट, पर सिर्फ़ तब जब उसकी इंसर्शन सेटिंग इसी मैक्रो पर रखने के लिए सेट हो। |
ये फ़ील्ड Character Editor और Persona Editor के Convo टैब में एडिट होती हैं। पूरी सेटअप जानकारी के लिए देखें Conversation मोड की प्रोफ़ाइल (Display Name, About Me, Behavior)।
Conversation प्लेसमेंट मैक्रो
Conversation मोड कई ब्लॉक अपने आप प्रॉम्प्ट में जोड़ देता है। इन मैक्रो से कोई प्रीसेट किसी ब्लॉक को वहाँ खिसका सकता है जहाँ आप मैक्रो रखते हैं। ऐसा करने पर Marinara उस ब्लॉक को मैक्रो वाली जगह पर बनाता है और उसका अपने आप जुड़ना छोड़ देता है, इसलिए सामग्री कभी दोबारा नहीं आती। हर मैक्रो के एक या ज़्यादा उपनाम हैं, और हर उपनाम एक जैसा ही काम करता है।
| मैक्रो (और उपनाम) | क्या रखता है |
{{context}}, {{status}} | बातचीत का कॉन्टेक्स्ट / स्टेटस ब्लॉक। |
{{commands}}, {{commandList}} | उपलब्ध कमांड की याद दिलाने वाला हिस्सा। |
{{reactRules}}, {{emojiReact}} | कस्टम इमोजी रिएक्शन के नियम। |
{{replyRules}} | कस्टम इमोजी और स्टिकर से जवाब देने के नियम। |
{{memories}}, {{memoryRecall}} | मेमोरी रिकॉल वाला ब्लॉक। |
{{lorebook}}, {{lore}} | लोरबुक का प्रॉम्प्ट में जोड़ा जाने वाला हिस्सा। |
ये सिर्फ़ Conversation मोड में लागू होते हैं। एक कैरेक्टर वाली बातचीत में {{char_about}} / {{persona_about}} से हिस्सा लेने वालों का परिचय खुद रखना भी ऐसे ही काम करता है (ऊपर देखें): फिर Marinara अपने आप जुड़ने वाला "about me" ब्लॉक छोड़ देता है, ताकि परिचय दो बार न आए। ग्रुप बातचीत में यह अपने आप जुड़ने वाला ब्लॉक बना रहता है, क्योंकि इनमें से कोई भी एकवचन मैक्रो सिर्फ़ एक ही भागीदार को कवर करता है और बाकी सबका परिचय छिपाना ठीक नहीं होगा।
कॉन्टेक्स्ट मैक्रो
ये मैक्रो मौजूदा चैट और मौजूदा रिक्वेस्ट के बारे में बताते हैं।
| मैक्रो | किसमें बदलता है |
{{input}} | प्रॉम्प्ट को उपलब्ध सबसे नया यूज़र संदेश। |
{{model}} | मौजूदा मॉडल का नाम, जब कोई चुना गया हो। |
{{reasoning}} | यह जवाब जिस रीज़निंग लेवल पर जेनरेट हो रहा है: low, medium, high, xhigh या max, या off जब मॉडल से सोचने को नहीं कहा जाता। |
{{chatId}} | मौजूदा चैट की ID। |
{{lastGenerationType}} | यह जवाब क्यों जेनरेट हो रहा है, इसका लेबल। |
{{idle_duration}} | चैट में आखिरी हलचल को कितनी देर हुई, टेक्स्ट के रूप में जैसे 8 minutes या 1 hour 5 minutes। |
{{gameStoryboardKeyframeCount}} | Game Mode का मौजूदा Keyframes per Turn लक्ष्य, 1 से 6 तक। डिफ़ॉल्ट 3 है। |
{{agent::TYPE}} | दिए गए टाइप वाले एजेंट का सेव किया हुआ आउटपुट। |
{{reasoning}} वह लेवल बताता है जो मॉडल को भेजा जाता है, आपके प्रीसेट, अकाउंट और चैट की सेटिंग्स को परत-दर-परत लागू करने के बाद। Maximum (अधिकतम) मॉडल के लिए सबसे ऊँचे स्वीकार्य लेवल के रूप में दिखता है, इसलिए वह max, xhigh या high पढ़ा जा सकता है। चूँकि off को गलत (false) माना जाता है, {{#if reasoning}} किसी ब्लॉक को तभी रखता है जब मॉडल सोच रहा हो। अगर आपके प्रीसेट या चैट में पहले से reasoning नाम का अपना वेरिएबल है, तो नाम उसी वेरिएबल के पास रहता है।
{{lastGenerationType}} की वैल्यू एक सादा लेबल होती है। ऐप में दिखने वाली मिसालें हैं normal, continue, regenerate, impersonate, guided, autonomous, turn_game, preview, game_setup, lorebook_scan और retry_agents। यह सूची आगे बढ़ सकती है, इसलिए इसे उदाहरण मानें, तय सूची नहीं।
{{gameStoryboardKeyframeCount}} Game Mode के GM प्रॉम्प्ट को दिया जाता है, जिसमें बिल्ट-इन Storyboard Game Prompt भी शामिल है। यह कहानी के लिए एक लक्ष्य है, ठीक उतने पैराग्राफ़ की माँग नहीं। जब किसी टर्न में काफ़ी अलग-अलग दृश्य पल न हों, तब स्टोरीबोर्ड प्लानर फिर भी कम शॉट लौटाता है।
{{agent::TYPE}} मैक्रो किसी एजेंट का सेव किया हुआ आउटपुट जोड़ता है (एजेंट यानी पीछे-पीछे चलने वाला मददगार, जो सीन ट्रैकर जैसी चीज़ें भरता है)। इसे जोड़ने का सबसे आसान तरीका Preset Editor के अंदर है: Add Section पर क्लिक करें, Agent Sections ग्रुप खोलें, और एक एजेंट चुनें। Marinara एक ऐसा सेक्शन बना देता है जिसमें सही {{agent::TYPE}} टैग पहले से मौजूद होता है। यह मैक्रो सबसे आखिर में हल होता है, इसलिए एजेंट का टेक्स्ट आपके प्रॉम्प्ट में और मैक्रो नहीं जोड़ सकता।
लोरबुक Outlet मैक्रो
{{outlet::name}} उन लोरबुक एंट्री की सामग्री जोड़ता है जिनकी Position Outlet है और जिनका Outlet name name से हूबहू मेल खाता है। Outlet नामों में छोटे-बड़े अक्षर का फ़र्क पड़ता है। मिसाल के तौर पर, {{outlet::character_rules}} उस Outlet से मेल नहीं खाएगा जिसका नाम Character_Rules है।
Outlet एंट्री पर लोरबुक का सामान्य एक्टिवेशन ही चलता है। कीवर्ड, Constant मोड, प्रोबेबिलिटी, फ़िल्टर, टाइमिंग, एंट्री की सीमा और टोकन बजट तय करते हैं कि मौजूदा जेनरेशन के लिए कोई एंट्री चालू है या नहीं। एक ही Outlet नाम वाली चालू एंट्री अपने Order के हिसाब से जुड़ती हैं और उनके बीच नई पंक्ति आती है। ये सिर्फ़ मैक्रो वाली जगह पर जुड़ती हैं, लोरबुक की सामान्य जगह पर दोबारा नहीं।
Outlet मैक्रो का इस्तेमाल Conversation, Roleplay या Game Mode के प्रॉम्प्ट सेक्शन में करें। यह मैक्रो तब भी चलता है जब यह प्रीसेट के लोरबुक मार्कर से पहले आता हो, और सिर्फ़ Outlet एंट्री इस्तेमाल करने वाले प्रीसेट को लोरबुक मार्कर की ज़रूरत ही नहीं पड़ती। अनजान या बंद Outlet की वैल्यू खाली रहती है। कोई Outlet एंट्री दूसरे Outlet मैक्रो को नहीं खोल सकती, इसलिए नेस्टेड Outlet रिकर्सिव नहीं होते।
लोरबुक साइज़ मैक्रो
{{lorebooksize::ID}} दी गई ID वाली लोरबुक की कुल एंट्री की संख्या देता है। ID की जगह लोरबुक की ID लिखें, जिसे आप Lorebooks (लोरबुक) पैनल से कॉपी कर सकते हैं। मिसाल के तौर पर, अगर किसी लोरबुक की ID V1StGXR8_Z5jdHi6B-myT है और उसमें 151 एंट्री हैं, तो {{lorebooksize::V1StGXR8_Z5jdHi6B-myT}} की वैल्यू 151 होगी।
अनजान लोरबुक ID की वैल्यू 0 होती है। गिनती में सारी एंट्री आती हैं, चाहे वे चालू हों, बंद हों या फ़ोल्डर में हों।
इस मैक्रो को प्रॉम्प्ट सेक्शन, कैरेक्टर कार्ड फ़ील्ड, लोरबुक एंट्री की सामग्री में, या जहाँ भी मैक्रो हल होते हैं, वहाँ इस्तेमाल करें।
लोरबुक इनक्लूड मैक्रो
{{include::ENTRY}} किसी लोरबुक एंट्री का टेक्स्ट उसी जगह रख देता है जहाँ आप इसे लिखते हैं। कोई साझा टेक्स्ट, जैसे हाउस रूल, एक एंट्री में रखें और उसे दूसरी एंट्री, प्रॉम्प्ट सेक्शन या कार्ड में दोबारा इस्तेमाल करें, ताकि एडिट करने के लिए एक ही कॉपी रहे। ENTRY की जगह एंट्री की ID या उसका नाम लिखें। नामों में छोटे-बड़े अक्षर से कोई फ़र्क नहीं पड़ता।
- लोरबुक एंट्री के अंदर नाम उसी एंट्री की अपनी लोरबुक में ढूँढा जाता है।
- बाकी हर जगह नाम उन लोरबुक में ढूँढा जाता है जिन्हें यह चैट इस्तेमाल करती है: चैट में जोड़ी गई लोरबुक, उसके कैरेक्टर और पर्सोना से जुड़ी लोरबुक, और ग्लोबल लोरबुक।
- ID से एंट्री किसी भी लोरबुक में मिल जाती है।
{{include::BOOK::ENTRY}} आपकी बताई लोरबुक से एंट्री लेता है, ID या नाम से। वह लोरबुक चैट में जुड़ी हो या चालू भी हो, यह ज़रूरी नहीं है।
{{include::Rules of the arena}}
{{include::Shared lore::Rules of the arena}}शामिल की गई एंट्री का सक्रिय होना ज़रूरी नहीं है, और वह बंद भी हो सकती है, इसलिए आप ऐसी एंट्री रख सकते हैं जो सिर्फ़ शामिल किए जाने के लिए हों। शामिल किए गए टेक्स्ट में मैक्रो हमेशा की तरह काम करते हैं, और वह टेक्स्ट भी दूसरी एंट्री शामिल कर सकता है। अगर कोई इनक्लूड मैक्रो घूमकर उसी एंट्री पर लौट आए जिसके अंदर वह पहले से है, जैसे खुद को शामिल करने वाली एंट्री, तो वह मैक्रो हमेशा दोहराते रहने के बजाय कुछ नहीं बनता। जो एंट्री या लोरबुक न मिले, उससे भी कुछ नहीं बनता।
नाम और ID सादे टेक्स्ट में लिखें। उनके अंदर के मैक्रो, जैसे {{include::{{char}}}}, नहीं भरे जाते।
समय वाले मैक्रो
असली दुनिया के समय वाले मैक्रो हर बार हल होते समय एक ही साझा पल लेते हैं, इसलिए इनमें कभी आपस में फ़र्क नहीं आता। टाइमज़ोन आपके ब्राउज़र से आता है।
| मैक्रो | किसमें बदलता है |
{{date}} | आज की तारीख, YYYY-MM-DD के रूप में। |
{{time}} | अभी का समय, 24 घंटे वाली घड़ी पर HH:MM के रूप में। |
{{datetime}} / {{isotime}} | टाइमज़ोन ऑफ़सेट समेत पूरा टाइमस्टैंप। दोनों नामों का मतलब एक ही है। |
{{weekday}} | हफ़्ते के दिन का नाम, जैसे Monday। |
{{timezone}} | टाइमज़ोन का नाम, जैसे Europe/Warsaw। |
{{date.world_state}} | World State में ट्रैक की गई दुनिया की मौजूदा तारीख, अपने मूल फ़ॉर्मैट में। |
{{time.world_state}} | World State में ट्रैक किया गया दुनिया का मौजूदा समय, अपने मूल फ़ॉर्मैट में। |
{{weekday.world_state}} | Weekday या Day of Week नाम का कस्टम वर्ल्ड फ़ील्ड, ट्रैक की गई तारीख में लिखा हफ़्ते का दिन, या मान्य YYYY-MM-DD वाली ट्रैक की गई तारीख का हफ़्ते का दिन। |
.world_state मैक्रो प्रॉम्प्ट और एजेंट टेम्पलेट में काम करते हैं। वे कहानी के मौजूदा टर्न के लिए दिखने वाली दुनिया की तारीख और समय पढ़ते हैं। स्वाइप बदलने पर यह बदल जाता है कि वे किस टर्न की वैल्यू इस्तेमाल करते हैं; दोबारा जेनरेट करने पर कहानी की वह हालत इस्तेमाल होती है जिससे नया जवाब शुरू होता है। वैल्यू न होने पर खाली टेक्स्ट मिलता है; उसकी जगह आज की असली तारीख या समय कभी नहीं आता। काल्पनिक कैलेंडर अपनी तारीख और समय का टेक्स्ट बनाए रखते हैं। काल्पनिक हफ़्ते के दिन के लिए World State में Weekday या Day of Week नाम का कस्टम फ़ील्ड जोड़ें।
मिसाल के लिए, {{#if weekday.world_state == "Monday"}}Use the weekday routine.{{/if}} असली हफ़्ते के दिन के बजाय ट्रैक किया गया दिन पढ़ता है।
रैंडम और डाइस मैक्रो
ये मैक्रो आपके प्रॉम्प्ट में संयोग जोड़ते हैं। संख्याओं और विकल्पों के लिए रैंडम मैक्रो ({{random}}) और डाइस के लिए रोल मैक्रो ({{roll}}) इस्तेमाल करें।
| मैक्रो | व्यवहार |
{{random}} | 0 से 100 के बीच कोई पूर्णांक। |
{{random:X:Y}} | X और Y के बीच कोई पूर्णांक, दोनों सिरे शामिल। |
{{random::A::B::C}} | कोई एक विकल्प रैंडम चुनता है, फिर मैक्रो सिर्फ़ चुने हुए विकल्प के अंदर हल करता है। |
{{random::A@2::B@0.5}} | वज़न वाला रैंडम चुनाव। नीचे वज़न के नियम देखें। |
{{roll:XdY}} | डाइस रोल का कुल जोड़। मिसाल के तौर पर, {{roll:2d6}} छह पहलू वाले दो डाइस रोल करके उनका जोड़ देता है। {{roll:d20}} एक डाइस रोल करता है, और {{roll:1d8+3}} रोल में 3 जोड़ता है। |
यह एक आसान रैंडम चुनाव है, इसे कॉपी कर सकते हैं:
{{random::The door creaks open.::A bell rings.::Someone laughs nearby.}}वज़न वाले विकल्प
किसी विकल्प के आखिर में @number जोड़कर तय करें कि उसके चुने जाने की कितनी संभावना है। यह संख्या सापेक्ष वज़न है। जितनी बड़ी, उतनी ज़्यादा संभावना।
{{random::Common event@1::Rare event@0.25}}इस मिसाल में कुल वज़न 1.25 है, इसलिए संभावनाएँ इस तरह बनती हैं:
| विकल्प | वज़न | संभावना |
| Common event | 1 | 80% |
| Rare event | 0.25 | 20% |
वज़न के नियम:
- वज़न न लिखा हो तो उसे 1 गिना जाता है।
- दशमलव वज़न चलते हैं, जैसे 0.5 या 0.01।
- वज़न 0 होने पर विकल्प बना रहता है, पर वह कभी चुना नहीं जा सकता।
- हर विकल्प का वज़न 0 हो, तो मैक्रो की वैल्यू खाली रहती है।
- सिर्फ़ आखिर में लिखा
@numberवज़न गिना जाता है। कहीं और आया@, जैसे ईमेल पते में, वैसे का वैसा रहता है।
डायनैमिक वेरिएबल
वेरिएबल से आपके प्रॉम्प्ट का एक हिस्सा कोई वैल्यू सेव कर सकता है और बाद वाला हिस्सा उसे पढ़ सकता है।
| मैक्रो | व्यवहार |
{{setvar::name::value}} | वैल्यू सेव करता है और टेक्स्ट में कुछ नहीं छोड़ता। |
{{getvar::name}} | सेव की हुई वैल्यू पढ़ता है (कभी सेट न हुई हो तो कुछ नहीं)। |
{{addvar::name::value}} | दोनों वैल्यू संख्याएँ हों तो जोड़ता है; वरना नया टेक्स्ट आखिर में जोड़ता है। |
{{addnumvar::name::value}} | Marinara का अपना एक्सटेंशन: सेव की हुई संख्या वाली वैल्यू में हमेशा एक संख्या जोड़ता है। गायब या अमान्य संख्याएँ 0 गिनी जाती हैं; ओवरफ़्लो करने वाला जोड़ अनदेखा कर दिया जाता है। |
{{incvar::name}} | किसी संख्या वाले वेरिएबल में 1 जोड़कर नई वैल्यू डालता है। |
{{decvar::name}} | किसी संख्या वाले वेरिएबल में से 1 घटाकर नई वैल्यू डालता है। |
एक प्रॉम्प्ट बनने के दौरान वेरिएबल बाएँ से दाएँ हल होते हैं। शुरू में सेट की गई वैल्यू, जैसे सबसे पहले आने वाली किसी लोरबुक एंट्री में, उसी प्रॉम्प्ट में आगे पढ़ी जा सकती है। Marinara इन्हें मौजूदा चैट में भी सेव करता है, जो SillyTavern के लोकल वेरिएबल जैसा व्यवहार है: आगे के टर्न और ऐप रीस्टार्ट के बाद भी ये बने रहते हैं, जबकि दूसरी चैट की अपनी अलग वैल्यू होती हैं।
जो भी {{NAME}} बिल्ट-इन मैक्रो नहीं है, उसे नाम से ढूँढा जाता है: पहले प्रीसेट के वेरिएबल में, फिर चैट के अपने वेरिएबल में। दोनों में वह नाम न मिले, तो टैग टेक्स्ट में हूबहू वैसे ही रहता है जैसे आपने लिखा था। दोनों में एक ही नाम हो तो प्रीसेट के वेरिएबल को प्राथमिकता मिलती है। प्रीसेट वाले हिस्से के लिए प्रीसेट वेरिएबल देखें।
चैट वेरिएबल
वेरिएबल बनाने के लिए {{setvar}} इस्तेमाल करना ज़रूरी नहीं है। Chat Settings (चैट सेटिंग्स) पैनल के Chat Variables (चैट वेरिएबल) सेक्शन में आप सीधे नाम और वैल्यू लिख सकते हैं। फिर जहाँ भी मैक्रो काम करते हैं, वहाँ उस नाम का इस्तेमाल कर सकते हैं, अपने संदेशों में भी। char1 जोड़कर उसकी वैल्यू Mary रखें, {{char1}} walks in. लिखें, और AI को "Mary walks in." पढ़ने को मिलता है।
चैट वेरिएबल के नियम:
- नाम में अक्षर, अंक और अंडरस्कोर हो सकते हैं, और शुरुआत अक्षर या अंडरस्कोर से होनी चाहिए। ठीक 21 वर्णों वाले नाम कैरेक्टर के रेफ़रेंस के लिए आरक्षित हैं। डॉट या हाइफ़न वाले नाम को अब भी
{{setvar}}और{{getvar}}से सेट और पढ़ सकते हैं, लेकिन सिर्फ़{{name}}लिखने पर उसकी वैल्यू नहीं आती। - बिल्ट-इन मैक्रो का नाम इस्तेमाल नहीं कर सकते।
{{char}}हमेशा कैरेक्टर को दर्शाता है। - आपके संदेश में लिखा हुआ टैग ही दिखता रहता है। वैल्यू प्रॉम्प्ट बनाते समय भरी जाती है, इसलिए बाद में उसे बदलने पर उसका इस्तेमाल करने वाले पुराने टर्न भी बदलते हैं।
- इस सेक्शन में
{{setvar}}से सेट किए गए वेरिएबल भी दिखते हैं, क्योंकि हर चैट में इनका स्टोरेज एक ही है।
पैनल की जानकारी के लिए चैट सेटिंग्स का ओवरव्यू देखें।
फ़ॉर्मैटिंग मैक्रो
ये मैक्रो अपने आसपास के टेक्स्ट को ढालते हैं।
| मैक्रो | व्यवहार |
{{newline}} / {{\n}} | एक लाइन ब्रेक जोड़ता है। |
{{trim}} | खुद हट जाता है और उस जगह के आसपास की खाली जगह हटा देता है। |
{{trimStart}} | आसपास के टेक्स्ट की शुरुआत की खाली जगह हटाता है। |
{{trimEnd}} | आसपास के टेक्स्ट के आखिर की खाली जगह हटाता है। |
{{uppercase}}...{{/uppercase}} | बीच के टेक्स्ट को UPPERCASE बना देता है। |
{{lowercase}}...{{/lowercase}} | बीच के टेक्स्ट को lowercase बना देता है। |
{{noop}} | आउटपुट से हटा दिया जाता है। एडिट करते समय बेअसर प्लेसहोल्डर के तौर पर काम आता है। |
{{// comment}} | लेखक का नोट, जो आउटपुट से हटा दिया जाता है। |
{{banned "text"}} | आउटपुट से हटा दिया जाता है। यह कुछ भी फ़िल्टर या ब्लॉक नहीं करता। |
दोहरे ब्रेस को ज्यों का त्यों दिखाना
मैक्रो के लिए कोई एस्केप वर्ण नहीं है। दोहरे ब्रेस को टेक्स्ट में बनाए रखना हो, तो ऐसा नाम इस्तेमाल करें जिसे Marinara नहीं जानता। कोई भी अनजान {{name}} हूबहू वैसा ही रह जाता है, बशर्ते उसी नाम का न कोई प्रीसेट वेरिएबल हो, न चैट वेरिएबल। ऐसा निजी नोट चाहिए जो AI तक कभी न पहुँचे, तो उसके लिए {{// like this}} इस्तेमाल करें।
Macro reference और /macros
मैक्रो वाली हर फ़ील्ड के कोने में दो छोटे बटन होते हैं:
- Expand editor उस फ़ील्ड के लिए बड़ी एडिटर विंडो खोलता है।
- Macro reference एक विंडो खोलता है, जिसका शीर्षक Macro reference होता है और जिसमें हर बिल्ट-इन मैक्रो श्रेणी के हिसाब से, अपने सही सिंटैक्स के साथ दिया होता है। यह सूची उसी स्रोत से बनती है जिसे इंजन खुद इस्तेमाल करता है, इसलिए यह हमेशा सही रहती है।
ये फ़ील्ड मैक्रो के नाम आपके लिए पूरे भी करती हैं। किसी पंक्ति के आखिर में {{ch टाइप करें, तो बाकी हिस्सा, ar}}, हल्के टेक्स्ट में दिखता है। उसे स्वीकार करने के लिए Tab दबाएँ, या हल्के टेक्स्ट पर टैप करें। उसे अनदेखा करना हो, तो टाइप करते रहें। जो मैक्रो कोई वैल्यू लेता है, जैसे {{getvar::, उसमें यह वहीं रुक जाता है जहाँ आप वैल्यू टाइप करते हैं।
चैट बॉक्स में /macros भी लिख सकते हैं (छोटा रूप /macro भी चलता है)। यह पूरी मैक्रो सूची सीधे चैट में छाप देता है, ताकि याद दिलाने का काम फटाफट हो जाए।
मैक्रो के साथ शर्तें
कंडीशनल ब्लॉक ({{#if ...}}) में तुलनाओं को || (OR), && (AND) और कोष्ठक से जोड़ा जा सकता है। बराबरी की सूची छोटे रूप में भी लिखी जा सकती है, जैसे {{#if character == "Maukie" || "Pantalone"}}। ऑपरेटर किस क्रम में लागू होते हैं, ग्रुप चैट की मिसालें और ऑपरेटर की पूरी सूची कंडीशनल प्रॉम्प्ट में देखें।
शर्त आपके निर्णय मॉडल से सीन के बारे में भी पूछ सकती है, जैसे हाँ या नहीं के लिए {{#if decision:"The latest message moves the scene to a new place"}}, और कोई एक विकल्प चुनने के लिए {{#if decision_choice:"The kind of scene in the latest message" == "combat"}}। निर्णय मॉडल न हो, या जवाब न मिले, तो इन्हें "नहीं" माना जाता है। देखें निर्णय मॉडल से पूछना। किसी कथन के बाद आप ये विकल्प जोड़ सकते हैं:
sticky:3 cooldown:5हाँ को तीन टर्न तक बनाए रखता है, फिर पाँच टर्न तक उसे रोककर रखता है। देखें Sticky और cooldown।until:"..."याwhile:"..."हाँ को तब तक बनाए रखता है जब तक कोई दूसरा कथन इजाज़त दे। देखें Until और while।every:3किसी कथन को सिर्फ़ हर तीन टर्न पर पूछता है। देखें कुछ टर्न बाद जाँचना।priority:highयाpriority:lowतय करता है कि प्रॉम्प्ट योजना में कौन से कथन समाएँगे। देखें प्राथमिकता और सीमाएँ और लागत।
आम गलतियाँ
{{random::...}}ब्लॉक के अंदर वेरिएबल न लिखें। रैंडम विकल्प के अंदर रखा{{setvar}}चुनाव होने से पहले हर विकल्प के लिए चलता है, सिर्फ़ चुने हुए विकल्प के लिए नहीं।- लोकल वेरिएबल को ग्लोबल स्टेट की तरह इस्तेमाल न करें। वह सिर्फ़ उसी चैट में बना रहता है जिसमें उसे सेट किया गया था।
{{setvar}}चलाने वाला प्रॉम्प्ट सेक्शन या लोरबुक एंट्री उसी नाम के चैट वेरिएबल को ओवरराइट कर देती है, क्योंकि हर चैट में दोनों एक ही स्टोरेज इस्तेमाल करते हैं। दोनों को रखना हो तो अलग-अलग नाम दें।{{prompt}}कोई मैक्रो नहीं है। आपका पूरा संदेश{{prompt}}हो, तो Marinara उसे भेजने के बजाय Peek Prompt व्यूअर खोल देता है। देखें Peek Prompt।- Custom Tools
{{macro}}वाला टेक्स्ट इस्तेमाल नहीं करते। किसी टूल फ़ील्ड में{{roll:1d20}}पेस्ट करके यह उम्मीद न करें कि वह हल हो जाएगा। - Impersonate का प्रॉम्प्ट टेम्पलेट सिर्फ़ कुछ ही प्लेसहोल्डर मानता है, पूरी मैक्रो सूची नहीं। उसके नाम भी अलग हैं, इसलिए कार्ड में चलने वाला मैक्रो वहाँ शायद न चले।
- बड़ा या गहराई तक नेस्टेड मैक्रो आउटपुट चुपचाप काट दिया जाता है। कोई एरर नहीं आता, इसलिए मैक्रो का फैलाव सीमित रखें।
मिलती-जुलती गाइड
- कंडीशनल प्रॉम्प्ट
- प्रीसेट वेरिएबल
- Preset Editor और प्रॉम्प्ट मैनेजर
- Peek Prompt
- कैरेक्टर बनाना और एडिट करना
- Conversation मोड की प्रोफ़ाइल (Display Name, About Me, Behavior)