مكتبة rig لـ Rust: دليل شامل مع أمثلة عملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مكتبة rig — لدمج نماذج LLM في Rust

في عالم تطوير Rust، كان العمل مع نماذج اللغة الكبيرة (LLM) يمثل تحديًا كبيرًا لفترة طويلة. معظم حزم SDK كانت مكتوبة بلغة Python أو JavaScript، بينما كانت بيئة Rust تقدم فقط عملاء HTTP متفرقين. مكتبة rig (Rust Integration with GGUF/LLM) تحل هذه المشكلة من خلال توفير واجهة موحدة وسهلة وآمنة للتفاعل مع عشرات مزودي LLM: OpenAI وAnthropic وCohere وGoogle Gemini وLlama.cpp وOllama وغيرهم.

لماذا تحتاج إلى rig؟ أولاً، توفر واجهة برمجة تطبيقات آمنة من حيث الأنواع (Type-safe API): جميع الطلبات والردود محددة الأنواع بدقة، مما يلغي فئة كاملة من أخطاء وقت التشغيل. ثانيًا، تنفذ rig خطوط الأنابيب (pipelines) — وهي سلاسل قابلة للتكوين من استدعاءات LLM مع دعم البث المباشر ونوافذ السياق وأدوات الاستدعاء (tool calling). ثالثًا، صُممت المكتبة مع مراعاة الأداء: غير متزامنة (async) بشكل افتراضي، مع الحد الأدنى من تخصيص الذاكرة ودعم المعالجة المجمعة (batching).

هذه المقالة هي دليل شامل ومفصل لمكتبة rig. سنشرح التثبيت، وأهم الدوال، ونكتب مثالًا عمليًا حقيقيًا، ونقدم نصائح لتحسين الأداء. في النهاية، ستكون قادرًا على بناء تطبيقات جاهزة للإنتاج بلغة Rust تستخدم LLM.

التثبيت

أضف مكتبة rig إلى مشروع Cargo الخاص بك:

cargo add rig-core --features openai,anthropic,cohere,gemini,ollama,llama-cpp

إذا كنت تحتاج فقط إلى مزود واحد، مثل OpenAI:

cargo add rig-core --features openai

للعمل مع النماذج المحلية عبر llama.cpp، ستحتاج إلى تثبيت llama.cpp نفسه (قم بتنزيله من GitHub) وترجمته مع دعم CUDA/Metal. ثم أضف الخاصية llama-cpp.

الحد الأدنى لإصدار Rust: 1.75.0. تحقق من ذلك:

rustc --version

البدء السريع

أنشئ ملفًا باسم src/main.rs واكتب طلبًا بسيطًا إلى OpenAI:

use rig::providers::openai;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // تهيئة العميل باستخدام متغير البيئة OPENAI_API_KEY
    let client = openai::Client::from_env();
    
    // إنشاء النموذج
    let model = client.model("gpt-4o-mini").build();
    
    // إرسال الطلب
    let response = model.prompt("أخبرني نكتة عن المبرمجين").await?;
    
    println!("{}", response);
    Ok(())
}

قم بتشغيله:

export OPENAI_API_KEY="sk-..."
cargo run

سترى نكتة تم إنشاؤها. تهانينا — لقد قمت للتو بدمج LLM في Rust!

الدوال والطرق الأساسية

دعنا نستعرض الدوال الرئيسية في مكتبة rig. لكل دالة، سنقدم التوقيع والوصف ومثالًا عمليًا.

1. Client::from_env()

التوقيع: pub fn from_env() -> Self

الوظيفة: تنشئ عميلًا لمزود معين عن طريق قراءة مفتاح API من متغير بيئة (مثل OPENAI_API_KEY).

use rig::providers::openai;
let client = openai::Client::from_env();

2. Client::model(name)

التوقيع: pub fn model(&self, model_name: &str) -> ModelBuilder

الوظيفة: تُرجع أداة بناء (builder) لتكوين النموذج. تسمح بتعيين درجة الحرارة (temperature)، وmax_tokens، وكلمات الإيقاف (stop words)، ومعلمات أخرى.

let model = client.model("gpt-4o")
    .temperature(0.7)
    .max_tokens(200)
    .build();

3. Model::prompt(text)

التوقيع: pub async fn prompt(&self, prompt: impl Into<String>) -> Result<String, ModelError>

الوظيفة: ترسل طلبًا إلى النموذج وتنتظر الرد.

توصيات