استخدام LLMs مع LlamaIndex
تعرف على كيفية ربط LlamaIndex بشكل فعال بموفري LLM المختلفين، وبناء المطالبات، واختبار استجابات النموذج لضمان الاسترجاع الدقيق وتوليد استجابة .
سنغطي ما يلي...
يُمكّن LlamaIndex من التفاعل بسلاسة بين مصادر البيانات الخارجية ونماذج اللغات الكبيرة (LLMs)، مما يُعزز قدرتها على استرجاع المعلومات ومعالجتها بذكاء. قبل بناء تطبيقات ذكاء اصطناعي مُعقدة، من الضروري فهم كيفية ربط LlamaIndex بمُزودي نماذج اللغات الكبيرة (LLMs) المُختلفين، وتنظيم المُطالبات بفعالية لتحسين مخرجات نماذج اللغات الكبيرة (LLMs).
في هذا الدرس، سنتناول المواضيع مفتاح التالية:
ربط LlamaIndex بموفري LLM: سنقوم بتكوين OpenAI و Hugging Face والنماذج المحلية للاستخدام مع LlamaIndex.
كتابة وتنظيم المطالبات الفعالة لمرحلة الماجستير في القانون: سوف نستكشف كيفية تصميم المطالبات التي تعمل على تحسين جودة استجابة ودقتها.
إنشاء استجابات LLM: سنقوم بإنشاء استجابات LLM والتأكد من أنها متماسكة ودقيقة من الناحية الواقعية.
بحلول نهاية هذا الدرس، سنكون قادرين على تكوين LLM من اختيارنا والتفاعل معه من خلال LlamaIndex لتوليد استجابات ذات معنى.
تثبيت التبعيات
قبل أن نبدأ، لنتأكد من تثبيت LlamaIndex والمكتبات اللازمة لتكامل LLM. يُثبّت الأمر التالي التبعيات اللازمة لتكامل LlamaIndex مع أنواع مختلفة من نماذج اللغات الكبيرة (LLMs)، بما في ذلك نماذج OpenAI ، ونماذج Groq المُستضافة، ونماذج Hugging Face عبر واجهة برمجة التطبيقات (API)، والنماذج المحلية من Hugging Face وLlamaCPP.
!pip install llama-index llama-index-llms-openai llama-index-llms-groq llama-index-llms-huggingface-api llama-index-llms-huggingface llama-index-llms-llama-cpp
llama-index
: يدمج إطار عمل LlamaIndex أنظمة LLM مع البيانات المنظمة وغير المنظمة، وينشئ تدفقات عمل وكيلة، ويبني أنظمة ذكاء اصطناعي معقدة باستخدام أدوات متعددة لمهام مختلفة.
معلومة طريفة: كان اسم LlamaIndex في الأصل GPT-Index . ثم أُعيدت تسميته إلى LlamaIndex للتأكيد على دعمه لأنظمة إدارة التعلم (LLM) المتعددة، بما يتجاوز مجرد نماذج GPT!
llama-index-llms-openai
: يوفر واجهة للاتصال بالنماذج المستضافة في OpenAI، مثل GPT-4 وGPT-3.5-turbo، باستخدام API OpenAI .llama-index-llms-groq
يتيح التكامل مع API الاستدلال عالية السرعة من Groq لتشغيل نماذج LLaMA 3 بكفاءة. يُعد Groq بديلاً فعالاً من حيث التكلفة وعالي الأداء لأنظمة LLaMA السحابية التقليدية.llama-index-llms-huggingface-api
هي حزمة توفر واجهة للتفاعل مع نماذج API المستضافة في Hugging Face. بدلاً من تنزيل النماذج وتشغيلها محليًا، تتيح هذه الحزمة للمستخدمين إرسال طلبات إلى API الاستدلال في Hugging Face وتلقي ردود.llama-index-llms-huggingface
تتيح هذه المكتبة للمستخدمين تنزيل نماذج Hugging Face وتشغيلها محليًا. تتكامل مع مكتبة محولات Hugging Face، مما يتيح استخدام النماذج دون الحاجة إلى مفتاح API . يُعد هذا مفيدًا بشكل خاص عند تشغيل النماذج على وحدات معالجة الرسومات أو وحدات المعالجة المركزية المحلية بدلاً من الاعتماد على طلبات API السحابية.llama-index-llms-llama-cpp
هذه الحزمة مصممة خصيصًا لتشغيل برامج إدارة قواعد البيانات (LLM) خفيفة الوزن والمُحسّنة للتنفيذ المحلي. تتكامل معllama.cpp
محرك استدلال فعال لتشغيل نماذج GGUF (تنسيق Grok-Gemma الموحد) محليًا. وهو مثالي لنشر أنظمة إدارة التعلم (LLM) في بيئات ذات قدرة حوسبة محدودة.
حقيقة ممتعة: "cpp" في
llama.cpp
اختصار لـ C++، وهي لغة البرمجة التي تمت كتابتها بها.llama.cpp
تم إنشاؤه لتمكين الاستدلال عالي الكفاءة والمحسن لـ LLMs على وحدات المعالجة المركزية، مما يجعل تشغيل النماذج حتى على الأجهزة منخفضة الأداء ممكنًا!
في هذا الدرس، سنستخدم GPT من OpenAI، ونماذج LLaMA 3 المستضافة على Groq، ونماذج Mistral المستضافة على Hugging Face، والنماذج المستندة إلى Llama عبر Llama.cpp. مع ذلك، يدعم LlamaIndex العديد من نماذج LLM الأخرى. القائمة الكاملة متاحة في وثائقهم الرسمية .
ربط LlamaIndex بمقدمي LLM
يدعم LlamaIndex العديد من موفري LLM، بما في ذلك OpenAI وGroq و Hugging Face والنماذج المحلية. لنبدأ بتكوين كل موفر.
استخدام API OpenAI مع LlamaIndex
تُعد نماذج GPT من OpenAI من أقوى نماذج LLM المتاحة. لربط LlamaIndex بـ OpenAI ، علينا اتباع الخطوات التالية:
إعداد مفتاح API OpenAI : يجب إنشاء حساب OpenAI وإنشاء مفتاح API من منصة OpenAI . يجب تخزين مفتاح API بشكل آمن لتجنب الوصول غير المصرح به.
تكوين OpenAI كمزود LLM الخاص بنا: بمجرد حصولنا على مفتاح API ، يمكننا تكوين OpenAI كمزود LLM الخاص بنا باستخدام أسطر التعليمات البرمجية التالية.
from llama_index.llms.openai import OpenAIllm = OpenAI(model="gpt-4o", api_key="YOUR_OPENAI_API_KEY")
السطر 1: نقوم باستيراد
OpenAI
الصف منllama_index.llms.openai
، والذي تم تصميمه خصيصًا للعمل مع نماذج OpenAI .الخط 3:
OpenAI
توفر الفئة واجهة لمكالمات API إلى النماذج المستضافة في OpenAI (على سبيل المثال، GPT-4، GPT-3.5-turbo).ال
model
تحدد المعلمة نموذج OpenAI الذي سيتم استخدامه، مثلgpt-3.5-turbo
أوgpt-4
، أوgpt-4o
.ال
api_key="YOUR_OPENAI_API_KEY"
المعلمة هي المكان الذي يجب عليك فيه إدخال مفتاح API OpenAI الفعلي الخاص بك للمصادقة والوصول إلى API.
استخدام API الخاصة بـ Groq مع LlamaIndex
يوفر Groq وصولاً مُستضافًا إلى نماذج LLaMA 3 المُعدّلة للتعليمات بسرعة استثنائية وفعالية من حيث التكلفة. يُعد Groq بديلاً مناسبًا عندما يكون وقت استجابة والتكلفة من الاعتبارات الحاسمة.
لربط النماذج المستضافة على Groq مع LlamaIndex، نحتاج إلى اتباع الخطوات التالية:
إعداد مفتاح API Groq: نحتاج إلى إنشاء حساب على console.groq.com وإنشاء مفتاح API . يجب تخزين هذا مفتاح بشكل آمن.
تكوين Groq كمزود LLM: بمجرد حصولنا على مفتاح API ، يمكننا تكوين Groq كمزود LLM في LlamaIndex باستخدام أسطر التعليمات البرمجية التالية:
from llama_index.llms.groq import Groqllm = Groq(model="meta-llama/llama-4-scout-17b-16e-instruct", api_key="YOUR_GROQ_API_KEY")
السطر 1: نقوم باستيراد
Groq
الصف منllama_index.llms.groq
، الذي يوفر الواجهة لنماذج LLaMA المستضافة في Groq.الخط 2:
Groq
توفر الفئة واجهة لإجراء مكالمات API إلى النماذج المستضافة على Groq.ال
model
تسمح لنا المعلمة باختيار النماذج المتاحة المدعومة من Groq، مثل"llama3-70b-8192"
أو"llama3-8b-8192"
، أو أحدث طراز لاما 4،meta-llama/llama-4-scout-17b-16e-instruct
.ال
api_key
المعلمة مطلوبة للتحقق من صحة طلب باستخدام API Groq.
استخدام واجهة برمجة API Hugging Face مع LlamaIndex
يوفر Hugging Face إمكانية الوصول إلى مجموعة واسعة من برامج الماجستير في القانون مفتوحة المصدر.
from llama_index.llms.huggingface_api import HuggingFaceInferenceAPIllm = HuggingFaceInferenceAPI(model="mistralai/Mistral-7B-Instruct-v0.3", token="HUGGING_FACE_TOKEN")
السطر 1: نقوم باستيراد
HuggingFaceInferenceAPI
الصف منllama_index.llms.huggingface_api
تم تصميم هذه الفئة للتفاعل مع النماذج المستضافة على API Inference الخاصة بـ Hugging Face، مما يسمح لنا باستخدام النماذج المدربة مسبقًا دون الحاجة إلى حساب محلي.الخط 3:
HuggingFaceInferenceAPI
تتيح الفئة التفاعل مع النماذج المستضافة بواسطة Hugging Face عبر استدعاء واجهة API .ال
model
تحدد المعلمة النموذج المُراد استخدامه. في هذه الحالة،"mistralai/Mistral-7B-Instruct-v0.3"
يشير إلى طراز Mistral 7B Instruct، وهو طراز عالي الجودة تم تحسين برنامج LLM للمهام التي تتبع التعليمات.الوزن المفتوح الوزن المفتوح يعني أن معلمات النموذج المُدرَّبة (أو "الأوزان") متاحة للعامة، ما يسمح للمطورين بتنزيلها وتشغيلها محليًا أو ضبطها بدقة لاستخدامهم الخاص. هذا على عكس النماذج المغلقة مثل GPT-4، حيث لا تُنشر الأوزان ولا يمكن الوصول إليها إلا عبر API) . ال
token
تتطلب المعلمة الخاصة بك رمز API Hugging Face للمصادقة، والذي يمنح الوصول إلى النماذج المستضافة على Hugging Face.
تُعد نماذج Groq مفيدة بشكل خاص عند إنشاء تطبيقات تتطلب قدرات استنتاج سريعة وقابلة للتطوير وموفرة للتكاليف.
تشغيل برامج إدارة التعلم المحلية باستخدام LlamaIndex
إذا كنا نفضل تشغيل النماذج محليًا لأغراض الخصوصية أو كفاءة التكلفة أو إمكانيات العمل دون اتصال بالإنترنت، فإن LlamaIndex يسمح بالتكامل مع النماذج المستضافة محليًا. يضمن تشغيل نماذج LLM على الأجهزة المحلية التحكم الكامل في خصوصية البيانات، ويُلغي الاعتماد على واجهات برمجة التطبيقات السحابية، ويمكن أن يكون أكثر فعالية من حيث التكلفة على المدى الطويل.
يدعم LlamaIndex طرقًا متعددة لتشغيل LLMs المحلية، بما في ذلك محولات Hugging Face وllama.cpp
.
محولات Hugging Face
يوفر Hugging Face إمكانية الوصول إلى مجموعة واسعة من النماذج المُدرَّبة مسبقًا، والتي يُمكن تحميلها واستخدامها محليًا دون الاعتماد على واجهات برمجة تطبيقات خارجية. يدعم LlamaIndex هذا التكامل من خلالHuggingFaceLLM
فصل.
from llama_index.llms.huggingface import HuggingFaceLLMllm = HuggingFaceLLM(model_name="mistralai/Mistral-7B-Instruct-v0.3")
السطر 1: نقوم باستيراد
HuggingFaceLLM
الصف منllama_index.llms.huggingface
تسمح لنا هذه الفئة بتحميل نماذج Hugging Face واستخدامها محليًا دون الاعتماد على API.الخط 3:
HuggingFaceLLM
تقوم الفئة بإنشاء نموذج محلي.ال
model_name
تحدد المعلمة النموذج الذي سيتم استخدامه. هنا،"mistralai/Mistral-7B-Instruct-v0.3"
يشير إلى نموذج Mistral 7B Instruct، وهو LLM ذو وزن مفتوح تم تحسينه لمهام متابعة التعليمات.تم تنزيل هذا النموذج وتخزينه محليًا لإعادة استخدامه بكفاءة، مما يلغي الحاجة إلى الاستدلال المستند إلى السحابة.
يُعد هذا النهج الأنسب عند توفر وحدة معالجة رسومية (GPU) بسعة ذاكرة وصول عشوائي للفيديو (VRAM) لا تقل عن 13-16 جيجابايت، أو ذاكرة وحدة معالجة مركزية (CPU) كافية للتعامل مع النماذج الكبيرة بدقة عالية. يمنحنا هذا مرونة واستجابات عالية الجودة، ولكنه يتطلب ذاكرة أكبر.
لاما.cpp
لتشغيل النماذج المحلية المحسّنة للغاية، يوفر LlamaIndex الدعم لـLlamaCPP
، وهو تطبيق خفيف وفعال لـ LLMs. هذا النهج مفيد لتشغيل النماذج على أجهزة ذات موارد محدودة.
from llama_index.llms.llama_cpp import LlamaCPPllm = LlamaCPP(model_url="https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GGUF/resolve/main/qwen2.5-7b-instruct-q3_k_m.gguf")
السطر 1: نقوم باستيراد
LlamaCPP
الصف منllama_index.llms.llama_cpp
، والذي يوفر واجهة لتشغيل نماذج بتنسيق GGUF محليًا باستخدام المحسنllama.cpp
تطبيق.السطر 3: نقوم بإنشاء
LlamaCPP
لتحميل نموذج بتنسيق GGUF للاستدلال المحلي.ال
model_url
تحدد المعلمة عنوان URL للتنزيل المباشر للنموذج.في هذه الحالة،
qwen2.5-7b-instruct-q3_k_m.gguf
هو نموذج موجه للتعليمات ومتاح على Hugging Face.إذا لم يتم تنزيله بالفعل، فسيتم استرداد النموذج وتحميله في الذاكرة، مما يتيح الاستدلال الفعال دون اتصال بالإنترنت.
نماذج كمية مثلq3_k_m
أوq4_k_m
يُقلل استخدام الذاكرة بشكل ملحوظ. هذا يُمكّننا من تشغيل نماذج 7B بكفاءة على أنظمة ذات:
8–16 جيجابايت من ذاكرة الوصول العشوائي (RAM) (لتنفيذ وحدة المعالجة المركزية)
6–8 جيجابايت VRAM (لتسريع وحدة معالجة الرسومات)
نصيحة: نوصي باستخدام نماذج GGUF المُكمّمة مع llama.cpp عند العمل في بيئات محدودة أو الاختبار على جهاز شخصي. هذه النماذج أصغر وأسرع، وتتميز بقدرات مذهلة.
فهم المطالبات في LlamaIndex
بعد أن تعلمنا كيفية ربط نموذج LLM في LlamaIndex، تتمثل الخطوة التالية في هيكلة المطالبات بفعالية. يوفر LlamaIndex آليات لتحديد مطالبات النظام، ودمج البيانات المسترجعة، وضبط إعدادات استجابة بدقة. يساعد هذا في توجيه استجابات النموذج وتحسين دقة السياق.
تعريف مطالبات النظام
يُحدد مُوجِّه النظام السلوك العام لـ LLM، مما يضمن توافق الاستجابات مع دور أو هدف مُحدد. في LlamaIndex، يُمكن تعريف مُوجِّه النظام كما يلي:
llm.system_prompt = "You are an AI assistant that provides concise answers based on user's query."
من خلال استخدام موجه النظام، فإننا نضمن أن النموذج يتبع باستمرار التعليمات المقصودة طوال التفاعلات.
توليد الاستجابات
بعد تحديد المطالبات، تكون الخطوة التالية إرسالها إلى LLM واستلام استجابة مُولَّدة. يوفر LlamaIndex طريقتين لذلك: إحداهما متزامنة (.complete()
) وواحدة غير متزامن (.acomplete()
).
الطريقة المتزامنة:.complete()
هذه هي الطريقة القياسية طلب استجابة. عندما نستخدم.complete()
ينتظر البرنامج حتى ينتهي LLM من الاستجابة قبل الانتقال إلى السطر التالي من التعليمات البرمجية.
user_prompt = "What is the capital of France?"response = llm.complete(user_prompt)print(response)
الطريقة غير المتزامنة:.acomplete()
النسخة غير متزامن.acomplete()
يسمح هذا بتشغيل بقية البرنامج بينما يعمل مدير البرنامج على توليد استجابة. يُعد هذا مفيدًا عند إنشاء تطبيقات أو وكلاء يحتاجون إلى التعامل مع مهام متعددة في آنٍ واحد أو الحفاظ على استجابتهم.
import asyncioasync def get_response():response = await llm.acomplete("What is the capital of France?")print(response.text)asyncio.run(get_response())
ملاحظة حول الكود غير متزامن :
في Python، يمكننا تشغيل عمليات معينة بشكل غير متزامن، مما يعني عدم الحاجة إلى انتظار انتهاء مهمة قبل بدء أخرى. هذا مفيد بشكل خاص عند استدعاء واجهات برمجة تطبيقات خارجية - مثل LLM - حيث قد يؤدي انتظار استجابة إلى إبطاء العملية.
لاستخدام الكود غير المتزامن في Python:
async def
يعرف وظيفة غير متزامن .
await
يخبر Python بالتوقف مؤقتًا وانتظار انتهاء شيء ما (مثل مكالمة LLM)، دون حظر بقية البرنامج.
asyncio.run()
يتم استخدامه لبدء وظيفة غير متزامنة من الكود العادي.يوصى بهذا النمط بشكل خاص للأنظمة وسير العمل الوكيلة، حيث قد يتم تشغيل مهام غير متزامنة متعددة معًا.
ضبط سلوك استجابة بدقة
يُمكّننا LlamaIndex من ضبط توليد استجابة النموذج بدقة من خلال ضبط معلمات المطالبات مفتاح . إليك كيفية تكوينها:
llm.temperature = 0.3 # Reduces randomnessllm.max_tokens = 512 # Limits response lengthllm.top_p = 0.9 # Controls diversity of token selection
درجة الحرارة: قيمة أقل (على سبيل المثال،
0.3
) يجعل الاستجابات أكثر حتمية، في حين أن قيمة الأعلى تقدم المزيد من العشوائية.الحد الأقصى للرموز: يحد من طول الاستجابات لضمان الإيجاز.
Top-p (أخذ العينات من النواة): يتحكم في مدى تنوع اختيار رمز - تركز القيم المنخفضة على الكلمات ذات الاحتمالية العالية، مما ينتج عنه مخرجات أكثر تركيزًا.
ومن خلال ضبط هذه المعلمات، يمكننا تحقيق التوازن بين الإبداع والدقة استنادًا إلى احتياجات تطبيقنا.
تنفيذ التعليمات البرمجية
لتحسين تجربة التعلم، وفرنا منصةً تعليميةً تُمكّنك من تجربة الاتصال بأنظمة إدارة التعلم (LLM) وتشغيلها من مُزوّدين مُختلفين عبر API). في المنصة التعليمية أدناه، استخدمنا Groq افتراضيًا، ولكن يُمكنك تجربة مُزوّدين آخرين بتحديث أول سطرين من الكود.
ملاحظة: يمكنك تجربة تكاملات LLM القائمة على واجهة API(مثل OpenAI وGroq و Hugging Face API) مباشرةً على منصتنا. مع ذلك، قد يستغرق تشغيل نماذج LLM محلية (مثل LlamaCPP و Hugging Face ) وقتًا أطول بكثير، ومدة جلستنا محدودة. إذا كنت ترغب في تشغيل نماذج محلية، فننصحك بتنفيذ الكود على Google Colab أو على جهازك المحلي.
from llama_index.llms.groq import Groqllm = Groq(model="llama3-70b-8192", api_key="{{GROQ_API_KEY}}")query = "What is the capital of France?"response = llm.complete(query)print(response)
خاتمة
في هذا الدرس، استكشفنا كيفية دمج LlamaIndex مع مختلف موفري LLM، بما في ذلك OpenAI وGroq و Hugging Face، والنماذج المحلية باستخدام Llama.cpp. غطينا تثبيت التبعيات، وربط كل موفري الخدمة، وتنظيم المطالبات، وضبط الاستجابات بدقة لضمان الوضوح والاتساق.
يوفر Groq خيارًا ممتازًا للاستدلال السريع والفعال من حيث التكلفة باستخدام نماذج LLaMA 3، مما يجعله إضافة قوية لقطاع برامج ماجستير القانون. مع توفر هذه الأدوات، يمكننا الآن الاختيار والتبديل بين برامج ماجستير القانون بثقة لتلبية احتياجات تطبيقات الذكاء الاصطناعي لدينا.