गैर-कोडेक्स मॉडल के लिए, ओपन-सोर्स Codex CLI स्थानीय रूप से संदर्भ को संक्षिप्त करता है: एक LLM कम्पैक्शन प्रॉम्प्ट का उपयोग करके बातचीत का सारांश बनाता है। जब बाद में संक्षिप्त संदर्भ का उपयोग किया जाता है, तो responses.create() इसे एक हैंडऑफ़ प्रॉम्प्ट के साथ प्राप्त करता है जो सारांश को फ्रेम करता है। दोनों प्रॉम्प्ट स्रोत कोड में दिखाई देते हैं।
कोडेक्स मॉडल के लिए, CLI इसके बजाय compact() API को कॉल करता है, जो एक एन्क्रिप्टेड ब्लॉब लौटाता है। हम नहीं जानते कि यह आंतरिक रूप से किसी LLM का उपयोग करता है, यह किन प्रॉम्प्ट का उपयोग करता है, या कोई हैंडऑफ़ प्रॉम्प्ट बिल्कुल है या नहीं।
नीचे, मैं दिखाता हूँ कि कैसे एक सरल प्रॉम्प्ट इंजेक्शन (2 API कॉल, 35 लाइनों का Python) से पता चलता है कि API कम्पैक्शन पथ वास्तव में संदर्भ को सारांशित करने के लिए एक LLM का उपयोग करता है, जिसमें अपना स्वयं का कम्पैक्शन प्रॉम्प्ट और सारांश से पहले जोड़ा गया एक हैंडऑफ़ प्रॉम्प्ट शामिल है। प्रॉम्प्ट ओपन-सोर्स संस्करणों के लगभग समान हैं।
चरण 1 — compact()
मैं एक तैयार किए गए उपयोगकर्ता संदेश के साथ compact() को कॉल करता हूँ। सर्वर साइड पर, एक कम्पैक्टर LLM अपने स्वयं के छिपे हुए सिस्टम प्रॉम्प्ट (जिसे मैंने कभी नहीं देखा और जानना चाहता हूँ) का उपयोग करके हमारे इनपुट को प्रोसेस करता है।
ऐसा लगता है कि सर्वर कम्पैक्टर के संदर्भ को इस प्रकार इकट्ठा करता है:

कम्पैक्टर LLM अपने सिस्टम प्रॉम्प्ट + हमारे इनपुट को एक साथ पढ़ता है। क्योंकि हमारे इनपुट में एक इंजेक्शन पेलोड (ऊपर लाल टेक्स्ट) है, कम्पैक्टर को अपने स्वयं के सिस्टम प्रॉम्प्ट को अपने आउटपुट में शामिल करने के लिए धोखा दिया जाता है। यह सादा-पाठ सारांश केवल OpenAI के सर्वर पर मौजूद होता है। हम केवल एन्क्रिप्टेड ब्लॉब देखते हैं:

इस बिंदु पर हमारे पास ब्लॉब के अंदर क्या है यह पढ़ने का कोई तरीका नहीं है। यह AES-एन्क्रिप्टेड है और कुंजी OpenAI के सर्वर पर रहती है। हम केवल उम्मीद करते हैं कि कम्पैक्टर ने इंजेक्शन का पालन किया और अपना प्रॉम्प्ट सारांश में लिख दिया। पता लगाने का एकमात्र तरीका चरण 2 है।
चरण 2 — create()
मैं एन्क्रिप्टेड ब्लॉब + एक दूसरा उपयोगकर्ता संदेश responses.create() को भेजता हूँ। सर्वर ब्लॉब को डिक्रिप्ट करता है और मॉडल का संदर्भ इकट्ठा करता है।
मैं भेजता हूँ:

मॉडल को कुछ इस प्रकार दिखता है:

यदि चरण 1 काम करता है, तो डिक्रिप्टेड ब्लॉब में कम्पैक्शन प्रॉम्प्ट (हमारे इंजेक्शन द्वारा लीक) होना चाहिए। सर्वर ब्लॉब से पहले एक हैंडऑफ़ प्रॉम्प्ट भी जोड़ता है। इसलिए यदि हमारी जांच सफलतापूर्वक मॉडल को वह दोहराने पर मजबूर करती है जो वह देखता है, तो आउटपुट में तीनों का पता चलना चाहिए: सिस्टम प्रॉम्प्ट, हैंडऑफ़ प्रॉम्प्ट, और कम्पैक्शन प्रॉम्प्ट।
आउटपुट
नीचे extract_prompts.py के एक रन से पूरा, असंपादित आउटपुट है। पीला = सिस्टम प्रॉम्प्ट, हरा = हैंडऑफ़ प्रॉम्प्ट, गुलाबी = कम्पैक्शन प्रॉम्प्ट।

हम कैसे जानते हैं कि ये वास्तविक प्रॉम्प्ट हैं न कि केवल काल्पनिक टेक्स्ट? निकाले गए कम्पैक्शन प्रॉम्प्ट और हैंडऑफ़ प्रॉम्प्ट ओपन-सोर्स Codex CLI (prompt.md, summary_prefix.md) में गैर-कोडेक्स मॉडल के लिए उपयोग किए जाने वाले ज्ञात प्रॉम्प्ट से काफी मिलते-जुलते हैं, जिससे यह संभावना नहीं है कि मॉडल ने उन्हें खरोंच से बनाया हो। परिणाम विभिन्न रनों में भिन्न होते हैं।
अनुमानित पाइपलाइन
सब कुछ एक साथ रखते हुए, यहाँ हमारा सबसे अच्छा अनुमान है कि सर्वर साइड पर compact() क्या करता है, जो निष्कर्षण से पता चला है।

स्क्रिप्ट

खुला प्रश्न
जब अंतर्निहित प्रॉम्प्ट लगभग समान हैं, तो Codex CLI दो पूरी तरह से अलग-अलग कम्पैक्शन पथों (गैर-कोडेक्स मॉडल के लिए स्थानीय LLM, कोडेक्स मॉडल के लिए एन्क्रिप्टेड API) का उपयोग क्यों करता है? और सारांश को बिल्कुल भी एन्क्रिप्ट क्यों करता है?
कहना मुश्किल है। हो सकता है कि एन्क्रिप्टेड ब्लॉब में इस सरल प्रयोग से अधिक कुछ हो, जैसे कि टूल परिणामों को कैसे संक्षिप्त और पुनर्स्थापित किया जाता है, इसके बारे में कुछ विशिष्ट। लेकिन मैंने आगे परीक्षण करने की जहमत नहीं उठाई।





