EnglishالعربيةDeutsch
بناء لوحة تكاليف نماذج اللغة على BigQuery
Data·By Islam Gamal··10 min read

بناء لوحة تكاليف نماذج اللغة على BigQuery

مخطط ملموس لتسجيل استهلاك OpenAI وAnthropic وGemini في BigQuery وبناء لوحة تكاليف يقرأها فريق المالية فعلًا.

Islam Gamal
Islam Gamal
AI · Data · Automation Engineer
TL;DR

سجّل كل استدعاء نموذج في جدول أحداث واسع على BigQuery، ثم أنشئ عرضًا يوميًا مادّيًا، واعرض ثلاث لوحات: تكلفة كل ميزة، تكلفة كل عميل، وتكلفة كل نتيجة ناجحة. أي شيء غير ذلك زخرفة.

Key takeaways
  • جدول أحداث واحد، عرض يومي مادّي واحد، وثلاث لوحات.
  • انسِب التكلفة للميزات والعملاء وقت الكتابة، لا عبر عمليات ربط لاحقة.
  • تابع التكلفة لكل نتيجة ناجحة، لا لكل استدعاء فقط.
  • نبّه على نمو الأسبوع الحالي مقابل السابق لكل ميزة، لا على الإنفاق المطلق.

سكيمة الحدث

كل استدعاء لنموذج لغة — من أي مزوّد — يكتب صفًا واحدًا في llm_events. المزوّدون يتغيرون، والسكيمة لا:

CREATE TABLE analytics.llm_events (
  event_id STRING,
  ts TIMESTAMP,
  provider STRING,
  model STRING,
  feature STRING,
  tenant_id STRING,
  request_id STRING,
  prompt_tokens INT64,
  completion_tokens INT64,
  cached_tokens INT64,
  latency_ms INT64,
  status STRING,
  cost_usd NUMERIC,
  metadata JSON
) PARTITION BY DATE(ts)
  CLUSTER BY feature, tenant_id;
Pro tip: احسب cost_usd وقت الكتابة من جدول أسعار مُصدَّر. إعادة الحساب من الرموز لاحقًا تعني إعادة التفاوض مع التاريخ كلما غيّر المزوّد أسعاره.

العرض اليومي

عرض مادّي واحد يقود كل الرسوم:

CREATE MATERIALIZED VIEW analytics.llm_daily AS
SELECT
  DATE(ts) AS day,
  provider, model, feature, tenant_id,
  COUNT(*) AS calls,
  SUM(prompt_tokens) AS prompt_tokens,
  SUM(completion_tokens) AS completion_tokens,
  SUM(cost_usd) AS cost_usd,
  APPROX_QUANTILES(latency_ms, 100)[OFFSET(95)] AS latency_p95,
  COUNTIF(status = 'ok') / COUNT(*) AS success_rate
FROM analytics.llm_events
GROUP BY day, provider, model, feature, tenant_id;

اللوحات الثلاث

  1. تكلفة كل ميزة — منطقة يومية مكدّسة حسب feature. هذا الرسم الذي يحدق فيه مديرو المنتج.
  2. تكلفة كل عميل — أعلى 20 عميلًا بتكلفة الأسبوع، مع نمو أسبوع مقابل أسبوع. هذا الرسم الذي يحدق فيه مديرو الحسابات.
  3. تكلفة كل نتيجة ناجحةSUM(cost_usd) / COUNTIF(status = 'ok'). هذا الرسم يلتقط النماذج التي تنحدر إلى محاولات مكلفة.

تنبيهات لا تصرخ بلا داعٍ

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

تنبيه ثانٍ مفيد: مضاعفة التكلفة لكل نتيجة ناجحة لأي ميزة. يلتقط انحدارات الجودة الصامتة حيث تخفي المحاولات معدل الفشل.

مسار الكتابة

نمطان يعملان بامتياز:

  • إدراج مباشر من تطبيقك عبر Streaming Inserts — الأرخص والأبسط عند الأحجام الصغيرة.
  • مؤقّت عبر Pub/Sub → Dataflow أو مهمة تحميل مجدولة — أرخص وأكثر صمودًا فوق ~مليون استدعاء يوميًا.

في الحالتين، حافظ على استقرار السكيمة وضع جدول الأسعار في نظام إصدار. اللوحة نافعة بقدر انضباط الكتابة وراءها.

#BigQuery#Cost#LLM#Analytics

Frequently asked

لماذا BigQuery لا Postgres؟

معظم الفرق ينفعها Postgres حتى بضعة ملايين حدث. BigQuery يفوز حين تعبر ذلك أو حين تريد تحليلات مرنة دون Vacuum.

كيف أنسب التكلفة إذا استدعت الميزة نموذجين؟

علّم الحدثين بنفس الميزة. عرض النتيجة سيُعكِس عندها التكلفة الحقيقية للميزة كما يراها المستخدم بغض النظر عن التوجيه الداخلي.

هل يصلح للتضمين واستدعاءات قاعدة المتجهات؟

نعم — أضف عمود `operation` ('generation' | 'embedding' | 'rerank') واحتفظ بنفس الشكل. جدول واحد أفضل من ثلاثة حين تشرّح حسب العميل.

Building something similar?

I help teams ship production-grade AI agents, n8n workflows, and data platforms. Let's talk about what you're building.

Work with me
Islam Gamal
Written by

Islam Gamal

AI, Data & Automation Engineer. I design and ship production AI agents, n8n workflows, and cloud data platforms — with a focus on reliability, cost, and measurable business impact. Founder of Tashghil and Tek bil Arabi.

More from Islam Gamal

Browse every article by Islam Gamal on the author page.