بناء نظام حديث لتوليد المعلومات المعزز بالاسترجاع (RAG) باستخدام OpenAI وPinecone
تعلم كيفية بناء نظام توليد المعلومات المعزز بالاسترجاع (RAG) المتطور باستخدام نماذج GPT من OpenAI وPinecone لاسترجاع وتوليد المعلومات بكفاءة. سيرشدك هذا الدرس التقني خلال إعداد نظام يجمع بين قوة نماذج اللغة وقواعد البيانات المتجهية لاسترجاع المعلومات ذات الصلة وتوليد ردود غنية بالسياق، مع دمج أحدث التطورات في تكنولوجيا RAG.
المتطلبات الأساسية
- Python ٣.١٠ أو أعلى
- مفتاح API لـ OpenAI
- حساب ومفتاح API لـ Pinecone
- معرفة متوسطة بـ Python وRESTful APIs
ما الذي نبنيه
في هذا الدرس التقني، ستتعلم كيفية بناء نظام توليد المعلومات المعزز بالاسترجاع (RAG). يجمع هذا النظام بين قوة نماذج اللغة من OpenAI وقاعدة البيانات المتجهية من Pinecone لاسترجاع المعلومات ذات الصلة وتوليد ردود غنية بالسياق. تم تصميم نظام RAG للتعامل مع البيانات غير المهيكلة وتقديم إجابات دقيقة ومفصلة من خلال الاستفادة من قدرات الاسترجاع والتوليد. بنهاية هذا الدرس، سيكون لديك نظام RAG وظيفي بالكامل يمكن استخدامه في تطبيقات متنوعة، مثل دعم العملاء وإدارة المعرفة والمزيد. سيقوم النظام باسترجاع الوثائق ذات الصلة من قاعدة البيانات المتجهية واستخدام نموذج اللغة لتوليد ردود متماسكة وغنية بالمعلومات.
الإعداد والتثبيت
سنبدأ بإعداد بيئة التطوير الخاصة بنا. يتضمن ذلك تثبيت حزم Python اللازمة وتكوين متغيرات البيئة للوصول إلى API.
pip install openai pineconeبعد ذلك، نحتاج إلى تكوين متغيرات البيئة الخاصة بنا. قم بإنشاء ملف باسم .env في دليل المشروع الخاص بك وأضف المتغيرات التالية:
OPENAI_API_KEY=your_openai_api_key
PINECONE_API_KEY=your_pinecone_api_key
PINECONE_ENVIRONMENT=your_pinecone_environmentستسمح هذه المتغيرات البيئية لتطبيقنا بالمصادقة بأمان مع واجهات برمجة التطبيقات لـ OpenAI وPinecone.
الخطوة ١: إعداد البيانات والفهرسة
الخطوة الأولى هي إعداد مجموعة البيانات الخاصة بنا وفهرستها باستخدام Pinecone. سنقوم بتقسيم مجموعة البيانات إلى أجزاء، وحساب التضمينات المتجهية، وتخزينها في فهرس Pinecone لاسترجاع فعال.
import os
from openai import OpenAI
from pinecone import Pinecone
# Load API keys from environment variables
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
pc = Pinecone(api_key=os.getenv("PINECONE_API_KEY"), environment=os.getenv("PINECONE_ENVIRONMENT"))
# Create a Pinecone index
index_name = "document-index"
index = pc.Index(name=index_name, dimension=1536, metric="cosine")
# Example dataset
documents = ["Document 1 content...", "Document 2 content...", "Document 3 content..."]
# Function to create vector embeddings
def create_embeddings(text):
response = client.embeddings.create(model="text-embedding-ada-002", input=text)
return response['data'][0]['embedding']
# Index documents
for i, doc in enumerate(documents):
embedding = create_embeddings(doc)
index.upsert([(f"doc_{i}", embedding)])في هذه الخطوة، نقوم بتهيئة عميل Pinecone وإنشاء فهرس بأبعاد ومقياس محددين. ثم نقوم بإنشاء تضمينات لكل وثيقة باستخدام نموذج التضمين من OpenAI وتحميلها إلى فهرس Pinecone.
الخطوة ٢: تنفيذ وظيفة الاسترجاع
بعد ذلك، نقوم بتنفيذ وظيفة لاستعلام فهرس Pinecone واسترجاع الوثائق التي تتشابه دلالياً مع استعلام الإدخال.
def retrieve_documents(query, top_k=3):
# Generate query embedding
query_embedding = create_embeddings(query)
# Query Pinecone index
results = index.query(query_embedding, top_k=top_k, include_values=True)
# Extract document IDs
document_ids = [match['id'] for match in results['matches']]
return document_ids
# Example query
query = "Explain the concept of RAG systems."
retrieved_docs = retrieve_documents(query)
print("Retrieved document IDs:", retrieved_docs)تأخذ هذه الوظيفة سلسلة استعلام، وتولد تضمينها، وتقوم بإجراء بحث تشابه في فهرس Pinecone. يتم إرجاع أفضل معرفات الوثائق المتطابقة، والتي تمثل الوثائق الأكثر صلة بالاستعلام.
الخطوة ٣: توليد الردود باستخدام OpenAI
مع استرجاع الوثائق ذات الصلة، يمكننا الآن استخدام نموذج GPT من OpenAI لتوليد رد. يتضمن ذلك بناء موجه يتضمن الوثائق المسترجعة واستعلام المستخدم.
def generate_response(query, document_ids):
# Retrieve document contents
documents_content = [documents[int(doc_id.split("_")[1])] for doc_id in document_ids]
# Construct prompt
prompt = f"Given the following documents:nn{'
'.join(documents_content)}nnAnswer the following question:n{query}"
# Generate response using OpenAI GPT
response = client.completions.create(
model="gpt-4o",
prompt=prompt,
max_tokens=200
)
return response.choices[0].text.strip()
# Generate a response
response = generate_response(query, retrieved_docs)
print("Generated Response:", response)نسترجع محتوى الوثائق باستخدام معرفاتها، ثم نبني موجه لنموذج GPT. يقوم النموذج بتوليد رد بناءً على المعلومات المجمعة من الوثائق والاستعلام.
اختبار تنفيذك
للتحقق من أن نظام RAG يعمل بشكل صحيح، سنختبره مع استعلامات متنوعة ونتحقق من أن الردود ذات صلة وغنية بالمعلومات.
# Test with different queries
test_queries = [
"What is the purpose of retrieval-augmented generation?",
"How does Pinecone help in information retrieval?",
"Explain how GPT models generate text."
]
for test_query in test_queries:
retrieved_docs = retrieve_documents(test_query)
response = generate_response(test_query, retrieved_docs)
print(f"Query: {test_query}nResponse: {response}n")قم بتشغيل هذه الاستعلامات التجريبية للتأكد من أن النظام يسترجع الوثائق الصحيحة ويولد ردود دقيقة. قم بتعديل الموجه أو معلمات الاسترجاع إذا لزم الأمر بناءً على جودة المخرجات.
ما الذي يمكن بناؤه بعد ذلك
- تعزيز وظيفة الاسترجاع لاستخدام نهج هجين يجمع بين البحث الدلالي والبحث بالكلمات المفتاحية لتحسين الدقة.
- دمج واجهة مستخدم للتفاعل في الوقت الحقيقي مع نظام RAG، مما يسمح للمستخدمين بإدخال الاستعلامات وتلقي الردود مباشرة.
- توسيع مجموعة البيانات واستكشاف تطبيقات مختلفة خاصة بالمجال، مثل استرجاع المعلومات الطبية أو تحليل الوثائق القانونية.
فكر في دمج هذه التقنية مع المبادرات الإقليمية مثل رؤية السعودية ٢٠٣٠ لتعزيز الحلول المدفوعة بالذكاء الاصطناعي في منطقة الخليج، مستفيدًا من أحدث التطورات في RAG الديناميكي والبارامتري لأنظمة استرجاع المعلومات الأكثر تكيفًا وكفاءة.