Remarques :

Intégration d'OCI avec OpenSearch et LangChain dans le bloc-notes OCI Data Science

Introduction

OpenSearch a connu une adoption rapide ces dernières années, en particulier à mesure que les entreprises adoptent de plus en plus de grands modèles de langage (LLM) pour générer des informations sur les données et tirer parti des fonctionnalités de recherche intelligente pour leurs cas d'utilisation métier personnalisés. L'engagement continu d'OpenSearch à fournir une intégration transparente aux dernières fonctionnalités d'IA/ML a permis aux entreprises de créer de puissants moteurs d'observabilité, de recherche et d'analyse, essentiels à mesure que l'utilisation des LLM augmente. Avec Oracle Cloud Infrastructure Search avec OpenSearch (OCI avec OpenSearch), il y a déjà un enthousiasme notable à tirer parti des dernières fonctionnalités d'IA/ML, notamment l'assistant d'IA générative (GenAI) et Learning to Rank, pour résoudre des problèmes stratégiques.

OCI avec la version OpenSearch 2.11 fournit des fonctionnalités de console et d'interface de ligne de commande (CLI) pour effectuer des recherches hybrides, sémantiques et conversationnelles avec génération augmentée de récupération (RAG). Cependant, certains des problèmes critiques que nous avons recueillis auprès des clients concernaient la configuration de workflows de recherche conversationnelle / pipelines RAG, mais plus important encore, la complexité des algorithmes pour le prétraitement et l'ingestion de grands volumes non structurés ou structurés. les données, en particulier à partir de nombreux formats tels que PDF, CSV, EXCEL, WORD, DATA LAKES, etc., et les rendre accessibles pour les applications pilotées par LLM qui nécessitent à la fois vitesse et précision dans l'extraction des informations. Par conséquent, l'intégration de LangChain et d'OCI à OpenSearch est devenue cruciale car elle facilite la gestion efficace des requêtes et la génération augmentée de récupération (RAG), ce qui permet aux LLM d'obtenir des réponses plus contextuelles et précises.

LangChain fournit une structure facile à utiliser pour créer et gérer des workflows LLM complexes, permettant aux développeurs de rationaliser l'intégration entre les LLM et OpenSearch. Cette combinaison améliore la pertinence des recherches en permettant aux modèles de langage de récupérer les informations les plus pertinentes à partir de vastes banques de données, améliorant ainsi la qualité des réponses pour les utilisateurs finaux.

En outre, notre intégration à OCI Data Science et à OCI Generative AI peut accélérer considérablement le développement et le déploiement en production de cas d'utilisation de l'IA d'entreprise avec un minimum d'effort et de code. OCI Data Science fournit une suite complète d'outils permettant aux data scientists de créer, d'entraîner et de déployer des modèles avec un minimum de friction, automatisant ainsi une grande partie du travail fastidieux associé à la préparation des données et à la gestion du cycle de vie des modèles. En intégrant OCI Data Science à OCI avec OpenSearch et LangChain, nous pouvons opérationnaliser efficacement l'IA et tirer parti des informations avancées sur les données avec moins de ressources.

Pour une lisibilité efficace, ce premier tutoriel se concentrera sur la configuration d'OCI avec OpenSearch et la configuration de la communication avec le service OCI Data Science, la configuration de LangChain et l'utilisation de son intégration à OCI avec OpenSearch pour effectuer une recherche sémantique. Le prochain tutoriel se concentrera sur la façon de tirer parti de l'intégration transparente entre LangChain, OCI avec OpenSearch, Oracle Cloud Infrastructure Data Science AI Quick Actions (AI Quick Actions) et le service OCI Generative AI pour accélérer le développement d'applications LLM.

Objectifs

Tâche 1 : création d'un cluster OpenSearch et configuration du bloc-notes OCI Data Science pour votre location

