Préparer les documents et la base vectorielle
Au cours des prochains exercices, vous allez bâtir un flux de travail RAG complet pour clavarder avec un document PDF contenant l'article « RAG VS Fine-Tuning: Pipelines, Tradeoffs, and a Case Study on Agriculture » de Balaguer et al. (2024). Le procédé consiste à découper les documents en segments, à les stocker dans une base de données vectorielle, à définir une invite pour relier les documents récupérés et l'entrée de l'utilisateur, puis à construire 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 l'entreposage et l'ingérer dans une base de données vectorielle Chroma. Vous utiliserez un RecursiveCharacterTextSplitter pour segmenter le PDF, puis vous l'ingérerez dans une base vectorielle Chroma à l'aide d'une fonction d'empaquetage OpenAI. Comme pour le reste du cours, vous n'avez pas à fournir votre propre clé d'API OpenAI.
Les classes suivantes ont déjà été importées pour vous : RecursiveCharacterTextSplitter, Chroma et OpenAIEmbeddings.
Cette activité fait partie du cours
Développer des applications LLM avec LangChain
Instructions de l’exercice
- Découpez les documents dans
dataen utilisant unRecursiveCharacterTextSplitteravec unchunk_sizede300et unchunk_overlapde50. - Utilisez la méthode
.from_documents()pour créer les vecteurs et ingérer les documents dans une base de données vectorielle Chroma avec la fonction d'empaquetage OpenAI fournie. - Configurez
vectorstoreen un objet « retriever » qui renvoie les 3 meilleurs 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": ____}
)