صيغة توفير التكاليف ونقطة التحول في Vibe Coding

إنشاء نموذج تكلفة موحد باستخدام متغيرات موحدة لأنواع الفوترة الثلاثة: الرموز (tokens)، عدد استدعاءات API، وعدد المطالبات (prompts)، مع تقديم صيغ نقطة التحول وتوصيات أساليب العمل.

يمكن تلخيص نماذج فوترة أدوات الذكاء الاصطناعي للبرمجة إلى ثلاثة أنواع:

  1. الفوترة حسب الرموز (tokens): تشمل أنواع API المختلفة، Claude Code (Claude Pro)، Codex Cli (ChatGPT Plus)، Zhipu Lite/Pro، وCursor الإصدار الجديد وما إلى ذلك. جميعها في جوهرها فوترة حسب الرموز، وتقدم بعض المنتجات خصومات على الباقات.
  2. الفوترة حسب عدد استدعاءات API: مثل OpenRouter (الحد المجاني)، ModelScope، Gemini Code Assistant (1000 استدعاء مجاني يوميًا)، Chutes وما إلى ذلك.
  3. الفوترة حسب عدد المطالبات (prompts): مثل Cursor الإصدار القديم (500 مرة)، Github Copilot (300 مرة) وما إلى ذلك.

هذه الأنواع الثلاثة من النماذج في جوهرها تدفع مقابل استنتاج النموذج ومعالجة السياق، والاختلاف يكمن في دقة التسعير وشكل الحدود.

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

دالة التكلفة الإجمالية الموحدة

لأي أداة i، يمكن كتابة التكلفة الإجمالية خلال فترة فوترة واحدة على النحو التالي:

Totali=Cashi+Timei+RiskiTimei=RHoursiRiski=RReworkHoursi\begin{aligned} \mathrm{Total}_i &= \mathrm{Cash}_i + \mathrm{Time}_i + \mathrm{Risk}_i \\ \mathrm{Time}_i &= R \cdot \mathrm{Hours}_i \\ \mathrm{Risk}_i &= R \cdot \mathrm{ReworkHours}_i \end{aligned}

حيث R هو سعر وقتك (يوان/ساعة). إذا كنت لا تريد تضمين الوقت، يمكنك تعيين R إلى 0، وتتحول الصيغة إلى مقارنة تكلفة نقدية بحتة.

اتفاقية المتغيرات

لتوحيد نماذج الفوترة الثلاثة، يتم تقسيم حمل العمل إلى مستويين: “الجلسة (session)” و"التكرار (iteration)". يعتبر المسح والفهرسة عند دخول مشروع جديد عملية لمرة واحدة، والحوار المستمر وتعديل الكود داخل نفس السياق عمليات قابلة للتكرار.

تعريف المتغيرات:

  • S_i: التكلفة الثابتة للأداة i (رسوم الاشتراك أو الحد الأدنى للاستهلاك الشهري)
  • N_s: عدد الجلسات الجديدة خلال هذه الفترة (تغيير المشروع، مسح السياق، بدء جلسة جديدة - كلها تُحتسب)
  • N_{it}: عدد التكرارات الفعالة خلال هذه الفترة (توضيح المتطلبات، تعديل الكود، إصلاح الأخطاء، إلخ)
  • R: سعر الوقت (يوان/ساعة)
  • h0_i: وقت التهيئة الباردة لكل جلسة جديدة (ساعة)
  • h1_i: متوسط وقت كل تكرار (ساعة)
  • p_{\mathrm{fail},i}: احتمال فشل كل تكرار والحاجة إلى إعادة العمل (من 0 إلى 1)
  • h_{\mathrm{re},i}: متوسط وقت إعادة العمل الواحدة (ساعة)

وبالتالي يمكن كتابة عنصري الوقت والمخاطرة كالتالي:

Hoursi=Nsh0i+Nith1iReworkHoursi=Nitpfail,ihre,i\begin{aligned} \mathrm{Hours}_i &= N_s \cdot h0_i + N_{it} \cdot h1_i \\ \mathrm{ReworkHours}_i &= N_{it} \cdot p_{\mathrm{fail},i} \cdot h_{\mathrm{re},i} \end{aligned}

الآن نحتاج فقط إلى كتابة Cash_i للأنواع الثلاثة من الفوترة.

التكلفة النقدية للفوترة حسب الرموز (tokens)

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

تعريف المتغيرات:

  • Tin0_i: إجمالي رموز الإدخال لكل جلسة جديدة
  • r0_i \in [0,1]: نسبة ضرب ذاكرة التخزين المؤقت للإدخال في الجلسة الجديدة
  • Tin1_i: إجمالي رموز الإدخال لكل تكرار
  • r1_i \in [0,1]: نسبة ضرب ذاكرة التخزين المؤقت للإدخال في التكرار
  • Tout0_i, Tout1_i: كمية رموز الإخراج
  • Pin_i, Pcache_i, Pout_i: معلمات السعر (يوان/مليون رمز)

