0Pricing
AI Engineering Academy · درس

ما هو Token؟

استخدموا مكتبة tiktoken لتقسيم نصوص حقيقية إلى tokens، واكتشفوا كيفية تحويل الكلمات وعلامات الترقيم والمسافات البيضاء إلى سلاسل tokens في النماذج المختلفة.

ما هو Token؟ درس مجاني في AI Engineering Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Engineering Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.

تعالج LLMs الرموز المميزة لا الكلمات

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

يكتسب فهم الرموز المميزة أهمية عملية لأن OpenAI تحسب الأسعار لكل رمز مميز، وتقاس نافذة السياق بالرموز المميزة، ويتحكم max_tokens في الحد الأقصى لطول الاستجابة. وترجع المفاجآت في التكلفة والسلوك دائمًا تقريبًا إلى سوء فهم كيفية تقسيم النص إلى رموز مميزة.

كيف يعمل تقسيم الرموز المميزة: BPE

تستخدم نماذج GPT تقسيم الرموز المميزة باستخدام Byte Pair Encoding (BPE). يبدأ BPE بمفردات من البايتات الفردية، ثم يدمج بشكل تكراري الأزواج المتجاورة الأكثر تكرارًا حتى يصل إلى حجم المفردات المطلوب. وتستخدم نماذج GPT من OpenAI مفردات تضم نحو 100,000 رمز مميز.

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

استخدام tiktoken لعدّ الرموز المميزة

توفر OpenAI مكتبة tiktoken لتقسيم النص إلى رموز مميزة محليًا دون إجراء استدعاء لواجهة API. وهذا ضروري لعدّ الرموز المميزة قبل إرسال الطلب، بهدف تقدير التكلفة والتحقق من البقاء ضمن نافذة السياق.

import tiktoken

# Get the encoding for a specific model
enc = tiktoken.encoding_for_model('gpt-4o')

text = 'Hello! How many tokens does this sentence use?'
tokens = enc.encode(text)

print(f'Text: {text}')
print(f'Token count: {len(tokens)}')
print(f'Token IDs: {tokens}')

# You can also decode tokens back to text
decoded = enc.decode(tokens)
print(f'Decoded: {decoded}')

# Inspect individual token strings
for token_id in tokens:
    token_str = enc.decode([token_id])
    print(f'  Token {token_id}: "{token_str}"')

أعداد الرموز المميزة عمليًا

قاعدة تقريبية مفيدة: الرمز المميز الواحد ≈ 4 أحرف من النص الإنجليزي، أو نحو 0.75 كلمة. لذلك فإن 1,000 رمز مميز تعادل تقريبًا 750 كلمة أو 3-4 صفحات من النص. لكن هذه النسبة تختلف اختلافًا كبيرًا:

  • الكلمات الإنجليزية الشائعة: نحو رمز مميز واحد لكل كلمة
  • المصطلحات التقنية غير الشائعة: 2-4 رموز مميزة لكل مصطلح
  • الأرقام: غالبًا رقم واحد لكل رمز مميز (لذلك يمثّل '12345' خمسة رموز مميزة)
  • التعليمات البرمجية: تختلف بدرجة كبيرة، لكن Python تكون عادةً فعالة بنحو 1-2 رمز مميز لكل رمز
  • الكتابات غير اللاتينية (الصينية والعربية): غالبًا رمز مميز واحد لكل حرف، ما يجعلها أعلى تكلفة بكثير لكل كلمة من الإنجليزية

تقسيم أنواع المحتوى المختلفة إلى رموز مميزة

لنستكشف كيف تختلف أعداد الرموز المميزة اختلافًا كبيرًا بين أنواع المحتوى باستخدام tiktoken.

import tiktoken

enc = tiktoken.encoding_for_model('gpt-4o')

examples = {
    'English sentence': 'The quick brown fox jumps over the lazy dog.',
    'Number sequence': '1234567890',
    'Python code': 'def fibonacci(n):\n    if n <= 1:\n        return n\n    return fibonacci(n-1) + fibonacci(n-2)',
    'Technical jargon': 'autoregressive transformers tokenization subword BPE',
    'URL': 'https://api.openai.com/v1/chat/completions',
    'Chinese text': '大型语言模型使用令牌处理文本',
}