La configuration du bloc-notes OCI Data Science pour votre location nécessite quelques étapes, notamment la création et la configuration de VCN avec un accès Internet, la définition de groupes, de groupes dynamiques et l'octroi des stratégies Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) nécessaires pour permettre à OCI Data Science de gérer des ressources spécifiques dans votre location. Pour plus de simplicité, nous avons compilé toutes les étapes ici : 1_Setup_Data_Science_Notebook_In_Your_Tenancy.ipynb.

L'équipe OCI Data Science dispose également d'une documentation détaillée sur toutes les fonctionnalités de l'offre. Pour plus d'informations, reportez-vous à Présentation de Data Science.

Remarque : si vous disposez déjà d'un cluster OpenSearch et que vous avez déjà configuré un bloc-notes pour votre location, vous pouvez passer à la partie d'intégration LangChain de ce tutoriel et essayer le cas d'emploi de la recherche sémantique.

Il est important de noter que la création d'un projet OCI Data Science en soi ne met pas en place de ressources de calcul supplémentaires. Chaque session de bloc-notes que vous créez dans le cadre d'un projet de science des données fait tourner ses propres ressources de calcul.

Tâche 1.1 : configuration d'un réseau cloud virtuel (VCN)

Créez un VCN dans votre location, en vous assurant que les sous-réseaux et les listes de sécurité appropriés sont configurés pour permettre une communication sécurisée pour les opérations de data science.

De préférence, utilisez l'assistant et cliquez sur Créer un VCN avec la connectivité Internet.

Pas : une étape très cruciale consiste à vous assurer d'ajouter les règles entrantes et sortantes appropriées au sous-réseau privé de votre VCN. L'absence de ces règles peut empêcher le bloc-notes d'avoir accès à Internet, ce qui vous empêchera d'installer des bibliothèques et des dépendances critiques. Si vous disposez déjà d'un VCN existant, vous pouvez simplement modifier la liste de sécurité du sous-réseau privé pour ajouter les règles entrantes suivantes.

Image représentant le VCN. Figure 1.a : Assistant de configuration VNC

Configuration des règles entrantes d'image Figure 1.b : Configuration de règles entrantes pour un sous-réseau privé

Tâche 1.2 : création d'un cluster OpenSearch

Vous aurez besoin d'un cluster OpenSearch avec une image 2.11 ou ultérieure.

Si vous n'avez pas encore de cluster existant, reportez-vous à Recherche et visualisation de données à l'aide d'Oracle Cloud Infrastructure Search avec OpenSearch. Utilisez le même VCN créé dans la tâche 1.1 pour créer votre cluster.

Ou

Si vous avez déjà un cluster existant à utiliser, accédez simplement au sous-réseau privé de votre cluster et veillez à ajouter les règles sortantes ci-dessus dans la liste de sécurité.

Tâche 1.3 : créer des groupes requis et des groupes dynamiques

Définissez un groupe pour vos data scientists et un groupe dynamique pour les ressources OCI Data Science. Cela permet d'obtenir les droits d'accès appropriés pour effectuer des activités de data science dans OCI. Pour plus d'informations sur la configuration manuelle des groupes et des groupes dynamiques requis, reportez-vous à Création d'un groupe d'utilisateurs Data Scientists.

Vous pouvez également choisir de créer ces ressources de façon dynamique à l'aide des piles OCI Resource Manager.

  1. Accédez à la console OCI, accédez aux services de développeur, à Resource Manager et cliquez sur Pile.

  2. Cliquez sur Créer des piles et suivez l'assistant pour créer une pile à partir du modèle OCI Data Science.

    Remarque : lorsque vous cliquez sur Sélectionner un modèle, vous trouverez le modèle de science des données dans l'onglet Service.

Tâche 1.4 : configurer les stratégies OCI IAM pour le bloc-notes

Vous devez configurer certaines stratégies OCI IAM pour accorder des droits d'accès à vos groupes et groupes dynamiques et autoriser le service OCI Data Science à gérer certaines ressources dans votre location. Assurez-vous que les stratégies couvrent la communication réseau et les autorisations d'accès aux données. Pour plus d'informations, reportez-vous à Stratégies de déploiement de modèle.

