Ollama: التفاعل الأساسي عبر سطر الأوامر
سطر الأوامر هو القناة المباشرة لمحادثة النماذج اللغوية الكبيرة المحلية — اكتب سؤالًا، اضغط Enter للحصول على إجابة، بدون حاجة لكتابة كود.
ollama run لأول مرة مع نموذج محدد، سيقوم Ollama تلقائيًا بتنزيل ملف النموذج (2 غيغابايت - أكثر من 40 غيغابايت) من المستودع البعيد قبل بدء الاستنتاج. التشغيلات اللاحقة للنموذج نفسه تُحمَّل من الملفات المحلية مباشرة، بدون إعادة تنزيل. نوصي بسحب النموذج مسبقًا: ollama pull <model>.
📋 المتطلبات المسبقة: يجب أن تتقن ما يلي أولًا
- الدرس 2: تثبيت Ollama وإعداد البيئة
1. ماذا ستتعلم
- وضعي الحوار أحادي الطلقة والتفاعلي
- المحادثات متعددة الأدوار وأوامر الشرطة المائلة
- إعداد دور موجه النظام
- التكامل مع أنابيب وإعادة التوجيه في سكربتات Shell
- سيناريو أليس العملي لتوليد SQL
2. قصة حقيقية من مؤسس SaaS
(1) المشكلة: كتابة SQL يدويًا بطيئة جدًا
أسست أليس منصة التجارة الإلكترونية GlobalShop وتكتب عشرات استعلامات SQL المعقدة يوميًا لتحليل بيانات الأعمال. الانتقال من متطلبات المنتج إلى عبارات SQL يستغرق في المتوسط 15 دقيقة لكل استعلام، مع أخطاء متكررة في شروط JOIN. تحتاج أداة لتحويل اللغة الطبيعية إلى SQL بسرعة.
(2) الحل: سطر الأوامر يُولّد SQL في ثوانٍ
باستخدام سطر أوامر Ollama مع موجه نظام، تُدخل أليس "استعلم عن عدد المستخدمين النشطين الشهر الماضي" وتحصل على SQL كامل في 3 ثوانٍ:
ollama run llama3.2 "Write a SQL query to count active users last month"
3. تفصيل أمر ollama run
ℹ️ ملاحظة: تركز أمثلة هذا الدرس على العروض الوظيفية الفعلية. ركّز على صيغة أوامر CLI، ومعاني المعلمات، واستخدام الوضع التفاعلي.
(1) وضعا التنفيذ
| الوضع | الأمر | السلوك |
|---|---|---|
| الوضع أحادي الطلقة | ollama run model "prompt" |
يخرج بعد الإخراج |
| الوضع التفاعلي | ollama run model |
يدخل حوارًا مستمرًا |
sequenceDiagram
participant U as User
participant O as Ollama CLI
participant S as Ollama Server
U->>O: ollama run llama3.2
O->>S: Check if model loaded
S-->>O: Model ready
O-->>U: >>> prompt
U->>O: What is machine learning?
O->>S: POST /api/generate
S-->>O: Streaming response
O-->>U: Machine learning is...
▶ مثال 1: الوضعان أحادي الطلقة والتفاعلي
# أحادي الطلقة: اسأل واخرج
ollama run llama3.2 "Explain recursion in one sentence"
# Recursion is a function that calls itself to solve smaller instances of the same problem.
# تفاعلي: ابقَ في المحادثة
ollama run llama3.2
>>> What is Python?
Python is a high-level programming language...
>>> Can you give an example? # السياق محفوظ
Sure! Here's a simple Python example:
print("Hello, World!")
الإخراج:
I'm a helpful AI assistant running locally on your machine...
(2) معلمات التشغيل الرئيسية
| المعلمة | الغرض | مثال |
|---|---|---|
--verbose |
عرض وقت وسرعة الاستنتاج | ollama run --verbose llama3.2 "Hello" |
--system |
ضبط موجه النظام | ollama run --system "Reply in JSON" llama3.2 "List colors" |
--prompt-template |
قالب موجه مخصص | ollama run --prompt-template "Q: {{.Prompt}}\nA:" llama3.2 "What is AI?" |
▶ مثال 2: أمر run مع معلمات
# عرض مقاييس الأداء
ollama run --verbose llama3.2 "Hello"
# ...response...
# total duration: 1.2s
# load duration: 800ms
# prompt eval count: 12 token(s)
# prompt eval speed: 15.0 tokens/s
# eval count: 45 token(s)
# eval speed: 30.0 tokens/s
# ضبط موجه النظام مباشرة
ollama run --system "Reply in JSON format only" llama3.2 "List 3 colors"
# {"colors": ["red", "blue", "green"]}
الإخراج:
I'm a helpful AI assistant running locally on your machine...
4. حوار متعدد الأدوار عبر ollama chat
(1) الفروق بين chat وrun
| الميزة | ollama run |
ollama chat |
|---|---|---|
| السياق | يحتفظ بالدورة السابقة افتراضيًا | رسائل متعددة الأدوار صريحة |
| تنسيق الرسالة | نص عادي | يدعم تمييز الأدوار (user/assistant/system) |
| توافق API | /api/generate |
/api/chat |
| حالة الاستخدام | أسئلة سريعة | محادثات منظمة |
(2) مرجع أوامر الشرطة المائلة
| الأمر | الوظيفة |
|---|---|
/clear |
مسح سياق المحادثة |
/help |
عرض جميع الأوامر |
/set parameter |
ضبط معلمات الاستنتاج |
/set system |
ضبط موجه النظام |
/info |
عرض معلومات النموذج |
/exit أو Ctrl+D |
الخروج من المحادثة |
▶ مثال 3: حوار متعدد الأدوار عبر chat وضبط المعلمات
# بدء جلسة chat
ollama chat llama3.2
>>> /set system You are a helpful data analyst
System prompt set.
>>> Analyze this: sales dropped 20% last quarter
The 20% sales drop could indicate several issues...
>>> What visualization would you recommend?
I'd suggest a line chart showing quarterly trends...
>>> /set parameter temperature 0.3
Set parameter 'temperature' to 0.3
>>> Give me the SQL for that analysis
SELECT quarter, revenue FROM sales_data...
>>> /clear
Cleared session context.
>>> /exit
الإخراج:
# تم تنفيذ الأمر بنجاح
5. موجه النظام وأساسيات هندسة الموجهات
(1) دور موجه النظام
يضع موجه النظام الدور والقواعد وتنسيق الإخراج للنموذج قبل بدء المحادثة:
graph TB
SP[System Prompt<br/>Role + Rules + Format] --> C[Conversation Context]
U[User Message] --> C
C --> M[Model Response]
M --> C
| الدور | مثال موجه النظام | التأثير |
|---|---|---|
| خبير SQL | "You are a SQL expert. Only output valid SQL." | يُخرج عبارات SQL فقط |
| مترجم | "You are a translator. Translate to French." | يترجم تلقائيًا |
| خدمة عملاء | "You are a customer service agent. Be polite and concise." | ردود مهذبة وموجزة |
| مراجع كود | "You are a code reviewer. Point out bugs and improvements." | يركز على مشاكل الكود |
▶ مثال 4: سيناريو توليد SQL لأليس
# مساعد SQL لأليس مع موجه النظام
ollama run --system "You are a PostgreSQL expert. Given a natural language question, output ONLY the SQL query. No explanations, no markdown, just the SQL." llama3.2
>>> Count users who registered in the last 30 days and made at least one purchase
SELECT COUNT(DISTINCT u.id)
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.created_at >= NOW() - INTERVAL '30 days'
AND o.id IS NOT NULL;
>>> Find the top 5 products by revenue this month
SELECT p.name, SUM(oi.quantity * oi.price) AS revenue
FROM products p
JOIN order_items oi ON p.id = oi.product_id
JOIN orders o ON oi.order_id = o.id
WHERE o.created_at >= DATE_TRUNC('month', CURRENT_DATE)
GROUP BY p.id, p.name
ORDER BY revenue DESC
LIMIT 5;
الإخراج:
I'm a helpful AI assistant running locally on your machine...
6. التكامل مع أنابيب وShell
ollama run الإدخال من stdin وينتظر الاستجابة الكاملة قبل الإخراج إلى stdout. هذا يعني أن وضع الأنابيب غير متدفق، مناسب للمعالجة الدفعية بدلاً من التفاعل الفوري.
(1) وضع أنابيب سطر الأوامر
يتكامل سطر أوامر Ollama بسلاسة مع أنابيب Unix لسير العمل الآلي:
| الوضع | الأمر | حالة الاستخدام |
|---|---|---|
| إدخال stdin | echo "prompt" | ollama run model |
استدعاء من سكربت |
| إعادة توجيه الإخراج | ollama run model "prompt" > output.txt |
حفظ النتائج |
| أنابيب متسلسلة | cat data.txt | ollama run model | jq . |
معالجة لاحقة |
▶ مثال 5: تكامل سكربت Shell
# ترجمة وصف منتجات دفعية
echo "Translate to French: Premium wireless headphones" | ollama run llama3.2
# توليد رسائل commit من git diff
git diff --staged | ollama run llama3.2 "Write a concise git commit message for these changes"
# تلخيص ملف سجلات
cat /var/log/app.log | tail -100 | ollama run llama3.2 "Summarize the key errors in this log"
الإخراج:
I'm a helpful AI assistant running locally on your machine...
7. مثال شامل: سكربت مساعد SQL لأليس
LIMIT وEXPLAIN قبل التشغيل.
#!/bin/bash
# ============================================
# شامل: مساعد SQL لأليس
# من اللغة الطبيعية إلى SQL مع وعي بالسياق
# ============================================
MODEL="llama3.2"
SYSTEM="You are a PostgreSQL expert. Output ONLY valid SQL. No explanations, no markdown fences."
# الوضع التفاعلي مع موجه نظام مُعد مسبقًا
sql_chat() {
echo "SQL Assistant ready. Type your query in natural language (or 'exit'):"
ollama run --system "$SYSTEM" "$MODEL"
}
# أحادي الطلقة: مرر سؤالًا، احصل على SQL
sql_ask() {
local question="$1"
echo "$question" | ollama run --system "$SYSTEM" "$MODEL"
}
# الوضع الدفعي: معالجة أسئلة من ملف
sql_batch() {
local input_file="$1"
local output_file="sql_output_$(date +%Y%m%d_%H%M%S).sql"
while IFS= read -r question; do
echo "-- Question: $question" >> "$output_file"
sql_ask "$question" >> "$output_file"
echo "" >> "$output_file"
done < "$input_file"
echo "Batch complete: $output_file"
}
# القائمة الرئيسية
case "${1:-interactive}" in
ask) sql_ask "$2" ;;
batch) sql_batch "$2" ;;
*) sql_chat ;;
esac
-- Question: Count users registered last month
SELECT COUNT(*) FROM users
WHERE created_at >= DATE_TRUNC('month', CURRENT_DATE - INTERVAL '1 month')
AND created_at < DATE_TRUNC('month', CURRENT_DATE);
-- Question: Top 10 products by sales
SELECT p.name, SUM(oi.quantity) AS total_sold
FROM products p
JOIN order_items oi ON p.id = oi.product_id
GROUP BY p.id, p.name
ORDER BY total_sold DESC
LIMIT 10;
❓ أسئلة شائعة
ollama run للأسئلة السريعة أحادية الطلقة؛ واستخدم ollama chat للمحادثات المستمرة ذات السياق. كلاهما يصلح للتطوير اليومي — run أخف، وchat يدعم تمييز الأدوار./set parameter temperature 0.2 للضبط. Temperature أعلى (0.7-1.0) ينتج إخراجًا أكثر عشوائية وإبداعًا.--verbose تظهر عملية الاستنتاج، لكن الإخراج يبقى النتيجة الكاملة.ollama run qwen2.📖 ملخص
ollama runيدعم الوضعين أحادي الطلقة والتفاعلي — الأمر الأكثر استخدامًاollama chatيوفر حوارًا متعدد الأدوار منظمًا مع تمييز الأدوار وأوامر الشرطة المائلة- موجه النظام يضبط الدور والقواعد للنموذج، ويتحكم في تنسيق الإخراج
- يتكامل سطر الأوامر مع أنابيب Unix لسير عمل ذكاء اصطناعي عبر سكربتات
- معلمة temperature تتحكم في عشوائية الإخراج؛ القيم الأخرى أكثر استقرارًا
- خفضت أليس وقت كتابة SQL من 15 دقيقة إلى 3 ثوانٍ باستخدام سطر الأوامر + موجه النظام
📝 تمارين
- أساسي (صعوبة ⭐): استخدم
ollama runلحوار تفاعلي لـ 3 أدوار على الأقل، مع تجربة أوامر/set systemو/clear. - متوسط (صعوبة ⭐⭐): أنشئ "مساعد مراجعة كود" بموجه نظام، وقدم مقتطف كود للمراجعة، ولاحظ كيف يؤثر ضبط الدور على الإخراج.
- متقدم (صعوبة ⭐⭐⭐): اكتب سكربت Shell يقرأ قائمة متطلبات من ملف، ويُولّد SQL دفعيًا، ويُخرج إلى ملف، مع معالجة الأخطاء وآليات المهلة.