मैंने अपने ऐप में AI चैट जोड़ने की कोशिश की और एक बड़ी समस्या का सामना किया

मैंने अपने प्रोजेक्ट मैनेजमेंट टूल में एक AI चैट असिस्टेंट जोड़ने की कोशिश की। मैं चाहता था कि उपयोगकर्ता लंबित कार्यों (overdue tasks) या मीटिंग नोट्स के बारे में सवाल पूछ सकें। यह आसान लग रहा था। मुझे लगा कि मैं बस एक API कॉल करूँगा और काम खत्म हो जाएगा। मैं गलत था।

15 संदेशों के बाद, AI धीमा और असंगत (incoherent) हो गया। बातचीत बहुत लंबी होने के कारण API एरर देने लगा। मैंने 8k टोकन लिमिट वाले GPT-4 का उपयोग किया। हर संदेश में लंबे विवरण और नोट्स शामिल थे। हिस्ट्री बहुत तेज़ी से बढ़ रही थी।

मैंने तीन अलग-अलग समाधान आज़माए:

  • हिस्ट्री को छोटा करना (Truncating history): मैंने केवल पिछले कुछ संदेशों को रखा। इससे स्पीड तो बढ़ी लेकिन AI बाकी सब कुछ भूल गया।
  • सारांश बनाना (Summarization): मैंने हर 5 संदेशों के बाद चैट का सारांश बनाने के लिए AI से कहा। इससे मेमोरी में मदद मिली लेकिन मेरी लागत (costs) और लेटेंसी (latency) बढ़ गई।
  • प्रासंगिकता स्कोरिंग (Relevance scoring): मैंने केवल सबसे प्रासंगिक संदेशों को रखने की कोशिश की। इसके लिए एक वेक्टर स्टोर की आवश्यकता थी और इससे जटिलता बहुत बढ़ गई।

मुझे एहसास हुआ कि मुझे एक बेहतर रणनीति की आवश्यकता है। मैंने दो तरीकों को चुना: स्ट्रीमिंग (streaming) और एक फिक्स्ड कॉन्टेक्स्ट विंडो (fixed context window)।

स्ट्रीमिंग से ऐप तेज़ महसूस होता है। उपयोगकर्ता पूरे जवाब का इंतज़ार करने के बजाय टेक्स्ट को तुरंत आते हुए देखते हैं। मैंने टेक्स्ट के टुकड़ों (chunks) को उनके आते ही भेजने के लिए Server-Sent Events का उपयोग किया।

मैंने अपने कॉन्टेक्स्ट को भी तीन भागों में विभाजित किया:

  • सिस्टम प्रॉम्प्ट (System prompt): निर्देशों का एक निश्चित सेट।
  • डायनेमिक कॉन्टेक्स्ट (Dynamic context): हालिया प्रोजेक्ट अपडेट और टास्क की स्थिति।
  • बातचीत का इतिहास (Conversation history): हाल के संदेशों की एक स्लाइडिंग विंडो।

मैं हर बार पूरी हिस्ट्री नहीं भेजता हूँ। मैं केवल उतना ही भेजता हूँ जो वर्तमान प्रश्न का उत्तर देने के लिए पर्याप्त हो। इससे मेरे पेलोड (payload) का आकार 40% कम हो गया। इससे मेरे पैसे बचे और स्पीड में सुधार हुआ।

यदि आप AI फीचर्स बनाते हैं, तो याद रखें: स्ट्रीमिंग आपको स्पीड देती है। एक अच्छी कॉन्टेक्स्ट रणनीति आपको इंटेलिजेंस देती है।

आप अपने ऐप्स में बातचीत की मेमोरी को कैसे मैनेज करते हैं? क्या आप स्लाइडिंग विंडो का उपयोग करते हैं या सारांश (summarization) का?

स्रोत: https://dev.to/__c1b9e06dc90a7e0a676b/i-tried-to-add-ai-chat-to-my-app-and-hit-a-wall-with-context-tokens-459b