Tâche 1.5 : configuration des stratégies OCI IAM pour les actions rapides d'IA

Si vous avez l'intention de tirer parti de la puissance des actions rapides d'IA dans votre location pour automatiser et accélérer l'entraînement, l'évaluation et le déploiement de votre modèle, vous devez configurer un ensemble de stratégies et de groupes dynamiques OCI IAM afin d'accorder l'accès aux ressources appropriées dans votre location. Les actions rapides AI ne fonctionneront pas dans votre session de bloc-notes si vous ne configurez pas ces stratégies requises. Pour plus d'informations, voir Stratégies d'actions rapides AI.

Define tenancy datascience as ocid1.tenancy.oc1..aaaaaaaax5hdic7xxxxxxxxxxxxxxxxxnrncdzp3m75ubbvzqqzn3q
Endorse any-user to read data-science-models in tenancy datascience where ALL {target.compartment.name='service-managed-models'}
Endorse any-user to inspect data-science-models in tenancy datascience where ALL {target.compartment.name='service-managed-models'}
Endorse any-user to read object in tenancy datascience where ALL {target.compartment.name='service-managed-models', target.bucket.name='service-managed-models'}

Il est important de créer votre document de stratégie OCI IAM dans le compartiment racine. Vous pouvez ajouter toutes les règles requises dans le même document de stratégie. Pour plus de simplicité, vous pouvez trouver l'ensemble de toutes les stratégies OCI IAM pour les blocs-notes et les actions rapides d'IA utilisées dans ce tutoriel. Pour plus d'informations, reportez-vous à data-science-iam-policies.

Remarque : veillez à mettre à jour les noms de groupe et de groupe dynamique, ainsi que le nom du compartiment. Vous pouvez en outre rendre ces stratégies plus restrictives ou plus ouvertes en fonction de vos conceptions.

Task 2: Launch a Jupyter Notebook in OCI Data Science

Pour lancer une session de bloc-notes, vous devez créer un projet de science des données. Dans ce projet, vous pouvez créer plusieurs blocs-notes. Chaque bloc-notes possède sa propre machine virtuelle (VM) et peut être lancé indépendamment. Dans chaque session de bloc-notes, vous pouvez déployer et gérer plusieurs modèles, lier un référentiel GitHub ou Bitbucket existant, ou créer et gérer un nouveau référentiel, développer plusieurs blocs-notes Jupyter, créer une application complète ou orchestrer l'ensemble de votre workflow d'apprentissage automatique.

  1. Accédez à la console OCI, accédez à Data Science, à Projets et cliquez sur Créer un projet.

    Remarque : pour plus de simplicité, nous allons créer toutes les ressources dans le même compartiment. Veillez à sélectionner le compartiment dans lequel vous avez créé le VCN et le cluster OpenSearch.

    Image représentant le VCN.

    Figure 2 : Création d'un nouveau projet de science des données

  2. Créez une session de bloc-notes.

    1. Sur la page Détails du projet, cliquez sur Sessions de bloc-notes et sur Créer une session de bloc-notes.

      Image représentant le VCN.

    2. Vous pouvez sélectionner la forme de calcul souhaitée et associer les sources de données nécessaires. Lors de la création de la session de bloc-notes, vous devez vous assurer de sélectionner le VCN correct et le sous-réseau privé que vous avez utilisé pour le cluster OpenSearch.

      Image représentant le VCN.

      Figure 3 : Création d'une session de bloc-notes

  3. Cliquez sur Ouvrir pour lancer une session de bloc-notes. Vous pouvez désormais installer les bibliothèques requises, y compris les clients Python LangChain et OpenSearch, directement à partir de l'interface de bloc-notes à l'aide de pip.

    Image représentant le VCN.

    Image représentant le VCN.

    Figure 4 : lancement d'une session de bloc-notes

Tâche 3 : configurer LangChain avec Jupyter Notebook

