بناء نظام RAG باستخدام Python وOpenAI

Share:
درس تقني متوسط ⏱ ٦٠ دقيقة قراءة © بوابة الذكاء الاصطناعي ٢٠٢٦-٠٦-١٥

في هذا الدرس التقني، ستتعلم كيفية بناء نظام قوي لتوليد المعلومات المعززة بالاسترجاع (RAG) باستخدام Python وSDK الأحدث من OpenAI. سيعزز هذا النظام استجابات نموذج اللغة الخاص بك من خلال تأصيلها في بيانات ذات صلة، مع التركيز على التطبيقات في منطقة الخليج العربي.

المتطلبات الأساسية

  • Python ٣.١٠ أو أحدث
  • مفتاح API من OpenAI
  • مهارات برمجة Python متوسطة

ما الذي نبنيه

سنقوم ببناء نظام توليد المعلومات المعززة بالاسترجاع (RAG) الذي يستفيد من قوة النماذج اللغوية الكبيرة مع دقة استرجاع البيانات المستهدفة. سيكون النظام قادرًا على جلب المعلومات ذات الصلة من مجموعة بيانات محددة واستخدام تلك المعلومات لتوليد استجابات أكثر دقة وذات سياق. هذا مفيد بشكل خاص في منطقة الخليج العربي حيث تركز مبادرات مثل رؤية السعودية ٢٠٣٠ على دمج الذكاء الاصطناعي.

سيسمح لك المشروع النهائي بإدخال استفسار، واسترجاع البيانات ذات الصلة من قاعدة بياناتك، ثم إنتاج استجابة تدمج هذه البيانات باستخدام نموذج GPT من OpenAI. هذا الإعداد مثالي لتطبيقات مثل دعم العملاء، الأدوات التعليمية، أو أي سياق حيث تكون الاستجابات الدقيقة والمستنيرة ضرورية.

الإعداد والتثبيت

لبدء بناء نظام RAG الخاص بنا، نحتاج إلى إعداد بيئة التطوير لدينا بالأدوات والمكتبات اللازمة. يتضمن ذلك تثبيت SDK من OpenAI وإعداد قاعدة بيانات متجهية لاسترجاع البيانات.

pip install openai pinecone-client

سنحتاج أيضًا إلى إعداد متغيرات البيئة لتخزين مفاتيح API الخاصة بنا وإعدادات التكوين الأخرى بشكل آمن. قم بإنشاء ملف .env في دليل مشروعك بالمحتوى التالي:

OPENAI_API_KEY=your_openai_api_key_here
PINECONE_API_KEY=your_pinecone_api_key_here

الخطوة ١: إعداد قاعدة البيانات المتجهية

قاعدة البيانات المتجهية هي مركز نظام RAG الخاص بنا، حيث تتيح لنا إجراء عمليات بحث عن التشابه بكفاءة. سنستخدم Pinecone، وهو محرك بحث متجه رائد، لتخزين واسترجاع البيانات بناءً على التشابه مع استفساراتنا المدخلة.


from pinecone import Pinecone

# Initialize Pinecone client
pc = Pinecone(api_key=os.getenv('PINECONE_API_KEY'))

# Define schema for your data
index = pc.Index('document-index')

# Create schema in Pinecone
index.create_index(dimension=512)

هنا نقوم بتهيئة عميل Pinecone باتصال آمن. نحدد فهرسًا لوثائقنا، مع تحديد أبعاد المتجهات. ثم يتم إنشاء هذا الفهرس في مثيل Pinecone الخاص بنا، مما يسمح لنا بتخزين المستندات واستجوابها.

الخطوة ٢: إدخال البيانات في قاعدة البيانات المتجهية

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


documents = [
    {"content": "OpenAI develops AI technologies and models for various applications."},
    {"content": "Pinecone is a leading vector search engine."},
    {"content": "Retrieval-Augmented Generation enhances language model outputs."}
]

# Add documents to Pinecone
for doc in documents:
    index.upsert(vectors=[(doc['content'], vector)])

يقوم هذا المقطع البرمجي بالتكرار عبر قائمة من المستندات ويضيف كل واحد منها إلى قاعدة بيانات Pinecone. سيتم استخدام هذه المستندات خلال مرحلة الاسترجاع لتوفير معلومات ذات صلة سياقية لنموذج اللغة الخاص بنا.

الخطوة ٣: بناء نظام RAG

الآن بعد أن تم تخزين بياناتنا، يمكننا بناء جوهر نظام RAG. يتضمن ذلك استجواب قاعدة البيانات المتجهية لاسترجاع المستندات ذات الصلة واستخدام API من OpenAI لتوليد استجابة بناءً على هذه المستندات.


from openai import OpenAI

# Initialize OpenAI client
client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))

def generate_response(query):
    # Retrieve relevant documents from Pinecone
    result = index.query(query, top_k=3)

    # Extract content from retrieved documents
    retrieved_texts = [doc['content'] for doc in result]

    # Construct a prompt for the language model
    prompt = f"Using the following information, answer the query: {query}n" + "n".join(retrieved_texts)

    # Generate a response using OpenAI's GPT model
    response = client.chat.completions.create(
        model="gpt-4",
        messages=[{"role": "system", "content": prompt}]
    )

    return response['choices'][0]['message']['content']

# Example usage
query = "What is RAG in AI?"
response = generate_response(query)
print(response)

في هذه الخطوة، نحدد دالة generate_response التي تأخذ استفسار المستخدم كمدخل. تسترجع الدالة أعلى ٣ مستندات ذات صلة من Pinecone وتبني موجهًا يتضمن هذه المستندات. ثم يتم إرسال هذا الموجه إلى نموذج GPT من OpenAI لتوليد استجابة متماسكة. تعيد الدالة الاستجابة المولدة، والتي يمكن طباعتها أو استخدامها في تطبيقك.

⚠️ خطأ شائع: تأكد من أن عميل Pinecone مصادق عليه بشكل صحيح وأن مفتاح API من OpenAI صالح. يمكن أن يؤدي سوء التكوين إلى أخطاء في المصادقة.

اختبار تنفيذك

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


# Test the system
test_queries = [
    "Explain the concept of RAG in AI.",
    "What is OpenAI known for?",
    "Describe Pinecone's functionality."
]

for query in test_queries:
    print(f"Query: {query}")
    response = generate_response(query)
    print(f"Response: {response}n")

قم بتشغيل هذا البرنامج النصي للاختبار لترى كيف يعمل نظامك بشكل جيد. يجب أن تعكس الاستجابات محتوى المستندات المخزنة لديك وتوفر إجابات مفيدة للاستفسارات.

ما الذي تبنيه بعد ذلك

إليك بعض الأفكار لتوسيع قدرات نظام RAG الخاص بك:

  • دمج المزيد من مصادر البيانات: عزز نظام RAG الخاص بك عن طريق دمج مصادر بيانات إضافية مثل الأخبار الحية أو قواعد البيانات الخاصة.
  • تحسين استراتيجيات الاسترجاع: جرب طرق استرجاع هجينة تجمع بين البحث المتجه والبحث التقليدي بالكلمات المفتاحية لتحسين الدقة.
  • النشر للإنتاج: قم بتعبئة نظام RAG الخاص بك في خدمة مصغرة وقم بنشره على منصة سحابية للتوسع والتوافر.
Share:

هل كان هذا الشرح مفيداً؟