Note:

Integrar OCI con OpenSearch y LangChain en OCI Data Science Notebook

Introducción

OpenSearch ha sido testigo de una rápida adopción en los últimos años, especialmente a medida que las empresas adoptan cada vez más grandes modelos de lenguaje (LLM) para impulsar la información de los datos y aprovechar las capacidades de búsqueda inteligente para sus casos de uso empresariales personalizados. El compromiso continuo de OpenSearch de ofrecer una integración perfecta con las últimas funciones de IA / ML ha permitido a las organizaciones construir potentes motores de observación, búsqueda y análisis, que son críticos a medida que crece el uso de LLM. Con Oracle Cloud Infrastructure Search con OpenSearch (OCI con OpenSearch), ya hay un entusiasmo notable, para aprovechar las últimas funciones de IA/AA, incluido el asistente de IA generativa (GenAI) y Learning to Rank, para resolver problemas estratégicos.

OCI con la versión OpenSearch 2.11 proporcionó la consola y la funcionalidad de la interfaz de línea de comandos (CLI) para realizar búsquedas híbridas, búsquedas semánticas y búsquedas conversacionales con generación aumentada de recuperación (RAG). Sin embargo, algunos de los puntos críticos que recopilamos de los clientes giraron en torno a la configuración de flujos de trabajo de búsqueda conversacional / pipelines de RAG, pero lo que es más importante, las complejidades de los algoritmos para preprocesar e ingerir grandes volúmenes no estructurados o estructurados. datos, particularmente de numerosos formatos como PDF, CSV, EXCEL, WORD, DATA LAKES, etc., y haciéndolos accesibles para aplicaciones basadas en LLM que requieren velocidad y precisión en la recuperación de información. Por lo tanto, la integración de LangChain y OCI con OpenSearch se ha vuelto crucial, ya que facilita el manejo eficiente de consultas y la generación aumentada de recuperación (RAG), lo que permite a los LLM obtener respuestas más contextuales y precisas.

LangChain proporciona un marco fácil de usar para crear y gestionar flujos de trabajo de LLM complejos, lo que permite a los desarrolladores simplificar la integración entre los LLM y OpenSearch. Esta combinación mejora la relevancia de la búsqueda al permitir que los modelos de lenguaje recuperen la información más pertinente de vastos almacenes de datos, mejorando la calidad de respuesta para los usuarios finales.

Además, nuestra integración con OCI Data Science y OCI Generative AI puede acelerar significativamente el desarrollo y el despliegue de producción de casos de uso de IA empresarial con un esfuerzo y código mínimos. OCI Data Science proporciona un conjunto completo de herramientas para que los científicos de datos creen, entrenen e implementen modelos con una fricción mínima, automatizando gran parte del tedioso trabajo asociado con la preparación de datos y la gestión del ciclo de vida del modelo. Al integrar OCI Data Science con OCI con OpenSearch y LangChain, podemos poner en funcionamiento la IA de manera eficiente y aprovechar las estadísticas de datos avanzadas con menos recursos.

Para una legibilidad eficiente, este primer tutorial se centrará en definir OCI con OpenSearch y configurar la comunicación con el servicio OCI Data Science; configurar LangChain y aprovechar su integración con OCI con OpenSearch para realizar una búsqueda semántica. El siguiente tutorial se centrará en cómo aprovechar la integración perfecta entre LangChain, OCI con OpenSearch, Oracle Cloud Infrastructure Data Science AI Quick Actions (AI Quick Actions) y el servicio OCI Generative AI para acelerar el desarrollo de aplicaciones LLM.

Objetivos

Tarea 1: Creación de un cluster OpenSearch y configuración del bloc de notas de OCI Data Science para su arrendamiento

