0%
التكاليف وزمن الاستجابة والتحديث في بيئة الإنتاج

الانتقال إلى الإنتاج

النموذج الأولي يكلّف ثلاثة يوروهات، أما الخدمة الفعلية فتكلّف ثلاثة آلاف

10-15 دقيقة

التكاليف وزمن الاستجابة والتحديث في بيئة الإنتاج

تدخل خدمة RAG مرحلة الإنتاج مع 300 مستخدم. وبعد أسبوعين، تبلغ الفاتورة الشهرية أربعة أرقام، ويتجاوز زمن الاستجابة الوسيط خمس ثوانٍ في أوقات الذروة. لم يحسب أحد تكلفة الطلب الواحد، لأن كل اختبار في مرحلة التطوير كان يكلّف جزءاً من مئة من اليورو. وفي الشهر نفسه، يُسحب مستند من الموقع الداخلي بسبب خطأ قانوني؛ لكنه يبقى في الفهرس المتجهي ويواصل النظام الاستشهاد به لمدة ثلاثة أسابيع.

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

حساب تكلفة الطلب الواحد

حلّل التكلفة قبل أن تحاول تحسينها. يستهلك الطلب الواحد رموزاً (tokens) للإدخال، ورموزاً للإخراج، وتضميناً (embedding) للسؤال، وربما إعادة ترتيب (reranking).

TARIFS = {                     # euros pour 1 000 jetons, à ajuster
    "entree": 0.00015,
    "sortie": 0.00060,
    "plongement": 0.00002,
}

def cout_requete(jetons_contexte, jetons_question, jetons_reponse, reclassement_local=True):
    entree = (jetons_contexte + jetons_question + 250)   # 250 pour les consignes
    total = (entree / 1000) * TARIFS["entree"]
    total += (jetons_reponse / 1000) * TARIFS["sortie"]
    total += (jetons_question / 1000) * TARIFS["plongement"]
    return total

unitaire = cout_requete(3000, 30, 300)
print(f"{unitaire*1000:.2f} € pour 1 000 requêtes")
print(f"{unitaire*300*20*22:.0f} € par mois pour 300 personnes, 20 requêtes par jour ouvré")

التعليقات

التعليقات مدعومة عبر GitHub Discussions

سجّل الدخول باستخدام GitHub للمشاركة في النقاش

تم نسخ الرابط!