Observação:

Integrar o OCI com OpenSearch e LangChain no OCI Data Science Notebook

Introdução

A OpenSearch tem visto uma rápida adoção nos últimos anos, especialmente à medida que as empresas adotam cada vez mais grandes modelos de linguagem (LLMs) para gerar insights de dados e aproveitar recursos de pesquisa inteligentes para seus casos de uso de negócios personalizados. O compromisso contínuo do OpenSearch de fornecer integração perfeita com os recursos mais recentes de IA/ML permitiu que as organizações criassem poderosos mecanismos de observabilidade, pesquisa e análise, que são críticos à medida que o uso do LLM cresce. Com o Oracle Cloud Infrastructure Search com OpenSearch (OCI com OpenSearch), já há um entusiasmo notável, para aproveitar os recursos de IA/ML mais recentes, incluindo assistente de IA generativa (GenAI) e Learning to Rank, para resolver problemas estratégicos.

O OCI com a release OpenSearch 2.11 forneceu a funcionalidade de console e CLI (Command Line Interface) para executar pesquisa híbrida, pesquisa semântica e pesquisa conversacional com geração aumentada de recuperação (RAG). No entanto, alguns dos pontos problemáticos críticos que reunimos dos clientes giravam em torno da configuração de fluxos de trabalho de pesquisa conversacionais / pipelines RAG, mas, mais importante, as complexidades dos algoritmos para pré-processamento e ingestão de grandes volumes não estruturados ou estruturados dados, particularmente de vários formatos, como PDF, CSV, EXCEL, WORD, DATA LAKES, e assim por diante, e tornando-o acessível para aplicativos orientados a LLM que exigem velocidade e precisão na recuperação de informações. Portanto, a integração do LangChain e da OCI com o OpenSearch tornou-se crucial, pois facilita o tratamento eficiente de consultas e a geração aumentada de recuperação (RAG), capacitando os LLMs com respostas mais contextuais e precisas.

O LangChain fornece uma estrutura fácil de usar para criar e gerenciar fluxos de trabalho de LLM complexos, permitindo que os desenvolvedores simplifiquem a integração entre LLMs e OpenSearch. Essa combinação melhora a relevância da pesquisa, permitindo que os modelos de linguagem recuperem as informações mais pertinentes de vastos armazenamentos de dados, melhorando a qualidade da resposta para os usuários finais.

Além disso, nossa integração com o OCI Data Science e o OCI Generative AI pode acelerar significativamente o desenvolvimento e a implantação de produção de casos de uso de IA empresarial com o mínimo de esforço e código. O OCI Data Science fornece um conjunto abrangente de ferramentas para os cientistas de dados criarem, treinarem e implementarem modelos com o mínimo de atrito, automatizando grande parte do trabalho tedioso associado à preparação de dados e ao gerenciamento do ciclo de vida do modelo. Ao integrar o OCI Data Science com a OCI com OpenSearch e LangChain, podemos operacionalizar a IA com eficiência e aproveitar insights de dados avançados com menos recursos.

Para uma legibilidade eficiente, este primeiro tutorial se concentrará em definir a OCI com OpenSearch e configurar a comunicação com o serviço OCI Data Science; configurar LangChain e aproveitar sua integração com a OCI com OpenSearch para executar pesquisa semântica. O próximo tutorial se concentrará em como aproveitar a integração perfeita entre LangChain, OCI com OpenSearch, Oracle Cloud Infrastructure Data Science AI Quick Actions (AI Quick Actions) e serviço OCI Generative AI para acelerar o desenvolvimento de aplicativos LLM.

Objetivos

Tarefa 1: Criar um Cluster OpenSearch e Configurar o OCI Data Science Notebook para sua Tenancy

A configuração do OCI Data Science Notebook para sua tenancy requer algumas etapas que incluem a criação e a configuração da VCN com acesso à internet, a definição de grupos, grupos dinâmicos e a concessão das políticas necessárias do OCI IAM (Oracle Cloud Infrastructure Identity and Access Management) para permitir que o OCI Data Science gerencie recursos específicos em sua tenancy. Para simplificar, compilamos todas as etapas aqui: 1_Setup_Data_Science_Notebook_In_Your_Tenancy.ipynb.

A equipe do OCI Data Science também tem uma documentação elaborada sobre todos os recursos oferecidos. Para obter mais informações, consulte Visão Geral do Serviço Data Science.

Observação: Se você já tiver um cluster OpenSearch e já tiver configurado o notebook para sua tenancy, poderá ignorar a parte de integração LangChain deste tutorial e experimentar o caso de uso de pesquisa semântica.

É importante observar que a criação de um novo projeto do OCI Data Science em si não gera recursos de computação adicionais. Cada sessão de notebook criada em um projeto de ciência de dados gira seus próprios recursos de computação.

Tarefa 1.1: Configurar uma VCN (Rede Virtual na Nuvem)

Crie uma VCN em sua tenancy, garantindo que as sub-redes e as listas de segurança adequadas sejam configuradas para permitir comunicação segura para operações de ciência de dados.

De preferência, use o assistente e clique em Criar uma VCN com Conectividade de Internet.

Não: Uma etapa muito importante é garantir que as regras de entrada e saída apropriadas sejam adicionadas à sub-rede privada da sua VCN. A ausência dessas regras pode impedir que o notebook tenha acesso à Internet, o que, por sua vez, impedirá a instalação de bibliotecas e dependências críticas. Se você já tiver uma VCN existente, poderá simplesmente editar a lista de segurança da sub-rede privada para adicionar as regras de entrada a seguir.

Imagem mostrando a VCN. Figura 1.a: assistente de configuração VNC

Configuração de Regras de Entrada de Imagem Figura 1.b: Configurar Regras de Entrada para Sub-rede Privada

Tarefa 1.2: Criar um Cluster OpenSearch

Você precisará de um cluster OpenSearch com imagem 2.11 ou posterior.

Se você ainda não tiver um cluster existente, consulte Pesquisar e Visualizar Dados usando o Oracle Cloud Infrastructure Search com OpenSearch. Use a mesma VCN criada na Tarefa 1.1 para criar seu cluster.

Ou

Se você já tiver um cluster existente que deseja usar, simplesmente navegue até a sub-rede privada do seu cluster e certifique-se de adicionar as regras de saída acima na lista de segurança.

Tarefa 1.3: Criar Grupos Obrigatórios e Grupos Dinâmicos

Defina um grupo para seus cientistas de dados e um grupo dinâmico para os recursos do OCI Data Science. Isso permite permissões apropriadas para executar atividades de ciência de dados no OCI. Para obter mais informações sobre como configurar manualmente os grupos necessários e os grupos dinâmicos, consulte Criando um Grupo de Usuários Cientistas de Dados.

Você também pode optar por criar esses recursos dinamicamente usando pilhas do OCI Resource Manager.

  1. Vá para a Console do OCI, acesse Developer Services, Resource Manager e clique em Stack.

  2. Clique em Criar Pilhas e siga o assistente para criar uma pilha com base no modelo do OCI Data Science.

    Observação: você encontrará o modelo de ciência de dados na guia Serviço quando clicar em Selecionar Modelo.

Tarefa 1.4: Configurar políticas do OCI IAM para Notebook

Você precisa configurar algumas políticas do OCI IAM para conceder permissões aos seus grupos e grupos dinâmicos e permitir que o serviço OCI Data Science gerencie determinados recursos em sua tenancy. Certifique-se de que as políticas abranjam as permissões de comunicação e acesso a dados da rede. Para obter mais informações, consulte Políticas de Implantação de Modelo.

Tarefa 1.5: Configurar Políticas do OCI IAM para Ações Rápidas de IA

Se você pretende aproveitar o poder das Ações Rápidas de IA em sua tenancy para automatizar e acelerar seu treinamento, avaliação e implantação de modelo, configure um conjunto de políticas e grupos dinâmicos do OCI IAM para conceder acesso aos recursos certos em sua tenancy. As Ações Rápidas do AI não funcionarão em sua sessão de notebook se você não configurar essas políticas necessárias. Para obter mais informações, consulte Políticas de Ações 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'}

É importante que você crie seu documento de política do OCI IAM no compartimento raiz. Você pode adicionar todas as regras necessárias ao mesmo documento de política. Para simplificar, você pode encontrar o conjunto de todas as políticas do OCI IAM para notebook e Ações Rápidas de IA usadas neste tutorial. Para obter mais informações, consulte data-science-iam-policies.

Observação: Certifique-se de atualizar os nomes do grupo e dos grupos dinâmicos, bem como o nome do compartimento. Você pode tornar essas políticas mais restritivas ou mais abertas com base em seus projetos.

Tarefa 2: Iniciar um Jupyter Notebook no OCI Data Science

Para iniciar uma sessão de notebook, você precisará criar um projeto de ciência de dados e, nesse projeto, poderá criar vários notebooks. Cada notebook tem sua própria máquina virtual (VM) e pode ser iniciado de forma independente. Em cada sessão de notebook, você pode implantar e gerenciar vários modelos, vincular um repositório GitHub ou Bitbucket existente ou criar e gerenciar um novo, desenvolver vários notebooks Jupyter, criar um aplicativo completo ou orquestrar todo o seu workflow de aprendizado de máquina.

  1. Vá para a Console do OCI, navegue até Data Science, Projetos e clique em Criar projeto.

    Observação: Para simplificar, criaremos todos os recursos no mesmo compartimento. Certifique-se de selecionar o mesmo compartimento no qual você criou a VCN e o cluster OpenSearch.

    Imagem mostrando a VCN.

    Figura 2: Criar um novo Projeto do Data Science

  2. Crie uma nova sessão de notebook.

    1. Na página Detalhes do Projeto, clique em Sessões de notebook e em Criar sessão de notebook.

      Imagem mostrando a VCN.

    2. Você pode selecionar a forma de computação desejada e anexar as origens de dados necessárias. Ao criar a sessão de notebook, certifique-se de selecionar a VCN correta e a mesma sub-rede privada que você usou para o cluster OpenSearch.

      Imagem mostrando a VCN.

      Figura 3: Criar uma nova sessão de Notebook

  3. Clique em Abrir para iniciar uma sessão de notebook. Agora você pode instalar as bibliotecas necessárias, incluindo clientes LangChain e OpenSearch Python, diretamente da interface de notebook usando pip.

    Imagem mostrando a VCN.

    Imagem mostrando a VCN.

    Figura 4: Iniciar sessão de Notebook

Tarefa 3: Configurar LangChain com o Jupyter Notebook

Instale o LangChain junto com outras bibliotecas em seu ambiente ou script do Jupyter Notebook e aproveite sua integração perfeita com a OCI com o serviço OpenSearch, HuggingFace, OCI Generative AI e vários outros para executar pesquisa semântica ou pesquisa conversacional.

Adicione o código a seguir na parte superior do seu Jupyter Notebook.

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

Para evitar a necessidade de reinstalar esses pacotes todas as vezes em cada Jupyter Notebook que você cria em uma sessão de notebook, é aconselhável criar e ativar um ambiente conda e instalar todas as suas dependências neles, dessa forma, você pode reutilizar esse ambiente com vários notebooks Jupyter. Há vários ambientes conda pré-configurados em Launcher. Sinta-se à vontade para selecionar e instalar qualquer um desses ambientes pré-configurados em um terminal e, em seguida, instalar qualquer biblioteca adicional na parte superior. Quando a instalação estiver concluída, basta definir o Kernel no seu notebook para esse ambiente conda ativo.

  1. Inicie um novo terminal. Vá para Arquivo, Novo e clique em Terminal.

    Imagem mostrando a VCN.

    Figura 5: Lançamento de um novo terminal

  2. Execute o comando a seguir para criar um ambiente conda.

    odsc conda install -s python_p310_any_x86_64_v1
    conda activate <environment name>
    
  3. Execute o comando a seguir para instalar LangChain usando pip no terminal.

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

Tarefa 4: Processar Documentos com LangChain

Um dos pontos fortes do LangChain é que ele oferece recursos para processar grandes volumes de documentos de forma eficiente e com codificação mínima, seja dados estruturados ou não estruturados. Você simplesmente precisa importar as classes de processamento de documentos necessárias que são mais adequadas para seu uso e chamar o método de carregamento para processar os documentos. Execute o seguinte 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)

Depois de instalar o LangChain no seu ambiente noteBook, você poderá aproveitar o OCI com a integração OpenSearch com o LangChain para executar a pesquisa semântica de forma mais simples do que escrever código do zero para seguir o longo guia passo a passo OpenSearch com várias chamadas de API.

  1. Use a biblioteca de documentos LangChain para processar e dividir seus dados não estruturados, conforme mostrado na Tarefa 4.

  2. Defina um modelo de incorporação que você gostaria de usar para gerar automaticamente incorporações para seus dados durante a ingestão. Mais uma vez, aproveitando a integração LangChain com HuggingFace, você pode implantar qualquer um dos modelos HuggingFace pré-treinados com uma única linha de código. Tudo o que você precisa fazer é especificar o nome do modelo de incorporação que deseja usar. Você também pode usar um modelo personalizado ajustado para essa finalidade. Execute o seguinte comando.

    from langchain.embeddings import HuggingFaceEmbeddings
    embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L12-v2")
    
  3. Crie uma conexão com o OCI com OpenSearch usando LangChain, especificando o nome do índice, o método de autenticação e o modelo de incorporação que você deseja usar. Com esse método, um índice com o nome de índice especificado será criado durante a ingestão de dados ou atualizado com novos dados se o índice já existir. Execute o seguinte 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. Você também pode ingerir diretamente seus chunks de dados processados em massa no cluster OpenSearch usando LangChain. O exemplo a seguir mostra como você pode executar a ingestão em massa em lotes em uma lista de blocos de documentos processados. Use a biblioteca tqdm para rastrear o progresso da ingestão de dados. Execute o seguinte 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. Depois que os dados forem ingeridos, execute o comando a seguir para executar a pesquisa semântica no í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")
    

Próximas Etapas

A OCI com integração OpenSearch com LangChain e o OCI Data Science é um divisor de águas e acelerará significativamente o desenvolvimento de aplicativos empresariais de casos de uso de negócios em torno de pesquisa semântica e LLM. Este tutorial fornece um guia completo com exemplos para configurar o OCI com OpenSearch e o OCI Data Science em sua tenancy e aproveitar o LangChain para executar a pesquisa semântica.

No próximo tutorial: Tutorial 2: Integrar LangChain, OCI Data Science Notebook, OCI com OpenSearch e OCI Generative AI para Acelerar o Desenvolvimento de LLM para RAG e Pesquisa Conversacional, discutiremos como aproveitar a integração perfeita entre LangChain, OCI Data Science, AI Quick Action e o serviço OCI Generative AI para desenvolver seu próprio aplicativo de LLM personalizado. Convidamos você a experimentar a OCI com OpenSearch para seus casos de uso de IA/ML de negócios empresariais.

Você pode encontrar o código no repositório GitHub a seguir.

Confirmações

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.