Ollama (النماذج المحلية)

شغل LLMs محليًا بخصوصية تامة - بدون مفاتيح API، بدون إنترنت، وبدون تكاليف.

نظرة عامة

┌─────────────────────────────────────────────────────────────────────┐
│                         Ollama Local Setup                          │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│   Your Machine                                                      │
│   ┌─────────────────────────────────────────────────────────────┐  │
│   │                                                             │  │
│   │   ┌──────────────┐      ┌──────────────┐                   │  │
│   │   │  ADK-Rust    │ ───▶ │   Ollama     │                   │  │
│   │   │  Agent       │      │   Server     │                   │  │
│   │   └──────────────┘      └──────┬───────┘                   │  │
│   │                                │                            │  │
│   │                         ┌──────▼───────┐                   │  │
│   │                         │  Local LLM   │                   │  │
│   │                         │  (llama3.2)  │                   │  │
│   │                         └──────────────┘                   │  │
│   │                                                             │  │
│   └─────────────────────────────────────────────────────────────┘  │
│                                                                     │
│   🔒 100% Private - Data never leaves your machine                 │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

لماذا Ollama؟

الميزةالوصف
🆓 مجانيلا توجد تكاليف API، إطلاقاً
🔒 خاصتبقى البيانات على جهازك
📴 غير متصليعمل بدون إنترنت
🎛️ تحكماختر أي نموذج، خصص الإعدادات
سريعلا يوجد تأخير في الشبكة

الخطوة 1: تثبيت Ollama

macOS

brew install ollama

Linux

curl -fsSL https://ollama.com/install.sh | sh

Windows

قم بالتحميل من ollama.com


الخطوة 2: تشغيل الخادم

ollama serve

يجب أن ترى:

Couldn't find '/Users/you/.ollama/id_ed25519'. Generating new private key.
Your new public key is: ssh-ed25519 AAAA...
time=2024-01-05T12:00:00.000Z level=INFO source=server.go msg="Listening on 127.0.0.1:11434"

الخطوة 3: سحب نموذج

في طرفية جديدة:

# نموذج المبتدئين الموصى به (3B parameters، سريع)
ollama pull llama3.2

# نماذج شائعة أخرى
ollama pull qwen2.5:7b    # ممتاز لاستدعاء الأدوات
ollama pull mistral       # جيد للكود
ollama pull codellama     # توليد الكود
ollama pull gemma2        # نموذج Google الفعال

الخطوة 4: الإضافة إلى مشروعك

[dependencies]
adk-model = { version = "0.2", features = ["ollama"] }

الخطوة 5: الاستخدام في الكود

use adk_model::ollama::{OllamaModel, OllamaConfig};
use adk_agent::LlmAgentBuilder;
use std::sync::Arc;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    // لا حاجة لمفتاح API!
    let model = OllamaModel::new(OllamaConfig::new("llama3.2"))?;

    let agent = LlmAgentBuilder::new("local_assistant")
        .instruction("You are a helpful assistant running locally.")
        .model(Arc::new(model))
        .build()?;

    // استخدم Agent...
    Ok(())
}

مثال عملي كامل

use adk_rust::prelude::*;
use adk_rust::Launcher;
use std::sync::Arc;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    dotenvy::dotenv().ok();
    
    // لا حاجة لمفتاح API!
    let model = OllamaModel::new(OllamaConfig::new("llama3.2"))?;

    let agent = LlmAgentBuilder::new("ollama_assistant")
        .description("Ollama-powered local assistant")
        .instruction("You are a helpful assistant running locally via Ollama. Be concise.")
        .model(Arc::new(model))
        .build()?;

    // تشغيل جلسة تفاعلية
    Launcher::new(Arc::new(agent)).run().await?;
    
    Ok(())
}

Cargo.toml

[dependencies]
adk-rust = { version = "0.2", features = ["cli", "ollama"] }
tokio = { version = "1", features = ["full"] }
dotenvy = "0.15"
anyhow = "1.0"