La configuración de OCI Data Science Notebook para su arrendamiento requiere unos pocos pasos que incluyen la creación y configuración de VCN con acceso a Internet, la configuración de grupos, grupos dinámicos y la concesión de las políticas necesarias de Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) para permitir que OCI Data Science gestione recursos específicos en su arrendamiento. Para simplificar, hemos compilado todos los pasos aquí: 1_Setup_Data_Science_Notebook_In_Your_Tenancy.ipynb.

El equipo de OCI Data Science también cuenta con una documentación elaborada sobre todas las funciones de la oferta. Para obtener más información, consulte Visión general de Data Science.

Nota: Si ya tiene un cluster OpenSearch y ya ha configurado el bloc de notas para su arrendamiento, puede saltar a la parte de integración LangChain de este tutorial y probar el caso de uso de búsqueda semántica.

Es importante tener en cuenta que la creación de un nuevo proyecto de OCI Data Science en sí no pone en marcha recursos informáticos adicionales, cada sesión de bloc de notas que cree en un proyecto de ciencia de datos gira sus propios recursos informáticos.

Tarea 1.1: Configuración de una red virtual en la nube (VCN)

Cree una VCN dentro de su arrendamiento y asegúrese de que se han configurado las subredes y las listas de seguridad adecuadas para permitir una comunicación segura para las operaciones de ciencia de datos.

Preferiblemente, utilice el asistente y haga clic en Crear una VCN con conexión a Internet.

No: un paso muy importante es asegurarse de agregar las reglas de entrada y salida adecuadas a la subred privada de la VCN. La ausencia de estas reglas puede impedir que el bloc de notas tenga acceso a Internet, lo que a su vez evitará que instale bibliotecas y dependencias críticas. Si ya tiene una VCN existente, solo tiene que editar la lista de seguridad de la subred privada para agregar las siguientes reglas de entrada.

Imagen que muestra la VCN. Figura 1.a: Asistente de configuración de VNC

Configuración de reglas de entrada de imagen Figura 1.b: Configuración de Reglas de Entrada para Subred Privada

Tarea 1.2: Creación de un cluster OpenSearch

Necesitará un cluster OpenSearch con una imagen 2.11 o posterior.

Si aún no tiene un cluster existente, consulte Búsqueda y visualización de datos mediante Oracle Cloud Infrastructure Search con OpenSearch. Utilice la misma VCN creada en la tarea 1.1 para crear el cluster.

O bien:

Si ya tiene un cluster existente que desea utilizar, simplemente navegue a la subred privada del cluster y asegúrese de agregar las reglas de salida anteriores en la lista de seguridad.

Tarea 1.3: Creación de grupos necesarios y grupos dinámicos

Defina un grupo para sus científicos de datos y un grupo dinámico para los recursos de OCI Data Science. Esto permite los permisos adecuados para realizar actividades de ciencia de datos en OCI. Para obtener más información sobre la configuración manual de los grupos dinámicos y los grupos necesarios, consulte Creación de un grupo de usuarios de científicos de datos.

También puede optar por crear estos recursos de forma dinámica mediante las pilas de OCI Resource Manager.

  1. Vaya a la consola de OCI, vaya a Developer Services, Resource Manager y haga clic en Stack.

  2. Haga clic en Crear pilas y siga el asistente para crear una pila a partir de la plantilla de OCI Data Science.

    Nota: Encontrará la plantilla de ciencia de datos en el separador Servicio al hacer clic en Seleccionar plantilla.

Tarea 1.4: Configuración de políticas de OCI IAM para Notebook

Debe configurar algunas políticas de OCI IAM para otorgar permisos a sus grupos y grupos dinámicos y permitir que el servicio OCI Data Science gestione determinados recursos en su arrendamiento. Asegúrese de que las políticas abarquen la comunicación de red y los permisos de acceso a datos. Para obtener más información, consulte Políticas de despliegue de modelos.

Tarea 1.5: Configuración de políticas de OCI IAM para acciones rápidas de IA

