الذكاء العام الاصطناعي
بناء وكلاء LLM لـ RAG من الصفر وما بعده: دليل شامل

غالبًا ما تكافح برامج LLM مثل GPT-3 وGPT-4 ونظيرتها مفتوحة المصدر مع استرجاع المعلومات الحديثة ويمكن أن تولد في بعض الأحيان هلوسة أو معلومات غير صحيحة.
الاسترجاع المعزز للجيل (RAG) هي تقنية تجمع بين قوة LLMs واسترجاع المعرفة الخارجية. يسمح لنا RAG بربط استجابات LLM بمعلومات واقعية وحديثة، مما يحسن بشكل كبير من دقة وموثوقية المحتوى الناتج عن الذكاء الاصطناعي.
في هذه التدوينة، سنستكشف كيفية بناء وكلاء LLM لـ RAG من الصفر، مع التعمق في بنيتها وتفاصيل تنفيذها وتقنياتها المتقدمة. سنغطي كل شيء، بدءًا من أساسيات RAG ووصولًا إلى إنشاء وكلاء متطورين قادرين على التفكير المعقد وتنفيذ المهام.
قبل أن نبدأ في بناء وكيل LLM الخاص بنا، دعونا نفهم ما هو RAG ولماذا هو مهم.
RAG، أو الجيل المعزز للاسترجاع، هو أسلوب مختلط يجمع بين استرجاع المعلومات وإنشاء النص. في نظام RAG:
- يتم استخدام الاستعلام لاسترداد المستندات ذات الصلة من قاعدة المعرفة.
- يتم بعد ذلك إدخال هذه المستندات في نموذج لغة مع الاستعلام الأصلي.
- يقوم النموذج بإنشاء استجابة بناءً على كل من الاستعلام والمعلومات المستردة.
هذا النهج لديه العديد من المزايا:
- دقة محسنة: من خلال ترسيخ الاستجابات في المعلومات المستردة، يقلل RAG من الهلوسة ويحسن الدقة الواقعية.
- معلومات جديده اولا بأول: يمكن تحديث قاعدة المعرفة بانتظام، مما يسمح للنظام بالوصول إلى المعلومات الحالية.
- لشفافية والولاء: يمكن للنظام توفير مصادر لمعلوماته، مما يزيد من الثقة ويسمح بالتحقق من الحقائق.
فهم وكلاء LLM
عندما تواجه مشكلة ليس لها إجابة بسيطة، فغالبًا ما تحتاج إلى اتباع عدة خطوات والتفكير جيدًا وتذكر ما جربته بالفعل. تم تصميم وكلاء LLM خصيصًا لهذه الأنواع من المواقف في تطبيقات نماذج اللغة. فهي تجمع بين تحليل البيانات الشامل والتخطيط الاستراتيجي واسترجاع البيانات والقدرة على التعلم من الإجراءات السابقة لحل المشكلات المعقدة.
ما هم وكلاء LLM؟
وكلاء LLM عبارة عن أنظمة ذكاء اصطناعي متقدمة مصممة لإنشاء نص معقد يتطلب التفكير المتسلسل. يمكنهم التفكير مسبقًا، وتذكر المحادثات السابقة، واستخدام أدوات مختلفة لضبط استجاباتهم بناءً على الموقف والأسلوب المطلوب.
فكر في سؤال في المجال القانوني مثل: "ما هي النتائج القانونية المحتملة لنوع معين من خرق العقود في كاليفورنيا؟" يمكن لـ LLM الأساسي المزود بنظام الاسترجاع المعزز (RAG) جلب المعلومات الضرورية من قواعد البيانات القانونية.
للحصول على سيناريو أكثر تفصيلاً: "في ضوء قوانين خصوصية البيانات الجديدة، ما هي التحديات القانونية الشائعة التي تواجهها الشركات، وكيف عالجت المحاكم هذه القضايا؟" هذا السؤال أعمق من مجرد البحث عن الحقائق، بل يتعلق بفهم القواعد الجديدة، وتأثيرها على الشركات المختلفة، وردود المحاكم. سيقوم وكيل ماجستير القانون بتقسيم هذه المهمة إلى مهام فرعية، مثل استرجاع أحدث القوانين، وتحليل القضايا السابقة، وتلخيص الوثائق القانونية، والتنبؤ بالاتجاهات بناءً على الأنماط.
مكونات وكلاء LLM
يتكون وكلاء LLM عمومًا من أربعة مكونات:
- الوكيل/الدماغ: نموذج اللغة الأساسي الذي يعالج اللغة ويفهمها.
- تخطيط الرحلة: القدرة على التفكير وتقسيم المهام ووضع خطط محددة.
- ذاكرة: يحتفظ بسجلات للتفاعلات السابقة ويتعلم منها.
- استخدام الأداة: يدمج الموارد المختلفة لأداء المهام.
الوكيل/الدماغ
يوجد في جوهر وكيل LLM نموذج لغة يعالج اللغة ويفهمها بناءً على كميات هائلة من البيانات التي تم تدريبه عليها. عليك أن تبدأ بإعطائه توجيهًا محددًا، وتوجيه الوكيل حول كيفية الاستجابة، والأدوات التي يجب استخدامها، والأهداف التي يجب استهدافها. يمكنك تخصيص الوكيل بشخصية مناسبة لمهام أو تفاعلات معينة، مما يعزز أدائه.
ذاكرة
يساعد مكون الذاكرة وكلاء LLM على التعامل مع المهام المعقدة من خلال الاحتفاظ بسجل للإجراءات السابقة. هناك نوعان رئيسيان من الذاكرة:
- ذاكرة قصيرة المدي: يعمل مثل المفكرة، لتتبع المناقشات الجارية.
- ذاكرة طويلة المدى: تعمل مثل المذكرات، حيث تقوم بتخزين المعلومات من التفاعلات السابقة لتعلم الأنماط واتخاذ قرارات أفضل.
ومن خلال مزج هذه الأنواع من الذاكرة، يمكن للوكيل تقديم استجابات أكثر تخصيصًا وتذكر تفضيلات المستخدم بمرور الوقت، مما يؤدي إلى إنشاء تفاعل أكثر ارتباطًا وملاءمة.
تخطيط الرحلة
يمكّن التخطيط وكلاء LLM من التفكير، وتفكيك المهام إلى أجزاء يمكن التحكم فيها، وتكييف الخطط مع تطور المهام. يتضمن التخطيط مرحلتين رئيسيتين:
- صياغة الخطة: تقسيم المهمة إلى مهام فرعية أصغر.
- انعكاس الخطة: مراجعة وتقييم فعالية الخطة، ودمج ردود الفعل لتحسين الاستراتيجيات.
تساعد أساليب مثل سلسلة الفكر (CoT) وشجرة الفكر (ToT) في عملية التحلل هذه، مما يسمح للعملاء باستكشاف مسارات مختلفة لحل المشكلة.
للتعمق أكثر في عالم عملاء الذكاء الاصطناعي، بما في ذلك قدراتهم وإمكاناتهم الحالية، فكر في القراءة "مهندس Auto-GPT وGPT: دليل متعمق لوكلاء الذكاء الاصطناعي الرائدين اليوم"
تهيئة البيئة
لبناء وكيل RAG، سنحتاج إلى إعداد بيئة التطوير. سنستخدم بايثون والعديد من المكتبات الرئيسية:
- لانجشين: لتنظيم مكونات LLM والاسترجاع لدينا
- صفاء: باعتباره متجرنا المتجه لتضمين المستندات
- نماذج GPT من OpenAI: باعتبارها LLM الأساسية لدينا (يمكنك استبدال هذا بنموذج مفتوح المصدر إذا كنت تفضل ذلك)
- FastAPI: لإنشاء واجهة برمجة تطبيقات بسيطة للتفاعل مع وكيلنا
لنبدأ بإعداد بيئتنا:
# Create a new virtual environment python -m venv rag_agent_env source rag_agent_env/bin/activate # On Windows, use `rag_agent_env\Scripts\activate` # Install required packages pip install langchain chromadb openai fastapi uvicorn
الآن، دعنا نقوم بإنشاء ملف Python جديد يسمى rag_agent.py ونستورد المكتبات الضرورية:
from langchain.embeddings import OpenAIEmbeddings from langchain.vectorstores import Chroma from langchain.text_splitter import CharacterTextSplitter from langchain.llms import OpenAI from langchain.chains import RetrievalQA from langchain.document_loaders import TextLoader import os # Set your OpenAI API key os.environ["OPENAI_API_KEY"] = "your-api-key-here"
بناء نظام RAG بسيط
بعد أن أعددنا بيئتنا، لنبدأ ببناء نظام RAG أساسي. سنبدأ بإنشاء قاعدة معارف من مجموعة من المستندات، ثم نستخدمها للإجابة على الاستفسارات.
الخطوة 1: تحضير المستندات
أولاً، علينا تحميل مستنداتنا وتجهيزها. في هذا المثال، لنفترض أن لدينا ملفًا نصيًا باسم knowledge_base.txt يحتوي على معلومات حول الذكاء الاصطناعي والتعلم الآلي.
# Load the document loader = TextLoader("knowledge_base.txt") documents = loader.load() # Split the documents into chunks text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) texts = text_splitter.split_documents(documents) # Create embeddings embeddings = OpenAIEmbeddings() # Create a vector store vectorstore = Chroma.from_documents(texts, embeddings)
الخطوة 2: إنشاء سلسلة ضمان الجودة على أساس الاسترجاع
الآن بعد أن أصبح لدينا متجر المتجهات الخاص بنا، يمكننا إنشاء سلسلة ضمان الجودة قائمة على الاسترجاع:
# Create a retrieval-based QA chain qa = RetrievalQA.from_chain_type(llm=OpenAI(), chain_type="stuff", retriever=vectorstore.as_retriever())
الخطوة 3: الاستعلام عن النظام
يمكننا الآن الاستعلام عن نظام RAG الخاص بنا:
query = "What are the main applications of machine learning?" result = qa.run(query) print(result)
الخطوة 4: إنشاء وكيل LLM
مع أن نظامنا البسيط RAG مفيد، إلا أنه محدود للغاية. لنُحسّنه بإنشاء وكيل LLM قادر على أداء مهام أكثر تعقيدًا والتفكير في المعلومات التي يسترجعها.
وكيل LLM هو نظام ذكاء اصطناعي قادر على استخدام الأدوات واتخاذ القرارات بشأن الإجراءات اللازمة. سننشئ وكيلًا لا يقتصر دوره على الإجابة على الأسئلة فحسب، بل يشمل أيضًا إجراء عمليات بحث على الإنترنت وإجراء حسابات أساسية.
أولاً، دعونا نحدد بعض الأدوات لوكيلنا:
from langchain.agents import Tool from langchain.tools import DuckDuckGoSearchRun from langchain.tools import BaseTool from langchain.agents import initialize_agent from langchain.agents import AgentType # Define a calculator tool class CalculatorTool(BaseTool): name = "Calculator" description = "Useful for when you need to answer questions about math" def _run(self, query: str) try: return str(eval(query)) except: return "I couldn't calculate that. Please make sure your input is a valid mathematical expression." # Create tool instances search = DuckDuckGoSearchRun() calculator = CalculatorTool() # Define the tools tools = [Tool(name="Search",func=search.run,description="Useful for when you need to answer questions about current events"), Tool(name="RAG-QA",func=qa.run,description="Useful for when you need to answer questions about AI and machine learning"), Tool(name="Calculator",func=calculator._run,description="Useful for when you need to perform mathematical calculations") ] # Initialize the agent agent = initialize_agent(tools, OpenAI(temperature=0), agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True )
لدينا الآن وكيل قادر على استخدام نظام RAG الخاص بنا، وإجراء عمليات بحث على الإنترنت، وإجراء حسابات. لنختبره:
result = agent.run("What's the difference between supervised and unsupervised learning? Also, what's 15% of 80?") print(result)
يوضح هذا الوكيل الميزة الرئيسية لوكلاء LLM: يمكنهم الجمع بين أدوات متعددة وخطوات تفكير للإجابة على الاستفسارات المعقدة.
تعزيز الوكيل باستخدام تقنيات RAG المتقدمة
على الرغم من أن نظام RAG الحالي يعمل بشكل جيد، إلا أن هناك العديد من التقنيات المتقدمة التي يمكننا استخدامها لتحسين أدائه:
أ) البحث الدلالي مع استرجاع الممر الكثيف (DPR)
بدلاً من استخدام الاسترجاع البسيط القائم على التضمين، يمكننا تنفيذ DPR للبحث الدلالي الأكثر دقة:
from transformers import DPRQuestionEncoder, DPRContextEncoder question_encoder = DPRQuestionEncoder.from_pretrained("facebook/dpr-question_encoder-single-nq-base") context_encoder = DPRContextEncoder.from_pretrained("facebook/dpr-ctx_encoder-single-nq-base") # Function to encode passages def encode_passages(passages): return context_encoder(passages, max_length=512, return_tensors="pt").pooler_output # Function to encode query def encode_query(query): return question_encoder(query, max_length=512, return_tensors="pt").pooler_output
ب) توسيع الاستعلام
يمكننا استخدام توسيع الاستعلام لتحسين أداء الاسترجاع:
from transformers import T5ForConditionalGeneration, T5Tokenizer model = T5ForConditionalGeneration.from_pretrained("t5-small") tokenizer = T5Tokenizer.from_pretrained("t5-small") def expand_query(query): input_text = f"expand query: {query}" input_ids = tokenizer.encode(input_text, return_tensors="pt") outputs = model.generate(input_ids, max_length=50, num_return_sequences=3) expanded_queries = [tokenizer.decode(output, skip_special_tokens=True) for output in outputs] return expanded_queries
ج) التحسين التكراري
يمكننا تنفيذ عملية تحسين متكررة حيث يمكن للوكيل أن يطرح أسئلة متابعة لتوضيح أو توسيع عملية الاسترجاع الأولية:
def iterative_retrieval(initial_query, max_iterations=3): query = initial_query for _ in range(max_iterations): result = qa.run(query) clarification = agent.run(f"Based on this result: '{result}', what follow-up question should I ask to get more specific information?") if clarification.lower().strip() == "none": break query = clarification return result # Use this in your agent's process
تنفيذ نظام متعدد الوكلاء
للتعامل مع مهام أكثر تعقيدًا، يمكننا تطبيق نظام متعدد الوكلاء، حيث يتخصص كل وكيل في مجالات مختلفة. إليك مثال بسيط:
class SpecialistAgent: def __init__(self, name, tools): self.name = name self.agent = initialize_agent(tools, OpenAI(temperature=0), agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) def run(self, query): return self.agent.run(query) # Create specialist agents research_agent = SpecialistAgent("Research", [Tool(name="RAG-QA", func=qa.run, description="For AI and ML questions")]) math_agent = SpecialistAgent("Math", [Tool(name="Calculator", func=calculator._run, description="For calculations")]) general_agent = SpecialistAgent("General", [Tool(name="Search", func=search.run, description="For general queries")]) class Coordinator: def __init__(self, agents): self.agents = agents def run(self, query): # Determine which agent to use if "calculate" in query.lower() or any(op in query for op in ['+', '-', '*', '/']): return self.agents['Math'].run(query) elif any(term in query.lower() for term in ['ai', 'machine learning', 'deep learning']): return self.agents['Research'].run(query) else: return self.agents['General'].run(query) coordinator = Coordinator({'Research': research_agent, 'Math': math_agent, 'General': general_agent}) # Test the multi-agent system result = coordinator.run("What's the difference between CNN and RNN? Also, calculate 25% of 120.") print(result)
يسمح هذا النظام متعدد الوكلاء بالتخصص ويمكنه التعامل مع نطاق أوسع من الاستعلامات بشكل أكثر فعالية.
تقييم وتحسين وكلاء RAG
لضمان أداء وكيل RAG الخاص بنا بشكل جيد، نحتاج إلى تنفيذ مقاييس التقييم وتقنيات التحسين:
أ) تقييم الصلة
يمكننا استخدام مقاييس مثل BLEU أو ROUGE أو BERTScore لتقييم مدى ملاءمة المستندات المستردة:
from bert_score import score def evaluate_relevance(query, retrieved_doc, generated_answer): P, R, F1 = score([generated_answer], [retrieved_doc], lang="en") return F1.mean().item()
ب) الإجابة على تقييم الجودة
يمكننا استخدام التقييم البشري أو المقاييس الآلية لتقييم جودة الإجابة:
from nltk.translate.bleu_score import sentence_bleu def evaluate_answer_quality(reference_answer, generated_answer): return sentence_bleu([reference_answer.split()], generated_answer.split()) # Use this to evaluate your agent's responses
الاتجاهات والتحديات المستقبلية
بينما نتطلع إلى مستقبل وكلاء RAG، تظهر العديد من الاتجاهات والتحديات المثيرة:
a) RAG متعدد الوسائط: توسيع RAG ليشمل بيانات الصورة والصوت والفيديو.
b) RAG الفيدرالية: تنفيذ RAG عبر قواعد المعرفة الموزعة التي تحافظ على الخصوصية.
c) التعلم المستمر: تطوير أساليب لوكلاء RAG لتحديث قواعدهم ونماذجهم المعرفية بمرور الوقت.
d) الاعتبارات الأخلاقية: معالجة التحيز والعدالة والشفافية في أنظمة RAG.
e) التوسعة: تحسين RAG للتطبيقات واسعة النطاق في الوقت الفعلي.
الخاتمة
بناء وكلاء إدارة الجودة (LLM) لـ RAG من الصفر عملية معقدة ولكنها مجزية. لقد غطينا أساسيات RAG، وطبقنا نظامًا بسيطًا، وأنشأنا وكيل إدارة جودة (LLM)، وعززناه بتقنيات متقدمة، واستكشفنا أنظمة متعددة الوكلاء، وناقشنا استراتيجيات التقييم والتحسين.