میں نے اپنی ایپ میں AI چیٹ شامل کرنے کی کوشش کی اور ایک رکاوٹ کا سامنا کیا
میں نے اپنے پروجیکٹ مینجمنٹ ٹول میں ایک AI چیٹ اسسٹنٹ شامل کرنے کی کوشش کی۔ میں چاہتا تھا کہ صارفین واجب الادا کاموں (overdue tasks) یا میٹنگ کے نوٹس کے بارے میں سوالات پوچھ سکیں۔ یہ آسان معلوم ہوتا تھا۔ میں نے سوچا کہ بس ایک API کال کروں گا اور کام ختم ہو جائے گا۔ میں غلط تھا۔
15 پیغامات کے بعد، AI سست اور بے ربط ہو گیا۔ گفتگو بہت طویل ہونے کی وجہ سے API ایررز دینے لگا۔ میں نے 8k ٹوکن کی حد کے ساتھ GPT-4 استعمال کیا۔ ہر پیغام میں طویل تفصیلات اور نوٹس شامل تھے۔ ہسٹری بہت تیزی سے بڑھ رہی تھی۔
میں نے تین مختلف طریقوں سے اسے ٹھیک کرنے کی کوشش کی:
- ہسٹری کو مختصر کرنا (Truncating history): میں نے صرف آخری چند پیغامات رکھے، اس سے رفتار تو بہتر ہوئی لیکن AI باقی سب کچھ بھول گیا۔
- خلاصہ کرنا (Summarization): میں نے ہر 5 پیغامات کے بعد AI سے چیٹ کا خلاصہ کرنے کو کہا۔ اس سے یادداشت میں مدد ملی لیکن میرے اخراجات اور latency بڑھ گئی۔
- مطابقت کی اسکورنگ (Relevance scoring): میں نے صرف سب سے زیادہ متعلقہ پیغامات رکھنے کی کوشش کی۔ اس کے لیے ایک vector store کی ضرورت تھی اور اس سے پیچیدگی بہت بڑھ گئی۔
مجھے احساس ہوا کہ مجھے ایک بہتر حکمت عملی کی ضرورت ہے۔ میں نے دو طریقوں کا انتخاب کیا: streaming اور ایک fixed context window۔
Streaming ایپ کو تیز محسوس کرواتی ہے۔ صارفین مکمل جواب کا انتظار کرنے کے بجائے متن کو فوری طور پر ظاہر ہوتے ہوئے دیکھتے ہیں۔ میں نے متن کے ٹکڑوں (chunks) کو ان کے پہنچتے ہی بھیجنے کے لیے Server-Sent Events کا استعمال کیا۔
میں نے اپنے context کو بھی تین حصوں میں تقسیم کیا:
- System prompt: ہدایات کا ایک مقررہ مجموعہ۔
- Dynamic context: حالیہ پروجیکٹ اپ ڈیٹس اور ٹاسک کی حالتیں۔
- Conversation history: حالیہ پیغامات کی ایک sliding window۔
میں ہر بار پوری ہسٹری نہیں بھیجتا۔ میں صرف اتنا ہی بھیجتا ہوں جو موجودہ سوال کا جواب دینے کے لیے کافی ہو۔ اس سے میرے payload کا سائز 40% کم ہو گیا۔ اس سے میرے پیسے بچے اور رفتار میں بہتری آئی۔
اگر آپ AI فیچرز بنا رہے ہیں، تو یاد رکھیں: Streaming آپ کو رفتار فراہم کرتی ہے۔ ایک اچھی context حکمت عملی آپ کو ذہانت فراہم کرتی ہے۔
آپ اپنی ایپس میں conversation memory کو کیسے مینیج کرتے ہیں؟ کیا آپ sliding windows استعمال کرتے ہیں یا summarization؟