Belgeleri ve vektör veritabanını hazırlama
Sıradaki birkaç egzersizde, Balaguer ve diğerlerinin (2024) RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture başlıklı makalesini içeren bir PDF ile sohbet edebilmek için tam bir RAG iş akışı kuracaksın. Bu, belgeleri parçalara ayırmak, bir vektör veritabanında saklamak, alınan belgeler ile kullanıcı girdisini bağlayacak bir istem tanımlamak ve LLM'in bu harici verilere erişebilmesi için bir alma zinciri kurmakla çalışır.
Bu egzersizde, belgeyi depolamaya hazırlayacak ve bir Chroma vektör veritabanına aktaracaksın. PDF'i parçalamak için RecursiveCharacterTextSplitter kullanacak ve OpenAI gömleştirme fonksiyonunu kullanarak bunları bir Chroma vektör veritabanına alacaksın. Kursun geri kalanında olduğu gibi, kendi OpenAI API anahtarını sağlamana gerek yok.
Aşağıdaki sınıflar senin için zaten içe aktarıldı: RecursiveCharacterTextSplitter, Chroma ve OpenAIEmbeddings.
Bu egzersiz
LangChain ile LLM Uygulamaları Geliştirme
kursunun bir parçasıdırEgzersiz talimatları
dataiçindeki belgeleri,chunk_sizedeğeri300vechunk_overlapdeğeri50olan birRecursiveCharacterTextSplitterkullanarak böl.- Sağlanan OpenAI gömleştirme fonksiyonuyla belgeleri gömleştirip bir Chroma vektör veritabanına almak için
.from_documents()metodunu kullan. vectorstore'u, nihai RAG zincirinde kullanılmak üzere en iyi 3 belgeyi döndüren bir alıcı (retriever) nesnesine dönüştür.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
loader = PyPDFLoader('rag_vs_fine_tuning.pdf')
data = loader.load()
# Split the document using RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=____,
chunk_overlap=____)
docs = splitter.split_documents(data)
# Embed the documents in a persistent Chroma vector database
embedding_function = OpenAIEmbeddings(api_key='', model='text-embedding-3-small')
vectorstore = Chroma.____(
docs,
embedding=embedding_function,
persist_directory=os.getcwd()
)
# Configure the vector store as a retriever
retriever = vectorstore.as_retriever(
search_type="similarity",
search_kwargs={"k": ____}
)