Installez LangChain avec d'autres bibliothèques dans votre environnement ou script Jupyter Notebook, et tirez parti de son intégration transparente avec OCI avec OpenSearch, HuggingFace, le service OCI Generative AI et plusieurs autres, pour effectuer une recherche sémantique ou conversationnelle.

Ajoutez le code suivant en haut de votre Jupyter Notebook.

!pip install -U langchain langchain-community opensearch-py pypdf  sentence-transformers oci  langchain-huggingface oracle_ads

To avoid having to re-install these packages everytime in each Jupyter Notebook that you create within a notebook session, it is advisable that you create and activate a conda environment and install all your dependencies in them, that way you can reuse this environment with multiple Jupyter notebooks. Il existe plusieurs environnements conda préconfigurés sous Lanceur. N'hésitez pas à sélectionner et à installer l'un de ces environnements préconfigurés dans un terminal, puis à installer d'autres bibliothèques par-dessus. Une fois l'installation terminée, définissez simplement le noyau dans votre bloc-notes sur cet environnement conda actif.

  1. Lancez un nouveau terminal. Accédez à Fichier, Nouveau et cliquez sur Terminal.

    Image représentant le VCN.

    Figure 5 : Lancer un nouveau terminal

  2. Exécutez la commande suivante pour créer un environnement conda.

    odsc conda install -s python_p310_any_x86_64_v1
    conda activate <environment name>
    
  3. Exécutez la commande suivante pour installer LangChain à l'aide de pip dans le terminal.

    pip install  -U oracle_ads oci langchain langchain-community opensearch-py pypdf  sentence-transformers oci  langchain-huggingface oracle_ads
    

Tâche 4 : traiter les documents avec LangChain

L'un des points forts de LangChain est qu'il offre la possibilité de traiter de grands volumes de documents de manière efficace et avec un codage minimal, qu'il s'agisse de données structurées ou non structurées. Il vous suffit d'importer les classes de traitement de documents les plus adaptées à votre utilisation et d'appeler la méthode de chargement pour traiter les documents. Exécutez la commande suivante .

import os
from langchain.document_loaders import PyPDFLoader, CSVLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

# Step 1: Load PDF and CSV Documents
def load_documents():
    # Load PDF Document
    pdf_loader = PyPDFLoader("data/sample_document.pdf")
    pdf_documents = pdf_loader.load()

    # Load CSV Document
    csv_loader = CSVLoader(file_path="data/sample_data.csv")
    csv_documents = csv_loader.load()

    # Combine both sets of documents
    all_documents = pdf_documents + csv_documents
    return all_documents

# Step 2: Split the documents into smaller chunks for better processing
def split_documents(documents):
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=1000,
        chunk_overlap=100
    )
    split_docs = text_splitter.split_documents(documents)
    return split_docs


# Load and process documents
documents = load_documents()
split_docs = split_documents(documents)

