اتصل بنا للحصول على مزيد من المعلومات

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

الذكاء العام الاصطناعي

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

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

غالبًا ما تكافح برامج LLM مثل GPT-3 وGPT-4 ونظيرتها مفتوحة المصدر مع استرجاع المعلومات الحديثة ويمكن أن تولد في بعض الأحيان هلوسة أو معلومات غير صحيحة.

الاسترجاع المعزز للجيل (RAG) هي تقنية تجمع بين قوة LLMs واسترجاع المعرفة الخارجية. يسمح لنا RAG بربط استجابات LLM بمعلومات واقعية وحديثة، مما يحسن بشكل كبير من دقة وموثوقية المحتوى الناتج عن الذكاء الاصطناعي.

في هذه التدوينة، سنستكشف كيفية بناء وكلاء LLM لـ RAG من الصفر، مع التعمق في بنيتها وتفاصيل تنفيذها وتقنياتها المتقدمة. سنغطي كل شيء، بدءًا من أساسيات RAG ووصولًا إلى إنشاء وكلاء متطورين قادرين على التفكير المعقد وتنفيذ المهام.

قبل أن نبدأ في بناء وكيل LLM الخاص بنا، دعونا نفهم ما هو RAG ولماذا هو مهم.

RAG، أو الجيل المعزز للاسترجاع، هو أسلوب مختلط يجمع بين استرجاع المعلومات وإنشاء النص. في نظام RAG:

  • يتم استخدام الاستعلام لاسترداد المستندات ذات الصلة من قاعدة المعرفة.
  • يتم بعد ذلك إدخال هذه المستندات في نموذج لغة مع الاستعلام الأصلي.
  • يقوم النموذج بإنشاء استجابة بناءً على كل من الاستعلام والمعلومات المستردة.
RAG

RAG

هذا النهج لديه العديد من المزايا:

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

فهم وكلاء LLM

 

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

ما هم وكلاء LLM؟

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

فكر في سؤال في المجال القانوني مثل: "ما هي النتائج القانونية المحتملة لنوع معين من خرق العقود في كاليفورنيا؟" يمكن لـ LLM الأساسي المزود بنظام الاسترجاع المعزز (RAG) جلب المعلومات الضرورية من قواعد البيانات القانونية.

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

مكونات وكلاء LLM

يتكون وكلاء LLM عمومًا من أربعة مكونات:

  1. الوكيل/الدماغ: نموذج اللغة الأساسي الذي يعالج اللغة ويفهمها.
  2. تخطيط الرحلة: القدرة على التفكير وتقسيم المهام ووضع خطط محددة.
  3. ذاكرة: يحتفظ بسجلات للتفاعلات السابقة ويتعلم منها.
  4. استخدام الأداة: يدمج الموارد المختلفة لأداء المهام.

الوكيل/الدماغ

يوجد في جوهر وكيل 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)، وعززناه بتقنيات متقدمة، واستكشفنا أنظمة متعددة الوكلاء، وناقشنا استراتيجيات التقييم والتحسين.

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