כיצד ה-RAG הפעיל מפחית הזיות ומשפר אחזור
גלה כיצד Agentic RAG יכול להפחית הזיות ולשפר את האחזור על ידי ניסוח מחדש של שאילתות, שיפור התוצאות וניצול של דגמי שפה גדולים יותר. שחרר תגובות מקיפות ורלוונטיות יותר עבור יישומי RAG שלך.
16 בפברואר 2025

שחרר את כוח הייצור המשופר בשליפה (RAG) עם סוכנים. גלה כיצד לשפר את תהליך ה-RAG שלך ולהפחית הזיות על ידי הצגת סוכנים חכמים שיכולים לנתח שאילתות, לשפר חיפושים ולייצר תגובות מדויקות ומקיפות יותר. פוסט הבלוג הזה מספק מדריך מעשי ליישום RAG עם סוכנים, ומצייד אותך בכלים להעלאת יישומי עיבוד השפה הטבעית שלך.
כיצד סוכנים יכולים לתקן הזיות ב-RAG
בניית צינור RAG אגנטי
יצירת כלי אחזור
שילוב מודל השפה
יישום הסוכן האגנטי
השוואה בין RAG רגיל ו-RAG אגנטי
מסקנה
כיצד סוכנים יכולים לתקן הזיות ב-RAG
כיצד סוכנים יכולים לתקן הזיות ב-RAG
שלב אחזור המידע בייצור מוגבר באחזור (RAG) תלוי מאוד באופן שבו המשתמש שואל שאלות. אם השאילתה אינה מנוסחת היטב, אחזור המידע יכול להיות קשה, גם אם המידע שהמשתמש מחפש נמצא בבסיס הידע. ב-RAG המסורתי, אנו מקבלים אחזור אחד, קצר, אך אנו יכולים לתקן זאת באמצעות RAG אגנטי.
כדי להבין כיצד RAG אגנטי יכול לעזור, בואו נסתכל על הגישה המסורתית של RAG לאחזור. שאילתת המשתמש מועברת דרך חיפוש דמיון מבוסס סמנטי שמחפש את הקטעים הרלוונטיים ביותר בבסיס המידע. אבל מה קורה אם השאלה עצמה אינה נשאלת בדרך הנכונה? במקרה כזה, צינור ה-RAG שלך כנראה יהלוצין, כלומר הוא יתחיל להמציא תשובות, או שהמודל השפתי יגיד למשתמש שלא מצא את המידע, למרות שהמידע נמצא בבסיס הידע.
אנו יכולים לתקן זאת על ידי הכנסת סוכנים לצינור ה-RAG ומתן היכולת להם לא רק לנתח את השאילתה הראשונית אלא גם לנתח את התגובות שנוצרו על ידי צינור ה-RAG. הנה כיצד זה נראה בדרך כלל:
- השאילתה הראשונית מועברת דרך סוכן.
- הסוכן יעצב מחדש את השאילתה הראשונית.
- השאילתה המשופרת מועברת דרך בסיס הידע, ומבוצע חיפוש דמיון מבוסס סמנטי כדי לאחזר את המסמכים הרלוונטיים ביותר.
- לפני העברת המסמכים הרלוונטיים למודל השפתי, הסוכן מנתח שוב את המסמכים או הקטעים האלה ומשפר את השאילתה אם הוא חושב שהמסמכים שאוחזרו אינם יכולים לענות על השאלה.
- על בסיס השאילתה המשופרת, התהליך מתבצע שוב עד שהסוכן מרוצה הן מהמסמכים שאוחזרו והן מהשאילתה המעובדת.
- ההקשר הסופי מועבר למודל השפתי כדי ליצור את התשובה.
בניית צינור RAG אגנטי
בניית צינור RAG אגנטי
שלב אחזור המידע בייצור מוגבר באחזור או RAG תלוי מאוד באופן שבו המשתמש שואל שאלות. אם השאילתה אינה מנוסחת היטב, אחזור המידע יכול להיות קשה, גם אם המידע שהמשתמש מחפש נמצא בבסיס הידע. ב-RAG המסורתי, אנו מקבלים אחזור אחד, קצר, אך אנו יכולים לתקן זאת באמצעות RAG אגנטי.
כדי להבין כיצד RAG אגנטי יכול לעזור, בואו נסתכל על הגישה המסורתית של RAG לאחזור. שאילתת המשתמש מועברת דרך חיפוש דמיון מבוסס סמנטי שמחפש את הקטעים הרלוונטיים ביותר בבסיס המידע. אבל מה קורה אם השאלה עצמה אינה נשאלת בדרך הנכונה? במקרה כזה, צינור ה-RAG שלך כנראה יהלוצין, כלומר הוא יתחיל להמציא תשובות, או שה-LLM יגיד למשתמש שלא מצא את המידע, למרות שהמידע נמצא בבסיס הידע.
אנו יכולים לתקן זאת על ידי הכנסת סוכנים לצינור ה-RAG ומתן היכולת להם לא רק לנתח את השאילתה הראשונית אלא גם לנתח את התגובות שנוצרו על ידי צינור ה-RAG. הנה כיצד זה נראה בדרך כלל:
- השאילתה הראשונית מועברת דרך סוכן.
- הסוכן יעצב מחדש את השאילתה הראשונית.
- השאילתה המשופרת מועברת דרך בסיס הידע, ומבוצע חיפוש דמיון מבוסס סמנטי כדי לאחזר את המסמכים הרלוונטיים ביותר.
- לפני העברת המסמכים הרלוונטיים ל-LLM, הסוכן מנתח שוב את המסמכים או הקטעים האלה ומשפר את השאילתה אם הוא חושב שהמסמכים שאוחזרו אינם יכולים לענות על השאלה.
- על בסיס השאילתה המשופרת, התהליך מתבצע שוב עד שהסוכן מרוצה הן מהמסמכים שאוחזרו והן מהשאילתה המעובדת.
- ההקשר הסופי מועבר ל-LLM כדי ליצור את התשובה.
כדי ליישם את המעגל האגנטי בצינור ה-RAG שלך, יש לך מספר אפשרויות, כגון מסגרות כמו Crew AI, Auto או LangGraph מ-LangChain. במקרה זה, נשתמש בסוכני Transformers, תכונה פחות ידועה בתוך חבילת Transformers שמאפשרת ליצור סוכנים משלך.
יצירת כלי אחזור
יצירת כלי אחזור
כדי ליצור כלי אחזור עבור צינור ה-RAG האגנטי, אנו מגדירים מחלקה RetrievalTool
עם המבנה הבא:
class RetrievalTool:
"""Using semantic similarity, retrieves some documents from the knowledge base that have the closest embeddings to the input."""
def __init__(self, vector_db):
self.vector_db = vector_db
def __call__(self, query: str) -> List[str]:
"""
Retrieve up to 7 most similar chunks from the vector DB for the given query.
Args:
query (str): A query to perform retrieval on. This should be semantically close to the target documents.
Returns:
List[str]: A list of up to 7 most similar chunks from the vector DB.
"""
results = self.vector_db.similarity_search(query, k=7)
return [chunk.page_content for chunk in results]
מחלקת RetrievalTool
מקבלת אובייקט vector_db
כקלט, שהוא אחסון הוקטורים (למשל Faiss, Chroma, Pinecone) המשמש לאחסון הטמעות המסמכים.
שיטת __call__
של המחלקה מקבלת מחרוזת query
כקלט וחוזרת רשימה של עד 7 הקטעים הדומים ביותר מבסיס הוקטורים. היא משתמשת בשיטת similarity_search
של אובייקט vector_db
כדי למצוא את הקטעים הדומים ביותר על בסיס דמיון קוסינוס.
כלי האחזור הזה יכול להשתמש כחלק מצינור ה-RAG האגנטי, שבו הסוכן יכול לנתח את השאילתה הראשונית, לשפר אותה ולהעבירה דרך כלי האחזור כדי לקבל את הקטעים הרלוונטיים ביותר מבסיס הידע.
שילוב מודל השפה
שילוב מודל השפה
כדי לשלב את המודל השפתי לתוך צינור ה-RAG האגנטי, אנו צריכים להגדיר את ה-LLM שישמש הן את הסוכן והן כדי ליצור את התגובה הסופית. יש לנו שתי אפשרויות:
-
שימוש במנוע Hugging Face: זה מאפשר לנו לקרוא ישירות לנקודות הקצה של API של מודלים שונים של LLM הזמינים דרך האדריכלות ללא שרת של Hugging Face. אנו יכולים להשתמש במודלים כמו Llama 38B או 70B, אך אלה בדרך כלל דורשים מנוי Hugging Face Pro.
-
שימוש ב-OpenAI: לדוגמה זו, נשתמש במנוע OpenAI. התהליך ניתן להתאמה כדי להגדיר כל LLM אחר.
כדי להגדיר את מנוע OpenAI, אנו יוצרים מחלקה בשם OpenAIEngine
שמשתמשת בפונקציות message_rle
ו-gpt_generate_message_list
מנוע ה-LLM של סוכני Transformer. מחלקה זו מטפלת בניקוי ההודעות הקלט ובשימוש בנקודת הקצה של השלמת הצ'אט של OpenAI כדי ליצור תגובות.
לאחר מכן, אנו יוצרים את הסוכן עצמו. לסוכן יש גישה לכלי האחזור שיצרנו קודם, ל-LLM שאנו רוצים להשתמש בו (ה-OpenAIEngine
במקרה זה) ולמספר המקסימלי של חזרות שאנו רוצים שהסוכן יבצע לפני עצירת המעגל האגנטי.
אנו גם מספקים לסוכן הנחיית מערכת, המספקת לו הוראות על כיצד להשתמש במידע בבסיס הידע כדי לספק תשובה מקיפה לשאלת המשתמש. ההנחיה מעודדת את הסוכן לנסות מחדש את תהליך האחזור עם שאילתות שונות אם הוא לא מצליח למצוא את המידע הדרוש.
עם הסוכן וה-LLM מוגדרים, אנו יכולים כעת להפעיל את המעגל האגנטי כדי לענות על שאלות של משתמשים. הסוכן יעצב מחדש את השאילתה באופן איטרטיבי, יאחזר מידע רלוונטי מבסיס הידע ויפיק תגובה סופית באמצעות ה-LLM. גישה זו מובילה לתשובות מפורטות ורלוונטיות יותר בהשוואה לצינור RAG רגיל.
יישום הסוכן האגנטי
יישום הסוכן האגנטי
כדי ליישם את הסוכן האגנטי, נשתמש בתכונת סוכני Transformers בתוך חבילת Transformers. זה מספק גישה מודולרית וברורה ליצירת סוכנים מותאמים אישית.
ראשית, עלינו להתקין את החבילות הנדרשות, כולל pandas, Langchain, חבילת הקהילה של Langchain, Sentence Transformers וסוכני Transformers.
לאחר מכן, אנו מייבאים את המודולים והחבילות הנחוצים. נשתמש ב-ReactJsonAgent, נבנה כלים מותאמים אישית עבור הסוכן ונשתמש במנוע Hugging Face עבור המודל השפתי.
כדי לבנות את צינור ה-RAG, אנו מתחילים עם מערך הכולל את תיעוד Hugging Face. אנו מפצלים את המסמכים לקטעים וליצור הטמעות באמצעות הדגם GTE-small. לאחר מכן, אנו מסירים כל קטעים כפולים ואוחסנים את הקטעים הייחודיים באחסון וקטורים מבוסס F.
עכשיו, אנו מכניסים את הסוכן לתערובת. אנו יוצרים RetrievalTool
שמשתמש בדמיון סמנטי כדי לאחזר את הקטעים הרלוונטיים ביותר מבסיס הידע על
שאלות נפוצות
שאלות נפוצות