Chuẩn bị tài liệu và cơ sở dữ liệu vector
Trong một vài bài tập tiếp theo, bạn sẽ xây dựng toàn bộ quy trình RAG để trò chuyện với một tài liệu PDF chứa bài báo RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture của Balaguer và cộng sự (2024). Cách làm là chia tài liệu thành các đoạn nhỏ, lưu trữ chúng trong một cơ sở dữ liệu vector, định nghĩa một prompt để kết nối các tài liệu đã truy xuất với đầu vào của người dùng, và xây dựng một retrieval chain để LLM có thể truy cập dữ liệu bên ngoài này.
Trong bài tập này, bạn sẽ chuẩn bị tài liệu để lưu trữ và nạp chúng vào cơ sở dữ liệu vector Chroma. Bạn sẽ dùng RecursiveCharacterTextSplitter để chia nhỏ PDF và nạp chúng vào cơ sở dữ liệu vector Chroma bằng hàm embeddings của OpenAI. Giống như các phần còn lại của khóa học, bạn không cần cung cấp khóa OpenAI API của riêng mình.
Các lớp sau đã được nhập sẵn cho bạn: RecursiveCharacterTextSplitter, Chroma, và OpenAIEmbeddings.
Bài tập này là một phần của khóa học
Phát triển ứng dụng LLM với LangChain
Hướng dẫn bài tập
- Chia các tài liệu trong
databằngRecursiveCharacterTextSplittervớichunk_sizelà300vàchunk_overlaplà50. - Dùng phương thức
.from_documents()để tạo embeddings và nạp các tài liệu vào cơ sở dữ liệu vector Chroma với hàm embeddings OpenAI đã cung cấp. - Cấu hình
vectorstorethành một đối tượng retriever trả về 3 tài liệu hàng đầu để sử dụng trong RAG chain cuối cùng.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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": ____}
)