Une fois que vous avez installé LangChain dans votre environnement noteBook, vous pouvez tirer parti de l'intégration OCI avec OpenSearch avec LangChain pour effectuer une recherche sémantique plus simplement que d'écrire du code à partir de zéro pour suivre le guide OpenSearch étape par étape avec plusieurs appels d'API.

  1. Utilisez la bibliothèque de documents LangChain pour traiter et découper vos données non structurées, comme indiqué dans la tâche 4.

  2. Définissez un modèle d'intégration que vous souhaitez utiliser pour générer automatiquement des incorporations pour vos données lors de l'ingestion. Une fois de plus, grâce à l'intégration de LangChain à HuggingFace, vous pouvez déployer n'importe quel modèle HuggingFace préentraîné avec une seule ligne de code. Tout ce que vous devez faire est de spécifier le nom du modèle d'intégration que vous souhaitez utiliser. Vous pouvez également utiliser un modèle personnalisé affiné à cette fin. Exécutez la commande suivante .

    from langchain.embeddings import HuggingFaceEmbeddings
    embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L12-v2")
    
  3. Créez une connexion à OCI avec OpenSearch à l'aide de LangChain, en indiquant le nom d'index, la méthode d'authentification et le modèle d'intégration à utiliser. Avec cette méthode, un index portant le nom d'index indiqué sera créé lors de l'assimilation des données, ou mis à jour avec de nouvelles données si l'index existe déjà. Exécutez la commande suivante .

    from langchain.vectorstores import OpenSearchVectorSearch
    import oci
    
    # set up your script to use Resource principal for authentication
    auth_provider = oci.auth.signers.get_resource_principals_signer()
    auth = ("username", "password")
    AUTH_TYPE="RESOURCE_PRINCIPAL"
    opensearch_url="https://amaaaaaallb3......................opensearch.us-ashburn-1.oci.oraclecloud.com:9200"   // replace this whole value your opensearch url. Be sure sure to have the :9200 port in your url
    
    # Initialize OpenSearch as the vector database
    vector_db = OpenSearchVectorSearch(opensearch_url=opensearch_url,
                               index_name="<YOUR-INDEX-NAME>",
                               embedding_function=embedding_model,
                               signer=auth_provider,
                               auth_type="RESOURCE_PRINCIPAL",
                               http_auth=auth)
    
  4. Vous pouvez également ingérer directement vos blocs de données traités en masse dans votre cluster OpenSearch à l'aide de LangChain. L'exemple suivant montre comment effectuer une assimilation en masse par lots sur une liste de blocs de documents traités. Utilisez la bibliothèque tqdm pour suivre la progression de l'ingestion de données. Exécutez la commande suivante .

    from langchain.vectorstores import OpenSearchVectorSearch
    import oci
    from tqdm import tqdm
    
    batch_size=100
    documents = load_documents() # function defined above feel free to or define a new one to process documents
    document_chunks = split_documents(documents) // function defined above feel free to edit
    index_name= <YOUR-INDEX-NAME>
    
    # Ingest documents in batches
    for i in tqdm(range(0, len(document_chunks), batch_size), desc="Ingesting batches"):
    batch = document_chunks[i:i + batch_size]
    vector_db.add_texts(texts=batch,
                      bulk_size=batch_size,
                      embedding=embedding_model,
                      opensearch_url=opensearch_url,
                      index_name= index_name,
                      signer=auth_provider,
                      auth_type=AUTH_TYPE,
                      http_auth=("username", "password"))
    
    #refresh index
    vector_db.client.indices.refresh(index=index_name)
    
  5. Une fois les données ingérées, exécutez la commande suivante pour effectuer une recherche sémantique sur votre index.

    # Generate topK documents with scores
    query = "what can you tell me about picasso?"
    search_results = vector_db.similarity_search_with_score_by_vector(embedding_model.embed_query(query), k=5)
    
    # Iterate over the search results and print the text along with the relevance scores
    for document, score in search_results:
       print(f"Score: {score}")
       print(f"Document: {document.page_content}\n")
    

Etapes suivantes

OCI avec l'intégration de OpenSearch avec LangChain et OCI Data Science change la donne et accélérera considérablement le développement d'applications d'entreprise de cas d'utilisation commerciaux autour de la recherche sémantique et du LLM. Ce tutoriel fournit un guide complet avec des exemples pour la configuration d'OCI avec OpenSearch et OCI Data Science dans votre location, et l'utilisation de LangChain pour effectuer une recherche sémantique.

Dans le tutoriel suivant : Tutoriel 2 : Intégrer LangChain, OCI Data Science Notebook, OCI avec OpenSearch et OCI Generative AI pour accélérer le développement de LLM pour la RAG et la recherche conversationnelle, nous expliquerons comment tirer parti d'une intégration transparente entre LangChain, OCI Data Science, AI Quick Action et le service OCI Generative AI pour développer votre propre application LLM personnalisée. Nous vous invitons à essayer OCI avec OpenSearch pour les cas d'utilisation de l'IA/du ML de votre entreprise.

Vous pouvez trouver le code dans le référentiel GitHub suivant.

Remerciements

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à d'autres contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, visitez le site education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir la documentation produit, consultez le site Oracle Help Center.