استخدام LLMs مع LlamaIndex

تعرف على كيفية ربط LlamaIndex بشكل فعال بموفري LLM المختلفين، وبناء المطالبات، واختبار استجابات النموذج لضمان الاسترجاع الدقيق وتوليد استجابة .

سنغطي ما يلي...

يُمكّن LlamaIndex من التفاعل بسلاسة بين مصادر البيانات الخارجية ونماذج اللغات الكبيرة (LLMs)، مما يُعزز قدرتها على استرجاع المعلومات ومعالجتها بذكاء. قبل بناء تطبيقات ذكاء اصطناعي مُعقدة، من الضروري فهم كيفية ربط LlamaIndex بمُزودي نماذج اللغات الكبيرة (LLMs) المُختلفين، وتنظيم المُطالبات بفعالية لتحسين مخرجات نماذج اللغات الكبيرة (LLMs).

في هذا الدرس، سنتناول المواضيع مفتاح التالية:

  • ربط LlamaIndex بموفري LLM: سنقوم بتكوين OpenAI و Hugging Face والنماذج المحلية للاستخدام مع LlamaIndex.

  • كتابة وتنظيم المطالبات الفعالة لمرحلة الماجستير في القانون: سوف نستكشف كيفية تصميم المطالبات التي تعمل على تحسين جودة استجابة ودقتها.

  • إنشاء استجابات LLM: سنقوم بإنشاء استجابات LLM والتأكد من أنها متماسكة ودقيقة من الناحية الواقعية.

Press + to interact
Steps to use LLMs in LlamaIndex
Steps to use LLMs in LlamaIndex

بحلول نهاية هذا الدرس، سنكون قادرين على تكوين 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
Command to install dependencies
  • 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-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 الأخرى. القائمة الكاملة متاحة في وثائقهم الرسمية .

Press + to interact
Integrating multiple LLMs into LlamaIndex: GPT, Mistral, LLaMA, and Qwen
Integrating multiple LLMs into LlamaIndex: GPT, Mistral, LLaMA, and Qwen

ربط LlamaIndex بمقدمي LLM

يدعم LlamaIndex العديد من موفري LLM، بما في ذلك OpenAI وGroq و Hugging Face والنماذج المحلية. لنبدأ بتكوين كل موفر.

استخدام API OpenAI مع LlamaIndex

تُعد نماذج GPT من OpenAI من أقوى نماذج LLM المتاحة. لربط LlamaIndex بـ OpenAI ، علينا اتباع الخطوات التالية:

  1. إعداد مفتاح API OpenAI : يجب إنشاء حساب OpenAI وإنشاء مفتاح API من منصة OpenAI . يجب تخزين مفتاح API بشكل آمن لتجنب الوصول غير المصرح به.

  2. تكوين OpenAI كمزود LLM الخاص بنا: بمجرد حصولنا على مفتاح API ، يمكننا تكوين OpenAI كمزود LLM الخاص بنا باستخدام أسطر التعليمات البرمجية التالية.

from llama_index.llms.openai import OpenAI
llm = OpenAI(model="gpt-4o", api_key="YOUR_OPENAI_API_KEY")
Code to configure OpenAI LLM in LlamaIndex
  • السطر 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، نحتاج إلى اتباع الخطوات التالية:

  1. إعداد مفتاح API Groq: نحتاج إلى إنشاء حساب على console.groq.com وإنشاء مفتاح API . يجب تخزين هذا مفتاح بشكل آمن.

  2. تكوين Groq كمزود LLM: بمجرد حصولنا على مفتاح API ، يمكننا تكوين Groq كمزود LLM في LlamaIndex باستخدام أسطر التعليمات البرمجية التالية:

from llama_index.llms.groq import Groq
llm = Groq(model="meta-llama/llama-4-scout-17b-16e-instruct", api_key="YOUR_GROQ_API_KEY")
Code to configure Groq hosted LLMs in LlamaIndex
  • السطر 1: نقوم باستيراد فئة Groq من llama_index.llms.groq ، والتي توفر الواجهة لنماذج LLaMA المستضافة في Groq.

  • السطر 2: توفر فئة Groq واجهة لإجراء مكالمات API إلى النماذج المستضافة على Groq.

    • تسمح لنا معلمة model باختيار النماذج المتاحة المدعومة من Groq، مثل "llama3-70b-8192" أو "llama3-8b-8192" ، أو أحدث طراز llama 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 HuggingFaceInferenceAPI
llm = HuggingFaceInferenceAPI(model="mistralai/Mistral-7B-Instruct-v0.3", token="HUGGING_FACE_TOKEN")
Code to configure a Hugging Face model in LlamaIndex
  • السطر ١: نستورد فئة HuggingFaceInferenceAPI من llama_index.llms.huggingface_api . صُممت هذه الفئة للتفاعل مع النماذج المُستضافة على واجهة API Hugging Face Inference، مما يسمح لنا باستخدام نماذج مُدرَّبة مسبقًا دون الحاجة إلى حساب محلي.

  • السطر 3: تتيح فئة HuggingFaceInferenceAPI التفاعل مع النماذج المستضافة بواسطة Hugging Face عبر استدعاء API .

    • يُحدد مُعامل model النموذج المُراد استخدامه. في هذه الحالة، يُشير "mistralai/Mistral-7B-Instruct-v0.3" إلى نموذج Mistral 7B Instruct، وهو نموذج عالي الجودة. الوزن المفتوح الوزن المفتوح يعني أن معلمات النموذج المُدرَّبة (أو "الأوزان") متاحة للعامة، ما يسمح للمطورين بتنزيلها وتشغيلها محليًا أو ضبطها بدقة لاستخدامهم الخاص. هذا على عكس النماذج المغلقة مثل GPT-4، حيث لا تُنشر الأوزان ولا يمكن الوصول إليها إلا عبر API) . تم تحسين برنامج LLM للمهام التي تتبع التعليمات.

    • تتطلب معلمة 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 HuggingFaceLLM
