spinny:~/writing $ less rag-langchain-deep-dive.md
12Ang mga Large Language Model (LLMs) tulad ng GPT-4 at Claude ay extraordinaryong makapangyarihan, ngunit dumaranas sila ng isang pundamental na limitasyon: ang kanilang kaalaman ay nakapirming sa oras ng training. Ang **Retrieval-Augmented Generation (RAG)** ang solusyon.34## Ang Problema: Mga Limitasyon ng LLM561. **Static na kaalaman**.72. **Hallucination**: gumagawa ng mga plausible ngunit maling impormasyon.83. **Walang access sa private data**.910## Ano ang RAG?1112```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```2021## Paano Gumagana ang RAG2223### Phase 1: Indexing2425```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```3435### Phase 2: Retrieval + Generation3637## Paggawa ng RAG Pipeline gamit ang LangChain3839### Installation4041```bash42pip install langchain langchain-openai langchain-community chromadb43```4445### Hakbang 1: Mag-load ng mga Dokumento4647```python48from langchain_community.document_loaders import (49 PyPDFLoader,50 WebBaseLoader,51 DirectoryLoader,52 TextLoader,53)5455pdf_loader = PyPDFLoader("docs/manual.pdf")56pdf_docs = pdf_loader.load()5758web_loader = WebBaseLoader("https://docs.example.com/guide")59web_docs = web_loader.load()6061dir_loader = DirectoryLoader("./knowledge_base", glob="**/*.md", loader_cls=TextLoader)62md_docs = dir_loader.load()6364all_docs = pdf_docs + web_docs + md_docs65```6667### Hakbang 2: Hatiin ang mga Dokumento sa Chunks6869```python70from langchain.text_splitter import RecursiveCharacterTextSplitter7172text_splitter = RecursiveCharacterTextSplitter(73 chunk_size=1000,74 chunk_overlap=200,75 separators=["\n\n", "\n", ". ", " ", ""],76)7778chunks = text_splitter.split_documents(all_docs)79print(f"Original documents: {len(all_docs)}, Chunks: {len(chunks)}")80```8182### Hakbang 3: Gumawa ng Embeddings at Vector Store8384```python85from langchain_openai import OpenAIEmbeddings86from langchain_community.vectorstores import Chroma8788embedding_model = OpenAIEmbeddings(model="text-embedding-3-small")8990vectorstore = Chroma.from_documents(91 documents=chunks,92 embedding=embedding_model,93 persist_directory="./chroma_db",94)95```9697### Hakbang 4: Gumawa ng Retriever9899```python100retriever = vectorstore.as_retriever(101 search_type="similarity",102 search_kwargs={"k": 4},103)104105relevant_docs = retriever.invoke("How does authentication work?")106for doc in relevant_docs:107 print(doc.page_content[:200])108 print("---")109```110111### Hakbang 5: Itayo ang RAG Chain112113```python114from langchain_openai import ChatOpenAI115from langchain_core.prompts import ChatPromptTemplate116from langchain_core.runnables import RunnablePassthrough117from langchain_core.output_parsers import StrOutputParser118119llm = ChatOpenAI(model="gpt-4o", temperature=0)120121prompt = ChatPromptTemplate.from_template("""122Answer the question based only on the provided context.123If the context does not contain enough information, say you don't know.124125Context:126{context}127128Question: {question}129130Answer:131""")132133def format_docs(docs):134 return "\n\n".join(doc.page_content for doc in docs)135136rag_chain = (137 {"context": retriever | format_docs, "question": RunnablePassthrough()}138 | prompt139 | llm140 | StrOutputParser()141)142143response = rag_chain.invoke("How does authentication work in the system?")144print(response)145```146147## Mga Advanced RAG Technique148149### Multi-Query Retrieval, Contextual Compression, Hybrid Search, at Conversational RAG ay mga pangunahing advanced technique para mapabuti ang kalidad ng sagot.150151## Pinakamahusay na Kasanayan1521531. **Piliin ang tamang chunk size**.1542. **Gumamit ng document metadata**.1553. **I-evaluate ang kalidad** gamit ang [RAGAS](https://docs.ragas.io/).1564. **Pamahalaan ang mga document update**.1575. **Magdagdag ng re-ranker**.158159## Kongklusyon160161Ang RAG ay naging standard architecture para sa paggawa ng mga AI application. Pinapadali ng LangChain ang implementation.162163**Mga susunod na hakbang:**164- **Mag-eksperimento nang lokal**: Magsimula sa ChromaDB.165- **Tuklasin ang LangSmith**: [LangSmith](https://smith.langchain.com/).166- **Subukan ang iba't ibang embedding model**.167- **Tingnan ang documentation**: [LangChain docs](https://python.langchain.com/docs/).168
:RAG at LangChain: Isang Kumpletong Gabay sa Retrieval-Augmented Generationlines 1-168 (END) — press q to close