שילוב RAG (דור מוגבר של אחזור) עם מסגרות אינטרנט מודרניות: מדריך מעשי | B4N1

שילוב RAG (דור מוגבר של אחזור) עם מסגרות אינטרנט מודרניות: מדריך מעשי

9 months ago · b4n1 Read time: 3 min

שילוב RAG (דור מוגבר של אחזור) עם מסגרות אינטרנט מודרניות: מדריך מעשי

מבוא

בשנים האחרונות, תחום עיבוד השפה הטבעית (NLP) עדה לזינוק משמעותי בפיתוח מודלים של שפה גדולה (LLMs) ויישומים שלהם בתחומים שונים. עם זאת, אחת המגבלות העיקריות של LLMs היא חוסר היכולת שלהם לאחזר ולשלב ידע חיצוני בתגובות שלהם. כאן נכנסות לתמונה טכניקות ה-Retrieval-Augmented Generation (RAG). במאמר זה, נחקור את היישום של טכניקות RAG באמצעות FastAPI ו-Django כדי לשפר את יכולות LLM ביישומי אינטרנט, כולל תזמור עם LangChain לאחזור ועיבוד נתונים חלקים.

מה זה RAG?

RAG היא טכניקה המשלבת את החוזקות של מודלים של אחזור ודור כדי לייצר תגובות מדויקות ואינפורמטיביות יותר. הרעיון הבסיסי מאחורי RAG הוא תחילה לאחזר מידע רלוונטי מבסיס ידע או מסד נתונים, ולאחר מכן להשתמש במידע זה כדי ליצור תגובה. גישה זו מאפשרת ל-LLMs למנף ידע חיצוני ולספק תשובות מדויקות ואינפורמטיביות יותר.

מדוע להשתמש ב-RAG עם FastAPI ו-Django?

FastAPI ו-Django הן שתיים ממסגרות האינטרנט הפופולריות ביותר המשמשות לבניית יישומי אינטרנט. הם מספקים תשתית חזקה וניתנת להרחבה לבניית יישומי אינטרנט, וניתן לשלב אותם בקלות עם טכניקות RAG כדי לשפר את יכולות LLM. FastAPI היא מסגרת אינטרנט מודרנית המספקת דרך מהירה ויעילה לבנות יישומי אינטרנט, בעוד ש-Django היא מסגרת אינטרנט ברמה גבוהה המספקת ארכיטקטורה, תבניות וממשקי API לבניית יישומי אינטרנט חזקים.

יישום RAG עם FastAPI

FastAPI מספק דרך פשוטה ויעילה ליישם טכניקות RAG. להלן בלוק קוד לדוגמה המדגים כיצד להשתמש ב- FastAPI כדי ליישם RAG:

מ-fastapi ייבוא FastAPI
מ-langchain ייבוא LLMChain
מ-langchain.chains.openai ייבוא OpenAIApi

app = FastAPI()

@app.get("/rag")
async def rag(שאילתה: str):
    
    llm_chain = LLMChain(
        llm=OpenAIApi(),
        retrieval=LangChainRetrieval(
            index=LangChainIndex(
                name="my_index",
                documents=["doc1", "doc2", "doc3"]
            )
        )
    )

    # צור תגובה באמצעות שרשרת LLM
    response = llm_chain.run(query)

    return {"response": response}

בדוגמה זו, אנו מגדירים שרשרת LLM באמצעות מחלקת LLMCain מ-LangChain. לאחר מכן אנו מגדירים רכיב אחזור באמצעות המחלקה LangChainRetrieval, המשמשת לאחזור מידע רלוונטי ממאגר ידע או מסד נתונים. לבסוף, אנו משתמשים בשיטת 'הפעלה' כדי ליצור תגובה באמצעות שרשרת LLM.

יישום RAG עם Django

Django מספקת מסגרת אינטרנט ברמה גבוהה שניתן לשלב בקלות עם טכניקות RAG. להלן בלוק קוד לדוגמה המדגים כיצד להשתמש ב-Django כדי ליישם RAG:

מ-django.http ייבוא JsonResponse
מ-langchain ייבוא LLMChain
מ-langchain.chains.openai ייבוא OpenAIApi

