البدء مع ALLaM-7B-Instruct-preview

AI Bot
بواسطة AI Bot ·

جاري تحميل مشغل تحويل النص إلى كلام الصوتي...

ALLaM-7B-Instruct-preview هو نموذج لغة كبير قوي يضم 7 مليارات معامل، طورته الهيئة السعودية للبيانات والذكاء الاصطناعي (سدايا) عبر المركز الوطني للذكاء الاصطناعي. تم تدريبه خصيصاً للغتين العربية والإنجليزية، مما يجعله أداة قيمة للتطبيقات ثنائية اللغة. يرشدك هذا البرنامج التعليمي عبر إعداد واستخدام النموذج مباشرة في Python ويشرح كيفية التفاعل معه من JavaScript عبر نقطة نهاية API مستضافة.

مقدمة إلى علام

النموذج جزء من سلسلة علام، المصممة للنهوض بتقنية اللغة العربية. هذا الإصدار المحدد (ALLaM-7B-Instruct-preview) مضبوط للتعليمات، مما يعني أنه محسن لاتباع تعليمات المستخدم المقدمة في الطلبات. تم بناؤه باستخدام بنية محول انحداري ذاتي ويدعم طول سياق يبلغ 4096 رمزاً.

الاستخدام مع Python باستخدام transformers

الطريقة الأساسية للتفاعل مع ALLaM هي من خلال مكتبة transformers من Hugging Face في Python.

الإعداد

  1. تثبيت المكتبات: ستحتاج إلى transformers وtorch. يُوصى بشدة بوجود GPU يدعم CUDA للحصول على أداء معقول.

    pip install transformers torch
    # أو لدعم CUDA (تأكد من تطابق إصدار PyTorch مع إصدار CUDA):
    # pip install transformers torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # مثال لـ CUDA 11.8
  2. حساب Hugging Face (اختياري): اعتماداً على صلاحيات الوصول للنموذج، قد تحتاج لتسجيل الدخول إلى حساب Hugging Face. يمكنك تسجيل الدخول عبر CLI:

    huggingface-cli login

مثال على الكود

يقوم السكريبت التالي بتحميل النموذج والمُرمِّز، ويُعد طلب إدخال (بالعربية)، ويولد استجابة، ويطبعها.

# -*- coding: utf-8 -*-
"""
مثال على استخدام نموذج ALLaM-AI/ALLaM-7B-Instruct-preview من Hugging Face.
"""
 
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
 
# --- الإعداد ---
MODEL_NAME = "ALLaM-AI/ALLaM-7B-Instruct-preview"
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
print(f"استخدام الجهاز: {DEVICE}")
 
# --- تحميل النموذج والمُرمِّز ---
try:
    print(f"جاري تحميل النموذج: {MODEL_NAME}...")
    allam_model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
    print(f"جاري تحميل المُرمِّز: {MODEL_NAME}...")
    tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
    print("تم تحميل النموذج والمُرمِّز بنجاح.")
 
    allam_model = allam_model.to(DEVICE)
 
except Exception as e:
    print(f"خطأ في تحميل النموذج أو المُرمِّز: {e}")
    exit(1)
 
# --- إعداد الإدخال ---
messages = [
    {"role": "user", "content": "كيف أجهز كوب شاهي؟"},
]
 
# تطبيق قالب الدردشة
try:
    print("جاري تطبيق قالب الدردشة...")
    formatted_input_string = tokenizer.apply_chat_template(messages, tokenize=False)
    print(f"سلسلة الإدخال المنسقة:\n{formatted_input_string}")
 
    print("جاري ترميز الإدخال...")
    inputs = tokenizer(formatted_input_string, return_tensors='pt', return_token_type_ids=False)
    inputs = {k: v.to(DEVICE) for k, v in inputs.items()}
    print("تم إعداد الإدخال للنموذج.")
 
except Exception as e:
    print(f"خطأ في إعداد الإدخال: {e}")
    exit(1)
 
# --- توليد الاستجابة ---
print("جاري توليد الاستجابة...")
try:
    generation_params = {
        "max_new_tokens": 4096,
        "do_sample": True,
        "top_k": 50,
        "top_p": 0.95,
        "temperature": 0.6
    }
 
    with torch.no_grad():
        response_ids = allam_model.generate(**inputs, **generation_params)
 
    print("جاري فك ترميز الاستجابة...")
    decoded_response = tokenizer.batch_decode(response_ids, skip_special_tokens=True)[0]
 
    if decoded_response.startswith(formatted_input_string):
         final_output = decoded_response[len(formatted_input_string):].strip()
    else:
         final_output = decoded_response
 
    print("\n--- الاستجابة المولدة ---")
    print(final_output)
    print("--------------------------\n")
 
except Exception as e:
    print(f"خطأ أثناء التوليد أو فك الترميز: {e}")
    exit(1)
 
print("انتهى السكريبت بنجاح.")

تشغيل مثال Python

احفظ الكود أعلاه باسم allam_example.py وشغله من الطرفية:

