Menu
flag Ar iconالعربيةdown icon

التوكنات ونافذة السياق: كيف يقرأ الذكاء الاصطناعي

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

يمكنك تعديل كل موجّه في هذه الصفحة ثم فتحه في ChatGPT أو Claude أو أي تطبيق ذكاء اصطناعي آخر.

نماذج الذكاء الاصطناعي اللغوية لا تقرأ حروفًا ولا كلمات. إنها تقرأ التوكنات (tokens): قطع صغيرة من النص، كثيرًا ما تكون كلمة كاملة، وأحيانًا جزءًا من كلمة. ولا تستطيع استيعاب إلا عدد محدود من التوكنات في المرة الواحدة، وهذا الحد يُسمّى نافذة السياق (context window). هاتان الفكرتان تفسّران لماذا تُسعَّر أدوات الذكاء الاصطناعي بالطريقة التي تُسعَّر بها، ولماذا تبدأ المحادثات الطويلة في نسيان التعليمات الأولى، ولماذا قد يصعب على النموذج عدّ حروف كلمة كتبها للتو بشكل صحيح.

ما هو التوكن في الذكاء الاصطناعي؟

قبل أن يرى النموذج موجّهك، يقسّم برنامج يُسمّى المُجزِّئ (tokenizer) النص إلى قطع من مفردات ثابتة، ويحوّل كل قطعة إلى رقم. يعمل النموذج بالكامل على هذه الأرقام، ويكتب رده بالطريقة نفسها، توكنًا بعد توكن، ثم يعيدها التطبيق إلى نص.

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

Token ization isn 't magic .

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

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

كم كلمة في التوكن؟

في النص الإنجليزي، القاعدة التقريبية الشائعة هي نحو أربعة أحرف لكل توكن، أي قرابة ثلاثة أرباع الكلمة. بهذا التقدير، 1,000 توكن تساوي نحو 750 كلمة إنجليزية، ومقال من 3,000 كلمة يساوي نحو 4,000 توكن.

تتغير النسبة بحسب المحتوى:

  • اللغات الأخرى تحتاج غالبًا إلى توكنات أكثر للمعنى نفسه. تُدرَّب المُجزِّئات على بيانات تهيمن عليها الإنجليزية، فتحصل الكلمات الإنجليزية على توكنات مضغوطة، بينما يُقسَّم النص باليابانية والكورية والعربية والهندية ولغات كثيرة أخرى إلى قطع أكثر. تعتمد الفجوة على المُجزِّئ، وقد ضاقت في المُجزِّئات الأحدث، لكنها لم تختفِ.
  • الكود يستهلك توكنات على المسافات البادئة والأقواس والعوامل والأسماء الطويلة، فكثيرًا ما يكلّف الملف توكنات أكثر مما يوحي به عدد كلماته.
  • الأرقام والروابط والسلاسل غير المألوفة مثل المعرّفات وقيم hash تميل إلى التقسيم إلى توكنات صغيرة كثيرة.

لماذا تهم التوكنات

التكلفة. تحاسب واجهات API لكل توكن، بأسعار منفصلة للتوكنات التي ترسلها والتوكنات التي يكتبها النموذج. وفي المحادثة، تُرسل المحادثة كلها مجددًا مع كل رسالة جديدة، فتكلّف المحادثة الطويلة أكثر لكل رسالة من القصيرة.

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

السرعة. يُنتَج الرد توكنًا بعد آخر، فيستغرق الرد الأطول وقتًا أطول بالتناسب.

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

ما هي نافذة السياق؟

نافذة السياق هي الحد الأقصى من التوكنات الذي يستطيع النموذج أخذه في الحسبان في طلب واحد. تخيّلها ذاكرة العمل لدى النموذج: كل ما يمكنه استخدامه لكتابة رده يجب أن يتسع داخلها دفعة واحدة، ومن ذلك:

  • موجّه النظام، أي تعليمات التطبيق وتعليماتك
  • المحادثة حتى الآن، كل رسالة من المستخدم وكل رد
  • الملفات المرفقة، والمستندات الملصوقة، ونتائج البحث أو الأدوات
  • الرد الذي يُكتب

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

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

ماذا يحدث عندما تطول المحادثة

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

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

العمل ضمن نافذة السياق

ابدأ محادثة جديدة لكل مهمة. المحادثة الجديدة برسالة أولى واضحة تتفوق عادةً على محادثة طويلة تنقّلت بين عدة مواضيع.

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

