Nota

Integra OCI con OpenSearch e LangChain all'interno del notebook OCI Data Science

Introduzione

OpenSearch ha visto una rapida adozione negli ultimi anni, in particolare quando le aziende adottano sempre più modelli di linguaggio di grandi dimensioni (LLM) per ottenere insight sui dati e sfruttare le funzionalità di ricerca intelligente per i loro casi d'uso aziendali personalizzati. L'impegno continuo di OpenSearch nel fornire una perfetta integrazione con le più recenti funzionalità AI/ML ha permesso alle organizzazioni di creare potenti motori di osservabilità, ricerca e analytics, fondamentali man mano che l'utilizzo di LLM cresce. Con Oracle Cloud Infrastructure Search with OpenSearch (OCI with OpenSearch), c'è già un notevole entusiasmo, per sfruttare le più recenti funzionalità AI/ML, tra cui l'assistente AI generativa (GenAI) e Learning to Rank, per risolvere problemi strategici.

OCI con la release OpenSearch 2.11 ha fornito la console e la funzionalità CLI (Command Line Interface) per l'esecuzione di ricerche ibride, ricerche semantiche e ricerche conversazionali con RAG (Recupero-augmented Generation). Tuttavia, alcuni dei punti critici che abbiamo raccolto dai clienti hanno riguardato la configurazione dei flussi di lavoro di ricerca conversazionale / pipeline RAG, ma soprattutto le complessità degli algoritmi per il pre-elaborazione e l'ingestione di grandi volumi non strutturati o strutturati. dati, in particolare da numerosi formati come PDF, CSV, EXCEL, WORD, DATA LAKES e così via, e rendendoli accessibili per applicazioni basate su LLM che richiedono velocità e precisione nel recupero delle informazioni. Pertanto, l'integrazione di LangChain e OCI con OpenSearch è diventata fondamentale in quanto facilita una gestione efficiente delle query e la generazione aumentata del recupero (RAG), offrendo agli LLM risposte più contestuali e accurate.

LangChain fornisce un framework facile da usare per la creazione e la gestione di flussi di lavoro LLM complessi, consentendo agli sviluppatori di semplificare l'integrazione tra LLM e OpenSearch. Questa combinazione migliora la pertinenza della ricerca consentendo ai modelli di linguaggio di recuperare le informazioni più pertinenti da vasti archivi di dati, migliorando la qualità delle risposte per gli utenti finali.

Inoltre, la nostra integrazione con OCI Data Science e OCI Generative AI può accelerare notevolmente lo sviluppo e la distribuzione in produzione di casi d'uso di AI aziendali con sforzi e codice minimi. OCI Data Science offre una suite completa di strumenti che consentono ai data scientist di creare, addestrare e distribuire modelli con attrito minimo, automatizzando gran parte del noioso lavoro associato alla preparazione dei dati e alla gestione del ciclo di vita dei modelli. Integrando OCI Data Science con OCI con OpenSearch e LangChain, possiamo rendere operativa l'AI in modo efficiente e sfruttare insight avanzati sui dati con meno risorse.

Per una leggibilità efficiente, questa prima esercitazione si concentrerà sull'impostazione di OCI con OpenSearch e sulla configurazione della comunicazione con il servizio OCI Data Science; sulla configurazione di LangChain e sull'utilizzo della relativa integrazione con OCI con OpenSearch per eseguire la ricerca semantica. La prossima esercitazione si concentrerà su come sfruttare la perfetta integrazione tra LangChain, OCI con OpenSearch, Oracle Cloud Infrastructure Data Science AI Quick Actions (AI Quick Actions) e il servizio OCI Generative AI per accelerare lo sviluppo delle applicazioni LLM.

Obiettivi

Task 1: creare un cluster OpenSearch e impostare il notebook OCI Data Science per la tenancy

L'impostazione del notebook OCI Data Science per la tenancy richiede alcuni passi che includono la creazione e la configurazione di una VCN con accesso a Internet, l'impostazione di gruppi, gruppi dinamici e la concessione dei criteri Oracle Cloud Infrastructure Identity and Access Management (IAM OCI) necessari per consentire a OCI Data Science di gestire risorse specifiche nella tenancy. Per semplicità abbiamo compilato tutti i passi qui: 1_Setup_Data_Science_Notebook_In_Your_Tenancy.ipynb.

Il team di OCI Data Science ha anche una documentazione elaborata su tutte le funzionalità offerte. Per ulteriori informazioni, vedere Panoramica di Data Science.

Nota: se si dispone già di un cluster OpenSearch e si è già configurato un blocco note per la tenancy, è possibile passare alla parte di integrazione LangChain di questa esercitazione e provare il caso d'uso della ricerca semantica.

È importante notare che la creazione stessa di un nuovo progetto OCI Data Science non attiva risorse di computazione aggiuntive. Ogni sessione notebook creata nell'ambito di un progetto di data science gira le proprie risorse di computazione.

Task 1.1: configurare una rete VCN (Virtual Cloud Network)

Crea una VCN all'interno della tua tenancy, assicurandoti che le subnet e gli elenchi di sicurezza appropriati siano impostati per consentire comunicazioni sicure per le operazioni di data science.

È preferibile utilizzare la procedura guidata e fare clic su Crea una VCN con connettività Internet.

Non: un passo molto importante è quello di assicurarsi di aggiungere le regole di entrata e uscita appropriate alla subnet privata della VCN. L'assenza di queste regole potrebbe impedire al notebook di avere accesso a Internet, che a sua volta impedirà di installare librerie e dipendenze critiche. Se disponi già di una VCN esistente, puoi semplicemente modificare la lista di sicurezza della subnet privata per aggiungere le seguenti regole di entrata.

Immagine che mostra la VCN. Figura 1.a: Configurazione guidata di VNC

Configurazione regole di entrata immagine Figura 1.b: Configurazione delle regole di entrata per la subnet privata

Task 1.2: creare un cluster OpenSearch

Sarà necessario un cluster OpenSearch con un'immagine 2.11 o successiva.

Se non si dispone già di un cluster esistente, vedere Cerca e visualizza i dati utilizzando Oracle Cloud Infrastructure Search con OpenSearch. Utilizzare la stessa VCN creata nel task 1.1 per creare il cluster.

Oppure

Se si dispone già di un cluster esistente che si desidera utilizzare, è sufficiente passare alla subnet privata del cluster e assicurarsi di aggiungere le regole di uscita precedenti nella lista di sicurezza.

Task 1.3: Creare gruppi obbligatori e gruppi dinamici

Definisci un gruppo per i tuoi data scientist e un gruppo dinamico per le risorse di OCI Data Science. Ciò abilita le autorizzazioni appropriate per l'esecuzione delle attività di data science all'interno di OCI. Per ulteriori informazioni sulla configurazione manuale dei gruppi e dei gruppi dinamici richiesti, vedere Creazione di un gruppo di utenti di data scientist.

Puoi anche scegliere di creare queste risorse in modo dinamico utilizzando gli stack di OCI Resource Manager.

  1. Andare a OCI Console, andare a Servizi per sviluppatori, Resource Manager e fare clic su Stack.

  2. Fare clic su Crea stack e seguire la procedura guidata per creare uno stack dal modello OCI Data Science.

    Nota: il modello di data science si trova nella scheda Servizio quando si fa clic su Seleziona modello.

Task 1.4: configurare i criteri IAM OCI per il notebook

Devi configurare alcuni criteri IAM OCI per concedere le autorizzazioni ai gruppi e ai gruppi dinamici e consentire al servizio Data Science OCI di gestire determinate risorse nella tenancy. Assicurati che i criteri coprano le autorizzazioni di comunicazione di rete e accesso ai dati. Per ulteriori informazioni, vedere Criteri di distribuzione del modello.

Task 1.5: configurare i criteri IAM OCI per le azioni rapide AI

Se intendi sfruttare la potenza delle azioni rapide di AI nella tua tenancy per automatizzare e accelerare l'addestramento, la valutazione e la distribuzione del modello, devi configurare un set di criteri e gruppi dinamici IAM OCI per concedere l'accesso alle risorse giuste nella tua tenancy. Le azioni rapide AI non funzioneranno nella sessione notebook se non si configurano i criteri richiesti. Per ulteriori informazioni, vedere Criteri di azioni rapide 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'}

È importante creare il documento dei criteri IAM OCI nel compartimento radice. È possibile aggiungere tutte le regole richieste nello stesso documento criteri. Per semplicità, puoi trovare il set di tutti i criteri IAM OCI sia per il notebook che per le azioni rapide AI utilizzate in questa esercitazione. Per ulteriori informazioni, consulta data-science-iam-policies.

Nota: assicurarsi di aggiornare i nomi dei gruppi e dei gruppi dinamici, nonché il nome del compartimento. È inoltre possibile rendere queste politiche più restrittive o più aperte in base ai progetti.

Task 2: avviare un Jupyter Notebook in OCI Data Science

Per avviare una sessione notebook, sarà necessario creare un progetto di data science e in questo progetto è possibile creare più notebook. Ogni notebook dispone di una propria macchina virtuale (VM) e può essere avviato in modo indipendente. In ogni sessione notebook è possibile distribuire e gestire più modelli, collegare un repository GitHub o Bitbucket esistente oppure crearne uno nuovo e gestirne uno nuovo, sviluppare più notebook Jupyter, creare un'applicazione completa o orchestrare l'intero flusso di lavoro di apprendimento automatico.

  1. Andare alla console OCI, andare a Data Science, Projects e fare clic su Crea progetto.

    Nota: per semplicità, tutte le risorse verranno create nello stesso compartimento. Assicurarsi di selezionare lo stesso compartimento in cui sono state create la VCN e il cluster OpenSearch.

    Immagine che mostra la VCN.

    Figura 2: Creare un nuovo progetto di Data Science

  2. Creare una nuova sessione notebook.

    1. Nella pagina Dettagli progetto, fare clic su Sessioni notebook e su Crea sessione notebook.

      Immagine che mostra la VCN.

    2. È possibile selezionare la forma di computazione desiderata e collegare le origini dati necessarie. Durante la creazione della sessione notebook, è necessario assicurarsi di selezionare la VCN corretta e la stessa subnet privata utilizzata per il cluster OpenSearch.

      Immagine che mostra la VCN.

      Figura 3: Creare una nuova sessione notebook

  3. Fare clic su Open per avviare una sessione notebook. Ora è possibile installare le librerie richieste, inclusi i client Python LangChain e OpenSearch, direttamente dall'interfaccia notebook utilizzando pip.

    Immagine che mostra la VCN.

    Immagine che mostra la VCN.

    Figura 4: Avvia sessione notebook

Task 3: configurare LangChain con Jupyter Notebook

Installa LangChain insieme ad altre librerie nell'ambiente o nello script Jupyter Notebook e sfrutta la sua perfetta integrazione con OCI con OpenSearch, HuggingFace, il servizio OCI Generative AI e molti altri ancora per eseguire ricerche semantiche o conversazionali.

Aggiungere il codice seguente nella parte superiore del Jupyter Notebook.

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

Per evitare di dover reinstallare questi pacchetti ogni volta in ogni Jupyter Notebook creato all'interno di una sessione notebook, è consigliabile creare e attivare un ambiente conda e installare tutte le dipendenze in essi, in questo modo è possibile riutilizzare questo ambiente con più notebook Jupyter. In Launcher sono disponibili diversi ambienti conda preconfigurati. È possibile selezionare e installare uno qualsiasi di questi ambienti preconfigurati in un terminale, quindi installare eventuali librerie aggiuntive in alto. Una volta completata l'installazione, è sufficiente impostare il kernel nel notebook su questo ambiente conda attivo.

  1. Avviare un nuovo terminale. Andare a File, Nuovo e fare clic su Terminale.

    Immagine che mostra la VCN.

    Figura 5: Avvia un nuovo terminale

  2. Eseguire il comando seguente per creare un ambiente Conda.

    odsc conda install -s python_p310_any_x86_64_v1
    conda activate <environment name>
    
  3. Eseguire il comando seguente per installare LangChain utilizzando pip nel terminale.

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

