لو بتدفع لـ Claude API أو OpenAI 80 دولار في الشهر، وزميلك بيدفع 25 دولار على نفس عدد الطلبات تقريبًا، الفرق غالبًا مش في الكود. الفرق إنك بتبعت نص عربي وهو بيبعت نص إنجليزي. الكلمة العربية الواحدة في المتوسط بتتكسّر لـ 2 إلى 4 وحدات تسمى tokens، بينما الإنجليزية بتتكسّر لتوكن واحد. ده معناه إن نفس المعنى بيكلّفك ضعفين أو ثلاثة. نهاية المقال هتفهم ليه ده بيحصل، وهتعرف بالظبط إزاي تعد التوكنز قبل ما تبعت أي طلب.
Tokens: الوحدة اللي بتدفع عليها فعلًا
المشكلة باختصار
كل نموذج لغوي — Claude وGPT وLlama وغيرهم — مش بيشوف الكلام كحروف ولا ككلمات. بيشوفه كأرقام. الجسر بين النص اللي بتكتبه والأرقام اللي النموذج بيفهمها اسمه tokenizer. الـ tokenizer بياخد الجملة ويكسّرها لقطع صغيرة (tokens)، وكل قطعة ليها رقم ثابت في معجم النموذج. الفاتورة بتتحسب على عدد التوكنز الداخلة والخارجة، مش على عدد الكلمات ولا الحروف.
مثال صناديق الكرتون (للي مش مبرمج)
تخيّل إنك بتشحن بضاعة في شركة شحن، والشركة بتحاسبك مش على وزن البضاعة، بل على عدد الصناديق اللي حطّيت فيها البضاعة. شركة الشحن عندها صناديق جاهزة بمقاسات معينة. لو بضاعتك "هاتف"، فيه صندوق جاهز اسمه "هاتف" بيدخل فيه كله، فبتدفع صندوق واحد. لكن لو بضاعتك "تليسكوب"، مفيش صندوق بالاسم ده، فبيقسّموه لـ 3 صناديق: واحد "تلي" + واحد "س" + واحد "كوب". نفس البضاعة، لكن بـ 3 صناديق بدل واحد.
الـ tokenizer بيشتغل بنفس المنطق. كلمة "hello" موجودة في معجمه كـ token جاهز، فهي توكن واحد. كلمة "السلام" غالبًا مش في المعجم كوحدة كاملة، فبيتكسّرها لـ "ال" + "سل" + "ام" — تلات صناديق.
التعريف العلمي: Byte Pair Encoding
الخوارزمية الأكثر استخدامًا في tokenizers الحديثة (Claude، GPT-4، Llama 3) اسمها Byte Pair Encoding، اختصارًا BPE. الفكرة باختصار: ابدأ بمعجم فيه كل الحروف الفردية، وبعدين اعمل إحصائية على أكثر زوجَين متجاورَين تكرارًا في بيانات تدريب ضخمة، ضم الزوج ده ك token واحد جديد، وكرّر آلاف المرات لحد ما يتكوّن معجم بحجم 50,000 إلى 200,000 توكن.
المعاجم دي اتدرّبت على نصوص أغلبها إنجليزي — بحوالي 90% في GPT، ونسبة أقل في Claude. النتيجة: الكلمات الإنجليزية الشائعة دخلت المعجم ك tokens كاملة، أما العربية والكورية واليابانية فأخذت نصيب أقل، فبتتكسّر لقطع أصغر.
الكود اللي يثبت الفرق
الكود ده بيستخدم Anthropic SDK لعد التوكنز فعلًا قبل إرسال أي طلب. ركّز على الفرق في النتيجة:
import anthropic
client = anthropic.Anthropic()
texts = {
"Arabic": "السلام عليكم ورحمة الله وبركاته",
"English": "Peace be upon you and God's mercy and blessings",
}
for label, text in texts.items():
result = client.messages.count_tokens(
model="claude-opus-4-5",
messages=[{"role": "user", "content": text}],
)
chars = len(text)
tokens = result.input_tokens
ratio = chars / tokens
print(f"{label}: {chars} chars → {tokens} tokens (ratio {ratio:.2f})")
المخرج المتوقع تقريبًا (الأرقام بتتغير قليلًا بين إصدارات الموديل):
Arabic: 31 chars → 18 tokens (ratio 1.72)
English: 51 chars → 11 tokens (ratio 4.64)
لاحظ: النص العربي أقصر بـ 20 حرف، لكنه بيستهلك توكنز أكتر بـ 64%. ده بالظبط اللي بيخلّي فاتورتك تطلع.
الأرقام اللي تهمّك في فاتورتك
سعر Claude Opus 4.5 وقت كتابة المقال: 15$ لكل مليون توكن دخول، 75$ لكل مليون توكن خروج. لو بتعمل chatbot دعم فني عربي، متوسط الرسالة عندك 50 كلمة عربية:
- 50 كلمة عربية ≈ 130 توكن.
- 10,000 رسالة شهريًا ≈ 1.3 مليون توكن دخول = 19.5 دولار.
- نفس الـ 10,000 رسالة بالإنجليزي ≈ 600,000 توكن = 9 دولار.
- الفرق: 10.5 دولار شهريًا. على بوت بـ 100,000 رسالة، الفرق بيبقى 105 دولار.
إزاي تقلّل التوكنز بدون ما تخسر المعنى
- عُد دائمًا قبل الإرسال. استخدم
count_tokensأوtiktoken(لـ OpenAI). لو طلبك أكبر من المتوقّع، اعرف قبل ما تبعت. - اختصر System Prompt. system prompt مكتوب بـ 800 توكن بيتكرر في كل طلب. لو تقدر تختصره لـ 300، بتوفّر 60% من تكلفة الـ system لكل request.
- فعّل Prompt Caching. Claude بيسمح بـ caching للـ system prompt الطويل، التكلفة بتنزل 90% على الجزء المخبّأ.
- اخلط اللغات بحكمة. لو System Prompt هيتكرر آلاف المرات، اكتبه إنجليزي. خلّي العربي للمحتوى المتغيّر فقط.
Trade-offs لازم تعرفها
كتابة System Prompt بالإنجليزي بتوفّر فلوس، لكن الموديل أحيانًا بيرجع إجابات بمزيج لغوي غريب. الحل: في آخر System Prompt اكتب جملة عربية واحدة "يجب أن تكون كل إجاباتك بالعربية الفصحى". ده بيكلّف 12 توكن إضافي فقط، ويثبّت لغة الإخراج.
كذلك، استخدام نموذج أصغر (Claude Haiku بدل Opus) بيقلّل التكلفة 12 ضعف، لكن الجودة بتنزل في المهام المعقّدة. القاعدة: ابدأ بالأرخص، وارفع الموديل لما الـ evals تثبت إنك محتاج.
متى لا تشغل بالك بالموضوع
لو تطبيقك بيتعامل مع أقل من 1000 طلب يوميًا، الفرق بين 9 و19 دولار شهريًا مش حاجة تستاهل أسبوع تحسين. ركّز على الجودة. الـ tokens بتبقى أولوية لما الفاتورة تعدّي 100 دولار شهريًا، أو لما تكون بتبني منتج SaaS بتبيع الاستخدام للعميل.
الخطوة التالية
افتح console.anthropic.com دلوقتي، شغّل الكود اللي فوق على آخر 5 رسائل بعتّها للموديل، واحسب التوكنز الفعلية. لو متوسط الرسالة عندك أكتر من 200 توكن دخول، اقرأ مقال Prompt Caching المنشور في نفس القسم — هتوفّر 90% على الجزء المتكرّر بسطر واحد.
المصادر
- Anthropic Token Counting API Documentation: docs.anthropic.com/en/api/messages-count-tokens
- OpenAI tiktoken library: github.com/openai/tiktoken
- Sennrich et al., "Neural Machine Translation of Rare Words with Subword Units" (BPE Paper): arxiv.org/abs/1508.07909
- Anthropic Pricing Page: anthropic.com/pricing
- Petrov et al., "Language Model Tokenizers Introduce Unfairness Between Languages" (NeurIPS 2023): arxiv.org/abs/2305.15425