Menyiapkan dokumen dan basis data vektor
Dalam beberapa latihan berikutnya, Anda akan membangun alur kerja RAG lengkap untuk melakukan percakapan dengan dokumen PDF yang berisi makalah berjudul RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture oleh Balaguer dkk. (2024). Ini bekerja dengan membagi dokumen menjadi potongan-potongan kecil, menyimpannya dalam basis data vektor, mendefinisikan prompt untuk menghubungkan dokumen yang diambil dengan masukan pengguna, dan membangun rantai retrieval agar LLM dapat mengakses data eksternal ini.
Pada latihan ini, Anda akan menyiapkan dokumen untuk disimpan dan memasukkannya ke dalam basis data vektor Chroma. Anda akan menggunakan RecursiveCharacterTextSplitter untuk memecah PDF menjadi potongan, lalu memasukkannya ke basis data vektor Chroma menggunakan fungsi embeddings OpenAI. Seperti pada bagian lain kursus ini, Anda tidak perlu menyediakan OpenAI API key Anda sendiri.
Kelas-kelas berikut sudah diimpor untuk Anda: RecursiveCharacterTextSplitter, Chroma, dan OpenAIEmbeddings.
Latihan ini adalah bagian dari kursus
Mengembangkan Aplikasi LLM dengan LangChain
Petunjuk latihan
- Pecah dokumen dalam
datamenggunakanRecursiveCharacterTextSplitterdenganchunk_sizebernilai300danchunk_overlapbernilai50. - Gunakan metode
.from_documents()untuk melakukan embedding dan memasukkan dokumen ke basis data vektor Chroma dengan fungsi embeddings OpenAI yang disediakan. - Konfigurasikan
vectorstoremenjadi objek retriever yang mengembalikan 3 dokumen teratas untuk digunakan dalam RAG chain akhir.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
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": ____}
)