Si desea aprovechar el poder de las acciones rápidas de IA en su arrendamiento para automatizar y acelerar el entrenamiento, la evaluación y el despliegue de su modelo, debe configurar un juego de políticas y grupos dinámicos de OCI IAM para otorgar acceso a los recursos adecuados en su arrendamiento. Las acciones rápidas de AI no funcionarán en la sesión de bloc de notas si no configura estas políticas necesarias. Para obtener más información, consulte Políticas de acciones rápidas de IA.

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 importante que cree el documento de política de OCI IAM en el compartimento raíz. Puede agregar todas las reglas necesarias al mismo documento de política. Para simplificarlo, puede encontrar el juego de todas las políticas de OCI IAM para Notebook y AI Quick Actions que se utilizan en este tutorial. Para obtener más información, consulte data-science-iam-policies.

Nota: Asegúrese de actualizar los nombres de grupos y grupos dinámicos, así como el nombre del compartimento. Además, puede hacer que estas políticas sean más restrictivas o más abiertas en función de sus diseños.

Tarea 2: Inicio de un bloc de notas de Jupyter en OCI Data Science

Para iniciar una sesión de bloc de notas, deberá crear un proyecto de ciencia de datos y, en este proyecto, puede crear varios blocs de notas. Cada bloc de notas tiene su propia máquina virtual (VM) y se puede iniciar de forma independiente. En cada sesión de bloc de notas, puede desplegar y gestionar varios modelos, enlazar un repositorio GitHub o Bitbucket existente, o crear y gestionar uno nuevo, desarrollar varios blocs de notas de Jupyter, crear una aplicación completa u orquestar todo el flujo de trabajo de aprendizaje automático.

  1. Vaya a la consola de OCI, vaya a Data Science, Projects y haga clic en Create project.

    Nota: Para simplificarlo, crearemos todos los recursos en el mismo compartimento. Asegúrese de seleccionar el mismo compartimento en el que ha creado la VCN y el cluster OpenSearch.

    Imagen que muestra la VCN.

    Figura 2: Creación de un nuevo proyecto de Data Science

  2. Cree una nueva sesión de bloc de notas.

    1. En la página Detalles del proyecto, haga clic en Sesiones de bloc de notas y en Crear sesión de bloc de notas.

      Imagen que muestra la VCN.

    2. Puede seleccionar la unidad de computación deseada y asociar los orígenes de datos necesarios. Al crear la sesión de bloc de notas, debe asegurarse de seleccionar la VCN correcta y la misma subred privada que ha utilizado para el cluster OpenSearch.

      Imagen que muestra la VCN.

      Figura 3: Creación de una nueva sesión de Notebook

  3. Haga clic en Abrir para iniciar una sesión de Notebook. Ahora puede instalar las bibliotecas necesarias, incluidos los clientes Python LangChain y OpenSearch, directamente desde la interfaz de bloc de notas mediante pip.

    Imagen que muestra la VCN.

    Imagen que muestra la VCN.

    Figura 4: Iniciar sesión de Notebook

Tarea 3: Configurar LangChain con Jupyter Notebook

Instale LangChain junto con otras bibliotecas en el entorno o script de Jupyter Notebook y aproveche su integración perfecta con OCI con OpenSearch, HuggingFace, el servicio OCI Generative AI y varios más para realizar búsquedas semánticas o conversacionales.

Agregue el siguiente código en la parte superior de su Jupyter Notebook.

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