python allam_example.py

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

الاستخدام من JavaScript (عبر API مستضاف)

تشغيل نموذج بـ 7 مليارات معامل مثل ALLaM مباشرة في بيئة JavaScript قياسية (مثل متصفح ويب أو Node.js) باستخدام مكتبات مثل @xenova/transformers غير ممكن عموماً بسبب حجم النموذج الكبير ومتطلبات الموارد العالية.

الطريقة العملية للتفاعل مع هذا النموذج من JavaScript هي باستدعاء نقطة نهاية API حيث يستضاف النموذج على بنية تحتية خلفية مناسبة. منصات مثل Hugging Face Spaces أو نقاط نهاية الاستدلال المخصصة تتيح نشر النموذج وكشفه عبر API.

مثال على كود عميل JavaScript

/**
 * مثال على استخدام JavaScript للتفاعل مع نموذج ALLaM المستضاف على Hugging Face Spaces.
 */
 
// !!! استبدل هذا بعنوان URL الفعلي لنقطة نهاية API الخاصة بك !!!
const HF_SPACE_API_URL = "https://YOUR_USERNAME-YOUR_SPACE_NAME.hf.space/generate";
 
const userPrompt = "كيف أجهز كوب شاهي؟";
 
async function generateTextViaHFSpace(promptText) {
  console.log(`إرسال الطلب إلى HF Space: "${promptText}" على ${HF_SPACE_API_URL}`);
 
  if (HF_SPACE_API_URL.includes("YOUR_USERNAME-YOUR_SPACE_NAME")) {
    console.error("خطأ: يرجى استبدال HF_SPACE_API_URL بعنوان URL الفعلي لنقطة النهاية.");
    return null;
  }
 
  try {
    const response = await fetch(HF_SPACE_API_URL, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify({ prompt: promptText }),
    });
 
    if (!response.ok) {
      throw new Error(`خطأ HTTP! الحالة: ${response.status}`);
    }
 
    const data = await response.json();
    console.log("تم استلام الاستجابة من HF Space.");
    return data.generated_text || data.response || data;
 
  } catch (error) {
    console.error("خطأ في استدعاء Hugging Face Space API:", error);
    throw error;
  }
}
 
// التنفيذ
(async () => {
  try {
    const generatedText = await generateTextViaHFSpace(userPrompt);
    if (generatedText !== null) {
        console.log("\n--- الاستجابة المولدة (من HF Space) ---");
        console.log(generatedText);
        console.log("------------------------------------------\n");
    }
  } catch (error) {
    console.error("فشل الحصول على التوليد من Hugging Face Space.");
  }
})();

متطلب: يتطلب هذا النهج من JavaScript استضافة نموذج ALLaM خلف API أولاً.

استضافة ALLaM للوصول عبر API (Hugging Face Spaces)

توفر Hugging Face Spaces منصة لاستضافة تطبيقات التعلم الآلي، بما في ذلك تقديم النماذج عبر APIs. إليك نظرة عامة مفاهيمية لنشر ALLaM على Space:

  1. إنشاء Space جديد: اذهب إلى Hugging Face وأنشئ Space جديداً
  2. تحديد التبعيات: أنشئ ملف requirements.txt
  3. إنشاء تطبيق Backend: استخدم FastAPI لإنشاء نقطة نهاية API
  4. إعداد Space: تأكد من التكوين الصحيح
  5. النشر: ارفع ملفاتك إلى مستودع Space

طلبات النظام

تم تحسين نموذج ALLaM للعمل بدون طلب نظام افتراضياً. ومع ذلك، يمكنك توفير واحد إذا لزم الأمر.

أمثلة:

  • العربية: {"role": "system", "content": "أنت علام، مساعد ذكاء اصطناعي مطور من الهيئة السعودية للبيانات والذكاء الاصطناعي..."}
  • الإنجليزية: {"role": "system", "content": "You are ALLaM, a bilingual English and Arabic AI assistant."}

الاعتبارات الأخلاقية

تذكر أن نماذج اللغة الكبيرة مثل ALLaM قد تنتج أحياناً مخرجات غير صحيحة أو متحيزة. من الضروري تطبيق تدابير السلامة وتقييم ملاءمة النموذج لتطبيقك المحدد.


المرجع: بطاقة نموذج ALLaM-AI/ALLaM-7B-Instruct-preview على Hugging Face.


هل تريد قراءة المزيد من الدروس التعليمية؟ تحقق من أحدث درس تعليمي لدينا على أفضل الممارسات للنسخ الاحتياطي واستعادة قواعد البيانات.

ناقش مشروعك معنا

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

دعنا نجد أفضل الحلول لاحتياجاتك.

مقالات ذات صلة

البدء مع ALLaM-7B-Instruct-preview

تعلم كيفية استخدام نموذج ALLaM-7B-Instruct-preview مع Python، وكيفية التفاعل معه من JavaScript عبر واجهة برمجة تطبيقات مستضافة (مثل Hugging Face Spaces).

8 د قراءة·