جابر والفريق اللي معاه عاملين شغل جامد.
من ساعة ما Jev نزل، التايملاين كله بيتكلم عن Decision Models.
أغلب الكلام عن الـ API والـ benchmarks.
إحنا حطينا واحد في أصعب مكان ممكن: جوّه الـ hot path بتاع مكالمة صوتية لايف، والـ budget كله 400ms.
والهدف ما كانش نصلّح حاجة بايظة. كان ناخد حاجة شغالة كويس للمستوى اللي بعده.
الـ Knowledge Base retrieval في Agent.sa مبني على الـ industry default: BM25 + embeddings، وRRF، وfreshness، من غير أي model call في الـ hot path. سريع، وبيجيب الإجابة الصح أول نتيجة في 89.3% من الحالات.
رقم فرق كتير بتقف عنده.
بس في المكالمة الصوتية مفيش صفحة نتايج المتصل يختار منها. فيه إجابة واحدة بتتقال.
فقررنا نروح ورا الـ last mile.
والـ last mile ده ليه سقف معروف في أي retrieval مبني على similarity:
• بيقيس "إيه أقرب entry؟" مش "إيه الـ entry اللي فيه الإجابة؟". "باقة Gold فيها إيه" و"باقة Gold بكام" تقريبًا نفس الكلام، وواحدة بس فيها السعر.
• الـ RRF بيرتّب بالـ rank مش بالـ score، فالـ top 10 بيبقوا جوّه 13% من بعض، وأي tie-breaker زي الـ freshness بياخد وزن أكبر من حجمه.
• مفيش "مش عارف" calibrated. أحسن heuristic ("لو أعلى score واطي يبقى مفيش إجابة") بيدّي AUROC 0.74.
الحل: سيب الـ retrieval يعمل اللي هو شاطر فيه، وحط قاضي فوقه.
الـ retrieval بيطلّع أحسن 8 candidates، والقاضي بيقرا كل واحد ويحكم.
والقاضي عندنا Decision Model مفتوح المصدر: Clef من Cloudflare. Apache 2.0، ومتوافق مع الـ API بتاع Jev.
ولأن الـ weights مفتوحة، شغال على الـ GPUs بتاعتنا، والـ KB بتاع العميل ما بيروحش لأي API برّه.
السؤال اللي بنسأله Score بأربع درجات:
0 ← موضوع تاني
1 ← نفس الموضوع، بس مش بيجاوب (السعر، الشرط، الميعاد)
2 ← بيجاوب جزئيًا
3 ← بيجاوب مباشرةً
الدرجة 1 هي كل الحكاية. هي اللي بتدّي اسم للـ near-miss: الحي صح، والبيت غلط.
ونصيحة: اكتب كل درجة بجملة كاملة، مش رقم. الأحكام بتبقى أحدّ بوضوح.
بعدها الـ reorder دالة deterministic مملة عن قصد:
2 و3 الأول، بعدهم 1 واللي ما اتحكمش عليه بترتيب البحث، و0 في الآخر. Demote، مش remove.
والـ freshness بقت tie-breaker بس.
وحقل answerable بقى tri-state: true / false / null. والـ false هي اللي بتخلّي الـ Agent يقول "خليني أتأكد وأرجعلك" بدل ما يقول أقرب حاجة وخلاص.
قواعد الـ hot path اللي ما بتتكسرش:
• deadline واحد 400ms للـ 8 أحكام مع بعض. اللي يتأخر يتشال، من غير retries. ولو مفيش حاجة رجعت، fallback على ترتيب البحث العادي. قاضي بطيء عمره ما يوقّف مكالمة.
• allowlist مش denylist: 4 حقول بس بتروح للقاضي، وأي حقل يتضاف بعدين بيفضل private لحد ما حد يقرر غير كده.
• off / shadow / live لكل Agent. الـ shadow بيحكم بعد ما الرد يتبعت ويسجّل كان هيغيّر إيه: latency ودقة production بصفر مخاطرة.
• status لكل query: disabled / shadow / applied / partial / timeout / error. القاضي المتعطّل لازم يبان، مش يسكت.
الـ eval، لأننا ما بنشحنش على vibes:
• أسئلة شبه المتصلين: عامية، فصحى، إنجليزي، خليط، تفريغ صوتي مكسّر، وأسئلة الـ KB فعلًا ملهاش إجابة.
• الـ labels عملها موديل تاني، عشان القاضي ما يصحّحش امتحانه بنفسه.
• Ablation: نفس الـ pipeline من غير قاضي طلع مطابق للـ baseline، يعني المكسب كله من القاضي.
• Paired + McNemar: احتمال إن الفرق صدفة حوالي واحد في المليون.
النتيجة:
• Top-1 من 89.3% لـ 97.5%، ومقابل كل سؤال اتأثر سلبًا، 11 اتحسّنوا
• الإنجليزي على محتوى عربي: من 81.7% لـ 98.3%
• السؤال عن تفصيلة محددة: من 83.3% لـ 95%
• "مش عارف": AUROC من 0.74 لـ 0.99
ولأن الـ probabilities calibrated، الـ threshold بقى قرار business مش تخمين.
عند 0.5 بيمسك 96.4% من الأسئلة اللي ملهاش إجابة، وبيغلط في 3.3% بس.
ولو "مش عارف" الغلط عندك أغلى، 0.2 بتنزّل الغلط لـ 1.9%.
وأحلى جزء: "مش عارف" بقت backlog للـ KB.
كل سؤال القاضي قال إنه ملهوش إجابة بيروح لـ worker في الخلفية: يخفي الأرقام الشخصية، يعيد الحكم على اللي فاته الـ deadline، يصنّف (برّه الموضوع، محتاج live data، مش واضح، ولا knowledge ناقصة فعلًا)، يدوّر أعمق من الـ top 8، ويجمّع الأسئلة اللي بتطلب نفس الحاجة.
وهنا الـ trap اللي محدش بيقولك عليه:
نفس السؤال بالعربي والإنجليزي، الـ similarity بينهم من 0.22 لـ 0.43.
سؤالين مختلفين في نفس الموضوع: 0.72.
يعني أي similarity threshold هيشتغل بالعكس بالظبط.
فالـ embeddings بتعمل shortlist بس، والـ Decision Model هو اللي يقرر "ده نفس السؤال؟". وفرّق صح بين رقم واتساب Velents ورقم واتساب Velents Pay.
والاقتراح النهائي للـ KB ممنوع يألّف أي fact. ومش بالـ prompt، بالكود. لأن KB بتألّف أسعارها أسوأ من KB فيها فجوات.
وكل ده على thread مخصص بـ bounded queue، مش background tasks بتاعة الـ framework، لأنها بتشارك الـ pool مع الـ retrieval، ومحدش عايز gap analysis يأخّر مكالمة حد.
الخلاصة:
الـ Retrieval شاطر يلاقي candidates، والـ Decision Model شاطر يختار بين near-misses. دول شغلانتين مختلفتين.
التوليد بقى سلعة.
القرار جوّه الـ hot path هو الهندسة الحقيقية.
Me2resh retweeted
١٢ سنة بنتسرق في أعمارنا ومستقبلنا وفلوسنا،بس مكنتش متوقع ان يوصل بيهم النجاسة والطمع يعملوا كده حتي في البورصة ، دي مرايا وسمعة اقتصادك قدام الاجانب والعرب والمؤسسات دولية ،إنك توقع مؤشر الegx 100 10% والاسهم تدون ١٥٪ و٢٠٪ دا فجر وفساد تخطي المنطق ، انتوا بتعملوا فينا كده ليه
Me2resh retweeted
انا هنزل فديو ان شاء الله يوم الخميس - الفديو دة لابلكيشن من الابلكيشنز اللي بتدي تمويل متناهي الصغر للناس وهي مش مرخصة
اية الهدف ؟ الابلكيشن عبارة عن ابلكيشن تجسس كبير شويه بيسرق بيانات المستخدمين وصوره وهشرح دة بيحصل ازاي
الشجرة المثمرة دايما كدة.
اى حد بيستخدم php فلاح 😂 و النهاردة بقى فلاح مُخترق ب zero day vulnerability و المشكلة ان اغلب النسخ الموجودة حلها الوحيد انك تعمل upgrade و ما ادراك ما ال upgrade 😈😅
لما كنت بقول ان ال tech leadership القديمة المفروض تقعد فى البيت عشان القواعد اللى اشتغلوا بها و اتعلموها مبقاش لها وجود خلاص و هما مبقوش قادرين يتأقلموا و يتعلموا من العصر الجديد تعليقات الناس كانت انى متحامل عليهم!
























