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)?;
النماذج الموصى بها
| Model | Size | RAM Needed | Best For |
|---|---|---|---|
llama3.2 | 3B | 4GB | سريع، متعدد الأغراض |
llama3.2:7b | 7B | 8GB | جودة أفضل |
qwen2.5:7b | 7B | 8GB | أفضل في استدعاء الأدوات |
mistral | 7B | 8GB | الكود والاستدلال |
codellama | 7B | 8GB | توليد الكود |
gemma2 | 9B | 10GB | أداء متوازن |
llama3.1:70b | 70B | 48GB | أعلى جودة |
اختيار نموذج
- ذاكرة وصول عشوائي (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
ذات صلة
- موفرّي النماذج - موفرّو LLM المستندة إلى السحابة
- النماذج المحلية (mistral.rs) - الاستدلال الأصلي في Rust
السابق: ← موفرّي النماذج | التالي: النماذج المحلية (mistral.rs) →