المتابعة في محادثة جديدة
Fill in
هذه المحادثة بدأت تطول. اكتب ملخّصًا ألصقه في محادثة جديدة لمتابعة العمل. ضمّنه: الهدف، والقرارات التي اتخذناها وأسبابها، والنسخة الحالية من مخطط قاعدة البيانات، والأسئلة المفتوحة. اجعل الملخّص أقل من 200 كلمة، دون احتساب مخطط قاعدة البيانات نفسه.
Try it
Example replyReplies vary between models and runs.

الهدف: قاعدة بيانات لتطبيق مكتبة صغيرة، مخزّنة في SQLite.

القرارات:

  • للإعارات جدول خاص بها، حتى يُحفظ سجل الإعارة كاملًا.
  • يُعدّ الكتاب متاحًا عندما لا تكون له إعارة قيمة returned_at فيها فارغة.

المخطط الحالي:

CREATE TABLE books (id INTEGER PRIMARY KEY, title TEXT NOT NULL, author TEXT NOT NULL);
CREATE TABLE members (id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT UNIQUE);
CREATE TABLE loans (
  id INTEGER PRIMARY KEY,
  book_id INTEGER NOT NULL REFERENCES books(id),
  member_id INTEGER NOT NULL REFERENCES members(id),
  loaned_at TEXT NOT NULL,
  returned_at TEXT
);

الأسئلة المفتوحة:

  • هل نحتاج إلى غرامات التأخير؟
  • هل يجب أن تتتبّع المكتبة عدة نسخ من الكتاب نفسه؟

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

ضع السؤال بعد المادة الطويلة، وأعد ذكر ما يهم. عندما تلصق مستندًا طويلًا، اطرح سؤالك في النهاية، بعده، وكرر القيود الأساسية هناك. هكذا تكون التعليمة بجوار النقطة التي يبدأ منها النموذج الكتابة.

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

Fill in
سأرسل إليك مستندًا طويلًا على 3 أجزاء. بعد كل جزء، رد فقط بعبارة "تم استلام الجزء N من 3" ولا شيء غيرها. لا تلخّص ولا تجب عن أي شيء حتى أطرح سؤالي. الجزء 1 من 3: """ [الصق الجزء 1] """
Try it
Example replyReplies vary between models and runs.

تم استلام الجزء 1 من 3

عُدّ التوكنات عندما يهم ذلك. إذا كنت تبني باستخدام واجهة API، فعُدّ قبل أن ترسل. مكتبة tiktoken مفتوحة المصدر من OpenAI تجزّئ النص بمُجزِّئات OpenAI، وواجهة Anthropic فيها نقطة نهاية لعدّ التوكنات. الأعداد التي يعطيها مُجزِّئ مزوّد واحد ليست إلا تقديرًا لمُجزِّئ مزوّد آخر.

import tiktoken

enc = tiktoken.get_encoding("o200k_base")  # one of OpenAI's tokenizers
tokens = enc.encode("Tokenization isn't magic.")
print(len(tokens))
print([enc.decode([t]) for t in tokens])

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

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

ما هو التوكن في الذكاء الاصطناعي؟

التوكن (token) هو وحدة النص التي يقرؤها النموذج اللغوي ويكتبها. قد يكون كلمة شائعة كاملة، أو جزءًا من كلمة أطول، أو علامة ترقيم، أو مسافة. قبل أن يرى النموذج موجّهك، يقسّمه برنامج يُسمّى المُجزِّئ (tokenizer) إلى توكنات ويحوّل كل واحد منها إلى رقم، ثم يولّد النموذج رده توكنًا بعد توكن.

كم كلمة في 1,000 توكن؟

في الإنجليزية، القاعدة التقريبية الشائعة هي نحو أربعة أحرف لكل توكن، أي قرابة 750 كلمة لكل 1,000 توكن. الرقم الحقيقي يعتمد على مُجزِّئ النموذج وعلى النص. الكود والأرقام ولغات كثيرة غير الإنجليزية، ومنها العربية، تستهلك توكنات أكثر للمحتوى نفسه.

ما هي نافذة السياق؟

نافذة السياق (context window) هي الحد الأقصى من التوكنات الذي يستطيع النموذج أخذه في الحسبان في طلب واحد. يجب أن تتسع لموجّه النظام، والمحادثة حتى الآن، وأي ملفات مرفقة أو نتائج أدوات، والرد الذي يكتبه النموذج. كل ما يقع خارجها غير موجود بالنسبة إلى النموذج.

ماذا يحدث عندما تتجاوز المحادثة نافذة السياق؟

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

هل يتذكر ChatGPT أو Claude محادثاتي السابقة؟

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

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن