الرئيسيةمن أناالدوراتالمدونةسوق الأوامرالمناهج والباقاتالشركاء

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • المناهج والباقات
  • سوق الأوامر
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالمناهجالمدونةالدخول
الذكاء الاصطناعي

التخزين المؤقت الدلالي: خفّض تكلفة نموذج اللغة على الأسئلة المتكررة

متوسط7 أغسطس 20265 دقائق قراءة
التخزين المؤقت الدلالي: خفّض تكلفة نموذج اللغة على الأسئلة المتكررة

التخزين المؤقت الدلالي: خفّض تكلفة نموذج اللغة على الأسئلة المتكررة

المستوى: متوسط. المقال ده مناسب لو عندك تطبيق شغّال فعلاً على نموذج لغة (شات بوت دعم، مساعد داخلي، بحث بالأسئلة) وعايز تقلّل التكلفة والبطء من غير ما تغيّر النموذج ولا تنزّل جودة الردود.

لو تطبيقك بيبعت كل سؤال للـ LLM حتى لو اتسأل قبل كده بصياغة مختلفة، إنت بتدفع مرتين على نفس الإجابة. التخزين المؤقت الدلالي بيخلّي "إعادة تعيين الباسورد" و"نسيت الباسورد اعمل إيه" يوصّلوا لنفس الإجابة المخزّنة، بدل استدعاء جديد ومكلف في كل مرة.

المشكلة باختصار

الكاش التقليدي بيشتغل بالتطابق الحرفي: نفس النص بالظبط يرجّع نفس النتيجة. ده بيفشل مع نماذج اللغة، لأن المستخدمين بيسألوا نفس السؤال بمليون صياغة. النتيجة إن نسبة الإصابة (cache hit) بتكون شبه صفر، وكل طلب بيروح للنموذج. في بوت دعم عادي، حوالي 60 إلى 70% من الترافيك بيكون تكرار لنفس عدد محدود من الأسئلة. يعني إنت بتهدر ثلثين فاتورتك على إجابات اتحسبت قبل كده.

الفكرة بمثال بسيط

تخيّل موظف دعم شاطر. أول ما حد يسأل "إزاي أغيّر باقتي؟"، بيجاوب ويكتب الإجابة في دفتر. لما ييجي عميل تاني ويقول "عايز أرفّع الاشتراك بتاعي"، الموظف مبيقولش "دي جملة مختلفة، هفكّر من الأول". هو فاهم إن المعنى واحد، فبيرجع لنفس صفحة الدفتر. التخزين المؤقت الدلالي بيعمل نفس الحكاية بالظبط: بيطابق بالمعنى، مش بالحروف.

يعني إيه بالظبط: من التطابق الحرفي للتطابق بالمعنى

علميًا، بنحوّل كل سؤال لمتجه أرقام (embedding) بيمثّل معناه في فضاء متعدد الأبعاد. الأسئلة المتقاربة في المعنى بيبقى متجهاتها قريبة من بعض. بنقيس القرب ده بتشابه جيب التمام (cosine similarity)، وهو رقم بين 0 و1: كل ما قرب من 1، كل ما المعنى أقرب.

الكاش الدلالي بيشتغل كالتالي: نحوّل السؤال الجديد لمتجه، ندوّر على أقرب سؤال مخزّن، ولو التشابه عدّى عتبة معيّنة (threshold) — مثلاً 0.92 — نرجّع الإجابة المخزّنة على طول. لو مفيش حاجة قريبة كفاية، نستدعي النموذج مرة واحدة ونخزّن النتيجة للمرات الجاية.

مثال تنفيذي: كاش دلالي في أقل من 30 سطر

ده مثال شغّال يعتمد على مكتبة sentence-transformers اللي بتحسب الـ embeddings محليًا وببلاش. الفكرة كلها في دالة واحدة:

Python
import numpy as np
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("all-MiniLM-L6-v2")  # يشتغل محليًا بدون تكلفة API
cache = []          # كل عنصر: (متجه السؤال, الإجابة المخزّنة)
THRESHOLD = 0.92    # ارفعها تقلّل الإصابات الخاطئة، لكن تقلّل نسبة الإصابة

def cosine(a, b):
    return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))

def ask(question, call_llm):
    q = model.encode(question)
    best_ans, best_sim = None, 0.0
    for vec, ans in cache:              # بحث خطّي، كفاية للكاش الصغير
        sim = cosine(q, vec)
        if sim > best_sim:
            best_sim, best_ans = sim, ans
    if best_sim >= THRESHOLD:           # إصابة كاش
        return best_ans, f"HIT ({best_sim:.2f})"
    answer = call_llm(question)         # فشل: استدعِ النموذج مرة واحدة بس
    cache.append((q, answer))
    return answer, "MISS"