Para evitar tener que volver a instalar estos paquetes cada vez en cada Notebook de Jupyter que cree dentro de una sesión de Notebook, es recomendable que cree y active un entorno conda e instale todas sus dependencias en ellos, de esa manera puede reutilizar este entorno con varios Notebooks de Jupyter. Hay varios entornos conda preconfigurados en Launcher. Siéntase libre de seleccionar e instalar cualquiera de estos entornos preconfigurados en un terminal y, a continuación, instalar bibliotecas adicionales en la parte superior. Una vez finalizada la instalación, simplemente configure el núcleo del bloc de notas en este entorno conda activo.

  1. Inicie un nuevo terminal. Vaya a Archivo, Nuevo y haga clic en Terminal.

    Imagen que muestra la VCN.

    Figura 5: Lanzar un nuevo terminal

  2. Ejecute el siguiente comando para crear un entorno conda.

    odsc conda install -s python_p310_any_x86_64_v1
    conda activate <environment name>
    
  3. Ejecute el siguiente comando para instalar LangChain mediante pip en el terminal.

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

Tarea 4: Procesar documentos con LangChain

Una de las ventajas de LangChain es que ofrece capacidades para procesar grandes volúmenes de documentos de forma eficiente y con una codificación mínima, ya sean datos estructurados o no estructurados. Simplemente tiene que importar las clases de procesamiento de documentos necesarias que sean más adecuadas para su uso y llamar al método de carga para procesar los documentos. Ejecute el siguiente comando.

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)

Una vez que haya instalado LangChain en el entorno noteBook, puede aprovechar OCI con la integración de OpenSearch con LangChain para realizar una búsqueda semántica más que escribir código desde cero para seguir la larga guía paso a paso OpenSearch con varias llamadas de API.

  1. Utilice la biblioteca de documentos LangChain para procesar y fragmentar los datos no estructurados como se muestra en la tarea 4.

  2. Defina un modelo de embebido que desee utilizar para generar automáticamente embebidas para los datos durante la ingesta. Una vez más, aprovechando la integración de LangChain con HuggingFace, puede desplegar cualquiera de los modelos HuggingFace entrenados previamente con una única línea de código. Todo lo que necesita hacer es especificar el nombre del modelo de embebido que desea utilizar. También puede utilizar un modelo de ajuste personalizado para este fin. Ejecute el siguiente comando.

    from langchain.embeddings import HuggingFaceEmbeddings
    embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L12-v2")
    
  3. Cree una conexión a OCI con OpenSearch mediante LangChain, especificando el nombre de índice, el método de autenticación y el modelo de embebido que desea utilizar. Con este método, se creará un índice con el nombre de índice especificado durante la ingesta de datos o se actualizará con datos nuevos si el índice ya existe. Ejecute el siguiente comando.

    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. También puede ingerir directamente los fragmentos de datos procesados de forma masiva en el cluster OpenSearch mediante LangChain. En el siguiente ejemplo, se muestra cómo puede realizar la ingestión masiva en lotes en una lista de fragmentos de documentos procesados. Utilice la biblioteca tqdm para realizar un seguimiento del progreso de la ingestión de datos. Ejecute el siguiente comando.

    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 vez ingeridos los datos, ejecute el siguiente comando para realizar una búsqueda semántica en el índice.

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

Pasos Siguientes

OCI con la integración de OpenSearch con LangChain y OCI Data Science cambia las reglas del juego y acelerará significativamente el desarrollo de aplicaciones empresariales de casos de uso empresariales en torno a la búsqueda semántica y el LLM. En este tutorial se proporciona una guía completa con ejemplos para configurar OCI con OpenSearch y OCI Data Science en su arrendamiento y aprovechar LangChain para realizar una búsqueda semántica.

En el siguiente tutorial: Tutorial 2: Integración de LangChain, OCI Data Science Notebook, OCI con OpenSearch y OCI Generative AI para acelerar el desarrollo de LLM para RAG y la búsqueda conversacional, analizaremos cómo aprovechar la integración perfecta entre LangChain, OCI Data Science, AI Quick Action y el servicio OCI Generative AI, para desarrollar su propia aplicación LLM personalizada. Te invitamos a probar OCI con OpenSearch para tus casos de uso empresariales de IA/AA.

Puede encontrar el código en el siguiente repositorio GitHub.

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.

Para obtener documentación sobre el producto, visite Oracle Help Center.