for label, text in examples.items():
    count = len(enc.encode(text))
    ratio = len(text) / count
    print(f'{label}: {count} tokens ({ratio:.1f} chars/token)')

كيف تُقسّم رسائل الدردشة إلى رموز مميزة

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

  • تضيف كل رسالة نحو 4 رموز مميزة للنفقات الإضافية الخاصة بالتنسيق
  • تبدأ كل إجابة بثلاثة رموز مميزة إضافية لتهيئة دور المساعد

تكون هذه النفقات الإضافية مهملة في المحادثات القصيرة، لكنها تتراكم في الأنظمة التي تدير محادثات طويلة. وتوفر مكتبة tiktoken دوال مساعدة لعدّ الرموز المميزة بشكل صحيح في مصفوفة رسائل كاملة.

import tiktoken

def count_messages_tokens(messages, model='gpt-4o'):
    enc = tiktoken.encoding_for_model(model)
    # 4 tokens per message (role + content structure), 3 for reply priming
    total = 3
    for msg in messages:
        total += 4
        for key, value in msg.items():
            total += len(enc.encode(str(value)))
    return total

messages = [
    {'role': 'system', 'content': 'You are a helpful assistant.'},
    {'role': 'user', 'content': 'What is the capital of France?'},
    {'role': 'assistant', 'content': 'The capital of France is Paris.'},
    {'role': 'user', 'content': 'And what is the population?'},
]

print(f'Total tokens: {count_messages_tokens(messages)}')

حدود الرموز المميزة حسب النموذج

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

  • gpt-4o: سياق من 128,000 رمز مميز، وما يصل إلى 16,384 رمزًا مميزًا في المخرج
  • gpt-4o-mini: سياق من 128,000 رمز مميز، وما يصل إلى 16,384 رمزًا مميزًا في المخرج
  • Claude 3.5 Sonnet: سياق من 200,000 رمز مميز
  • Gemini 1.5 Pro: سياق من 1,000,000 رمز مميز

يجب ألا يتجاوز مجموع رموز الإدخال ورموز الإخراج نافذة السياق. وإذا تجاوزتها، فستحصل على خطأ context_length_exceeded. تحقّق دائمًا من عدد الرموز المميزة قبل إرسال طلبات تتضمن مستندات طويلة.

الرموز المميزة والتسعير

تفرض OpenAI رسومًا منفصلة على رموز الإدخال المميزة (المطالبة التي ترسلها) ورموز الإخراج المميزة (الاستجابة التي تتلقاها). وتكون رموز الإخراج المميزة عادةً أغلى من رموز الإدخال المميزة بثلاثة إلى أربعة أضعاف، لأنها تتطلب توليدًا تسلسليًا. واعتبارًا من أوائل عام 2025، يبلغ السعر التوضيحي لـ gpt-4o-mini نحو 0.15 دولار لكل مليون رمز إدخال مميز و0.60 دولار لكل مليون رمز إخراج مميز.

يعني ذلك أن مطالبة من 2,000 رمز مميز مع استجابة من 500 رمز مميز تكلف تقريبًا ($0.15 × 2/1000 + $0.60 × 0.5/1000) = $0.00060 لكل طلب. وعند معالجة 10,000 طلب يوميًا، تبلغ التكلفة 6 دولارات يوميًا — وهي تكلفة يمكن إدارتها، لكنها تتوسع مع زيادة الاستخدام. وتصبح التخزين المؤقت، وتوجيه النماذج، وتقليل عدد الرموز المميزة أمورًا مهمة عند التوسع إلى مستوى الإنتاج.

تقليل عدد الرموز المميزة دون فقدان المعنى

