În sistemele RAG există un conflict fundamental de granularitate: fragmentele mici (small chunks, ex: 100 de tokeni) produc reprezentări semantice precise și clare pentru căutarea vectorială, dar fragmentele mari (large chunks sau documentul integral) oferă contextul narativ complet necesar LLM-ului pentru formularea răspunsului.
Tehnica Parent Document Retriever decuplează căutarea de consumul contextului:
- Documentul părinte este împărțit în sub-fragmente mici (copii).
- Doar sub-fragmentele mici sunt vectorizate și stocate în baza vectorială, fiecare având un pointer către ID-ul documentului părinte.
- La interogare, se identifică cele mai apropiate sub-fragmente, dar se extrage și se furnizează LLM-ului documentul părinte complet dintr-un Document Store.
from langchain.retrievers import ParentDocumentRetriever
from langchain.storage import InMemoryStore
from langchain_text_splitters import RecursiveCharacterTextSplitter
parent_splitter = RecursiveCharacterTextSplitter(chunk_size=2000)
child_splitter = RecursiveCharacterTextSplitter(chunk_size=300)
retriever = ParentDocumentRetriever(
vectorstore=vectorstore,
docstore=InMemoryStore(),
child_splitter=child_splitter,
parent_splitter=parent_splitter
)
# Adăugare documente complete
retriever.add_documents(documents)
Această metodă elimină complet compromisul de trunchiere a contextului întâlnit în strategiile naive de chunking.
Întrebări & Exemple practice:
Parent Document Retriever: Indexare pe Fragmente Mici și Regăsire Contextuală MareAi o întrebare despre Parent Document Retriever: Indexare pe Fragmente Mici și Regăsire Contextuală Mare sau ai descoperit un truc, prompt sau fragment de cod util? Distribuie-l cu ceilalți membri ai comunității!
Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau resurse pentru această pagină. Dacă ai testat un prompt sau ai un snippet util, adaugă-l mai jos pentru comunitate.