llm = HuggingFaceLLM(model_name="mistralai/Mistral-7B-Instruct-v0.3")
Loading and running a Hugging Face model locally using LlamaIndex
  • السطر ١: نستورد فئة 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 LlamaCPP
llm = LlamaCPP(model_url="https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GGUF/resolve/main/qwen2.5-7b-instruct-q3_k_m.gguf")
Running a local LLM using llama.cpp integration in LlamaIndex
  • السطر 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."
Setting the system prompt in LlamaIndex

من خلال استخدام موجه النظام، فإننا نضمن أن النموذج يتبع باستمرار التعليمات المقصودة طوال التفاعلات.

توليد الاستجابات

بعد تحديد المطالبات، تكون الخطوة التالية إرسالها إلى LLM واستلام استجابة مُولَّدة. يوفر LlamaIndex طريقتين لذلك: إحداهما متزامنة ( .complete() ) والأخرى غير متزامن ( .acomplete() ).

الطريقة المتزامنة: .complete()

هذه هي الطريقة القياسية طلب استجابة. عند استخدام .complete() ، ينتظر البرنامج حتى ينتهي LLM من الاستجابة قبل الانتقال إلى السطر التالي من الكود.

user_prompt = "What is the capital of France?"
response = llm.complete(user_prompt)
print(response)
Call the LLM synchronously using .complete() and print the generated response

الطريقة غير المتزامنة: .acomplete()

يتيح الإصدار غير متزامن .acomplete() استمرار تشغيل بقية البرنامج بينما يعمل LLM على توليد استجابة. يُعد هذا مفيدًا عند بناء تطبيقات أو وكلاء يحتاجون إلى التعامل مع مهام متعددة في آنٍ واحد أو البقاء مستجيبين.

import asyncio
async def get_response():
response = await llm.acomplete("What is the capital of France?")
print(response.text)
asyncio.run(get_response())
Call the LLM asynchronously using .acomplete() within an async function for improved responsiveness

ملاحظة حول الكود غير متزامن :

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

لاستخدام الكود غير المتزامن في Python:

  • يحدد async def دالة غير متزامن .

  • يخبر await Python بالتوقف مؤقتًا وانتظار انتهاء شيء ما (مثل مكالمة LLM)، دون حظر بقية البرنامج.

  • يتم استخدام asyncio.run() لبدء تشغيل دالة غير متزامنة من الكود العادي.

يوصى بهذا النمط بشكل خاص للأنظمة وسير العمل الوكيلة، حيث قد يتم تشغيل مهام غير متزامنة متعددة معًا.

ضبط سلوك استجابة بدقة

يُمكّننا LlamaIndex من ضبط توليد استجابة النموذج بدقة من خلال ضبط معلمات المطالبات مفتاح . إليك كيفية تكوينها:

llm.temperature = 0.3 # Reduces randomness
llm.max_tokens = 512 # Limits response length
llm.top_p = 0.9 # Controls diversity of token selection
Configuring LLM prompt parameters in LlamaIndex
  • درجة الحرارة: قيمة المنخفضة (على سبيل المثال، 0.3 ) تجعل الاستجابات أكثر تحديدًا، في حين أن قيمة الأعلى تقدم المزيد من العشوائية.

  • الحد الأقصى للرموز: يحد من طول الاستجابات لضمان الإيجاز.

  • Top-p (أخذ العينات من النواة): يتحكم في مدى تنوع اختيار رمز - تركز القيم المنخفضة على الكلمات ذات الاحتمالية العالية، مما ينتج عنه مخرجات أكثر تركيزًا.

ومن خلال ضبط هذه المعلمات، يمكننا تحقيق التوازن بين الإبداع والدقة استنادًا إلى احتياجات تطبيقنا.

تنفيذ التعليمات البرمجية

لتحسين تجربة التعلم، وفرنا منصةً تعليميةً تُمكّنك من تجربة الاتصال بأنظمة إدارة التعلم (LLM) وتشغيلها من مُزوّدين مُختلفين عبر API). في المنصة التعليمية أدناه، استخدمنا Groq افتراضيًا، ولكن يُمكنك تجربة مُزوّدين آخرين بتحديث أول سطرين من الكود.

ملاحظة: يمكنك تجربة تكاملات LLM القائمة على واجهة API(مثل OpenAI وGroq و Hugging Face API) مباشرةً على منصتنا. مع ذلك، قد يستغرق تشغيل نماذج LLM محلية (مثل LlamaCPP و Hugging Face ) وقتًا أطول بكثير، ومدة جلستنا محدودة. إذا كنت ترغب في تشغيل نماذج محلية، فننصحك بتنفيذ الكود على Google Colab أو على جهازك المحلي.

Press + to interact
Python 3.10.4
from llama_index.llms.groq import Groq
llm = 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، مما يجعله إضافة قوية لقطاع برامج ماجستير القانون. مع توفر هذه الأدوات، يمكننا الآن الاختيار والتبديل بين برامج ماجستير القانون بثقة لتلبية احتياجات تطبيقات الذكاء الاصطناعي لدينا.