تكلف المطالبات الأقصر أقل وتترك مساحة أكبر لاستجابة النموذج. تشمل الأساليب الشائعة لتقليل عدد الرموز المميزة ما يلي:

  • إزالة التعليمات الزائدة: 'Please be so kind as to...' → 'Please...'
  • ضغط الأمثلة: استخدم أقل عدد ممكن من الكلمات في كل مثال few-shot
  • اختصار أسماء الحقول في المطالبات المنظمة: استخدم 'Q:' و'A:' بدلًا من 'Question:' و'Answer:'
  • استخدام JSON بدلًا من النثر للسياق المنظم: إذ إن JSON أكثر كفاءة من حيث عدد الرموز المميزة مقارنةً بالأوصاف النثرية للبيانات نفسها

شغّل tiktoken قبل أي عملية ضغط وبعدها للتحقق من أنك وفّرت رموزًا مميزة فعلًا — إذ إن بعض عمليات «الضغط» تزيد عدد الرموز المميزة على نحو غير متوقع.

الرموز المميزة الخاصة ورموز التحكم

بالإضافة إلى الرموز المميزة النصية، تتضمن مفردات النموذج رموزًا مميزة خاصة تُستخدم لتنظيم المدخلات. ومن أمثلتها الشائعة <|endoftext|> (يشير إلى نهاية المستند)، و<|im_start|> و<|im_end|> (فواصل رسائل الدردشة في تنسيق ChatML المستخدم داخليًا).

لا تحتاج إلى إدارة هذه الرموز مباشرةً عند استخدام OpenAI API، إذ تتولى SDK ذلك نيابةً عنك. لكن إدراك وجودها يفسر سبب استهلاك طلب يحتوي أحيانًا على رسائل «فارغة» بضعة رموز مميزة رغم ذلك. كما أن الرموز المميزة الخاصة هي السبب في أنه يجب ألا تنشئ سلاسل خامًا تحتوي على أنماط <|...|> في مدخلات المستخدم دون إجراء التعقيم، لأنها قد تتداخل مع تنسيق مدخلات النموذج.

احسب دائمًا قبل الإرسال

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

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

import tiktoken

def token_count(text, model='gpt-4o'):
    enc = tiktoken.encoding_for_model(model)
    return len(enc.encode(text))

def safe_assemble_prompt(system, user_content, max_tokens=120000):
    combined = system + user_content
    count = token_count(combined)
    if count > max_tokens:
        raise ValueError(
            f'Prompt too long: {count} tokens (limit {max_tokens})'
        )
    return [{'role': 'system', 'content': system},
            {'role': 'user', 'content': user_content}]

تحقق سريع

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

مراجعة الدرس

تعلمت في هذا الدرس أن: LLMs تعالج النص بوصفه رموزًا مميزة لا كلمات، باستخدام تقسيم BPE للرموز المميزة مع مفردات تضم نحو 100,000 إدخال، وأن مكتبة tiktoken تتيح لك عدّ الرموز المميزة محليًا قبل إجراء استدعاءات API لتقدير التكلفة والتحقق من حدود السياق، وأن التسعير يتم لكل رمز مميز، مع ارتفاع تكلفة رموز الإخراج المميزة بدرجة كبيرة عن رموز الإدخال المميزة. سنتناول بعد ذلك نوافذ السياق: ماهيتها، وكيف تحد من تطبيقك، وكيف تقارن بين النماذج المختلفة.

الأسئلة الشائعة

هل درس «ما هو Token؟» مجاني؟

نعم — نص درس «ما هو Token؟» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Engineering Academy، انتقل إلى CoddyKit PRO. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.

ماذا ستتعلم في «ما هو Token؟»؟

استخدموا مكتبة tiktoken لتقسيم نصوص حقيقية إلى tokens، واكتشفوا كيفية تحويل الكلمات وعلامات الترقيم والمسافات البيضاء إلى سلاسل tokens في النماذج المختلفة. تتمرن على AI Engineering Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ AI Engineering Academy؟

لا تُشترط خبرة سابقة. AI Engineering Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «ما هو Token؟»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس AI Engineering Academy هذا؟

نعم. كل درس في AI Engineering Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ما هو Token؟
  2. نوافذ السياق: الحجم والتداعيات
  3. حساب تكاليف API والتنبؤ بها
  4. استراتيجيات البقاء ضمن حدود السياق
← العودة إلى AI Engineering Academy