Sedang mengikuti modul ini?0 daripada 17 selesai
Modul 16 · Halaman 17 daripada 20 · 9 bahagian

Retrieval-Augmented Generation (RAG) dalam LangChain

Pandangan RAG yang disatukan: seni bina, langkah aliran kerja, pilihan pangkalan data vektor, contoh dengan FAISS dan Chroma kekal, parameter utama dan amalan terbaik.

16.1

Apa itu RAG?

  • RAG menggabungkan retrieval (mencari dokumen relevan) dengan penjanaan (LLM) untuk menghasilkan jawapan yang tepat dan kontekstual.
  • Ia membantu LLM menggunakan data peribadi anda dan bukan hanya bergantung pada pengetahuan pralatih.
  • Mengurangkan halusinasi dan memberi jawapan berasaskan sumber.
  • Digunakan secara meluas dalam chatbot, sistem soal jawab, carian dokumen dan sistem pengetahuan perusahaan.
16.2

Mengapa Menggunakan RAG?

  • Memberi maklumat tepat dan terkini daripada dokumen anda sendiri.
  • Mengurangkan halusinasi dengan mengasaskan jawapan pada data sebenar.
  • Berfungsi dengan PDF, laman web, pangkalan data dan lain-lain.
  • Menyokong petikan sumber (dari mana maklumat datang).
  • Penting untuk aplikasi perusahaan dan pengetahuan khusus domain (polisi, manual, FAQ, dsb.).
16.3

Seni Bina RAG dengan LangChain

Sumber DataPDF, TXT, web, pangkalan data
Document Loader + Text SplitterMuat dan pecah kepada chunk
EmbeddingsOpenAI / HuggingFace
Pangkalan Data VektorFAISS / Chroma / Pinecone / Qdrant
RetrieverCari chunk relevan
LLMJana jawapan menggunakan konteks
Respons AkhirDengan sumber
16.4

Langkah Aliran Kerja RAG

  1. 1Muat dokumen daripada pelbagai sumber (PDF, laman web, DB, dsb.).
  2. 2Pecahkan dokumen kepada chunk lebih kecil.
  3. 3Cipta embeddings dan simpan dalam pangkalan data vektor.
  4. 4Apabila pengguna bertanya, dapatkan chunk yang relevan.
  5. 5Hantar konteks yang diperoleh + pertanyaan kepada LLM.
  6. 6Jana jawapan akhir dengan maklumat sumber.
16.5

Pangkalan Data Vektor Popular untuk RAG

Vector DBJenisCiri UtamaKes Penggunaan
FAISSDalam memori (oleh Meta)Pantas, mudah, sumber terbukaPembangunan setempat, data kecil hingga sederhana
ChromaTerbenamMudah digunakan, storan kekalProjek mudah, prototaip
PineconeAwan (SaaS)Terurus, boleh skala, prestasi tinggiPengeluaran, aplikasi berskala besar
QdrantDihoskan sendiri / AwanPrestasi tinggi, penapisan, payloadPengeluaran, kegunaan perusahaan
WeaviateDihoskan sendiri / AwanCarian hibrid, GraphQL, skemaCarian lanjutan, aplikasi perusahaan
16.6

Contoh: RAG Mudah dengan FAISS

python
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI

# 1. Load and split document
loader = PyPDFLoader("data/company_policy.pdf")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000,
    chunk_overlap=200)
chunks = splitter.split_documents(docs)

# 2. Create embeddings and store in FAISS
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(chunks, embeddings)

# 3. Create retriever and QA chain
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-3.5-turbo", temperature=0.2),
    retriever=retriever
)

# 4. Ask a question
response = qa_chain.invoke({"query": "What is the leave policy?"})
print(response["result"])
16.7

Contoh: RAG dengan Chroma (Kekal)

python
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI

# 1. Load documents
loader = DirectoryLoader("data/")
docs = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=1000,
    chunk_overlap=200)
chunks = splitter.split_documents(docs)

# 2. Create embeddings and store in Chroma (persistent)
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="chroma_db"
)

# 3. Create QA chain
retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
qa_chain = RetrievalQA.from_chain_type(llm=ChatOpenAI(),
    retriever=retriever)

# 4. Query
response = qa_chain.invoke({"query": "Summarize this document."})
print(response["result"])
16.8

Parameter Utama dalam RAG

ParameterPeneranganContoh
chunk_sizeSaiz setiap chunk (dalam aksara/token)1000
chunk_overlapPertindihan antara chunk200
search_kwargs (k)Bilangan chunk relevan untuk diperoleh3
temperatureMengawal kerawakan dalam respons LLM0.0 - 0.5
model_nameModel LLM untuk digunakangpt-3.5-turbo
16.9

Amalan Terbaik dan Pengajaran Utama

  • Gunakan dokumen yang berkualiti tinggi dan bersih.
  • Pilih saiz chunk dan pertindihan yang sesuai.
  • Gunakan pangkalan data vektor yang boleh dipercayai berdasarkan skala dan kes penggunaan anda.
  • Gabungkan RAG dengan penapisan metadata untuk hasil lebih baik.
  • Sertakan petikan sumber dalam respons akhir.
  • Laras parameter retriever dan LLM untuk jawapan yang tepat.
  • RAG penting untuk membina chatbot perusahaan, pangkalan pengetahuan dan sistem soal jawab dokumen.