spinny:~/writing $ vim rag-langchain-deep-dive.md
1~2מודלי שפה גדולים (LLMs) כמו GPT-4 ו-Claude הם חזקים באופן יוצא דופן, אך סובלים ממגבלה בסיסית: הידע שלהם קפוא לרגע האימון. **Retrieval-Augmented Generation (RAG)** פותר בדיוק את הבעיה הזו על ידי שילוב הכוח הגנרטיבי של LLMs עם היכולת לאחזר מידע ממקורות חיצוניים.3~4## הבעיה: מגבלות ה-LLM5~61. **ידע סטטי**: LLM יודע רק מה שראה במהלך האימון.72. **הזיות**: כאשר LLM לא יודע את התשובה, הוא נוטה להמציא אחת.83. **אין גישה לנתונים פרטיים**: LLM גנרי אין לו גישה לתיעוד הפנימי של החברה שלך.9~10## מה זה RAG?11~12```mermaid13graph LR14 User["User"] -- "Question" --> Retriever15 Retriever -- "Search relevant\ndocuments" --> VectorStore["Vector Store"]16 VectorStore -- "Relevant\ndocuments" --> Retriever17 Retriever -- "Context + Question" --> LLM18 LLM -- "Grounded\nresponse" --> User19```20~21## כיצד RAG עובד בפירוט22~23### שלב 1: אינדוקס24~25```mermaid26graph TD27 A["Documents\n(PDF, HTML, MD, DB)"] --> B["Document Loader"]28 B --> C["Text Splitter"]29 C --> D["Text Chunks"]30 D --> E["Embedding Model"]31 E --> F["Numerical Vectors"]32 F --> G["Vector Store\n(ChromaDB, Pinecone, FAISS)"]33```34~35### שלב 2: אחזור + יצירה36~37## בניית צינור RAG עם LangChain38~39```bash40pip install langchain langchain-openai langchain-community chromadb41```42~43```python44from langchain_community.document_loaders import PyPDFLoader45from langchain.text_splitter import RecursiveCharacterTextSplitter46from langchain_openai import OpenAIEmbeddings, ChatOpenAI47from langchain_community.vectorstores import Chroma48from langchain_core.prompts import ChatPromptTemplate49from langchain_core.runnables import RunnablePassthrough50from langchain_core.output_parsers import StrOutputParser51~52# טעינה ופיצול מסמכים53pdf_docs = PyPDFLoader("docs/manual.pdf").load()54chunks = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200).split_documents(pdf_docs)55~56# Embeddings ו-vector store57vectorstore = Chroma.from_documents(58 documents=chunks,59 embedding=OpenAIEmbeddings(model="text-embedding-3-small"),60 persist_directory="./chroma_db",61)62~63# שרשרת RAG64llm = ChatOpenAI(model="gpt-4o", temperature=0)65retriever = vectorstore.as_retriever(search_type="similarity", search_kwargs={"k": 4})66~67prompt = ChatPromptTemplate.from_template("""68Answer the question based only on the provided context.69If the context does not contain enough information, say you don't know.70~71Context:72{context}73~74Question: {question}75~76Answer:77""")78~79def format_docs(docs):80 return "\n\n".join(doc.page_content for doc in docs)81~82rag_chain = (83 {"context": retriever | format_docs, "question": RunnablePassthrough()}84 | prompt85 | llm86 | StrOutputParser()87)88```89~90## טכניקות RAG מתקדמות91~92אלו כוללות Multi-Query Retrieval, דחיסה קונטקסטואלית, חיפוש היברידי ו-RAG שיחתי עם זיכרון.93~94## שיטות עבודה מומלצות95~961. נסו גדלי chunks שונים (500-1500 טוקנים).972. השתמשו במטא-נתוני מסמכים.983. הערכת איכות עם פריימוורקים כמו [RAGAS](https://docs.ragas.io/).994. יישום צינור עדכון מסמכים.1005. הוספת re-ranker לאחר אחזור ראשוני.101~102## סיכום103~104RAG הפך לארכיטקטורה הסטנדרטית לבניית יישומי AI הזקוקים לגישה לידע ספציפי ומעודכן. LangChain מפשט משמעותית את המימוש.105~
NORMAL · rag-langchain-deep-dive.md [readonly]105 lines · :q to close