كيف تبني روبوت محادثة باستخدام LLM: من الصفر إلى بوت يعمل
كل ما تحتاجه لبناء روبوت محادثة حقيقي يعمل بنموذج لغوي كبير. يغطي هذا المقال اختيار النموذج، وهندسة موجّهات النظام، وذاكرة المحادثة، والتكامل مع API باستخدام Python، والأخطاء الشائعة التي تُسقط البوتات في بيئة الإنتاج، وكيفية الاختبار والتوسّع دون استنزاف ميزانية API.
كان بناء روبوت محادثة يعني في الماضي سنوات من أبحاث معالجة اللغة الطبيعية وكمًّا هائلًا من بيانات التدريب. أما اليوم، فيمكنك تشغيل بوت محادثة يعمل خلال مساء واحد عن طريق استدعاء API لنموذج لغوي كبير. الجزء الصعب لم يعد جعله يردّ، بل جعله يردّ بشكل جيد، وبثبات، دون أن ينحرف عن الموضوع أو يختلق معلومات. يأخذك هذا المقال خلال كل طبقة من هذه المشكلة، بدءًا من اختيار النموذج المناسب وصولًا إلى تصميم موجّهات النظام التي تصمد في بيئة الإنتاج.
ما الذي يفعله LLM فعليًا في روبوت المحادثة
يتعامل معظم الناس مع النماذج اللغوية الكبيرة كصندوق أسود: تُرسل نصًا فيعود إليك نص. لكن فهم ما يحدث داخلها يغيّر طريقة بنائك للبوت، والأهم أنه يغيّر طريقة تصحيح الأخطاء عندما تسوء الأمور.
التوكنات ونوافذ السياق والذاكرة
لا يقرأ LLM الكلمات، بل يقرأ التوكنات، وهي قطع من النص يبلغ طول كل منها نحو 3 إلى 4 أحرف. لكل نموذج نافذة سياق: أقصى عدد من التوكنات يستطيع معالجتها في طلب واحد. يتعامل GPT-4o مع 128,000 توكن، بينما يقف Llama 2 7B Chat عند 4,096. هذا الفرق مهم جدًا عندما تبني محادثة متعددة الأدوار.
💡 قاعدة عامة: 1,000 توكن تعادل تقريبًا 750 كلمة. تصل المحادثة الطويلة إلى حد السياق أسرع مما يتوقعه معظم المطوّرين.
عندما تمتلئ نافذة السياق، لا يستطيع النموذج تذكّر ما سبق. وهذا ليس خللًا، بل هكذا تعمل المحوّلات (transformers). كود تطبيقك هو المسؤول عن الذاكرة، لا النموذج.
المحادثات عديمة الحالة مقابل المحادثات ذات الحالة
هناك أمر يفاجئ كل من يبني للمرة الأولى: نماذج LLM عديمة الحالة. كل استدعاء API مستقل تمامًا. لا يعرف النموذج شيئًا عمّا قيل قبل خمس رسائل، ما لم تُدرج تلك الرسائل صراحةً في الطلب الحالي.
هذا يعني أن "ذاكرة" روبوت المحادثة مسؤوليتك وحدك. أنت تحتفظ بقائمة من الرسائل، وتمرّر القائمة كاملة في كل استدعاء. النموذج يرى السياق، لا السجل. هذه الحقيقة المعمارية الواحدة تغيّر كل شيء في طريقة بناء تطبيق روبوت المحادثة.
لماذا يهم هذا في البنية المعمارية
إذا تجاهلت هذا وخزّنت حالة المحادثة في الواجهة الأمامية فقط، فستحصل على روبوت محادثة يفقد كل ذاكرته عند تحديث الصفحة. وإذا خزّنت سجلًا كبيرًا دون تقليم، فستصطدم بحدود السياق في الجلسات الطويلة. الأسلوب الصحيح هو مخزن جلسات من جهة الخادم يحفظ قائمة الرسائل، ويقلّمها بذكاء، ويرسل الجزء المناسب منها إلى النموذج في كل استدعاء.
اختيار LLM المناسب
يحدد النموذج الذي تختاره سقف قدرات روبوت المحادثة. لا توجد إجابة واحدة صحيحة، لكن هناك مقايضات واضحة تستحق الفهم قبل أن تلتزم باتجاه معين للبنية التحتية.
النماذج مفتوحة المصدر مقابل النماذج المملوكة
مفتوح المصدر
مملوك
التكلفة
مجاني أو استضافة رخيصة
الدفع مقابل كل توكن
الخصوصية
تبقى البيانات على خوادمك
تُرسل البيانات إلى المزوّد
الأداء
يختلف حسب حجم النموذج
عادةً أقوى
التحكم
وصول كامل إلى الضبط الدقيق
عبر API فقط
وقت الإعداد
يحتاج إلى بنية تحتية
جاهز خلال دقائق
في النماذج الأولية، تتفوق النماذج المملوكة من حيث السرعة. يوصلك GPT-5 وClaude 4 Sonnet إلى عرض تجريبي يعمل بسرعة. أما في بيئة الإنتاج ذات متطلبات الخصوصية الصارمة أو الحجم الكبير جدًا، فإن نماذج مثل Llama 4 Maverick Instruct أو Mistral 7B v0.1 التي تعمل على بنيتك التحتية الخاصة تخفّض التكاليف بشكل ملحوظ.
النماذج التي تستحق المعرفة
GPT-5: الأفضل في الاستدلال العام، وأعلى تكلفة للتوكن
Claude 4 Sonnet: متميز في اتباع التعليمات المعقدة متعددة الأجزاء
Gemini 2.5 Flash: سريع، متعدد الوسائط، ومناسب للبوتات عالية الإنتاجية
روبوت المحادثة يتكوّن من ثلاثة عناصر تعمل معًا: مخزن الرسائل، وموجّه النظام، واستدعاء API. أتقن هذه الثلاثة، وكل ما عداها مجرد تفاصيل تلميع.
تصميم موجّه النظام
موجّه النظام هو شخصية روبوت المحادثة وقواعد عمله. يعمل قبل كل محادثة ويحدد الإطار لكل الردود. هنا تنجح معظم مشاريع روبوتات المحادثة أو تفشل.
موجّه نظام ضعيف: "You are a helpful assistant."
موجّه نظام قوي:
You are a customer support agent for a SaaS product called Orbit.
You only answer questions about Orbit's features, pricing, and troubleshooting.
If a user asks about something outside Orbit, politely redirect them.
Keep responses under 150 words unless the user explicitly asks for more detail.
Never make up pricing figures. If you do not know the answer, say so clearly
and offer to escalate to a human agent.
الفرق يكمن في الدقة. النموذج يحتاج إلى قيود، لا إلى دور فقط. القيود تنتج سلوكًا ثابتًا ويمكن التنبؤ به. أما الأدوار الغامضة فتنتج مخرجات غامضة.
💡 اختبر موجّه النظام بأن تطلب من البوت أن يفعل أشياء يجب أن يرفضها. الموجّه الذي يصمد أمام المدخلات العدائية سيصمد في بيئة الإنتاج.
اكتب موجّه النظام كما تكتب الوصف الوظيفي لموظف حرفي للغاية يفعل ما تقوله تمامًا ولا يزيد شيئًا. كل جملة تضيف قيدًا هي جملة تقلل من عدم القدرة على التنبؤ.
إدارة سجل الرسائل
مخزن رسائلك هو قائمة من الكائنات، لكل منها دور (system أو user أو assistant) ومحتوى. تبدو المحادثة النموذجية هكذا:
messages = [
{"role": "system", "content": "You are a helpful support agent..."},
{"role": "user", "content": "How do I reset my password?"},
{"role": "assistant", "content": "To reset your password, click..."},
{"role": "user", "content": "I do not see that button anywhere."},
]
تضيف كل رسالة جديدة من المستخدم وكل رد من المساعد إلى هذه القائمة. وفي كل استدعاء API ترسل القائمة كاملة. يقرأ النموذج المحادثة بأكملها ويولّد الرد التالي في سياقها.
استراتيجية التقليم: عندما تكبر القائمة، قلّمها قبل الإرسال لتجنب أخطاء نافذة السياق. هناك ثلاثة خيارات:
النافذة المنزلقة: احذف أقدم أزواج المستخدم والمساعد مع الاحتفاظ دائمًا بموجّه النظام.
التلخيص: استخدم استدعاء LLM منفصلًا لضغط الرسائل القديمة في ملخص قصير، ثم أدرج هذا الملخص كرسالة شبه وهمية.
حد ثابت لعدد الأدوار: اسمح بإرسال آخر N من أدوار المحادثة فقط في الحمولة.
النافذة المنزلقة هي الأبسط في التنفيذ وتعمل في معظم الحالات. أما التلخيص فيحافظ على أكبر قدر من السياق، لكن بثمن استدعاءات API إضافية وزمن استجابة أطول.
درجة الحرارة والمعاملات
درجة الحرارة تتحكم في العشوائية. عند 0.0، تكون الردود حتمية وغالبًا متكررة. عند 1.0، تكون إبداعية ومعرضة للانحراف عن الموضوع. وفي معظم روبوتات المحادثة، يكون النطاق الصحيح من 0.3 إلى 0.7.
المعامل
ما الذي يتحكم فيه
القيمة المعتادة
temperature
العشوائية والإبداع
من 0.3 إلى 0.7
max_tokens
سقف صارم لطول الرد
من 512 إلى 2048
top_p
اتساع أخذ عينات التوكنات
0.9
frequency_penalty
يعاقب العبارات المتكررة
من 0.1 إلى 0.3
بناء الواجهة الخلفية باستخدام Python
الكود الفعلي أبسط مما توحي به معظم الدروس التعليمية. إليك تنفيذًا مبسّطًا يعمل باستخدام عميل OpenAI، وهو متوافق مع معظم مزودي LLM.
إعداد عميل API
pip install openai
from openai import OpenAI
client = OpenAI(api_key="your-api-key-here")
بالنسبة للنماذج مفتوحة المصدر التي تُقدَّم عبر API محلي (مثل Ollama أو LM Studio)، تغيّر معامل base_url. يبقى بقية الكود كما هو، وهذه إحدى الفوائد الحقيقية لمعيار API المتوافق مع OpenAI الذي اعتمده معظم المزودين.
هذه هي الحلقة الأساسية. كل روبوت محادثة في الإنتاج هو تنويعة على هذا النمط، مع منطق إضافي يُضاف فوقه.
بث الردود
يتحمل المستخدمون الانتظار للردود بشكل أفضل كثيرًا عندما يرون النص يظهر في الوقت الفعلي. البث مدمج في كل واجهات LLM الرئيسية، ويستحق التنفيذ منذ اليوم الأول:
stream = client.chat.completions.create(
model="gpt-5",
messages=messages,
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
ابعث الرد إلى واجهتك الأمامية عبر Server-Sent Events (SSE) أو WebSockets. ينخفض زمن الاستجابة المُدرَك من عدة ثوانٍ إلى ما يقارب الفورية، ويبلغ المستخدمون عن رضا أعلى بكثير مع الردود المتدفقة مقارنةً بانتظار الرد الكامل.
كيفية استخدام نماذج LLM على PicassoIA
تستضيف PicassoIA أكثر من 65 نموذجًا لغويًا كبيرًا متاحًا مباشرةً في المتصفح، دون إعداد API، ودون تهيئة للفوترة، ودون أي بنية تحتية. وهذا يجعل اختبار موجّهات النظام ومنطق روبوت المحادثة عمليًا قبل كتابة أي سطر من الكود.
خطوة بخطوة: اختبر موجّه نظام روبوت المحادثة على PicassoIA
افتح صفحة النموذج الذي تريد اختباره. ابدأ بنموذج GPT-4o أو Claude 4 Sonnet لاختبار القدرات العامة.
الصق موجّه النظام في حقل رسالة النظام. استخدم النسخة الإنتاجية الدقيقة، لا مسودة مبسّطة.
أرسل رسائل اختبار تغطي حالات الاستخدام المعتادة والحالات الحدّية والمدخلات العدائية مثل "تجاهل كل التعليمات السابقة".
حسّن الموجّه تدريجيًا: عدّل الدقة، وأضف تعليمات الرفض، وضيّق النطاق. أعد التحميل وأعد الاختبار بعد كل تغيير.
قارن بين النماذج: شغّل مجموعة الاختبار نفسها على Llama 4 Maverick Instruct وDeepSeek R1 لترى أيهما يتعامل مع حالتك بشكل أفضل، دون دفع تكاليف استدعاءات API أثناء التطوير.
ثبّت إعدادك: دوّن النموذج الفائز، ونص موجّه النظام، وإعداد درجة الحرارة قبل أن تبدأ البرمجة.
💡 استخدم Kimi K2 Instruct عندما يحتاج روبوت المحادثة إلى كتابة الكود أو مراجعته. واستخدم DeepSeek R1 عندما يحتاج إلى التفكير في المشكلات متعددة الخطوات خطوةً خطوة.
الأخطاء الشائعة التي تُفسد روبوتات المحادثة
تجاوز السياق دون خطة احتياطية
أكثر أنماط الفشل شيوعًا في روبوتات المحادثة الإنتاجية هو الوصول إلى حد نافذة السياق دون كود للتعامل معه. عندها يُطلق API خطأ context_length_exceeded، فيتعطل روبوت المحادثة أو يعرض صفحة خطأ عامة. نفّذ دائمًا استراتيجية تقليم أو تلخيص قبل الإطلاق.
قاعدة بسيطة: إذا اقترب سجل محادثتك من 80% من حد السياق للنموذج بحسب عدد التوكنات، فابدأ بحذف أقدم الرسائل غير الخاصة بالنظام من قائمة السجل.
مكتبات مثل tiktoken (لنماذج OpenAI) تتيح لك حساب التوكنات بدقة قبل كل استدعاء API. استخدمها.
موجّهات النظام الغامضة
التعليمات الغامضة تنتج سلوكًا غامضًا. هناك ثلاثة أنماط يجب تجنبها:
عامة جدًا: "Be helpful and friendly." هذا لا يخبر النموذج بشيء عمّا يجب أن يفعله أو لا يفعله.
طويلة جدًا: موجّه نظام من 2,000 كلمة يستهلك السياق في كل استدعاء، وغالبًا ما يتناقض مع نفسه بطرق تربك النموذج.
دون تعليمات للرفض: إذا لم تخبر البوت بما يجب أن يرفضه، فسيحاول الإجابة عن كل شيء، بما في ذلك الأشياء التي لا ينبغي له الإجابة عنها إطلاقًا.
تجاهل تكاليف التوكنات في الإنتاج
على نطاق واسع، تكلّف كل توكن غير ضروري مالًا. موجّه نظام أطول من اللازم بمقدار 800 توكن يكلّفك تلك التوكنات الـ 800 في كل استدعاء API. وعند 10,000 محادثة يوميًا، يعني ذلك 8 ملايين توكن إدخال إضافي يوميًا، تُحتسب وفق سعر الإدخال للنموذج. راجع موجّه النظام بصرامة قبل الإطلاق، واحذف أي تعليمات مكررة أو مسهبة.
نشر روبوت المحادثة وتوسيعه
حدود المعدل والتكاليف
لكل API لنماذج LLM حدود معدل: طلبات في الدقيقة، وتوكنات في الدقيقة، وفي بعض الحالات حدود يومية. خطّط لهذه الحدود قبل الإطلاق. عند حركة المرور المنخفضة، تكون واجهات API المملوكة الخيار الصحيح من حيث الجودة والسرعة. أما عند حركة المرور المرتفعة، فغالبًا ما يصبح استضافة نموذج مفتوح المصدر مثل Llama 4 Maverick Instruct ذاتيًا أرخص بشكل ملحوظ.
مقارنة تقريبية للتكاليف لروبوت محادثة يضم 10,000 محادثة يوميًا بمتوسط 500 توكن إخراج لكل منها:
يستحق GPT-4o Mini تقييمًا جادًا في حالات الاستخدام عالية الحجم التي لا تحتاج فيها بالضرورة إلى القدرة الكاملة لنموذج GPT-4o. فكثير من مهام روبوتات المحادثة، مثل الإجابة عن الأسئلة الشائعة أو التوجيه البسيط، لا تحتاج إلى نموذج متقدم.
مراقبة جودة الردود
الإطلاق ليس النهاية. تحتاج إلى رؤية ما يقوله بوتك فعلًا للمستخدمين الحقيقيين. كحد أدنى، سجّل كل دور في المحادثة مع:
الطابع الزمني ومعرّف الجلسة
نص رسالة المستخدم
نص رد النموذج
زمن استجابة الرد بالمللي ثانية
عدد التوكنات للطلب الكامل
راجع عينة عشوائية من المحادثات يوميًا خلال الأسبوع الأول. ستلتقط أخطاء الموجّهات والهلوسة والحالات الحدّية التي لم تظهر أثناء الاختبار.
💡 ضع محفزات للمراجعة: إذا أرسل المستخدم عبارة مثل "هذا خطأ" أو "لقد اختلقت ذلك"، فضع علامة على هذه المحادثة للمراجعة اليدوية فورًا.
3 أشياء تضيفها بعد أن يعمل البوت
بمجرد أن يعمل روبوت المحادثة ويُنشر، تنقله هذه الإضافات الثلاث من عرض تجريبي إلى منتج:
1. التوليد المعزَّز بالاسترجاع (RAG): اربط بوتك بقاعدة بيانات متجهية لمستنداتك الخاصة. بدلًا من الاعتماد على بيانات تدريب النموذج، يسترجع البوت المقاطع ذات الصلة ويستخدمها كسياق قبل توليد الرد. بهذه الطريقة تبني روبوت محادثة يجيب بدقة عن أسئلة تخص منتجك أو سياساتك الداخلية أو قاعدة معارفك، دون اختلاق تفاصيل.
2. الضوابط الوقائية (Guardrails): أضف فحصًا ثانويًا يتحقق من مدخلات المستخدم ومخرجات البوت قبل أن يصل أي شيء إلى المستخدم. هذا يلتقط محاولات حقن الموجّهات، وانتهاكات السياسات، والردود الخارجة عن الموضوع قبل أن تصبح مرئية لجمهورك. طبقة قواعد بسيطة أو استدعاء ثانٍ لنموذج خفيف يعالج معظم الحالات.
3. مجموعة التقييم: اكتب مجموعة اختبار من 50 إلى 100 زوج من المدخلات والمخرجات المتوقعة تغطي حالات الاستخدام الأساسية لروبوت المحادثة. شغّلها تلقائيًا بعد كل تغيير في موجّه النظام. هذه هي الطريقة الوحيدة الموثوقة لالتقاط التراجعات قبل أن يصادفها المستخدمون. فالاختبار اليدوي بهذا الحجم لا يكون واقعيًا بعد الأسبوع الأول.
كيف تبني روبوت محادثة باستخدام LLM: نقطة البداية الحقيقية
البنية واضحة، والكود ليس معقدًا. ما يميّز روبوت المحادثة الذي يبهر الناس في العرض التجريبي عن الذي يعمل بموثوقية في الإنتاج هو التكرار. وتحديدًا: التكرار على موجّه النظام، واستراتيجية التقليم، واختيار النموذج، وإعداد المراقبة، وكل ذلك مدفوع ببيانات المحادثات الحقيقية.
لا يتطلب أي من هذا التكرار كتابة الكود أولًا. يمكنك إنجاز الجزء الأكثر قيمة منه، أي إيجاد النموذج المناسب وموجّه نظام يصمد فعلًا، داخل المتصفح قبل أن تفتح بيئة التطوير.
اكتب موجّه النظام الخاص بك. اختر نموذجًا. شاهد كيف يردّ فعلًا. اختبر الحالات الحدّية. اكسره عمدًا. ثم حسّنه. حلقة التكرار هذه هي المكان الذي تُبنى فيه الجودة الحقيقية لروبوت المحادثة، ويمكنك تنفيذ العملية كاملة على PicassoIA قبل أن تلتزم بأي استدعاء API أو سطر من الكود.
النماذج متاحة. أما روبوت المحادثة الخاص بك فلن يبني نفسه بنفسه.