Skip to main content
OpenClaw आउटबाउंड Markdown को चैनल-विशिष्ट आउटपुट रेंडर करने से पहले एक साझा मध्यवर्ती निरूपण (IR) में बदलता है। IR सादा टेक्स्ट और शैली/लिंक स्पैन बनाए रखता है, ताकि एक पार्स चरण हर चैनल को इनपुट दे और चंकिंग कभी भी स्पैन के बीच में फ़ॉर्मैटिंग को विभाजित न करे।

पाइपलाइन

  1. Markdown को IR में पार्स करें (markdownToIR) - सादा टेक्स्ट और शैली स्पैन (बोल्ड, इटैलिक, स्ट्राइकथ्रू, कोड, कोड ब्लॉक, स्पॉइलर, ब्लॉककोट, शीर्षक 1-6) तथा लिंक स्पैन। ऑफ़सेट UTF-16 कोड इकाइयाँ हैं, इसलिए Signal शैली रेंज सीधे उसके API के अनुरूप होती हैं। तालिकाएँ केवल तभी पार्स होती हैं, जब चैनल किसी तालिका मोड का विकल्प चुनता है।
  2. IR को चंकों में बाँटें (chunkMarkdownIR / renderMarkdownIRChunksWithinLimit)
    • विभाजन रेंडरिंग से पहले IR टेक्स्ट पर होता है, इसलिए इनलाइन शैलियों और लिंक को सीमा के आर-पार टूटने के बजाय प्रत्येक चंक के अनुसार काटा जाता है।
  3. प्रत्येक चैनल के लिए रेंडर करें (renderMarkdownWithMarkers) - एक शैली-मार्कर मैप स्पैन को चैनल के मूल मार्कअप में बदलता है।

IR उदाहरण

इनपुट Markdown:
IR (रूपरेखात्मक):

तालिका प्रबंधन

markdown.tables नियंत्रित करता है कि कोई चैनल Markdown तालिकाओं को कैसे रूपांतरित करता है, प्रत्येक चैनल के लिए और वैकल्पिक रूप से प्रत्येक खाते के लिए: प्रति-चैनल Plugin डिफ़ॉल्ट: Signal, WhatsApp और Matrix के लिए डिफ़ॉल्ट bullets है; Mattermost के लिए डिफ़ॉल्ट off है; Telegram के लिए डिफ़ॉल्ट block है (जो code में बदलता है, जब तक खाते में richMessages सक्षम न हो)। स्पष्ट Plugin डिफ़ॉल्ट के बिना कोई भी चैनल code पर फ़ॉलबैक करता है।

चंकिंग नियम

  • चंक सीमाएँ चैनल अडैप्टर/कॉन्फ़िगरेशन से आती हैं और IR टेक्स्ट पर लागू होती हैं, रेंडर किए गए आउटपुट पर नहीं।
  • फ़ेंस किए गए कोड ब्लॉक को अंतिम न्यूलाइन सहित एक ब्लॉक के रूप में रखा जाता है, ताकि चैनल समापन फ़ेंस को सही ढंग से रेंडर करें।
  • सूची और ब्लॉककोट उपसर्ग IR टेक्स्ट का हिस्सा होते हैं, इसलिए चंकिंग कभी भी उपसर्ग के बीच में विभाजन नहीं करती।
  • इनलाइन शैलियाँ कभी चंकों के बीच विभाजित नहीं होतीं; रेंडरर अगले चंक के आरंभ में खुली शैली को फिर से खोलता है।
सभी चैनलों में चंक-सीमा और डिलीवरी व्यवहार के लिए स्ट्रीमिंग और चंकिंग देखें।

लिंक नीति

  • Slack: [label](url) -> <url|label>; सीधे लिखे URL सीधे ही रहते हैं।
  • Telegram: [label](url) -> <a href="url">label</a> (HTML पार्स मोड)।
  • Signal: [label](url) -> label (url), जब तक लेबल पहले से URL से मेल न खाता हो।

स्पॉइलर

स्पॉइलर मार्कर (||spoiler||) Signal (जहाँ उन्हें SPOILER शैली रेंज में मैप किया जाता है) और Telegram (जहाँ उन्हें <tg-spoiler> में मैप किया जाता है) के लिए पार्स किए जाते हैं। अन्य चैनल ||...|| को सादा टेक्स्ट मानते हैं।

चैनल फ़ॉर्मैटर जोड़ना या अपडेट करना

  1. चैनल के लिए उपयुक्त विकल्प (autolink, headingStyle, blockquotePrefix, tableMode) पास करते हुए markdownToIR(...) के साथ एक बार पार्स करें
  2. शैली-मार्कर मैप (या Signal जैसे ट्रांसपोर्ट के लिए कस्टम शैली-रेंज लॉजिक) के साथ renderMarkdownWithMarkers(...) का उपयोग करके रेंडर करें
  3. प्रत्येक चंक को रेंडर करने से पहले chunkMarkdownIR(...) या renderMarkdownIRChunksWithinLimit(...) के साथ चंक में बाँटें
  4. आउटबाउंड प्रेषण पथ से नए चंकर और रेंडरर को कॉल करने के लिए अडैप्टर को जोड़ें
  5. यदि चैनल चंकिंग करता है, तो फ़ॉर्मैट परीक्षणों और आउटबाउंड डिलीवरी परीक्षण के साथ परीक्षण करें

सामान्य सावधानियाँ

  • Slack एंगल-ब्रैकेट टोकन (<@U123>, <#C123>, <https://...>) को एस्केपिंग के बाद भी सुरक्षित रहना चाहिए; अपरिष्कृत HTML को फिर भी सुरक्षित रूप से एस्केप करना आवश्यक है।
  • Telegram HTML में टूटे हुए मार्कअप से बचने के लिए टैग के बाहर के टेक्स्ट को एस्केप करना आवश्यक है।
  • Signal शैली रेंज UTF-16 ऑफ़सेट का उपयोग करती हैं, कोड-पॉइंट ऑफ़सेट का नहीं।
  • फ़ेंस किए गए कोड ब्लॉक में अंतिम न्यूलाइन सुरक्षित रखें, ताकि समापन मार्कर अपनी अलग पंक्ति पर आए।

संबंधित

स्ट्रीमिंग और चंकिंग

आउटबाउंड स्ट्रीमिंग व्यवहार, चंक सीमाएँ और चैनल-विशिष्ट डिलीवरी।

सिस्टम प्रॉम्प्ट

बातचीत से पहले मॉडल क्या देखता है, जिसमें इंजेक्ट की गई कार्यस्थान फ़ाइलें भी शामिल हैं।