Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Démarrer avec le niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles propres à votre environnement en nuage.
Intégrer OCI à OpenSearch et LangChain dans le carnet du service de science des données pour OCI
Présentation
OpenSearch a connu une adoption rapide au cours des dernières années, d'autant plus que les entreprises adoptent de plus en plus les grands modèles linguistiques (LLM) pour obtenir des renseignements sur les données et tirer profit des capacités de recherche intelligente pour leurs cas d'utilisation commerciale personnalisés. L'engagement continu d'OpenSearch à offrir une intégration transparente avec les dernières fonctionnalités d'intelligence artificielle et d'apprentissage automatique a permis aux organisations de créer de puissants moteurs d'observation, de recherche et d'analyse, essentiels au fur et à mesure de l'augmentation de l'utilisation du LLM. Avec Oracle Cloud Infrastructure Search avec OpenSearch (OCI avec OpenSearch), il y a déjà un enthousiasme notable, pour tirer parti des dernières fonctionnalités d'intelligence artificielle et d'apprentissage automatique, y compris l'assistant d'intelligence artificielle générative (GenAI) et d'apprentissage à classement, afin de résoudre des problèmes stratégiques.
OCI avec la version OpenSearch 2.11 fournit la console et la fonctionnalité d'interface de ligne de commande pour effectuer une recherche hybride, une recherche sémantique, ainsi qu'une recherche conversationnelle avec génération augmentée par extraction (RAG). Cependant, certains des points critiques que nous avons recueillis auprès des clients ont porté sur la configuration des flux de travail de recherche conversationnelle / pipelines RAG, mais plus important encore, sur la complexité des algorithmes pour le prétraitement et l'ingestion de grands volumes non structurés ou structurés. données, en particulier à partir de nombreux formats tels que PDF, CSV, EXCEL, WORD, DATA LAKES, et ainsi de suite, et le rendre accessible pour les applications LLM qui nécessitent à la fois la vitesse et la précision dans la récupération des informations. Par conséquent, l'intégration de LangChain et d'OCI à OpenSearch est devenue cruciale car elle facilite le traitement efficace des interrogations et la génération augmentée de l'extraction (RAG), donnant aux LLM des réponses plus contextuelles et précises.
LangChain fournit un cadre facile à utiliser pour créer et gérer des flux de travail LLM complexes, permettant aux développeurs de rationaliser l'intégration entre les LLM et OpenSearch. Cette combinaison améliore la pertinence de la recherche en permettant aux modèles linguistiques de récupérer les informations les plus pertinentes à partir de vastes magasins de données, améliorant ainsi la qualité de réponse pour les utilisateurs finaux.
De plus, notre intégration au service de science des données pour OCI et à l'intelligence artificielle générative pour OCI 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. Le service de science des données d'OCI offre une suite complète d'outils pour les spécialistes des données afin 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 le service de science des données pour OCI à OCI avec OpenSearch et LangChain, nous pouvons exploiter efficacement l'IA et tirer parti des synthèses de données avancées avec moins de ressources.
Pour une lisibilité efficace, ce premier tutoriel se concentrera sur la définition d'OCI avec OpenSearch et la configuration de la communication avec le service de science des données OCI; la configuration de LangChain et l'exploitation de son intégration avec OCI avec OpenSearch pour effectuer une recherche sémantique. Le prochain tutoriel explique comment 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 d'intelligence artificielle générative OCI pour accélérer le développement d'applications LLM.
Objectifs
- Intégrez OCI à OpenSearch et LangChain dans le carnet du service de science des données pour OCI.
Tâche 1 : Créer une grappe OpenSearch et configurer le carnet du service de science des données pour OCI pour votre location
La configuration du carnet du service de science des données pour OCI pour votre location nécessite quelques étapes, notamment la création et la configuration de VCN avec accès Internet, la définition de groupes, de groupes dynamiques et l'octroi des politiques Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) nécessaires pour permettre au service de science des données pour OCI de gérer des ressources spécifiques de votre location. Pour simplifier, nous avons compilé toutes les étapes ici : 1_Setup_Data_Science_Notebook_In_Your_Tenancy.ipynb.
L'équipe du service de science des données d'OCI dispose également d'une documentation détaillée sur toutes les fonctions de l'offre. Pour plus d'informations, voir Aperçu du service de science des données.
Note : Si vous disposez déjà d'une grappe OpenSearch et que vous avez déjà configuré un carnet pour votre location, vous pouvez passer à la partie Intégration LangChain de ce tutoriel et essayer le cas d'utilisation de la recherche sémantique.
Il est important de noter que la création d'un nouveau projet du service de science des données pour OCI ne génère pas de ressources de calcul supplémentaires. Chaque session de carnet que vous créez dans le cadre d'un projet de science des données génère ses propres ressources de calcul.
Tâche 1.1 : Configurer un réseau en nuage 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 science des données.
De préférence, utilisez l'assistant et cliquez sur Créer un VCN avec connectivité Internet.
Non : Une étape très cruciale est d'ajouter les règles de trafic entrant et sortant appropriées au sous-réseau privé de votre VCN. L'absence de ces règles peut empêcher le carnet d'accéder à Internet, ce qui vous empêchera d'installer des bibliothèques et des dépendances critiques. Si vous avez déjà un VCN existant, vous pouvez simplement modifier la liste de sécurité du sous-réseau privé pour ajouter les règles de trafic entrant suivantes.
Image 1.a : Assistant Configuration VNC
Image 1.b : Configurer les règles de trafic entrant pour le sous-réseau privé
Tâche 1.2 : Créer une grappe OpenSearch
Vous aurez besoin d'une grappe OpenSearch avec une image 2.11 ou ultérieure.
Si vous n'avez pas encore de grappe existante, voir Rechercher et visualiser des données à l'aide d'Oracle Cloud Infrastructure Search avec OpenSearch. Utilisez le même VCN que celui créé dans la tâche 1.1 pour créer votre grappe.
Ou
Si vous avez déjà une grappe existante que vous voulez utiliser, naviguez simplement jusqu'au sous-réseau privé de votre grappe et veillez à ajouter les règles de trafic sortant ci-dessus dans la liste de sécurité.
Tâche 1.3 : Créer les groupes requis et les groupes dynamiques
Définissez un groupe pour vos experts en science des données et un groupe dynamique pour les ressources du service de science des données pour OCI. Cela permet les autorisations appropriées pour effectuer des activités de science des données dans OCI. Pour plus d'informations sur la configuration manuelle des groupes et des groupes dynamiques requis, voir Création d'un groupe d'utilisateurs d'experts en science des données.
Vous pouvez également choisir de créer ces ressources dynamiquement à l'aide des piles du gestionnaire de ressources OCI.
-
Allez à la console OCI, naviguez jusqu'à Services de développement, Gestionnaire de ressources et cliquez sur Pile.
-
Cliquez sur Créer des piles et suivez l'assistant pour créer une pile à partir du modèle du service de science des données pour OCI.
Note : Vous trouverez le modèle de science des données dans l'onglet Service lorsque vous cliquez sur Sélectionner un modèle.
Tâche 1.4 : Configurer les politiques IAM OCI pour le carnet
Vous devez configurer des politiques IAM OCI pour accorder des autorisations à vos groupes et groupes dynamiques et permettre au service de science des données OCI de gérer certaines ressources de votre location. Assurez-vous que les politiques couvrent les autorisations de communication réseau et d'accès aux données. Pour plus d'informations, voir Politiques de déploiement de modèle.
-
Politiques pour gérer le déploiement de modèle.
allow group <group-name> to manage data-science-models in compartment <compartment-name> allow group <group-name> to manage data-science-model-deployments in compartment <compartment-name> allow dynamic-group <dynamic-group-name> to manage data-science-model-deployments in compartment <compartment-name>
-
Politiques permettant d'autoriser l'accès aux points d'extrémité de prédiction.
-
Politiques pour l'accès au déploiement de modèle pour publier le seau Conda.
-
Politiques permettant au déploiement de modèle d'accéder à un conteneur personnalisé à l'aide du principal de ressource.
-
Politiques pour le déploiement de modèle vers le seau de stockage d'objets OCI.
Tâche 1.5 : Configurer les politiques IAM d'OCI pour les actions rapides de l'IA
Si vous avez l'intention de tirer parti de la puissance des actions rapides de l'IA dans votre location pour automatiser et accélérer la formation, l'évaluation et le déploiement de vos modèles, vous devez configurer un jeu de politiques et de groupes dynamiques IAM OCI pour accorder l'accès aux ressources appropriées dans votre location. Les actions rapides d'IA ne fonctionneront pas dans votre session de carnet si vous ne configurez pas ces politiques requises. Pour plus d'informations, voir Politiques d'actions rapides pour l'intelligence artificielle.
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 le document de politique IAM OCI dans le compartiment racine. Vous pouvez ajouter toutes les règles requises dans le même document de politique. Pour simplifier, vous pouvez trouver le jeu de toutes les politiques IAM OCI pour les actions rapides de carnet et d'intelligence artificielle utilisées dans ce tutoriel. Pour plus d'informations, voir data-science-iam-policies.
Note : Veillez à mettre à jour les noms de groupe et de groupe dynamique, ainsi que le nom du compartiment. Vous pouvez en outre rendre ces politiques plus restrictives ou plus ouvertes en fonction de vos conceptions.
Tâche 2 : Lancer un carnet Jupyter dans le service de science des données pour OCI
Pour lancer une session de carnet, vous devez créer un projet de science des données. Dans ce projet, vous pouvez créer plusieurs carnets. Chaque ordinateur portable possède sa propre machine virtuelle et peut être lancé de manière indépendante. Dans chaque session de carnet, vous pouvez déployer et gérer plusieurs modèles, lier un référentiel GitHub ou Bitbucket existant ou en créer un nouveau, développer plusieurs carnets Jupyter, créer une application complète ou orchestrer l'ensemble de votre flux de travail d'apprentissage automatique.
-
Allez à la console OCI, naviguez jusqu'à Science des données, Projets et cliquez sur Créer un projet.
Note : Pour simplifier, 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 la grappe OpenSearch.
-
Créez une session de carnet.
-
Dans la page Détails du projet, cliquez sur Sessions de carnet et sur Créer une session de carnet.
-
Vous pouvez sélectionner la forme de calcul souhaitée et attacher les sources de données nécessaires. Lors de la création de la session de carnet, vous devez vous assurer de sélectionner le VCN approprié et le sous-réseau privé que vous avez utilisé pour la grappe OpenSearch.
-
-
Cliquez sur Ouvrir pour lancer une session de carnet. Vous pouvez maintenant installer les bibliothèques requises, y compris les clients Python LangChain et OpenSearch, directement à partir de l'interface de carnet à l'aide de pip.
Tâche 3 : Configurer LangChain avec le carnet Jupyter
Installez LangChain avec d'autres bibliothèques dans votre environnement ou script de carnet Jupyter et tirez parti de son intégration transparente avec OCI avec OpenSearch, HuggingFace, le service d'intelligence artificielle générative OCI et plusieurs autres, pour effectuer une recherche sémantique ou conversationnelle.
Ajoutez le code suivant en haut de votre carnet Jupyter.
!pip install -U langchain langchain-community opensearch-py pypdf sentence-transformers oci langchain-huggingface oracle_ads
Pour éviter d'avoir à réinstaller ces ensembles chaque fois dans chaque bloc-notes Jupyter que vous créez au sein d'une session de carnet, il est conseillé de créer et d'activer un environnement Conda et d'y installer toutes vos dépendances, de sorte que vous pouvez réutiliser cet environnement avec plusieurs blocs-notes Jupyter. 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 des bibliothèques supplémentaires sur le dessus. Une fois l'installation terminée, il vous suffit de régler le noyau de votre carnet à cet environnement Conda actif.
-
Lancez un nouveau terminal. Allez à Fichier, Nouveau et cliquez sur Terminal.
-
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>
-
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 efficacement 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 nécessaires qui conviennent le mieux à 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)
Tâche 5 : Exploiter OCI avec l'intégration OpenSearch à LangChain pour effectuer une recherche sémantique
Une fois que vous avez installé LangChain dans votre environnement noteBook, vous pouvez tirer parti de l'intégration d'OCI avec OpenSearch à LangChain pour effectuer une recherche sémantique plus simplement que d'écrire du code à partir de zéro afin de suivre le long guide étape par étape OpenSearch avec plusieurs appels d'API.
-
Utilisez la bibliothèque de documents LangChain pour traiter et fragmenter vos données non structurées comme indiqué dans la tâche 4.
-
Définissez un modèle d'intégration que vous souhaitez utiliser pour générer automatiquement des intégrations pour vos données lors de l'ingestion. Encore une fois, en tirant parti de l'intégration de LangChain avec HuggingFace, vous pouvez déployer n'importe lequel des modèles HuggingFace préentraînés avec une seule ligne de code. Il vous suffit de spécifier le nom du modèle d'intégration que vous souhaitez utiliser. Vous pouvez également utiliser un modèle affiné personnalisé à cette fin. Exécutez la commande suivante .
from langchain.embeddings import HuggingFaceEmbeddings embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L12-v2")
-
Créez une connexion à OCI avec OpenSearch à l'aide de LangChain, en spécifiant le nom de l'index, la méthode d'authentification et le modèle d'intégration que vous voulez utiliser. Avec cette méthode, un index portant le nom d'index spécifié sera créé lors de l'ingestion 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)
-
Vous pouvez également ingérer directement vos fragments de données traités en masse dans votre grappe OpenSearch à l'aide de LangChain. L'exemple suivant montre comment effectuer une ingestion en masse par lots sur une liste de fragments de document 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)
-
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")
Étapes suivantes
OCI avec l'intégration OpenSearch à LangChain et le service de science des données pour OCI change la donne et accélérera considérablement le développement d'applications d'entreprise pour les cas d'utilisation commerciale liés à la recherche sémantique et au LLM. Ce tutoriel fournit un guide complet avec des exemples pour configurer OCI avec OpenSearch et le service de science des données OCI dans votre location, et pour tirer parti de LangChain pour effectuer une recherche sémantique.
Dans le tutoriel suivant : Tutoriel 2 : Intégrer LangChain, carnet du service de science des données pour OCI, OCI avec OpenSearch et l'intelligence artificielle générative OCI pour accélérer le développement LLM pour la recherche RAG et conversationnelle, nous discuterons de la façon de tirer parti de l'intégration transparente entre LangChain, le service de science des données pour OCI, l'action rapide de l'intelligence artificielle et le service d'intelligence artificielle générative pour OCI, pour développer votre propre application LLM personnalisée. Nous vous invitons à essayer OCI avec OpenSearch pour vos cas d'utilisation d'intelligence artificielle et d'apprentissage automatique d'entreprise.
Liens connexes
Vous pouvez trouver le code dans le référentiel GitHub suivant.
Confirmation
-
Auteurs - Landry Kezebou (ingénieur principal en apprentissage automatique, OCI OpenSearch), Sreeni Simhadri (directeur principal du développement de logiciels), Saiprasad Sethuram (gestionnaire principal de l'ingénierie)
-
Contributeurs - Julien Lehmann (gestionnaire du marketing de produits, plate-forme de données d'Oracle), Andy Hind (architecte principal d'applications)
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Integrate OCI with OpenSearch and LangChain within OCI Data Science Notebook
G25108-01
January 2025