Ollama: تمارين المرحلة الأولى الشاملة
تمارين المرحلة الأولى الشاملة هي نقطة التحقق العملية التي تختبر تعلمك من الدروس الخمسة الأولى — من الإعداد الصفري إلى استدعاءات API، كل شيء في مسار واحد.
📋 المتطلبات المسبقة: يجب أن تتقن ما يلي أولًا
- الدرس 1: مفاهيم الذكاء الاصطناعي المحلي ونظرة عامة على البيئة
- الدرس 2: تثبيت Ollama وإعداد البيئة
- الدرس 3: التفاعل الأساسي عبر سطر الأوامر
- الدرس 4: إدارة النماذج
- الدرس 5: أساسيات REST API
1. ماذا ستتعلم
- ممارسة عملية لسير عمل النشر الشامل من البداية إلى النهاية
- اختبار دفعي لجودة استجابة النماذج عبر سكربت Shell
- بناء روبوت محادثة بسيط باستخدام curl
- طريقة أليس للتحقق من جدوى النموذج الأولي المحلي
- التقييم الذاتي واتجاه التحضير للمرحلة الثانية
2. قصة حقيقية من مدير تقني لشركة ناشئة
(1) المشكلة: النظرية وحدها لا تقنع الفريق
أكملت أليس الدروس الخمسة الأولى، لكن الفريق لا يزال يتشكك في الذكاء الاصطناعي المحلي: "هل يعمل حقًا؟ هل الجودة كافية؟" تحتاج نموذجًا أوليًا شاملًا لإثبات جدوى الذكاء الاصطناعي المحلي قبل أن تحصل على ميزانية لخوادم GPU.
(2) الحل: نموذج أولي شامل في 30 دقيقة
من التثبيت إلى نموذج أولي تفاعلي لخدمة العملاء، أكملت أليس التحقق الكامل للمسار في 30 دقيقة:
# الخطوة 1: التثبيت
curl -fsSL https://ollama.com/install.sh | sh
# الخطوة 2: سحب النموذج
ollama pull qwen2.5
# الخطوة 3: اختبار API
curl http://localhost:11434/api/chat -d '{
"model": "qwen2.5",
"messages": [{"role": "user", "content": "Hello"}],
"stream": false
}'
3. تمرين 1: سير العمل الشامل من البداية إلى النهاية
ℹ️ ملاحظة: الهدف الأساسي للتحقق الشامل هو "إثبات أن المسار يعمل" — من التثبيت إلى استدعاءات API، كل خطوة تنجح. لا تسعَ لجودة إخراج النموذج في هذه المرحلة؛ هذا للتحسين لاحقًا. ابدأ بأصغر نموذج (3B) للتحقق السريع — هذا أكثر كفاءة بكثير من التصحيح بنموذج كبير.
(1) من الصفر إلى استدعاء API
أكمل الخطوات التالية بالترتيب، مع التحقق من كل خطوة قبل الانتقال:
flowchart LR
A[Install Ollama] --> B[Verify Service]
B --> C[Pull Model]
C --> D[CLI Test]
D --> E[REST API Test]
E --> F[Script Integration]
| الخطوة | الإجراء | أمر التحقق |
|---|---|---|
| 1 | تثبيت Ollama | ollama --version |
| 2 | تأكيد تشغيل الخدمة | curl http://localhost:11434/api/tags |
| 3 | سحب qwen2.5 | ollama pull qwen2.5 |
| 4 | اختبار تفاعل سطر الأوامر | ollama run qwen2.5 "Hello" |
| 5 | اختبار REST API | استدعاء curl لـ /api/chat |
| 6 | اختبار تكامل السكربت | استدعاء دفعي عبر سكربت Shell |
▶ مثال 1: سكربت التحقق الشامل
#!/bin/bash
# سكربت التحقق الشامل
set -e
echo "=== Step 1: Verify Installation ==="
ollama --version
echo "=== Step 2: Verify Service ==="
curl -s http://localhost:11434/api/tags | python3 -m json.tool > /dev/null
echo "Service is running."
echo "=== Step 3: Pull Model ==="
ollama pull qwen2.5
echo "=== Step 4: CLI Test ==="
ollama run qwen2.5 "Say hello in one sentence"
echo "=== Step 5: REST API Test ==="
curl -s http://localhost:11434/api/chat -d '{
"model": "qwen2.5",
"messages": [{"role": "user", "content": "Hello"}],
"stream": false
}' | python3 -c "import sys,json; print('API works:', json.load(sys.stdin)['message']['content'][:50])"
echo "=== All Steps Passed ==="
الإخراج:
I'm a helpful AI assistant running locally on your machine...
4. تمرين 2: اختبار دفعي لجودة استجابة النماذج
(1) مقارنة إخراج النماذج بأعداد معلمات مختلفة
استخدم نفس مجموعة الأسئلة لاختبار نماذج مختلفة، مع تقييم السرعة والجودة:
| بُعد الاختبار | نموذج 3B | نموذج 8B | نموذج التضمين |
|---|---|---|---|
| سرعة الاستجابة | سريع (30+ رمز/ثانية) | متوسط (15-20 رمز/ثانية) | سريع (متجهات فقط) |
| جودة الصينية | مقبول أساسيًا | طبيعي وسلس | غير قابل للتطبيق |
| قدرة الاستنتاج | مهام بسيطة | تعقيد متوسط | غير قابل للتطبيق |
| استهلاك الموارد | 4 غيغابايت RAM | 8 غيغابايت RAM | 300 ميغابايت RAM |
▶ مثال 2: مقارنة جودة النماذج الدفعية
#!/bin/bash
# اختبار دفعي لنماذج مختلفة بنفس الأسئلة
QUESTIONS=(
"What is the return policy for electronics?"
"Translate to French: Free shipping on orders over $50"
"Write a SQL query to find top 10 customers by revenue"
)
MODELS=("llama3.2:3b" "llama3.1:8b" "qwen2.5:7b")
for model in "${MODELS[@]}"; do
echo "=== Model: $model ==="
for q in "${QUESTIONS[@]}"; do
echo "Q: $q"
start=$(date +%s%N)
response=$(curl -s http://localhost:11434/api/chat -d "{
\"model\": \"$model\",
\"messages\": [{\"role\": \"user\", \"content\": \"$q\"}],
\"stream\": false,
\"options\": {\"temperature\": 0.3}
}" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['message']['content'][:100])")
end=$(date +%s%N)
elapsed=$(( (end - start) / 1000000 ))
echo "A: ${response}..."
echo "Time: ${elapsed}ms"
echo ""
done
done
الإخراج:
{"status":"ok","data":{}}
5. تمرين 3: سكربت روبوت محادثة باستخدام curl
(1) تصميم سكربت محادثة تفاعلي
نفّذ روبوت محادثة بسيط باستخدام سكربت Shell، مع الحفاظ يدويًا على سجل المحادثة:
flowchart TD
A[Start Session] --> B[Read User Input]
B --> C{Input == /quit?}
C -->|Yes| D[Exit]
C -->|No| E[Append to Messages Array]
E --> F[Call /api/chat]
F --> G[Print Response]
G --> H[Append Response to Messages]
H --> B
▶ مثال 3: روبوت محادثة تفاعلي
#!/bin/bash
# روبوت محادثة تفاعلي بسيط باستخدام curl
API="http://localhost:11434/api/chat"
MODEL="qwen2.5"
MESSAGES='[{"role":"system","content":"You are a helpful assistant. Be concise."}]'
echo "ChatBot (type /quit to exit)"
echo "--------------------------------"
while true; do
read -p "You: " input
if [ "$input" = "/quit" ]; then
echo "Goodbye!"
break
fi
# إضافة رسالة المستخدم
MESSAGES=$(echo "$MESSAGES" | python3 -c "
import sys, json
msgs = json.load(sys.stdin)
msgs.append({'role': 'user', 'content': '$input'})
print(json.dumps(msgs))
")
# استدعاء API
response=$(curl -s "$API" -d "{
\"model\": \"$MODEL\",
\"messages\": $MESSAGES,
\"stream\": false,
\"options\": {\"temperature\": 0.5}
}")
# استخراج وطباعة الرد
content=$(echo "$response" | python3 -c "import sys,json; print(json.load(sys.stdin)['message']['content'])")
echo "Bot: $content"
# إضافة رد المساعد
MESSAGES=$(echo "$MESSAGES" | python3 -c "
import sys, json
msgs = json.load(sys.stdin)
msgs.append({'role': 'assistant', 'content': '''$content'''})
print(json.dumps(msgs))
")
echo ""
done
الإخراج:
{"status":"ok","data":{}}
6. التحقق من جدوى النموذج الأولي المحلي لأليس
(1) أبعاد تقييم النموذج الأولي
| البُعد | عنصر الفحص | المستهدف |
|---|---|---|
| الوظائف | يمكن الرد بشكل صحيح على الأسئلة الشائعة | دقة > 80% |
| الكمون | وقت استجابة أول رمز | < 500 مللي ثانية |
| الإنتاجية | الطلبات المعالجة في الدقيقة | > 10 طلب/دقيقة |
| التكلفة | استثمار hardware مقابل وفورات السحابة | نقطة التعادل خلال 6 أشهر |
| الخصوصية | هل تغادر البيانات المحلي | 0 تسريب |
▶ مثال 4: سكربت معيار أداء النموذج الأولي
#!/bin/bash
# معيار أداء سريع للنموذج الأولي للذكاء الاصطناعي المحلي
API="http://localhost:11434/api/chat"
MODEL="qwen2.5"
REQUESTS=10
echo "=== Local AI PoC Benchmark ==="
echo "Model: $MODEL"
echo "Requests: $REQUESTS"
echo ""
total_time=0
total_tokens=0
for i in $(seq 1 $REQUESTS); do
start=$(date +%s%N)
response=$(curl -s "$API" -d "{
\"model\": \"$MODEL\",
\"messages\": [{\"role\": \"user\", \"content\": \"Explain the return policy briefly\"}],
\"stream\": false,
\"options\": {\"temperature\": 0.3}
}")
end=$(date +%s%N)
elapsed_ms=$(( (end - start) / 1000000 ))
tokens=$(echo "$response" | python3 -c "import sys,json; print(json.load(sys.stdin).get('eval_count', 0))")
total_time=$((total_time + elapsed_ms))
total_tokens=$((total_tokens + tokens))
echo "Request $i: ${elapsed_ms}ms, ${tokens} tokens"
done
avg_time=$((total_time / REQUESTS))
avg_tokens=$((total_tokens / REQUESTS))
tput=$((total_tokens * 1000 / total_time))
echo ""
echo "=== Results ==="
echo "Avg latency: ${avg_time}ms"
echo "Avg tokens: ${avg_tokens}"
echo "Throughput: ${tput} tokens/s"
echo "Target met: $([ $avg_time -lt 5000 ] && echo 'YES' || echo 'NO')"
الإخراج:
{"status":"ok","data":{}}
▶ مثال 5: التحقق من قائمة التقييم الذاتي
#!/bin/bash
# قائمة التقييم الذاتي للمرحلة الأولى
echo "=== Phase 1 Self-Assessment ==="
echo ""
checks=0
total=6
# فحص 1: Ollama مثبت
if command -v ollama &> /dev/null; then
echo "[PASS] Ollama is installed"
((checks++))
else
echo "[FAIL] Ollama is not installed"
fi
# فحص 2: الخدمة تعمل
if curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then
echo "[PASS] Ollama service is running"
((checks++))
else
echo "[FAIL] Ollama service is not running"
fi
# فحص 3: نموذج واحد متاح على الأقل
model_count=$(ollama list 2>/dev/null | tail -n +2 | wc -l)
if [ "$model_count" -gt 0 ]; then
echo "[PASS] $model_count model(s) available"
((checks++))
else
echo "[FAIL] No models pulled"
fi
# فحص 4: تفاعل سطر الأوامر يعمل
if ollama run llama3.2 "test" > /dev/null 2>&1; then
echo "[PASS] CLI interaction works"
((checks++))
else
echo "[FAIL] CLI interaction failed"
fi
# فحص 5: REST API يستجيب
if curl -s http://localhost:11434/api/generate -d '{"model":"llama3.2","prompt":"hi","stream":false}' > /dev/null 2>&1; then
echo "[PASS] REST API responds"
((checks++))
else
echo "[FAIL] REST API not responding"
fi
# فحص 6: المتدفقة تعمل
if curl -s http://localhost:11434/api/chat -d '{"model":"llama3.2","messages":[{"role":"user","content":"hi"}]}' | grep -q '"done":true'; then
echo "[PASS] Streaming API works"
((checks++))
else
echo "[FAIL] Streaming API failed"
fi
echo ""
echo "Score: $checks / $total"
if [ "$checks" -eq "$total" ]; then
echo "✅ Ready for Phase 2!"
else
echo "⚠️ Review failed items before proceeding."
fi
الإخراج:
I'm a helpful AI assistant running locally on your machine...
7. مثال شامل: سير عمل التحقق الشامل الكامل
#!/bin/bash
# ============================================
# شامل: سير عمل المرحلة الأولى الشامل
# تثبيت → إعداد → سحب → اختبار → تقرير
# ============================================
set -e
REPORT="phase1_report_$(date +%Y%m%d_%H%M%S).txt"
echo "Phase 1 E2E Workflow" | tee "$REPORT"
echo "====================" | tee -a "$REPORT"
echo "" | tee -a "$REPORT"
# الخطوة 1: التحقق من التثبيت
echo "## Installation" | tee -a "$REPORT"
echo "Ollama: $(ollama --version 2>&1)" | tee -a "$REPORT"
echo "OS: $(uname -s) $(uname -m)" | tee -a "$REPORT"
echo "RAM: $(free -g | awk '/^Mem:/{print $2}')GB" | tee -a "$REPORT"
if command -v nvidia-smi &> /dev/null; then
echo "GPU: $(nvidia-smi --query-gpu=name --format=csv,noheader)" | tee -a "$REPORT"
else
echo "GPU: CPU-only mode" | tee -a "$REPORT"
fi
echo "" | tee -a "$REPORT"
# الخطوة 2: سحب حزمة نماذج SupportBot
echo "## Model Stack" | tee -a "$REPORT"
ollama pull qwen2.5 2>&1 | tail -1 | tee -a "$REPORT"
ollama pull llama3.2:3b 2>&1 | tail -1 | tee -a "$REPORT"
ollama pull nomic-embed-text 2>&1 | tail -1 | tee -a "$REPORT"
echo "" | tee -a "$REPORT"
# الخطوة 3: اختبار الجودة بـ 3 أسئلة
echo "## Quality Test" | tee -a "$REPORT"
questions=(
"What is your return policy?"
"How do I track my order?"
"Do you ship internationally?"
)
for q in "${questions[@]}"; do
echo "Q: $q" | tee -a "$REPORT"
answer=$(curl -s http://localhost:11434/api/chat -d "{
\"model\": \"qwen2.5\",
\"messages\": [{\"role\": \"system\", \"content\": \"You are an e-commerce support agent. Be concise.\"},
{\"role\": \"user\", \"content\": \"$q\"}],
\"stream\": false,
\"options\": {\"temperature\": 0.3}
}" | python3 -c "import sys,json; print(json.load(sys.stdin)['message']['content'][:120])")
echo "A: $answer" | tee -a "$REPORT"
echo "" | tee -a "$REPORT"
done
# الخطوة 4: معيار الأداء
echo "## Benchmark" | tee -a "$REPORT"
start=$(date +%s%N)
curl -s http://localhost:11434/api/chat -d '{
"model": "qwen2.5",
"messages": [{"role": "user", "content": "Hello"}],
"stream": false
}' > /dev/null
end=$(date +%s%N)
latency=$(( (end - start) / 1000000 ))
echo "Single request latency: ${latency}ms" | tee -a "$REPORT"
echo "Target < 5000ms: $([ $latency -lt 5000 ] && echo PASS || echo FAIL)" | tee -a "$REPORT"
echo "" | tee -a "$REPORT"
echo "Report saved: $REPORT"
❓ أسئلة شائعة
ollama --version، ثم curl localhost:11434/api/tags، تشخيص طبقة بطبقة. 90% من المشاكل سببها الخدمة لم تبدأ أو النموذج لم يُسحب.OLLAMA_KEEP_ALIVE=30m لإبقاء النموذج في الذاكرة، والطلبات اللاحقة تستجيب في ثوانٍ.📖 ملخص
- سير العمل الشامل: تثبيت → التحقق من الخدمة → سحب النموذج → اختبار سطر الأوامر → استدعاء API → تكامل السكربت
- الاختبار الدفعي يمكنه مقارنة جودة وسرعة الاستجابة عبر نماذج مختلفة
- روبوت محادثة curl هو أفضل طريقة عملية لفهم REST API
- التحقق من النموذج الأولي يركز على خمسة أبعاد: الوظائف، الكمون، الإنتاجية، التكلفة، الخصوصية
- قائمة التقييم الذاتي تضمن إتقان كل مهارة فعلًا
- المرحلة الثانية ستغطي Python SDK وModelfile وتسريع GPU وميزات أساسية أخرى
📝 تمارين
- أساسي (صعوبة ⭐): أكمل كل خطوة من سكربت التحقق الشامل، مع التأكد من نجاح جميع الخطوات، واحفظ لقطات شاشة للنتائج.
- متوسط (صعوبة ⭐⭐): شغّل سكربت مقارنة جودة النماذج الدفعية، اختر 3 نماذج مختلفة، سجّل أوقات الاستجابة ودرجات الجودة، واكتب تقرير تحليل موجز.
- متقدم (صعوبة ⭐⭐⭐): أكمل تحقق نموذج أولي كامل لشركة SaaS لأليس — اكتب سكربتات معيار، سجّل بيانات الكمون والإنتاجية، احسب مقارنات التكلفة لـ 12 شهرًا، وأصدر مستند تقرير جدوى.