מודלי שפה גדולים (LLMs) כמו GPT-4 ו-Claude הם חזקים באופן יוצא דופן, אך סובלים ממגבלה בסיסית: הידע שלהם קפוא לרגע האימון. Retrieval-Augmented Generation (RAG) פותר בדיוק את הבעיה הזו על ידי שילוב הכוח הגנרטיבי של LLMs עם היכולת לאחזר מידע ממקורות חיצוניים.
הבעיה: מגבלות ה-LLM
- ידע סטטי: LLM יודע רק מה שראה במהלך האימון.
- הזיות: כאשר LLM לא יודע את התשובה, הוא נוטה להמציא אחת.
- אין גישה לנתונים פרטיים: LLM גנרי אין לו גישה לתיעוד הפנימי של החברה שלך.
מה זה RAG?
כיצד RAG עובד בפירוט
שלב 1: אינדוקס
שלב 2: אחזור + יצירה
בניית צינור RAG עם LangChain
pip install langchain langchain-openai langchain-community chromadb
from langchain_community.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain_openai import OpenAIEmbeddings, ChatOpenAI from langchain_community.vectorstores import Chroma from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough from langchain_core.output_parsers import StrOutputParser # טעינה ופיצול מסמכים pdf_docs = PyPDFLoader("docs/manual.pdf").load() chunks = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200).split_documents(pdf_docs) # Embeddings ו-vector store vectorstore = Chroma.from_documents( documents=chunks, embedding=OpenAIEmbeddings(model="text-embedding-3-small"), persist_directory="./chroma_db", ) # שרשרת RAG llm = ChatOpenAI(model="gpt-4o", temperature=0) retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 4}) prompt = ChatPromptTemplate.from_template(""" Answer the question based only on the provided context. If the context does not contain enough information, say you don't know. Context: {context} Question: {question} Answer: """) def format_docs(docs): return "\n\n".join(doc.page_content for doc in docs) rag_chain = ( {"context": retriever | format_docs, "question": RunnablePassthrough()} | prompt | llm | StrOutputParser() )
טכניקות RAG מתקדמות
אלו כוללות Multi-Query Retrieval, דחיסה קונטקסטואלית, חיפוש היברידי ו-RAG שיחתי עם זיכרון.
שיטות עבודה מומלצות
- נסו גדלי chunks שונים (500-1500 טוקנים).
- השתמשו במטא-נתוני מסמכים.
- הערכת איכות עם פריימוורקים כמו RAGAS.
- יישום צינור עדכון מסמכים.
- הוספת re-ranker לאחר אחזור ראשוני.
סיכום
RAG הפך לארכיטקטורה הסטנדרטית לבניית יישומי AI הזקוקים לגישה לידע ספציפי ומעודכן. LangChain מפשט משמעותית את המימוש.