عالم نماذج اللغات الكبيرة (LLMs) يتوسع بوتيرة هائلة، ولكن لفترة طويلة، كان الوصول إلى أحدث الإمكانيات يعني الاعتماد على واجهات برمجة التطبيقات (APIs) المستندة إلى السحابة. غالبًا ما يأتي هذا الاعتماد مصحوبًا بمخاوف بشأن الخصوصية والتكلفة والتخصيص. ومع ذلك، فإن المد يتغير، بفضل النماذج مفتوحة المصدر القوية والأدوات مثل Ollama التي تجعل تشغيلها على جهازك المحلي أسهل من أي وقت مضى.
من بين أحدث التطورات الأكثر إثارة هو إطلاق عائلة نماذج Qwen3 بواسطة Alibaba Cloud. تحدد هذه النماذج، وخاصة إصدارات التضمين (embedding) وإعادة الترتيب (reranker) المتخصصة، معايير جديدة في الأداء. عند دمجها مع Ollama، توفر مجموعة أدوات قوية للمطورين والباحثين الذين يتطلعون إلى بناء تطبيقات ذكاء اصطناعي متطورة، مثل محركات البحث المتقدمة وأنظمة التوليد المعزز بالاسترجاع (RAG)، كل ذلك من راحة أجهزتهم الخاصة.
هذه المقالة هي دليلك الشامل خطوة بخطوة لتسخير هذه القوة. سنوضح ما هي نماذج التضمين وإعادة الترتيب، ونستعرض إعداد Ollama، ونقدم كود بايثون عملي لتشغيل نماذج Qwen3 للتضمين وإعادة الترتيب لسير عمل RAG كامل وشامل.
هل تريد منصة متكاملة وشاملة لفريق المطورين الخاص بك للعمل معًا بأقصى إنتاجية؟
يلبي Apidog جميع متطلباتك، ويحل محل Postman بسعر أكثر بأسعار معقولة بكثير!
الثنائي القوي: فهم نماذج التضمين وإعادة الترتيب
قبل أن نتعمق في "الكيفية"، دعنا نفهم "ماذا". في سياق نظام RAG، تلعب نماذج التضمين وإعادة الترتيب أدوارًا مميزة ولكنها متكاملة.
1. أمين المكتبة: نموذج التضمين (Embedding Model)
تخيل مكتبة ضخمة تضم ملايين الكتب ولكن لا يوجد بها نظام فهرسة. سيكون العثور على المعلومات كابوسًا. نموذج التضمين يشبه أمين مكتبة فائق الذكاء يقرأ كل وثيقة ويخصص لها موقعًا محددًا في "مساحة مفاهيمية" واسعة ومتعددة الأبعاد.
من الناحية الفنية، التضمين النصي هو عملية تحويل جزء من النص (كلمة أو جملة أو وثيقة كاملة) إلى متجه كثيف من الأرقام. يلتقط هذا المتجه المعنى الدلالي للنص. ستكون للوثائق ذات المعاني المتشابهة متجهات "قريبة" من بعضها البعض في هذه المساحة.
عندما يكون لديك استعلام، يحول نموذج التضمين سؤالك إلى متجه ثم يبحث في المكتبة عن متجهات الوثائق الأقرب إليه. هذا البحث الأولي فعال بشكل لا يصدق ويسترجع مجموعة واسعة من الوثائق التي قد تكون ذات صلة.
2. المستشار الخبير: نموذج إعادة الترتيب (Reranker Model)
الاسترجاع الأولي من نموذج التضمين سريع، ولكنه ليس مثاليًا دائمًا. قد يسحب وثائق ذات صلة بالموضوع ولكنها لا تجيب بدقة على استعلام المستخدم. وهنا يأتي دور نموذج إعادة الترتيب.
إذا كان نموذج التضمين هو أمين مكتبة عام، فإن نموذج إعادة الترتيب هو خبير في الموضوع. يأخذ أفضل النتائج من البحث الأولي ويجري تحليلًا أكثر دقة ومكثفًا من الناحية الحسابية. بدلاً من مقارنة متجه الاستعلام بمتجهات الوثائق بشكل مستقل، ينظر نموذج إعادة الترتيب (عادةً ما يكون cross-encoder) إلى الاستعلام وكل وثيقة كزوج.
تتيح هذه المقارنة المباشرة لنموذج إعادة الترتيب حساب درجة دقة أعلى بكثير. ثم يعيد ترتيب الوثائق بناءً على هذه الدرجة، دافعًا بالنتائج الأكثر صلة إلى الأعلى. هذه العملية ذات المرحلتين - استرجاع أولي سريع يتبعه إعادة ترتيب دقيقة - هي السر وراء أداء RAG المتطور.
تعرف على نماذج Qwen3: معيار جديد في الذكاء الاصطناعي مفتوح المصدر
سلسلة Qwen3 من Alibaba Cloud ليست مجرد مجموعة أخرى من النماذج؛ إنها تمثل قفزة كبيرة إلى الأمام في معالجة اللغة الطبيعية مفتوحة المصدر. إليك ما يميز نماذج التضمين وإعادة الترتيب:
- أداء متطور: احتل نموذج Qwen3-Embedding-8B، وقت إصداره، المرتبة الأولى في لوحة المتصدرين متعددة اللغات MTEB (معيار تضمين النص الضخم) شديدة التنافسية، متفوقًا على العديد من النماذج الراسخة.
- قدرة استثنائية متعددة اللغات: تم تدريب النماذج على مجموعة ضخمة من النصوص، وتدعم أكثر من 100 لغة، مما يجعلها مثالية لبناء تطبيقات على نطاق عالمي.
- مرنة وفعالة: تأتي النماذج بأحجام مختلفة (مثل 0.6 مليار، 4 مليار، و 8 مليار معلمة)، مما يسمح للمطورين باختيار أفضل توازن بين الأداء والسرعة ومتطلبات الأجهزة. كما أنها تدعم مستويات تكميم مختلفة، مما يقلل من استهلاك الذاكرة الخاص بها مع تأثير ضئيل على الدقة.
- مراعية للتعليمات: يمكنك تقديم تعليمات مخصصة للنماذج لتكييف أدائها لمهام أو مجالات محددة، وهي ميزة يمكن أن تحقق مكاسب كبيرة في الأداء.
إعداد بيئة الذكاء الاصطناعي المحلية الخاصة بك
الآن، دعنا نبدأ العمل. الخطوة الأولى هي إعداد Ollama وتنزيل نماذج Qwen3.
الخطوة 1: تثبيت Ollama
يوفر Ollama أمر تثبيت بسيطًا من سطر واحد لنظامي التشغيل macOS و Linux. افتح الطرفية الخاصة بك وقم بتشغيل:
curl -fsSL https://ollama.com/install.sh | sh
لنظام التشغيل Windows، قم بتنزيل المثبت الرسمي من موقع Ollama.
بمجرد التثبيت، يمكنك التحقق من عمله عن طريق تشغيل:
ollama --version
الخطوة 2: تنزيل نماذج Qwen3
مع تشغيل Ollama، يمكنك سحب النماذج من مكتبة Ollama. تستضاف نماذج Qwen3 تحت مساحة الاسم dengcao
. سنسحب إصدارًا موصى به من نماذج التضمين وإعادة الترتيب. تشير العلامة :Q5_K_M
إلى مستوى تكميم محدد يوفر توازنًا رائعًا بين الأداء واستخدام الموارد.
في الطرفية الخاصة بك، قم بتشغيل الأوامر التالية:
# Download the 8B parameter embedding model
ollama pull dengcao/Qwen3-Embedding-8B:Q5_K_M
# Download the 4B parameter reranker model
ollama pull dengcao/Qwen3-Reranker-4B:Q5_K_M
قد تستغرق هذه التنزيلات بعض الوقت، اعتمادًا على اتصالك بالإنترنت. بمجرد الانتهاء، يمكنك رؤية النماذج المتاحة محليًا عن طريق تشغيل ollama list
.
الجزء 1: توليد التضمينات باستخدام Qwen3
بعد تنزيل نموذج التضمين، دعنا نولد بعض المتجهات. سنستخدم مكتبة بايثون الرسمية ollama
. إذا لم تكن مثبتة لديك، قم بتشغيل pip install ollama
.
إليك نص بايثون بسيط لتوليد تضمين لجزء من النص:
import ollama
# Define the model name as downloaded
EMBEDDING_MODEL = 'dengcao/Qwen3-Embedding-8B:Q5_K_M'
def get_embedding(text: str):
"""Generates an embedding for a given text."""
try:
response = ollama.embeddings(
model=EMBEDDING_MODEL,
prompt=text
)
return response['embedding']
except Exception as e:
print(f"An error occurred: {e}")
return None
# --- Example Usage ---
sentence = "Ollama makes it easy to run LLMs locally."
embedding = get_embedding(sentence)
if embedding:
print(f"Embedding for: '{sentence}'")
# Print the first few dimensions for brevity
print(f"First 5 dimensions: {embedding[:5]}")
print(f"Total dimensions: {len(embedding)}")
سيقوم هذا السكريبت بإخراج أول خمس قيم للمتجه الذي تم إنشاؤه وحجمه الإجمالي (وهو 4096 لنموذج 8B). هذا المتجه هو التمثيل الرقمي لجملتنا، جاهز للتخزين والمقارنة.
الجزء 2: تحسين النتائج باستخدام Qwen3 Reranker
استخدام مُعيد الترتيب مختلف قليلاً. فبدلاً من نقطة نهاية rerank
مخصصة، نستخدم نقطة نهاية chat
القياسية. نقوم بصياغة طلب محدد يطلب من النموذج أن يعمل كمعيد ترتيب، مع أخذ استعلام ومستند كمدخلات وإخراج درجة الصلة.
دعنا ننشئ دالة بايثون للتعامل مع هذا. سنطلب من النموذج إرجاع "نعم" أو "لا" بسيط للإشارة إلى الصلة، والذي يمكننا تحويله بسهولة إلى درجة.
import ollama
# Define the model name as downloaded
RERANKER_MODEL = 'dengcao/Qwen3-Reranker-4B:Q5_K_M'
def rerank_document(query: str, document: str) -> float:
"""
Uses the Qwen3 Reranker to score the relevance of a document to a query.
Returns a score of 1.0 for 'Yes' and 0.0 for 'No'.
"""
prompt = f"""
You are an expert relevance grader. Your task is to evaluate if the
following document is relevant to the user's query.
Please answer with a simple 'Yes' or 'No'.
Query: {query}
Document: {document}
"""
try:
response = ollama.chat(
model=RERANKER_MODEL,
messages=[{'role': 'user', 'content': prompt}],
options={'temperature': 0.0} # For deterministic output
)
answer = response['message']['content'].strip().lower()
if 'yes' in answer:
return 1.0
return 0.0
except Exception as e:
print(f"An error occurred during reranking: {e}")
return 0.0
# --- Example Usage ---
user_query = "How do I run models locally?"
doc1 = "Ollama is a tool for running large language models on your own computer."
doc2 = "The capital of France is Paris."
score1 = rerank_document(user_query, doc1)
score2 = rerank_document(user_query, doc2)
print(f"Relevance of Doc 1: {'Relevant' if score1 > 0.5 else 'Not Relevant'} (Score: {score1})")
print(f"Relevance of Doc 2: {'Relevant' if score2 > 0.5 else 'Not Relevant'} (Score: {score2})")
توضح هذه الدالة كيفية التفاعل مع مُعيد الترتيب. إنها تحدد بشكل صحيح أن doc1
ذو صلة عالية بالاستعلام بينما doc2
ليس كذلك.
تجميع كل ذلك: تطبيق RAG بسيط
الآن للحدث الرئيسي. دعنا نبني خط أنابيب RAG مصغر يستخدم كلا النموذجين لدينا للإجابة على استعلام من قاعدة معرفية صغيرة. للبحث عن التشابه، سنستخدم numpy
. قم بتثبيته باستخدام pip install numpy
.
import ollama
import numpy as np
# --- Model Definitions ---
EMBEDDING_MODEL = 'dengcao/Qwen3-Embedding-8B:Q5_K_M'
RERANKER_MODEL = 'dengcao/Qwen3-Reranker-4B:Q5_K_M'
# --- 1. Corpus and Offline Embedding Generation ---
documents = [
"The Qwen3 series of models was developed by Alibaba Cloud.",
"Ollama provides a simple command-line interface for running LLMs.",
"A reranker model refines search results by calculating a precise relevance score.",
"To install Ollama on Linux, you can use a curl command.",
"Embedding models convert text into numerical vectors for semantic search.",
]
# In a real application, you would store these embeddings in a vector database
corpus_embeddings = []
print("Generating embeddings for the document corpus...")
for doc in documents:
response = ollama.embeddings(model=EMBEDDING_MODEL, prompt=doc)
corpus_embeddings.append(response['embedding'])
print("Embeddings generated.")
def cosine_similarity(v1, v2):
"""Calculates cosine similarity between two vectors."""
return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
# --- 2. Online Retrieval and Reranking ---
user_query = "How do I install Ollama?"
# Embed the user's query
query_embedding = ollama.embeddings(model=EMBEDDING_MODEL, prompt=user_query)['embedding']
# Perform initial retrieval (semantic search)
retrieval_scores = [cosine_similarity(query_embedding, emb) for emb in corpus_embeddings]
top_k_indices = np.argsort(retrieval_scores)[::-1][:3] # Get top 3 results
print("\n--- Initial Retrieval Results (before reranking) ---")
for i in top_k_indices:
print(f"Score: {retrieval_scores[i]:.4f} - Document: {documents[i]}")
# --- 3. Rerank the top results ---
retrieved_docs = [documents[i] for i in top_k_indices]
print("\n--- Reranking the top results ---")
reranked_scores = [rerank_document(user_query, doc) for doc in retrieved_docs]
# Combine documents with their new scores and sort
reranked_results = sorted(zip(retrieved_docs, reranked_scores), key=lambda x: x[1], reverse=True)
print("\n--- Final Results (after reranking) ---")
for doc, score in reranked_results:
print(f"Relevance Score: {score:.2f} - Document: {doc}")
عند تشغيل هذا السكريبت، سترى قوة العملية ذات المرحلتين. يسترجع الاسترجاع الأولي بشكل صحيح المستندات المتعلقة بـ "Ollama" و "التثبيت". ومع ذلك، يقوم مُعيد الترتيب بعد ذلك بتحديد المستند الخاص باستخدام curl
بدقة على أنه الأكثر صلة، ويدفعه إلى الأعلى بدرجة مثالية.
الخاتمة
لقد قمت الآن بإعداد واستخدام أحد أقوى ثنائيات الذكاء الاصطناعي مفتوحة المصدر المتاحة اليوم بنجاح، مباشرة على جهازك المحلي. من خلال الجمع بين النطاق الواسع لنموذج تضمين Qwen3 والدقة الشديدة لنموذج إعادة ترتيب Qwen3، يمكنك بناء تطبيقات تفهم وتعالج اللغة بمستوى من الدقة كان في السابق حكرًا على الأنظمة الكبيرة والخاصة.
لا تنتهي الرحلة هنا. يمكنك تجربة أحجام نماذج مختلفة، وتجربة مستويات تكميم متنوعة، ودمج هذا المسار في تطبيقات أكثر تعقيدًا. تفتح القدرة على تشغيل هذه الأدوات محليًا عالمًا من الإمكانيات، مما يمكّنك من الإبداع والابتكار والاستكشاف دون المساس بالخصوصية أو الأداء. مرحبًا بك في العصر الجديد للذكاء الاصطناعي المحلي مفتوح المصدر.
هل تريد منصة متكاملة وشاملة لفريق المطورين الخاص بك للعمل معًا بأقصى إنتاجية؟
يلبي Apidog جميع متطلباتك، ويحل محل Postman بسعر أكثر بأسعار معقولة بكثير!