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
Développement d'applications LLM avec LangChain
Instructions
- Divisez les documents en
data
à l'aide d'un séparateur de caractères récursif avecchunk_size
de300
etchunk_overlap
de50
; ignorez l'argumentseparators
, car sa valeur par défaut est["\n\n", "\n", " ", ""]
. - Définissez un modèle d'intégration OpenAI à l'aide du paramètre fictif
<OPENAI_API_TOKEN>
fourni, puis utilisez-le pour intégrer et ingérer les documents dans une base de données Chroma. - Configurez
vectorstore
en 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 cet exemple de code.
loader = PyPDFLoader('rag_vs_fine_tuning.pdf')
data = loader.load()
# Split the document using RecursiveCharacterTextSplitter
splitter = ____
docs = splitter.____(data)
# Embed the documents in a persistent Chroma vector database
embedding_function = OpenAIEmbeddings(api_key='', model='text-embedding-3-small')
vectorstore = Chroma.____(
____,
embedding=____,
persist_directory=os.getcwd()
)
# Configure the vector store as a retriever
retriever = ____(
search_type="similarity",
search_kwargs={____}
)