خيارات التهيئة

use adk_model::ollama::{OllamaModel, OllamaConfig};

let config = OllamaConfig::new("llama3.2")
    .with_base_url("http://localhost:11434")  // عنوان URL لخادم مخصص
    .with_temperature(0.7)                     // الإبداع (0.0-1.0)
    .with_max_tokens(2048);                    // أقصى طول للاستجابة

let model = OllamaModel::new(config)?;

النماذج الموصى بها

ModelSizeRAM NeededBest For
llama3.23B4GBسريع، متعدد الأغراض
llama3.2:7b7B8GBجودة أفضل
qwen2.5:7b7B8GBأفضل في استدعاء الأدوات
mistral7B8GBالكود والاستدلال
codellama7B8GBتوليد الكود
gemma29B10GBأداء متوازن
llama3.1:70b70B48GBأعلى جودة

اختيار نموذج

  • ذاكرة وصول عشوائي (RAM) محدودة (8 جيجابايت)؟llama3.2 (3B)
  • هل تحتاج إلى Tool calling؟qwen2.5:7b
  • كتابة الكود؟codellama أو mistral
  • أفضل جودة؟llama3.1:70b (يتطلب 48 جيجابايت+ RAM)

استدعاء الأدوات مع Ollama

يدعم Ollama استدعاء الوظائف مع النماذج المتوافقة:

use adk_model::ollama::{OllamaModel, OllamaConfig};
use adk_agent::LlmAgentBuilder;
use adk_tool::FunctionTool;
use std::sync::Arc;

// qwen2.5 لديه دعم ممتاز لـ Tool calling
let model = OllamaModel::new(OllamaConfig::new("qwen2.5:7b"))?;

let weather_tool = Arc::new(FunctionTool::new(
    "get_weather",
    "الحصول على الطقس لموقع ما",
    |_ctx, args| async move {
        let location = args.get("location").and_then(|v| v.as_str()).unwrap_or("unknown");
        Ok(serde_json::json!({
            "location": location,
            "temperature": "72°F",
            "condition": "مشمس"
        }))
    },
));

let agent = LlmAgentBuilder::new("weather_assistant")
    .instruction("مساعدة المستخدمين في التحقق من الطقس.")
    .model(Arc::new(model))
    .tool(weather_tool)
    .build()?;

ملاحظة: يستخدم Tool calling وضع عدم البث (non-streaming) لضمان الموثوقية مع النماذج المحلية.


مثال على المخرجات

👤 المستخدم: مرحباً! ماذا يمكنك أن تفعل؟

🤖 Ollama (llama3.2): مرحباً! أنا مساعد ذكاء اصطناعي محلي يعمل على جهازك. يمكنني المساعدة في:
- الإجابة على الأسئلة
- كتابة وتحرير النصوص
- شرح المفاهيم
- مساعدة أساسية في البرمجة

كل ذلك خاص تمامًا - لا يغادر شيء جهاز الكمبيوتر الخاص بك!

استكشاف الأخطاء وإصلاحها

"الاتصال مرفوض"

# تأكد من أن Ollama يعمل
ollama serve

"النموذج غير موجود"

# اسحب النموذج أولاً
ollama pull llama3.2

استجابات بطيئة

  • استخدم نموذجًا أصغر (llama3.2 بدلاً من llama3.1:70b)
  • أغلق التطبيقات الأخرى لتحرير ذاكرة الوصول العشوائي (RAM)
  • فكر في تسريع GPU إذا كان متاحًا

التحقق من النماذج المتاحة

ollama list

تشغيل الأمثلة

# من مجلد official_docs_examples
cd official_docs_examples/models/providers_test
cargo run --bin ollama_example

ذات صلة


السابق: ← موفرّي النماذج | التالي: النماذج المحلية (mistral.rs) →