def rag (בקשה):
    # הגדר את שרשרת LLM
    llm_chain = LLMChain(
        llm=OpenAIApi(),
        retrieval=LangChainRetrieval(
            index=LangChainIndex(
                name="my_index",
                documents=["doc1", "doc2", "doc3"]
            )
        )
    )

    # צור תגובה באמצעות שרשרת LLM
    response = llm_chain.run(request.GET.get("query"))

    return JsonResponse({"response": response})

בדוגמה זו, אנו מגדירים פונקציית תצוגה rag שלוקחת שאילתה כקלט ומייצרת תגובה באמצעות שרשרת LLM.

תזמור RAG עם LangChain

LangChain מספקת דרך פשוטה ויעילה לתזמור טכניקות RAG. להלן בלוק קוד לדוגמה המדגים כיצד להשתמש ב-LangChain לתזמור RAG:

מ-langchain ייבוא LLMChain
מ-langchain.chains.openai ייבוא OpenAIApi

# הגדר את שרשרת LLM
llm_chain = LLMChain(
    llm=OpenAIApi(),
    retrieval=LangChainRetrieval(
        index=LangChainIndex(
            name="my_index",
            documents=["doc1", "doc2", "doc3"]
        )
    )
)

# צור תגובה באמצעות שרשרת LLM
response = llm_chain.run("מה זה RAG?")

הדפס (תגובה)

בדוגמה זו, אנו מגדירים שרשרת LLM באמצעות מחלקת LLMCain מ-LangChain. לאחר מכן, אנו משתמשים בשיטת 'הפעלה' כדי ליצור תגובה באמצעות שרשרת LLM.

5-10 הפקודות/קטעי הקוד הנפוצים ביותר

להלן 5-10 הפקודות/קטעי הקוד המובילים ביותר ליישום RAG עם FastAPI ו-Django:

  1. מ-langchain import LLMChain: ייבא את המחלקה LLMCain מ-LangChain.
  2. llm_chain = LLMChain(llm=OpenAIApi(), retrieval=LangChainRetrieval(index=LangChainIndex(name="my_index", documents=["doc1", "doc2", "doc3"]))): הגדר שרשרת LLM באמצעות המחלקה LLMCain`.
  3. response = llm_chain.run(query): צור תגובה באמצעות שרשרת LLM.
  4. from fastapi import FastAPI: ייבא את המחלקה FastAPI מ-FastAPI.
  5. app = FastAPI(): הגדר יישום FastAPI.
  6. @app.get("/rag"): הגדר מסלול עבור נקודת הקצה RAG.
  7. llm_chain = LLMChain(llm=OpenAIApi(), retrieval=LangChainRetrieval(index=LangChainIndex(name="my_index", documents=["doc1", "doc2", "doc3"])): הגדר שרשרת LLM באמצעות המחלקה LLMCain.
  8. response = llm_chain.run(query): צור תגובה באמצעות שרשרת LLM.
  9. from django.http import JsonResponse: ייבא את המחלקה JsonResponse מ-Django.
  10. return JsonResponse({"response": response}): החזרת תגובת JSON עם התגובה שנוצרה.

ויזואליזציה

להלן הדמיה של צינור RAG באמצעות Chart.js:

{
  "type": "horizontalBar",
  "נתונים": {
    "labels": ["אחזור", "דור", "אחרי עיבוד"],
    "מערכי נתונים": [
      {
        "label": "צינור RAG",
        "נתונים": [10, 20, 30],
        "צבע רקע": [
          "rgba(255, 99, 132, 0.2)",
          "rgba(54, 162, 235, 0.2)",
          "rgba(255, 206, 86, 0.2)"
        ],
        "borderColor": [
          "rgba(255, 99, 132, 1)",
          "rgba(54, 162, 235, 1)",
          "rgba(255, 206, 86, 1)"
        ],
        "borderWidth": 1
      }
    ]
  },
  "אפשרויות": {
    "כותרת": {
      "תצוגה": נכון,
      "text": "צינור סמרטוט"
    },
    "קשקשים": {
      "yAxes": [
        {
          "טיקים": {
            "beginAtZero": נכון
          }
        }
      ]
    }
  }
}

הדמיה זו מציגה את צינור RAG עם שלושה שלבים: אחזור, יצירה ועיבוד לאחר.

מסקנה

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


Have Questions?

Let's Talk

Contact me on LinkedIn