Ollama: التفاعل الأساسي عبر سطر الأوامر

سطر الأوامر هو القناة المباشرة لمحادثة النماذج اللغوية الكبيرة المحلية — اكتب سؤالًا، اضغط Enter للحصول على إجابة، بدون حاجة لكتابة كود.

💡 نصيحة: عند استخدام ollama run لأول مرة مع نموذج محدد، سيقوم Ollama تلقائيًا بتنزيل ملف النموذج (2 غيغابايت - أكثر من 40 غيغابايت) من المستودع البعيد قبل بدء الاستنتاج. التشغيلات اللاحقة للنموذج نفسه تُحمَّل من الملفات المحلية مباشرة، بدون إعادة تنزيل. نوصي بسحب النموذج مسبقًا: ollama pull <model>.

📋 المتطلبات المسبقة: يجب أن تتقن ما يلي أولًا

1. ماذا ستتعلم


2. قصة حقيقية من مؤسس SaaS

(1) المشكلة: كتابة SQL يدويًا بطيئة جدًا

أسست أليس منصة التجارة الإلكترونية GlobalShop وتكتب عشرات استعلامات SQL المعقدة يوميًا لتحليل بيانات الأعمال. الانتقال من متطلبات المنتج إلى عبارات SQL يستغرق في المتوسط 15 دقيقة لكل استعلام، مع أخطاء متكررة في شروط JOIN. تحتاج أداة لتحويل اللغة الطبيعية إلى SQL بسرعة.

(2) الحل: سطر الأوامر يُولّد SQL في ثوانٍ

باستخدام سطر أوامر Ollama مع موجه نظام، تُدخل أليس "استعلم عن عدد المستخدمين النشطين الشهر الماضي" وتحصل على SQL كامل في 3 ثوانٍ:

BASH
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 يدخل حوارًا مستمرًا
100%
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: الوضعان أحادي الطلقة والتفاعلي

BASH
# أحادي الطلقة: اسأل واخرج
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!")

الإخراج:

TEXT
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 مع معلمات

BASH
# عرض مقاييس الأداء
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"]}

الإخراج:

TEXT
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 وضبط المعلمات

BASH
# بدء جلسة 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

الإخراج:

TEXT
# تم تنفيذ الأمر بنجاح

5. موجه النظام وأساسيات هندسة الموجهات

💡 نصيحة: موجه النظام هو أنجع طريقة للتحكم في سلوك النموذج. موجه نظام واضح يحوّل "مساعدًا عامًا" إلى "أداة متخصصة" — كلما كان أكثر تحديدًا، كان أفضل. "أنت خبير PostgreSQL، أخرج SQL فقط" أكثر فاعلية بـ 10 مرات من "أنت مساعد."

(1) دور موجه النظام

يضع موجه النظام الدور والقواعد وتنسيق الإخراج للنموذج قبل بدء المحادثة:

100%
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 لأليس

BASH
# مساعد 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;

الإخراج:

TEXT
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

BASH
# ترجمة وصف منتجات دفعية
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"

الإخراج:

TEXT
I'm a helpful AI assistant running locally on your machine...

7. مثال شامل: سكربت مساعد SQL لأليس

⚠️ تحذير: قد يحتوي SQL المُولَّد بالنموذج اللغوي الكبير على أخطاء نحوية أو عيوب منطقية — لا تنفذه أبدًا مباشرة على قاعدة بيانات الإنتاج. تحقق دائمًا في بيئة اختبار أولًا، أو أضف فحوص أمان LIMIT وEXPLAIN قبل التشغيل.

BASH
#!/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
💻 الإخراج:

TEXT
-- 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؟
ج استخدم ollama run للأسئلة السريعة أحادية الطلقة؛ واستخدم ollama chat للمحادثات المستمرة ذات السياق. كلاهما يصلح للتطوير اليومي — run أخف، وchat يدعم تمييز الأدوار.
س هل يمكن حفظ سجل محادثات سطر الأوامر؟
ج يُحفظ السياق خلال الجلسة التفاعلية لكن يُمسح عند الخروج. للاستمرارية، استخدم إعادة توجيه الأنابيب إلى ملف أو أدر سجل المحادثات عبر REST API بنفسك.
س كيف أجعل الإخراج أكثر اتساقًا واستقرارًا؟
ج اضبط temperature منخفض (0.1-0.3) لإخراج أكثر حسمًا. في سطر الأوامر، استخدم /set parameter temperature 0.2 للضبط. Temperature أعلى (0.7-1.0) ينتج إخراجًا أكثر عشوائية وإبداعًا.
س لماذا لا يوجد إخراج متدفق في وضع الأنابيب؟
ج وضع الأنابيب (إدخال stdin) غير متدفق افتراضيًا، ينتظر الاستجابة الكاملة قبل الإخراج. إضافة --verbose تظهر عملية الاستنتاج، لكن الإخراج يبقى النتيجة الكاملة.
س هل يؤثر موجه النظام الطويل على الأداء؟
ج نعم. موجه النظام يُحسب ضمن نافذة السياق (افتراضيًا 2048 رمز)؛ الطويل المفرط يقلل المساحة المتاحة للمحادثة. نوصي بإبقائه أقل من 200 رمز.
س كيف أطرح أسئلة بلغات أخرى في سطر الأوامر؟
ج فقط اكتب بلغتك مباشرة. نماذج مثل llama3.2 وqwen2 تدعم لغات متعددة. لأفضل تجربة صينية، نوصي بـ ollama run qwen2.

📖 ملخص


📝 تمارين

  1. أساسي (صعوبة ⭐): استخدم ollama run لحوار تفاعلي لـ 3 أدوار على الأقل، مع تجربة أوامر /set system و/clear.
  2. متوسط (صعوبة ⭐⭐): أنشئ "مساعد مراجعة كود" بموجه نظام، وقدم مقتطف كود للمراجعة، ولاحظ كيف يؤثر ضبط الدور على الإخراج.
  3. متقدم (صعوبة ⭐⭐⭐): اكتب سكربت Shell يقرأ قائمة متطلبات من ملف، ويُولّد SQL دفعيًا، ويُخرج إلى ملف، مع معالجة الأخطاء وآليات المهلة.
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%