البحث الخطّي هنا كافٍ لبضع مئات من العناصر. لو الكاش هيكبر لعشرات الآلاف، استبدل الحلقة بقاعدة متجهات زي Redis أو FAISS بتلاقي أقرب جار في مللي ثانية بدل ما تمشي على كل عنصر.

الأرقام: قبل وبعد

خلّينا ناخد سيناريو واقعي: بوت دعم بيستقبل 1000 سؤال في اليوم، و70% منهم تكرار لنفس الأسئلة الشائعة. الافتراض إن كل استدعاء للنموذج بيكلّف حوالي 0.002 دولار وبياخد حوالي 840 مللي ثانية.

  • من غير كاش: 1000 استدعاء، التكلفة ~2.00 دولار، ومتوسط الزمن ~840 مللي ثانية.
  • مع كاش دلالي عند عتبة 0.92: نسبة إصابة واقعية ~65%. الإصابة بترجع في ~30 إلى 210 مللي ثانية وبتكلفة قريبة من صفر. بس الـ 35% الباقية بتروح للنموذج.
  • النتيجة: التكلفة بتنزل لحوالي 0.62 دولار (~69% أقل)، ومتوسط الزمن بينزل لحوالي 210 مللي ثانية (أسرع ~4 مرات).

الأرقام دي توضيحية لحمل عالي التكرار. أول خطوة عملية: قيس نسبة التكرار الحقيقية في اللوجز بتاعتك قبل ما تتوقّع أي توفير.

الـ trade-offs اللي لازم تعرفها

الكاش الدلالي مش سحر. أهم مقايضة هي الإصابة الخاطئة (false hit): سؤالين قريبين في الصياغة بس مختلفين في القصد، زي "إزاي ألغي الاشتراك؟" و"إزاي أوقّف التجديد التلقائي؟". لو العتبة واطية، الكاش هيرجّع إجابة غلط. بتكسب توفير أكبر لما تنزّل العتبة، بتخسر دقة. العتبة العملية بتبدأ عادةً من 0.9 وبتتظبط بالتجربة على أسئلتك الحقيقية.

مقايضة تانية: الإجابات القديمة (staleness). لو الإجابة بتعتمد على بيانات بتتغيّر (سعر، رصيد، حالة طلب)، الكاش ممكن يرجّع معلومة قديمة. الحل إنك تحط مدة صلاحية (TTL) على العناصر، أو تمنع تخزين أي إجابة فيها بيانات لحظية أصلاً.

وفيه تكلفة صغيرة: كل سؤال محتاج حساب embedding. بس دي رخيصة جدًا (نموذج محلي ببلاش، أو ~0.00002 دولار على نماذج مدفوعة صغيرة) مقارنة باستدعاء النموذج الكامل.

متى لا تستخدم التخزين المؤقت الدلالي

سيبه لو أغلب إجاباتك مشخصنة أو تعتمد على حالة المستخدم (زي "كام رصيدي؟")، أو لو الترافيك عندك متنوّع جدًا ونسبة التكرار أقل من 15 إلى 20% — هنا التوفير مش هيغطّي تعقيد إضافي. كمان بلاش في الحالات اللي بتتطلب توليد جديد كل مرة لأسباب تنظيمية أو تدقيقية.

الخطوة التالية

افتح لوجز آخر أسبوع، جمّع الأسئلة المتشابهة في المعنى، واحسب نسبة التكرار الحقيقية. لو طلعت فوق 30%، ركّب النموذج البسيط اللي فوق بعتبة 0.92 على أكتر 50 سؤال شائع، وقيس نسبة الإصابة والزمن قبل وبعد. لو نسبة الإصابة ضعيفة، جرّب تنزّل العتبة درجة واحدة وراقب الإصابات الخاطئة.

المصادر

  • GPTCache — مكتبة مفتوحة للتخزين المؤقت الدلالي لنماذج اللغة: github.com/zilliztech/GPTCache
  • Redis — قواعد المتجهات والبحث الدلالي: redis.io/docs/latest/develop/get-started/vector-database
  • OpenAI — دليل الـ Embeddings: platform.openai.com/docs/guides/embeddings
  • Sentence-Transformers — توثيق نموذج all-MiniLM-L6-v2: sbert.net
  • تشابه جيب التمام (Cosine similarity): en.wikipedia.org/wiki/Cosine_similarity

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة