CommencerCommencer gratuitement

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

Afficher le cours

Instructions

  • Divisez les documents en data à l'aide d'un séparateur de caractères récursif avec chunk_size de 300 et chunk_overlap de 50 ; ignorez l'argument separators, 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={____}
)
Modifier et exécuter le code