# أساسيات الدردشة

نماذج الدردشة هي نماذج محادثة يمكنك إرسال رسالة إليها واستلام رد. معظم نماذج اللغة منذ منتصف عام 2023 هي نماذج دردشة وقد يُشار إليها بنماذج "التعليم" أو "المُحسَّنة بالتعليم". النماذج التي لا تدعم الدردشة غالبًا ما يُشار إليها بنماذج "الأساسية" أو "المسبقة التدريب".

النماذج الأكبر والأحدث عادةً ما تكون أكثر قدرة، لكن النماذج المتخصصة في مجالات معينة (النصوص الطبية، النصوص القانونية، اللغات غير الإنجليزية، إلخ) يمكنها غالبًا أن تتفوق على هذه النماذج الأكبر. جرّب لوحات الصدارة مثل [OpenLLM](https://hf.co/spaces/HuggingFaceH4/open_llm_leaderboard) و[LMSys Chatbot Arena](https://chat.lmsys.org/?leaderboard) لمساعدتك في تحديد أفضل نموذج يناسب حالتك.

يُظهر لك هذا الدليل كيفية تحميل نماذج الدردشة بسرعة في Transformers من سطر الأوامر، وكيفية بناء وتنسيق محادثة، وكيفية الدردشة باستخدام [TextGenerationPipeline](/docs/transformers/main/ar/main_classes/pipelines#transformers.TextGenerationPipeline).

## واجهة سطر الأوامر للدردشة

بعد أن [ثبّتت Transformers](./installation)، يمكنك الدردشة مع نموذج مباشرةً من سطر الأوامر. يُطلق الأمر أدناه جلسة تفاعلية مع نموذج، مع سرد أوامر أساسية قليلة في بداية الجلسة.

> بالنسبة للأوامر التالية، يرجى التأكد من أن [`transformers serve` قيد التشغيل](./serve-cli/serving).

```bash
transformers chat Qwen/Qwen2.5-0.5B-Instruct
```

    

يمكنك تشغيل واجهة سطر الأوامر بأعلام `generate` اختيارية، بالصيغة `arg_1=value_1 arg_2=value_2 ...`

```bash
transformers chat Qwen/Qwen2.5-0.5B-Instruct do_sample=False max_new_tokens=10
```

للاطلاع على القائمة الكاملة للخيارات، نفّذ الأمر أدناه.

```bash
transformers chat -h
```

يُنفَّذ الدردشة فوق [AutoClass](./model_doc/auto)، مستخدماً أدوات من [text generation](./llm_tutorial) و[chat](./chat_templating). ويعتمد في جوهره على واجهة سطر الأوامر `transformers serve` ([التوثيق](./serve-cli/serving)).

## TextGenerationPipeline

[TextGenerationPipeline](/docs/transformers/main/ar/main_classes/pipelines#transformers.TextGenerationPipeline) هي فئة عالية المستوى لتوليد النص مع "وضع المحادثة". يتم تفعيل وضع المحادثة عند اكتشاف نموذج محادثة، وأن يكون موجه المحادثة [منسقًا بشكل صحيح](./llm_tutorial#prompt-format).

تستقبل نماذج المحادثة قائمةً بالرسائل (سجل المحادثة) كمدخل. كل رسالة هي قاموس يحتوي على مفتاحَي `role` و`content`. لبدء المحادثة، أضف رسالة واحدة بدور `user`. كما يمكنك اختيارياً تضمين رسالة `system` لتوجيه النموذج حول كيفية التصرف.

```py
chat = [
    {"role": "system", "content": "You are a helpful science assistant."},
    {"role": "user", "content": "Hey, can you explain gravity to me?"}
]
```

أنشئ [TextGenerationPipeline](/docs/transformers/main/ar/main_classes/pipelines#transformers.TextGenerationPipeline) ومرّر `chat` إليه. بالنسبة للنماذج الكبيرة، يساعد تعيين [device_map="auto"](./models#big-model-inference) في تحميل النموذج بشكل أسرع ويضعه تلقائياً على أسرع جهاز متاح.

```py
import torch
from transformers import pipeline

pipeline = pipeline(task="text-generation", model="HuggingFaceTB/SmolLM2-1.7B-Instruct", dtype="auto", device_map="auto")
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])
```

إذا نجح هذا، يجب أن ترى ردًا من النموذج! إذا كنت ترغب في مواصلة المحادثة، فأنت بحاجة إلى تحديث سجل المحادثة برد النموذج. يمكنك القيام بذلك إما بإضافة النص إلى `chat` (باستخدام دور `assistant`)، أو بقراءة `response[0]["generated_text"]`، الذي يحتوي على سجل المحادثة الكامل، بما في ذلك أحدث رد.

بمجرد حصولك على استجابة النموذج، يمكنك متابعة المحادثة عن طريق إضافة رسالة `user` جديدة إلى سجل المحادثة.

```py
chat = response[0]["generated_text"]
chat.append(
    {"role": "user", "content": "Woah! But can it be reconciled with quantum mechanics?"}
)
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])
```

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

## الأداء واستهلاك الذاكرة

تحمّل مكتبة Transformers النماذج بدقة `float32` الكاملة افتراضياً، ولنموذج بحجم 8B، يتطلب ذلك حوالي 32GB من الذاكرة! استخدم الحجة `torch_dtype="auto"`، والتي تستخدم عادةً `bfloat16` للنماذج التي تم تدريبها بهذه الدقة، لتقليل استهلاك الذاكرة.

> [!TIP]
> راجع وثائق [Quantization](./quantization/overview) لمزيد من المعلومات حول أنظمة الكمية المختلفة المتاحة.

لخفض استهلاك الذاكرة بشكل أكبر، يمكنك تكميم النموذج إلى 8 بت أو 4 بت باستخدام [bitsandbytes](https://hf.co/docs/bitsandbytes/index). أنشئ [BitsAndBytesConfig](/docs/transformers/main/ar/main_classes/quantization#transformers.BitsAndBytesConfig) بإعدادات التكميم المطلوبة وقم بتمريره إلى معامل `model_kwargs` الخاص بالخطوط الأنابيب. يكمم المثال أدناه النموذج إلى 8 بت.

```py
from transformers import pipeline, BitsAndBytesConfig

quantization_config = BitsAndBytesConfig(load_in_8bit=True)
pipeline = pipeline(task="text-generation", model="meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", model_kwargs={"quantization_config": quantization_config})
```

بشكل عام، توجد علاقة طردية مباشرة بين حجم النموذج وأداؤه. النماذج الأكبر حجمًا تكون أبطأ، فضلًا عن أنها تتطلب ذاكرة أكبر، لأن كل معامل نشط يجب قراءته من الذاكرة لكل رمز يتم توليده. يُعد هذا عنقَ زجاجة في توليد النصوص بواسطة نماذج اللغة الكبيرة (LLM)، والخيارات الرئيسية لتحسين سرعة التوليد هي إما تكميم النموذج (quantize) أو استخدام أجهزة ذات عرض نطاق ذاكرة أعلى. إضافة المزيد من قوة الحوسبة لا تُسهم بشكل جوهري في ذلك.

يمكنك أيضًا تجربة تقنيات مثل [التفكيك التخميني](./assisted_decoding#speculative-decoding)، حيث يولّد نموذج أصغر رموزًا مرشحة يتم التحقق منها بواسطة النموذج الأكبر. إذا كانت الرموز المرشحة صحيحة، يمكن للنموذج الأكبر توليد أكثر من رمز في كل مرة. وهذا يخفف بشكل كبير من عنق الزجاجة في عرض النطاق الترددي ويحسن سرعة التوليد.

> [!TIP]
تتميز نماذج مزيج الخبراء (MoE) مثل [Mixtral](./model_doc/mixtral) و[Qwen2MoE](./model_doc/qwen2_moe) و[GPT-OSS](./model_doc/gpt_oss) بعدد كبير من المعاملات، لكنها تُفعّل نسبة صغيرة منها فقط لتوليد كل رمز. ونتيجةً لذلك، تتطلب نماذج MoE عادةً عرض نطاق ذاكرة أقل بكثير، وقد تكون أسرع من نموذج لغة كبير عادي بنفس الحجم. ومع ذلك، فإن تقنيات مثل فك الترميز التخميني (speculative decoding) غير فعالة مع نماذج MoE، لأن عدد المعاملات المُفعّلة يزداد مع كل رمز تخميني جديد.

