Préparation des documents et de la base de données vectorielle
Au cours des prochains exercices, vous allez créer un flux de travail RAG complet pour dialoguer avec un document PDF contenant l'article RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture par Balaguer et al. (2024). Ceci fonctionne en divisant les documents en petites parties, en les stockant dans une base de données vectorielle, en définissant un prompt pour relier les documents récupérés et les entrées de l'utilisateur, et en construisant une chaîne de récupération permettant au LLM d'accéder à ces données externes.
Dans cet exercice, vous allez préparer le document pour le stockage et l'ingérer dans une base de données vectorielle Chroma. Vous utiliserez un RecursiveCharacterTextSplitter pour découper le PDF en plusieurs parties, puis vous les intégrerez dans une base de données vectorielle Chroma à l'aide d'une fonction d'intégration OpenAI. Comme pour le reste du cours, vous n'avez pas besoin de fournir votre propre clé API OpenAI.
Les classes suivantes ont déjà été importées pour vous : RecursiveCharacterTextSplitter, Chroma et OpenAIEmbeddings.
Cet exercice fait partie du cours
<cours>Développement d'applications LLM avec LangChain</cours>Instructions de l’exercice
- Veuillez diviser les documents dans
dataen utilisant unRecursiveCharacterTextSplitteravec unchunk_sizede300et unchunk_overlapde50. - Veuillez utiliser la méthode
.from_documents()pour intégrer et ingérer les documents dans une base de données vectorielle Chroma à l'aide de la fonction d'intégration OpenAI fournie. - Configurez
vectorstoreen un objet de récupérateur qui renvoie les trois premiers documents à utiliser dans la chaîne RAG finale.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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": ____}
)