يمكن للأدوات التي لا تدعم تسعير التخزين المؤقت تعيين r0_i=r1_i=0 أو Pcache_i=Pin_i.

إذن:

Cashi(token)=Si+1106[Ns(Pini(1r0i)Tin0i+Pcacheir0iTin0i+PoutiTout0i)+Nit(Pini(1r1i)Tin1i+Pcacheir1iTin1i+PoutiTout1i)]\begin{aligned} \mathrm{Cash}^{(\mathrm{token})}_i &= S_i + \frac{1}{10^6}\Bigl[ N_s \cdot \bigl(Pin_i \cdot (1-r0_i)\cdot Tin0_i + Pcache_i \cdot r0_i\cdot Tin0_i + Pout_i \cdot Tout0_i\bigr) \\ &\qquad + N_{it} \cdot \bigl(Pin_i \cdot (1-r1_i)\cdot Tin1_i + Pcache_i \cdot r1_i\cdot Tin1_i + Pout_i \cdot Tout1_i\bigr) \Bigr] \end{aligned}

تفسر هذه الصيغة مباشرةً نتيجة تجريبية: عند العمل بشكل متواصل ومغروس في نفس الجلسة، يزيد N_{it} ولكن Tin0_i يُدفع مرة واحدة فقط، ينخفض متوسط تكلفة كل تكرار. يؤدي التبديل المتكرر بين المشاريع أو مسح السياق بشكل متكرر إلى دفع Tin0_i مرارًا وتكرارًا.

التكلفة النقدية للفوترة حسب عدد استدعاءات API

تكمن نقطة جوهرية في فوترة عدد استدعاءات API في أن “استدعاءً واحدًا” يشمل عمليات الحوار، استدعاء الأدوات، قراءة الملفات، البحث، تنفيذ الأوامر، إلخ. يجب تقدير:

  • A0_i: عدد استدعاءات API لكل جلسة جديدة
  • A1_i: عدد استدعاءات API لكل تكرار
  • Ccall_i: سعر كل استدعاء (يوان/مرة)

صيغة التكلفة النقدية:

Cashi(call)=Si+Ccalli(NsA0i+NitA1i)\mathrm{Cash}^{(\mathrm{call})}_i = S_i + Ccall_i \cdot (N_s \cdot A0_i + N_{it} \cdot A1_i)

إذا قدمت الأداة حصة مجانية Q (مرات/فترة) ويجب الانتظار بعد تجاوزها بدلاً من الدفع، يمكن إضافة وقت الانتظار إلى تكلفة الوقت، و تحويل الاستدعاءات الزائدة إلى Hours_i، والاستمرار في استخدام Total_i للمقارنة.

التكلفة النقدية للفوترة حسب عدد المطالبات (prompts)

تحول فوترة عدد المطالبات “مطالبةً واحدة” إلى ما يعادل تقديم مهمة واحدة. يجب تقدير:

  • P0_i: عدد المطالبات لكل جلسة جديدة
  • P1_i: عدد المطالبات لكل تكرار
  • Cprompt_i: سعر كل مطالبة (يوان/مرة)

صيغة التكلفة النقدية:

Cashi(prompt)=Si+Cprompti(NsP0i+NitP1i)\mathrm{Cash}^{(\mathrm{prompt})}_i = S_i + Cprompt_i \cdot (N_s \cdot P0_i + N_{it} \cdot P1_i)

للمنتجات التي “تتضمن N مرة في الشهر”، يمكن استخدام السعر الظلي (shadow price) كتقريب: افترض رسوم الاشتراك الدوري هي S_i، والحصة هي Q_i، إذن Cprompt_i \approx S_i / Q_i. رغم أنها ليست تكلفة نقدية هامشية صارمة، إلا أنها تحول “ندرة الحصة” إلى تكلفة فرصة قابلة للحساب.

نقطة التحول: صيغة خط الفصل بين أداتين

كتابة الصيغة أعلاه بشكل موحد. للأداة i:

Totali=Si+Ns(c0i+Rh0i)+Nit(c1i+Rh1i+Rpfail,ihre,i)\mathrm{Total}_i = S_i + N_s \cdot (c0_i + R \cdot h0_i) + N_{it} \cdot (c1_i + R \cdot h1_i + R \cdot p_{\mathrm{fail},i} \cdot h_{\mathrm{re},i})

حيث c0_i، c1_i تمثلان التكلفة النقدية للتهيئة الباردة والتكرار الواحد، على التوالي، وتتوافق مع التوسيعات المختلفة في أنواع الفوترة الثلاثة.

مع أداتين A و B، عند ثبات N_s، لجعل Total_A = Total_B، يمكن حل عدد التكرارات عند نقطة التحول:

