Hinweis:

OCI in OpenSearch und LangChain in OCI Data Science Notebook integrieren

Einführung

OpenSearch hat in den letzten Jahren eine schnelle Akzeptanz erfahren, insbesondere da Unternehmen zunehmend große Sprachmodelle (LLMs) nutzen, um Dateneinblicke zu gewinnen und intelligente Suchfunktionen für ihre benutzerdefinierten Geschäftsanwendungsfälle zu nutzen. Das kontinuierliche Engagement von OpenSearch für eine nahtlose Integration mit den neuesten KI/ML-Funktionen hat es Unternehmen ermöglicht, leistungsstarke Beobachtungs-, Such- und Analyse-Engines zu entwickeln, die bei zunehmender LLM-Nutzung von entscheidender Bedeutung sind. Mit Oracle Cloud Infrastructure Search mit OpenSearch (OCI mit OpenSearch) gibt es bereits eine spürbare Begeisterung, die neuesten KI-/ML-Features wie den Assistenten für generative KI (GenAI) und Learning to Rank zu nutzen, um strategische Probleme zu lösen.

OCI mit Release OpenSearch 2.11 stellte Konsolen- und Befehlszeilenschnittstellen-(CLI-)Funktionalität für die Durchführung einer hybriden Suche, semantischen Suche sowie Konversationssuche mit Retrieval-Augmented Generation (RAG) bereit. Einige der kritischen Schwachstellen, die wir von Kunden gesammelt haben, drehten sich jedoch um die Konfiguration von Konversationssuchworkflows/RAG-Pipelines, vor allem aber um die Komplexität von Algorithmen zur Vorverarbeitung und Aufnahme großer Mengen unstrukturiert oder strukturiert. Daten, insbesondere aus zahlreichen Formaten wie PDF, CSV, EXCEL, WORD, DATA LAKES usw., und machen sie für LLM-gesteuerte Anwendungen zugänglich, die sowohl Geschwindigkeit als auch Präzision beim Abrufen von Informationen erfordern. Daher ist die Integration von LangChain und OCI in OpenSearch entscheidend geworden, da sie eine effiziente Abfrageverarbeitung und Retrieval-Augmented Generation (RAG) ermöglicht und LLMs kontextbezogenere und genauere Antworten ermöglicht.

LangChain bietet ein benutzerfreundliches Framework für die Erstellung und Verwaltung komplexer LLM-Workflows, mit dem Entwickler die Integration zwischen LLMs und OpenSearch optimieren können. Diese Kombination verbessert die Suchrelevanz, indem Sprachmodelle die relevantesten Informationen aus großen Datenspeichern abrufen und die Antwortqualität für Endbenutzer verbessern können.

Darüber hinaus kann unsere Integration mit OCI Data Science und OCI Generative AI die Entwicklung und das Produktions-Deployment von KI-Anwendungsfällen für Unternehmen mit minimalem Aufwand und Code erheblich beschleunigen. OCI Data Science bietet eine umfassende Suite von Tools, mit denen Data Scientists Modelle mit minimaler Reibung erstellen, trainieren und bereitstellen können. So wird ein Großteil der langwierigen Arbeit im Zusammenhang mit der Datenvorbereitung und dem Modelllebenszyklusmanagement automatisiert. Durch die Integration von OCI Data Science mit OCI in OpenSearch und LangChain können wir KI effizient operationalisieren und erweiterte Dateneinblicke mit weniger Ressourcen nutzen.

Um eine effiziente Lesbarkeit zu gewährleisten, konzentriert sich dieses erste Tutorial darauf, OCI mit OpenSearch festzulegen und die Kommunikation mit dem OCI Data Science-Service zu konfigurieren, LangChain zu konfigurieren und seine Integration mit OCI mit OpenSearch zu nutzen, um eine semantische Suche durchzuführen. Im nächsten Tutorial erfahren Sie, wie Sie die nahtlose Integration zwischen LangChain, OCI mit OpenSearch, Oracle Cloud Infrastructure Data Science AI Quick Actions (AI Quick Actions) und dem OCI Generative AI-Service nutzen können, um die LLM-Anwendungsentwicklung zu beschleunigen.

Ziele

Aufgabe 1: OpenSearch-Cluster erstellen und OCI Data Science-Notizbuch für Ihren Mandanten einrichten

Das Einrichten von OCI Data Science Notebook für Ihren Mandanten erfordert einige Schritte. Dazu gehören das Erstellen und Konfigurieren von VCN mit Internetzugriff, das Festlegen von Gruppen, dynamischen Gruppen und das Erteilen der erforderlichen Oracle Cloud Infrastructure Identity and Access Management-(OCI IAM-)Policys, damit OCI Data Science bestimmte Ressourcen in Ihrem Mandanten verwalten kann. Der Einfachheit halber haben wir alle Schritte hier kompiliert: 1_Setup_Data_Science_Notebook_In_Your_Tenancy.ipynb.

Das OCI Data Science-Team verfügt außerdem über eine ausführliche Dokumentation zu allen Features des Angebots. Weitere Informationen finden Sie unter Überblick über Data Science.

Hinweis: Wenn Sie bereits über ein OpenSearch-Cluster verfügen und bereits ein Notizbuch für Ihren Mandanten konfiguriert haben, können Sie den Integrationsteil LangChain dieses Tutorials überspringen und den Anwendungsfall für die semantische Suche ausprobieren.

Es ist wichtig zu beachten, dass die Erstellung eines neuen OCI Data Science-Projekts selbst keine zusätzlichen Compute-Ressourcen startet. Jede Notizbuchsession, die Sie unter einem Data Science-Projekt erstellen, spinnt ihre eigenen Compute-Ressourcen.

Aufgabe 1.1: Virtuelles Cloud-Netzwerk (VCN) konfigurieren

Erstellen Sie ein VCN in Ihrem Mandanten, und stellen Sie sicher, dass die richtigen Subnetze und Sicherheitslisten eingerichtet sind, um eine sichere Kommunikation für Data Science-Vorgänge zu ermöglichen.

Verwenden Sie den Assistenten, und klicken Sie auf VCN mit Internetverbindung erstellen.

Nicht: Ein sehr wichtiger Schritt besteht darin, die entsprechenden Ingress- und Egress-Regeln zum privaten Subnetz Ihres VCN hinzuzufügen. Das Fehlen dieser Regeln kann dazu führen, dass das Notizbuch keinen Internetzugriff hat, was wiederum verhindert, dass Sie kritische Bibliotheken und Abhängigkeiten installieren. Wenn bereits ein VCN vorhanden ist, können Sie die Sicherheitsliste des privaten Subnetzes einfach bearbeiten, um die folgenden Ingress-Regeln hinzuzufügen.

Bild mit VCN. Abbildung 1.a: VNC-Konfigurationsassistent

Konfiguration der Ingress-Regeln für Bilder Abbildung 1.b: Ingress-Regeln für privates Subnetz konfigurieren

Aufgabe 1.2: OpenSearch-Cluster erstellen

Sie benötigen ein OpenSearch-Cluster mit Image 2.11 oder höher.

Wenn noch kein Cluster vorhanden ist, finden Sie weitere Informationen unter Daten mit Oracle Cloud Infrastructure Search mit OpenSearch suchen und visualisieren. Verwenden Sie dasselbe VCN, das in Aufgabe 1.1 erstellt wurde, um das Cluster zu erstellen.

Oder

Wenn Sie bereits ein vorhandenes Cluster verwenden möchten, navigieren Sie einfach zum privaten Subnetz Ihres Clusters, und fügen Sie die oben genannten Egress-Regeln in der Sicherheitsliste hinzu.

Aufgabe 1.3: Erforderliche Gruppen und dynamische Gruppen erstellen

Definieren Sie eine Gruppe für Ihre Data Scientists und eine dynamische Gruppe für die OCI Data Science-Ressourcen. Dadurch werden geeignete Berechtigungen für die Ausführung von Data Science-Aktivitäten in OCI ermöglicht. Weitere Informationen zur manuellen Konfiguration der erforderlichen Gruppen und dynamischen Gruppen finden Sie unter Data Scientists-Benutzergruppe erstellen.

Sie können diese Ressourcen auch dynamisch mit OCI Resource Manager-Stacks erstellen.

  1. Gehen Sie zur OCI-Konsole, navigieren Sie zu Entwicklerservices, Resource Manager, und klicken Sie auf Stack.

  2. Klicken Sie auf Stacks erstellen, und folgen Sie dem Assistenten, um einen Stack aus der OCI Data Science-Vorlage zu erstellen.

    Hinweis: Die Data Science-Vorlage finden Sie auf der Registerkarte Service, wenn Sie auf Vorlage auswählen klicken.

Aufgabe 1.4: OCI-IAM-Policys für Notizbuch konfigurieren

Sie müssen einige OCI-IAM-Policys konfigurieren, um Ihren Gruppen und dynamischen Gruppen Berechtigungen zu erteilen und dem OCI Data Science-Service die Verwaltung bestimmter Ressourcen in Ihrem Mandanten zu gestatten. Stellen Sie sicher, dass Policys Netzwerkkommunikation und Datenzugriffsberechtigungen umfassen. Weitere Informationen finden Sie unter Modell-Deployment-Policys.

Aufgabe 1.5: OCI-IAM-Policys für KI-Schnellaktionen konfigurieren

Wenn Sie die Leistungsfähigkeit von KI-Schnellaktionen in Ihrem Mandanten nutzen möchten, um das Modelltraining, die Bewertung und das Deployment zu automatisieren und zu beschleunigen, müssen Sie ein Set von OCI IAM-Policys und dynamischen Gruppen konfigurieren, um Zugriff auf die richtigen Ressourcen in Ihrem Mandanten zu erteilen. AI-Schnellaktionen funktionieren in Ihrer Notizbuchsession nicht, wenn Sie diese erforderlichen Policys nicht konfigurieren. Weitere Informationen finden Sie unter KI-Schnellaktions-Policys.

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'}

Es ist wichtig, dass Sie das OCI-IAM-Policy-Dokument im Root Compartment erstellen. Sie können alle erforderlichen Regeln zu demselben Policy-Dokument hinzufügen. Der Einfachheit halber finden Sie das Set aller OCI IAM-Policys, die in diesem Tutorial sowohl für Notizbücher als auch für KI-Schnellaktionen verwendet werden. Weitere Informationen finden Sie unter data-science-iam-policies.

Hinweis: Aktualisieren Sie die Namen der Gruppe und der dynamischen Gruppen sowie den Compartment-Namen. Sie können diese Richtlinien basierend auf Ihren Entwürfen weiter einschränken oder offener gestalten.

Aufgabe 2: Jupyter Notebook in OCI Data Science starten

Um eine Notizbuchsession zu starten, müssen Sie ein Data Science-Projekt erstellen. In diesem Projekt können Sie mehrere Notizbücher erstellen. Jedes Notizbuch verfügt über eine eigene virtuelle Maschine (VM) und kann unabhängig gestartet werden. In jeder Notizbuchsession können Sie mehrere Modelle bereitstellen und verwalten, ein vorhandenes GitHub- oder Bitbucket-Repository verknüpfen oder ein neues erstellen und verwalten, mehrere Jupyter-Notizbücher entwickeln, eine vollständige Anwendung erstellen oder Ihren gesamten ML-Workflow orchestrieren.

  1. Gehen Sie zur OCI-Konsole, navigieren Sie zu Data Science, Projekte, und klicken Sie auf Projekt erstellen.

    Hinweis: Der Einfachheit halber erstellen wir alle Ressourcen im selben Compartment. Wählen Sie unbedingt dasselbe Compartment aus, in dem Sie das VCN und das Cluster OpenSearch erstellt haben.

    Bild mit VCN.

    Abbildung 2: Neues Data Science-Projekt erstellen

  2. Erstellen Sie eine neue Notizbuchsession.

    1. Klicken Sie auf der Seite Projektdetails auf Notizbuchsessions und Notizbuchsession erstellen.

      Bild mit VCN.

    2. Sie können die gewünschte Compute-Ausprägung auswählen und die erforderlichen Datenquellen anhängen. Beim Erstellen der Notizbuchsession müssen Sie das richtige VCN und dasselbe private Subnetz auswählen, das Sie für das OpenSearch-Cluster verwendet haben.

      Bild mit VCN.

      Abbildung 3: Neue Notizbuchsession erstellen

  3. Klicken Sie auf Öffnen, um eine Notizbuchsession zu starten. Sie können jetzt erforderliche Librarys, einschließlich Python-Clients LangChain und OpenSearch, direkt über die Notizbuchschnittstelle mit pip installieren.

    Bild mit VCN.

    Bild mit VCN.

    Abbildung 4: Notizbuchsession starten

Aufgabe 3: LangChain mit Jupyter Notebook konfigurieren

Installieren Sie LangChain zusammen mit anderen Librarys in Ihrer Jupyter Notebook-Umgebung oder Ihrem Skript, und nutzen Sie die nahtlose Integration mit OCI mit OpenSearch, HuggingFace, dem OCI Generative AI-Service und mehreren anderen, um eine semantische Suche oder Konversationssuche auszuführen.

Fügen Sie den folgenden Code oben in Ihrem Jupyter Notebook hinzu.

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

Um zu vermeiden, dass Sie diese Packages jedes Mal in jedem Jupyter Notebook neu installieren müssen, das Sie in einer Notizbuchsession erstellen, empfiehlt es sich, eine Conda-Umgebung zu erstellen und zu aktivieren und alle Abhängigkeiten darin zu installieren. Auf diese Weise können Sie diese Umgebung mit mehreren Jupyter-Notizbüchern wiederverwenden. Unter Launcher sind mehrere vorkonfigurierte Conda-Umgebungen vorhanden. Sie können eine dieser vorkonfigurierten Umgebungen in einem Terminal auswählen und installieren und dann zusätzliche Bibliotheken oben installieren. Stellen Sie nach Abschluss der Installation einfach den Kernel in Ihrem Notizbuch auf diese aktive Conda-Umgebung ein.

  1. Starten Sie ein neues Terminal. Gehen Sie zu Datei, Neu, und klicken Sie auf Terminal.

    Bild mit VCN.

    Abbildung 5: Neues Terminal starten

  2. Führen Sie den folgenden Befehl aus, um eine Conda-Umgebung zu erstellen.

    odsc conda install -s python_p310_any_x86_64_v1
    conda activate <environment name>
    
  3. Führen Sie den folgenden Befehl aus, um LangChain mit pip im Terminal zu installieren.

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

Aufgabe 4: Dokumente mit LangChain verarbeiten

Eine der Stärken von LangChain ist, dass es Funktionen bietet, um große Mengen von Dokumenten effizient und mit minimaler Codierung zu verarbeiten, sei es strukturierte oder unstrukturierte Daten. Sie müssen lediglich die erforderlichen Dokumentverarbeitungsklassen importieren, die für Ihre Verwendung am besten geeignet sind, und die Lademethode aufrufen, um die Dokumente zu verarbeiten. Führen Sie den folgenden Befehl aus.

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)

Nachdem Sie LangChain in Ihrer noteBook-Umgebung installiert haben, können Sie die OCI mit der OpenSearch-Integration mit LangChain nutzen, um eine semantische Suche einfacher auszuführen, als Code von Grund auf neu zu schreiben, um die ausführliche Schritt-für-Schritt-Anleitung OpenSearch mit mehreren API-Aufrufen zu befolgen.

  1. Verwenden Sie die Dokumentbibliothek LangChain, um Ihre unstrukturierten Daten zu verarbeiten und zu unterteilen (siehe Aufgabe 4).

  2. Definieren Sie ein Einbettungsmodell, das Sie für die automatische Generierung von Einbettungen für Ihre Daten während der Aufnahme verwenden möchten. Mit der LangChain-Integration mit HuggingFace können Sie jedes der vortrainierten HuggingFace-Modelle mit einer einzigen Codezeile bereitstellen. Sie müssen lediglich den Namen des Einbettungsmodells angeben, das Sie verwenden möchten. Zu diesem Zweck können Sie auch ein benutzerdefiniertes, optimiertes Modell verwenden. Führen Sie den folgenden Befehl aus.

    from langchain.embeddings import HuggingFaceEmbeddings
    embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L12-v2")
    
  3. Erstellen Sie eine Verbindung zu OCI mit OpenSearch mit LangChain, und geben Sie den Indexnamen, die Authentifizierungsmethode sowie das Einbettungsmodell an, das Sie verwenden möchten. Bei dieser Methode wird ein Index mit dem angegebenen Indexnamen während der Datenaufnahme erstellt oder mit neuen Daten aktualisiert, wenn der Index bereits vorhanden ist. Führen Sie den folgenden Befehl aus.

    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. Sie können die verarbeiteten Datenblöcke auch direkt per Bulkvorgang in das OpenSearch-Cluster aufnehmen, indem Sie LangChain verwenden. Das folgende Beispiel zeigt, wie Sie eine Massenaufnahme in Batches für eine Liste der verarbeiteten Dokumentblöcke durchführen können. Mit der tqdm-Library können Sie den Fortschritt der Datenaufnahme verfolgen. Führen Sie den folgenden Befehl aus.

    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. Führen Sie nach der Datenaufnahme den folgenden Befehl aus, um eine semantische Suche für den Index auszuführen.

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

Nächste Schritte

OCI mit OpenSearch-Integration mit LangChain und OCI Data Science ist ein bahnbrechender Schritt und wird die Entwicklung von Unternehmensanwendungen in Bezug auf semantische Suche und LLM erheblich beschleunigen. Dieses Tutorial enthält eine vollständige Anleitung mit Beispielen für die Einrichtung von OCI mit OpenSearch und OCI Data Science in Ihrem Mandanten und die Nutzung von LangChain zur Ausführung einer semantischen Suche.

Im nächsten Tutorial: Tutorial 2: Integration von LangChain, OCI Data Science Notebook, OCI mit OpenSearch und OCI Generative AI zur Beschleunigung der LLM-Entwicklung für RAG und Konversationssuche wird erläutert, wie Sie die nahtlose Integration zwischen LangChain, OCI Data Science, AI Quick Action und dem OCI Generative AI-Service nutzen können, um Ihre eigene benutzerdefinierte LLM-Anwendung zu entwickeln. Wir laden Sie ein, OCI mit OpenSearch für KI/ML-Anwendungsfälle für Ihr Unternehmen zu testen.

Sie finden den Code im folgenden GitHub-Repository.

Danksagungen

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.