Pregătirea documentelor și a bazei de date vectoriale
În următoarele câteva exerciții, vei construi un flux de lucru RAG complet pentru a purta o conversație cu un document PDF ce conține articolul RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture de Balaguer et al. (2024). Aceasta funcționează prin împărțirea documentelor în fragmente, stocarea lor într-o bază de date vectorială, definirea unui prompt care conectează documentele recuperate cu inputul utilizatorului și construirea unui lanț de recuperare pentru ca LLM-ul să acceseze aceste date externe.
În acest exercițiu, vei pregăti documentul pentru stocare și îl vei încărca într-o bază de date vectorială Chroma. Vei folosi un RecursiveCharacterTextSplitter pentru a împărți PDF-ul în fragmente și le vei ingera într-o bază de date vectorială Chroma folosind o funcție de încorporări (embeddings) OpenAI. Ca și în restul cursului, nu trebuie să furnizezi propria cheie API OpenAI.
Următoarele clase au fost deja importate pentru tine: RecursiveCharacterTextSplitter, Chroma și OpenAIEmbeddings.
Acest exercițiu face parte din cursul
Developing LLM Applications with LangChain
Instrucțiuni pentru exercițiu
- Împarte documentele din
datafolosind unRecursiveCharacterTextSplittercu unchunk_sizede300și unchunk_overlapde50. - Folosește metoda
.from_documents()pentru a încorpora și ingera documentele într-o bază de date vectorială Chroma cu funcția de încorporări OpenAI furnizată. - Configurează
vectorstoreca obiect de tip retriever care returnează cele mai relevante 3 documente pentru utilizare în lanțul RAG final.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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": ____}
)