Task 4: elaborare i documenti con LangChain

Uno dei punti di forza di LangChain è che offre funzionalità per elaborare grandi volumi di documenti in modo efficiente e con una codifica minima, sia che si tratti di dati strutturati o non strutturati. È sufficiente importare le classi di elaborazione dei documenti necessarie più adatte all'uso e richiamare il metodo di caricamento per elaborare i documenti. Eseguire il comando riportato di seguito.

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)

Dopo aver installato LangChain nell'ambiente noteBook, è possibile utilizzare OCI con l'integrazione OpenSearch con LangChain per eseguire la ricerca semantica in modo più semplice rispetto alla scrittura del codice da zero per seguire la lunga guida OpenSearch passo dopo passo con più chiamate API.

  1. Utilizzare la libreria di documenti LangChain per elaborare ed eseguire il chunk dei dati non strutturati, come illustrato nel task 4.

  2. Definire un modello di incorporamento che si desidera utilizzare per generare automaticamente incorporamenti per i dati durante l'inclusione. Ancora una volta, sfruttando l'integrazione LangChain con HuggingFace è possibile distribuire qualsiasi modello HuggingFace pre-addestrato con una singola riga di codice. È sufficiente specificare il nome del modello di incorporamento che si desidera utilizzare. È inoltre possibile utilizzare un modello ottimizzato personalizzato per questo scopo. Eseguire il comando riportato di seguito.

    from langchain.embeddings import HuggingFaceEmbeddings
    embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L12-v2")
    
  3. Creare una connessione a OCI con OpenSearch utilizzando LangChain, specificando il nome dell'indice, il metodo di autenticazione e il modello di incorporamento che si desidera utilizzare. Con questo metodo, un indice con il nome di indice specificato verrà creato durante l'inclusione dei dati o aggiornato con nuovi dati se l'indice esiste già. Eseguire il comando riportato di seguito.

    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. È inoltre possibile includere direttamente i chunk di dati elaborati in blocco nel cluster OpenSearch utilizzando LangChain. L'esempio seguente mostra come eseguire l'inclusione di massa in batch in un elenco di blocchi di documenti elaborati. Utilizzare la libreria tqdm per tenere traccia dell'avanzamento dell'inclusione dati. Eseguire il comando riportato di seguito.

    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. Una volta inclusi i dati, eseguire il comando seguente per eseguire la ricerca semantica sull'indice.

    # 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")
    

Passi successivi

OCI con l'integrazione OpenSearch con LangChain e OCI Data Science è un punto di svolta e accelererà notevolmente lo sviluppo di applicazioni aziendali di casi d'uso aziendali relativi alla ricerca semantica e all'LLM. Questa esercitazione fornisce una guida completa con esempi per impostare OCI con OpenSearch e OCI Data Science nella tenancy e usufruire di LangChain per eseguire la ricerca semantica.

Nella prossima esercitazione: Esercitazione 2: Integrare LangChain, OCI Data Science Notebook, OCI con OpenSearch e OCI Generative AI per accelerare lo sviluppo LLM per RAG e la ricerca conversazionale, discuteremo di come sfruttare la perfetta integrazione tra LangChain, OCI Data Science, AI Quick Action e OCI Generative AI service, per sviluppare la propria applicazione LLM personalizzata. Ti invitiamo a provare OCI con OpenSearch per i casi d'uso AI/ML della tua azienda.

È possibile trovare il codice nel seguente repository GitHub.

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione del prodotto, visita l'Oracle Help Center.