Loading
Loading
نماذج اللغة الكبيرة (Large Language Models) هي القلب النابض لثورة AI الحالية. ChatGPT وClaude وGemini — كلها LLMs. لكن كيف تعمل فعلاً؟
LLM هو نموذج احتمالي يتنبأ بالكلمة التالية في سلسلة نصية، بناءً على تدريب على كميات ضخمة من النصوص.
لكن هذا التبسيط يُخفي عمقاً هائلاً. دعنا نفصّل.
في 2017، نشرت Google ورقة بحثية بعنوان "Attention is All You Need" — هذه الورقة غيّرت عالم AI إلى الأبد.
المكونات الأساسية لـ Transformer:
النص المدخل
↓
Tokenization (تقسيم النص لـ tokens)
↓
Embedding (تحويل كل token لمتجه رياضي)
↓
Positional Encoding (إضافة معلومات الترتيب)
↓
[Self-Attention → Feed Forward] × N layers
↓
Output Layer (احتمالات الكلمة التالية)
LLMs لا تقرأ الحروف أو الكلمات مباشرةً — تقرأ tokens.
Token هو مقطع نصي (قد يكون كلمة كاملة أو جزءاً من كلمة أو علامة ترقيم):
"artificial intelligence" → ["art", "ific", "ial", " intel", "lig", "ence"]
قاعدة التقدير:
Self-Attention هي آلية تسمح لكل token بـ"الانتباه" لكل token آخر في النص وحساب أهميته.
مثال:
"البنك يقع على ضفة النهر"
كلمة "البنك" هنا — هل تعني مؤسسة مالية أم ضفة نهر؟
Self-Attention تحل هذا اللبس: "البنك" ينتبه لـ "نهر" فيعطيه وزناً عالياً، فيفهم أن المقصود "ضفة".
الصيغة الرياضية (مُبسّطة):
Attention(Q, K, V) = softmax(QK^T / √dk) × V
LLMs تتدرّب على مرحلتين:
1. Pre-training:
2. Fine-tuning (RLHF):
GPT-2 (2019): 1.5B parameter
GPT-3 (2020): 175B parameter
GPT-4 (2023): ~1.8T parameter (تقدير)
Claude 3 Opus: ~2T parameter (تقدير)
لكن Scaling Laws تقول: بعد حجم معين، جودة البيانات والتدريب أهم من عدد الـ parameters.
LLMs تُولّد نصاً مقنعاً بناءً على الأنماط — لا تبحث في قاعدة بيانات حقيقية.
النتيجة: قد تُنتج معلومات خاطئة بثقة عالية — هذا يُسمى "Hallucination".
الحل: RAG (سنتعلمه في الدرس 4) — نُربط LLM بمصادر حقيقية.
Context Window هو أقصى عدد tokens يمكن للنموذج "رؤيته" في آنٍ واحد.
| النموذج | Context Window | |---------|---------------| | GPT-3.5 | 16K token | | GPT-4o | 128K token | | Claude 3.5 Sonnet | 200K token | | Gemini 1.5 Pro | 1M token |
خارج الـ Context Window = النموذج لا يتذكره.
import anthropic
import tiktoken # pip install tiktoken
client = anthropic.Anthropic()
# ─────────────────────────────────────────
# 1. فهم Tokenization
# ─────────────────────────────────────────
print("=" * 55)
print("1. Tokenization — كيف تُقسَّم النصوص")
print("=" * 55)
# tiktoken مكتبة OpenAI لحساب الـ tokens
# Claude يستخدم نظام مشابه
enc = tiktoken.encoding_for_model("gpt-4")
texts = [
"Artificial Intelligence",
"الذكاء الاصطناعي",
"Hello World",
"مرحبا بالعالم",
"Python is great for AI development",
]
for text in texts:
tokens = enc.encode(text)
print(f"\n'{text}'")
print(f" Tokens ({len(tokens)}): {tokens[:8]}{'...' if len(tokens) > 8 else ''}")
ratio = len(tokens) / len(text.split())
print(f" نسبة tokens/كلمة: {ratio:.1f}")
# ─────────────────────────────────────────
# 2. استكشاف قدرات LLM
# ─────────────────────────────────────────
print("\n" + "=" * 55)
print("2. استكشاف قدرات Claude")
print("=" * 55)
# اختبار الفهم السياقي
context_test = """
في هذه الجملة، كلمة "عين" لها معانٍ مختلفة:
1. ذهبت إلى عين الماء للشرب
2. العين البشرية تستطيع رؤية ألوان كثيرة
3. عيّنت المديرةَ الموظفَ الجديد
ما معنى كلمة "عين" في كل جملة؟ اشرح في نقطتين فقط.
"""
message = client.messages.create(
model="claude-haiku-4-5-20251001", # Haiku = سريع ورخيص للاستكشاف
max_tokens=300,
messages=[{"role": "user", "content": context_test}]
)
print("\nفهم السياق (الغموض):")
print(message.content[0].text[:400])
# ─────────────────────────────────────────
# 3. Temperature — التحكم في الإبداع
# ─────────────────────────────────────────
print("\n" + "=" * 55)
print("3. Temperature: التحكم في الإبداع vs الدقة")
print("=" * 55)
prompt = "أكمل الجملة: الذكاء الاصطناعي في المستقبل سيكون..."
for temp_label, temp_val in [("دقيق (0.0)", 0.0), ("متوازن (0.7)", 0.7), ("إبداعي (1.0)", 1.0)]:
msg = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=80,
temperature=temp_val,
messages=[{"role": "user", "content": prompt}]
)
print(f"\n {temp_label}:")
print(f" {msg.content[0].text[:150].strip()}")
# ─────────────────────────────────────────
# 4. حساب تكلفة الـ tokens
# ─────────────────────────────────────────
print("\n" + "=" * 55)
print("4. حساب تكلفة API")
print("=" * 55)
# أسعار Claude Haiku ($/M token)
HAIKU_INPUT = 0.80 / 1_000_000
HAIKU_OUTPUT = 4.00 / 1_000_000
test_message = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=200,
messages=[{"role": "user", "content": "اشرح ما هو التعلم العميق في 3 جمل"}]
)
in_tokens = test_message.usage.input_tokens
out_tokens = test_message.usage.output_tokens
cost = in_tokens * HAIKU_INPUT + out_tokens * HAIKU_OUTPUT
print(f" Input tokens: {in_tokens}")
print(f" Output tokens: {out_tokens}")
print(f" تكلفة هذا الطلب: ${cost:.6f} (~{cost*3.75:.4f} ريال)")
print(f"\n لو أرسلت 1000 رسالة مثلها:")
print(f" التكلفة الكلية: ${cost*1000:.4f} (~{cost*1000*3.75:.2f} ريال)")