Nit=(SBSA)+Ns((c0Bc0A)+R(h0Bh0A))(c1Ac1B)+R(h1Ah1B)+R(pfail,Ahre,Apfail,Bhre,B)N_{it}^{\ast} = \frac{ (S_B - S_A) + N_s \cdot \bigl((c0_B - c0_A) + R \cdot (h0_B - h0_A)\bigr) }{ (c1_A - c1_B) + R \cdot (h1_A - h1_B) + R \cdot \bigl(p_{\mathrm{fail},A} \cdot h_{\mathrm{re},A} - p_{\mathrm{fail},B} \cdot h_{\mathrm{re},B}\bigr) }

شرح:

عندما يكون المقام موجبًا، إذا كان N_{it} > N_{it}^{\ast} فإن A أكثر اقتصادًا، وإذا كان N_{it} < N_{it}^{\ast} فإن B أكثر اقتصادًا. عندما يكون المقام سالبًا، يتغير اتجاه المتباينة. عندما يقترب المقام من 0، هذا يعني أن التكلفة الهامشية المركبة لكل تكرار لكليهما متشابهة تقريبًا، ويعتمد الاختيار أساسًا على التكلفة الثابتة وتكلفة التهيئة الباردة.

يمكنك استخدام هذه الصيغة لحساب ثلاث نقاط تحول نموذجية، وهي: أدوات الفوترة حسب الرموز مقابل أدوات الفوترة حسب المطالبات، وأدوات الفوترة حسب الرموز مقابل أدوات الفوترة حسب استدعاءات API، وأدوات الفوترة حسب استدعاءات API مقابل أدوات الفوترة حسب المطالبات. ما عليك سوى توسيع c0 و c1 الخاصة بكل منها إلى رموز، أو عدد الاستدعاءات، أو عدد المطالبات كما هو موضح أعلاه.

استراتيجيات عملية: طرق عملية لتقليل التكاليف

1. التطوير الغامس: استراتيجية تحسين الفوترة حسب الرموز

للأدوات التي تتبع نظام الفوترة حسب الرموز (مثل Codex Cli)، الاستراتيجية الأساسية هي الحفاظ على استقرار سياق العمل.

المبدأ: تجنب دفع Tin0_i مرارًا. العمل المستمر في نفس المشروع يوزع تكلفة تحميل السياق الأولي، وفي نفس الوقت يزيد معدل ضرب التخزين المؤقت مما يسرع الاستجابة بشكل كبير.

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

2. دمج المتطلبات: استراتيجية تحسين الفوترة حسب استدعاءات API

للأدوات التي تتبع نظام الفوترة حسب عدد الاستدعاءات (مثل Gemini Code Assistant)، الاستراتيجية الأساسية هي الاستفادة القصوى من عدد استدعاءات “إنشاء السياق”.

المبدأ: توزيع تكلفة A0_i. عمليات استدعاء الأدوات، قراءة الملفات، وما إلى ذلك تُحتسب جميعها في عدد الاستدعاءات.

التطبيق: معالجة عدة متطلبات ذات صلة في جلسة واحدة، وزيادة كثافة القيمة لعمليات قراءة الملفات في المراحل المبكرة. تجنب قطع الاتصال فورًا بعد إنجاز مهمة صغيرة.

3. معالجة المهام الكبيرة: استراتيجية تحسين الفوترة حسب المطالبات

للأدوات التي تتبع نظام الفوترة حسب عدد المطالبات (مثل Cursor الإصدار القديم)، فهي مناسبة لمعالجة مهام كبيرة أو صيانة التهيئة الباردة.

المبدأ: تأمين التكلفة الهامشية. بغض النظر عن طول السياق، تبقى تكلفة كل مطالبة ثابتة.

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

عملية اختيار قابلة للحساب

يرسم المخطط الانسيابي أدناه المتغيرات إلى منطق الاختيار. بعد تقدير magnitude N_s و N_{it}، استخدم صيغة نقطة التحول للمقارنة لتحديد الحل الأمثل.

flowchart TD
    A[تعريف حمل العمل لهذه الفترة] --> B[تقدير N_s: عدد الجلسات الجديدة]
    B --> C[تقدير N_it: عدد التكرارات لكل جلسة]
    C --> D[تقدير c0, c1 لكل نوع أداة]
    D --> E[تعويض في صيغة N_it*]
    E --> F{الشكل الرئيسي للحمل?}
    F -->|N_s كبير, N_it صغير| G[الأولوية: فوترة حسب المطالبات أو عدد الاستدعاءات]
    F -->|N_s صغير, N_it كبير| H[الأولوية: فوترة حسب الرموز]
    F -->|كلاهما كبير| I[تقسيم سير العمل: التهيئة الباردة تستخدم المطالبات/الاستدعاءات، المرحلة المتعمقة تستخدم الرموز]

    classDef in fill:#2c3e50,stroke:#ecf0f1,stroke-width:2px,color:#ecf0f1
    classDef calc fill:#3498db,stroke:#2980b9,stroke-width:2px,color:#fff
    classDef decide fill:#f39c12,stroke:#d35400,stroke-width:2px,color:#fff
    classDef out fill:#27ae60,stroke:#229954,stroke-width:2px,color:#fff

    class A,B,C in
    class D,E calc
    class F decide
    class G,H,I out