Ang 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.
Ang Problema: Mga Limitasyon ng LLM
- Static na kaalaman.
- Hallucination: gumagawa ng mga plausible ngunit maling impormasyon.
- Walang access sa private data.
Ano ang RAG?
Paano Gumagana ang RAG
Phase 1: Indexing
Phase 2: Retrieval + Generation
Paggawa ng RAG Pipeline gamit ang LangChain
Installation
pip install langchain langchain-openai langchain-community chromadb
Hakbang 1: Mag-load ng mga Dokumento
from langchain_community.document_loaders import ( PyPDFLoader, WebBaseLoader, DirectoryLoader, TextLoader, ) pdf_loader = PyPDFLoader("docs/manual.pdf") pdf_docs = pdf_loader.load() web_loader = WebBaseLoader("https://docs.example.com/guide") web_docs = web_loader.load() dir_loader = DirectoryLoader("./knowledge_base", glob="**/*.md", loader_cls=TextLoader) md_docs = dir_loader.load() all_docs = pdf_docs + web_docs + md_docs
Hakbang 2: Hatiin ang mga Dokumento sa Chunks
from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, separators=["\n\n", "\n", ". ", " ", ""], ) chunks = text_splitter.split_documents(all_docs) print(f"Original documents: {len(all_docs)}, Chunks: {len(chunks)}")
Hakbang 3: Gumawa ng Embeddings at Vector Store
from langchain_openai import OpenAIEmbeddings from langchain_community.vectorstores import Chroma embedding_model = OpenAIEmbeddings(model="text-embedding-3-small") vectorstore = Chroma.from_documents( documents=chunks, embedding=embedding_model, persist_directory="./chroma_db", )
Hakbang 4: Gumawa ng Retriever
retriever = vectorstore.as_retriever( search_type="similarity", search_kwargs={"k": 4}, ) relevant_docs = retriever.invoke("How does authentication work?") for doc in relevant_docs: print(doc.page_content[:200]) print("---")
Hakbang 5: Itayo ang RAG Chain
from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough from langchain_core.output_parsers import StrOutputParser llm = ChatOpenAI(model="gpt-4o", temperature=0) 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() ) response = rag_chain.invoke("How does authentication work in the system?") print(response)
Mga Advanced RAG Technique
Multi-Query Retrieval, Contextual Compression, Hybrid Search, at Conversational RAG ay mga pangunahing advanced technique para mapabuti ang kalidad ng sagot.
Pinakamahusay na Kasanayan
- Piliin ang tamang chunk size.
- Gumamit ng document metadata.
- I-evaluate ang kalidad gamit ang RAGAS.
- Pamahalaan ang mga document update.
- Magdagdag ng re-ranker.
Kongklusyon
Ang RAG ay naging standard architecture para sa paggawa ng mga AI application. Pinapadali ng LangChain ang implementation.
Mga susunod na hakbang:
- Mag-eksperimento nang lokal: Magsimula sa ChromaDB.
- Tuklasin ang LangSmith: LangSmith.
- Subukan ang iba't ibang embedding model.
- Tingnan ang documentation: LangChain docs.