附註:

將 OCI 與 OCI 資料科學記事本內的 OpenSearch 和 LangChain 整合

簡介

OpenSearch 近年來快速採用,尤其是隨著越來越多公司採用大型語言模型 (LLM) 來推動資料洞察,並運用智慧型搜尋功能來滿足自訂業務使用案例的需求。OpenSearch 持續致力於提供與最新 AI/ML 功能的無縫整合,讓組織能夠建立強大的可觀察性、搜尋和分析引擎,這在 LLM 使用量成長時至關重要。使用 Oracle Cloud Infrastructure Search 搭配 OpenSearch (OCI 與 OpenSearch),我們已有顯著的熱情,利用最新的 AI/ML 功能,包括生成式 AI (GenAI) 助理和學習排名,以解決策略問題。

具備 OpenSearch 2.11 版本的 OCI 提供了主控台和命令行介面 (CLI) 功能,可用於執行混合搜尋、語意搜尋,以及使用檢索增強生成 (RAG) 的對話式搜尋。然而,我們從客戶收集的一些關鍵痛點在設定對話式搜尋工作流程 /RAG 管線方面不斷演變,但更重要的是,預先處理和擷取大量非結構化或結構化的演算法複雜性資料 (特別是 PDF、CSV、EXCEL、WORD、DATA LAKES 等多種格式) 可供 LLM 驅動的應用程式存取,這些應用程式需要擷取資訊的速度和精確度。因此,將 LangChain 和 OCI 與 OpenSearch 整合變得至關重要,因為它有助於有效率的查詢處理和檢索增強生成 (RAG),為 LLM 提供更符合情境且準確的回應。

LangChain 提供易於使用的架構來建立及管理複雜的 LLM 工作流程,讓開發人員能夠簡化 LLM 與 OpenSearch 之間的整合。此組合透過允許語言模型從大量資料存放區擷取最相關的資訊來增強搜尋相關性,進而改善一般使用者的回應品質。

此外,我們與 OCI Data ScienceOCI Generative AI 的整合,能夠以最少的工作和程式碼,大幅加速企業 AI 使用案例的開發和生產部署。OCI Data Science 為資料科學家提供全面的工具套件,以最少的摩擦力建置、訓練和部署模型,將與資料準備和模型生命週期管理相關的許多繁瑣工作自動化。透過將 OCI 資料科學與 OCI 與 OpenSearch 和 LangChain 整合,我們可以有效率地將 AI 作業,並運用較少資源的進階資料洞察力。

為了提高可讀性,本第一個教學課程將著重於使用 OpenSearch 設定 OCI,以及設定與 OCI Data Science 服務的通訊;設定 LangChain,並運用與 OCI 與 OpenSearch 的整合來執行語意搜尋。下一個教學課程將焦點放在如何運用 LangChain、OCI 與 OpenSearch、Oracle Cloud Infrastructure Data Science AI Quick Actions (AI Quick Actions) 和 OCI Generative AI 服務之間的緊密整合,以加速 LLM 應用程式開發。

目標

作業 1:建立 OpenSearch 叢集並為您的租用戶設定 OCI 資料科學記事本

若要為您的租用戶設定 OCI 資料科學記事本,必須執行幾個步驟,其中包括建立及設定具備網際網路存取的 VCN、設定群組、動態群組,以及授予必要的 Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) 原則,以允許 OCI 資料科學管理您租用戶中的特定資源。為了簡化,我們已在此編譯所有步驟: 1_Setup_Data_Science_Notebook_In_Your_Tenancy.ipynb

OCI Data Science 團隊也提供有關優惠所有功能的詳細文件。如需詳細資訊,請參閱資料科學概要

注意:如果您已經有 OpenSearch 叢集,而且已經為您的租用戶設定記事本,您可以跳至此教學課程的 LangChain 整合部分,然後嘗試語意搜尋使用案例。

請務必注意,建立新的 OCI 資料科學專案本身並不會啟動額外的運算資源,您在資料科學專案底下建立的每個記事本階段作業都會自備運算資源。

作業 1.1:設定虛擬雲端網路 (VCN)

在您的租用戶內建立 VCN,確保設定適當的子網路和安全清單,以進行資料科學作業的安全通訊。

最好使用精靈並按一下建立具備網際網路連線的 VCN

:請務必將適當的輸入和輸出規則新增至 VCN 的專用子網路。缺少這些規則可能會使筆記型電腦無法存取網際網路,進而防止您安裝重要的程式庫與相依性。如果您已經有 VCN,只需編輯專用子網路的安全清單,即可新增下列傳入規則。

顯示 VCN 的映像檔。 圖 1.a:VNC 組態精靈

影像傳入規則組態 圖 1.b:設定專用子網路的傳入規則

作業 1.2:建立 OpenSearch 叢集

您需要具備 2.11 映像檔或更新版本的 OpenSearch 叢集。

如果您還沒有現有叢集,請參閱使用 Oracle Cloud Infrastructure Search 搭配 OpenSearch 搜尋及視覺化資料。使用在作業 1.1 中建立的相同 VCN 建立叢集。

如果您已經有想要使用的現有叢集,只要瀏覽至叢集的專用子網路,即可在安全清單中新增上述傳出規則。

作業 1.3:建立必要群組和動態群組

為您的資料科學家定義群組,並為 OCI 資料科學資源定義動態群組。這可讓適當的權限在 OCI 內執行資料科學活動。如需有關手動設定必要群組和動態群組的詳細資訊,請參閱建立資料科學家使用者群組

您也可以選擇使用 OCI Resource Manager 堆疊動態建立這些資源。

  1. 移至 OCI 主控台,瀏覽至開發人員服務資源管理程式,然後按一下堆疊

  2. 按一下建立堆疊,然後依照精靈從 OCI 資料科學樣板建立堆疊。

    注意:當您按一下選取樣板時,會在服務頁籤底下找到資料科學樣板。

作業 1.4:設定記事本的 OCI IAM 原則

您需要設定一些 OCI IAM 原則,以將權限授予您的群組和動態群組,並允許 OCI 資料科學服務管理您租用戶中的特定資源。確定原則涵蓋網路通訊和資料存取權限。如需詳細資訊,請參閱模型部署原則

作業 1.5:設定 AI 快速操作的 OCI IAM 原則

如果您想在租用戶中運用 AI 快速操作的強大功能來自動化並加速模型訓練、評估及部署,則需要設定一組 OCI IAM 原則和動態群組,以授予您租用戶中正確資源的存取權。如果您未設定這些必要的原則,AI 快速操作將無法在您的記事本階段作業中運作。如需詳細資訊,請參閱 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'}

請務必在根區間中建立 OCI IAM 原則文件。您可以將所有必要的規則新增到相同的原則文件中。為求簡化,您可以找到本教程中使用之筆記本和 AI 快速操作的所有 OCI IAM 原則集。如需詳細資訊,請參閱 data-science-iam-policies

注意:請確定更新群組和動態群組名稱,以及區間名稱。您可以根據您的設計,進一步使這些政策更具限制性或更開放性。

作業 2:在 OCI 資料科學中啟動 Jupyter 筆記型電腦

若要啟動記事本階段作業,您需要建立資料科學專案,而在此專案中,您可以建立多個記事本。每個記事本都有自己的虛擬機器 (VM),可以獨立啟動。在每個記事本階段作業中,您可以部署和管理多個模型、連結現有的 GitHub 或 Bitbucket 儲存區域,或建立和管理新的儲存區域、開發多個 Jupyter 筆記型電腦、建置完整的應用程式,或協調整個機器學習工作流程。

  1. 移至 OCI 主控台,瀏覽至資料科學專案,然後按一下建立專案

    注意:為了簡化,我們將在同一個區間中建立所有資源。請務必選取您建立 VCN 和 OpenSearch 叢集的相同區間。

    顯示 VCN 的映像檔。

    圖 2:建立新的資料科學專案

  2. 建立新的記事本階段作業。

    1. 專案詳細資訊頁面中,按一下記事本階段作業建立記事本階段作業

      顯示 VCN 的映像檔。

    2. 您可以選取所需的運算型態並附加必要的資料來源。建立記事本階段作業時,您必須確定選取正確的 VCN 以及用於 OpenSearch 叢集的相同專用子網路。

      顯示 VCN 的映像檔。

      圖 3:建立新的記事本階段作業

  3. 按一下開啟來啟動記事本階段作業。您現在可以直接從使用 pip 的記事本介面安裝必要的程式庫,包括 LangChain 和 OpenSearch Python 用戶端。

    顯示 VCN 的映像檔。

    顯示 VCN 的映像檔。

    圖 4:啟動記事本階段作業

工作 3:使用 Jupyter 記事本設定 LangChain

在您的 Jupyter Notebook 環境或指令碼中安裝 LangChain 和其他程式庫,並利用其與 OCI 和 OpenSearch、HuggingFace、OCI Generative AI 服務等的無縫整合來執行語意搜尋或對話搜尋。

在您的 Jupyter 筆記型電腦上方新增下列程式碼。

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

為了避免每次在記事本階段作業中建立的每個 Jupyter 筆記型電腦中都必須重新安裝這些套裝軟體,建議您建立並啟用一個 conda 環境,並在其中安裝所有相依性,如此一來,您就可以使用多個 Jupyter 筆記型電腦重複使用此環境。Launcher 下有數個預先設定的 conda 環境。請隨意選取並在終端機中安裝這些預先配置的環境,然後在頂端安裝任何其他程式庫。安裝完成後,只要將記事本中的核心設為此作用中 conda 環境即可。

  1. 啟動新的終端機。移至檔案新建,然後按一下終端機

    顯示 VCN 的映像檔。

    圖 5:啟動新終端機

  2. 執行下列命令以建立 conda 環境。

    odsc conda install -s python_p310_any_x86_64_v1
    conda activate <environment name>
    
  3. 執行下列命令以在終端機中使用 pip 安裝 LangChain。

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

工作 4:使用 LangChain 處理文件

LangChain 的其中一個優點是,它可以有效率地處理大量文件,而且只需最少的編碼,可以是結構化或非結構化資料。您只需要匯入最適合您使用的必要文件處理類別,並呼叫載入方法來處理文件。執行下列命令。

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)

在 noteBook 環境中安裝 LangChain 之後,您可以利用與 LangChain 的 OCI 與 OpenSearch 整合來執行語意搜尋,而不只是從頭編寫程式碼,以逐步執行 OpenSearch 指南與多個 API 呼叫。

  1. 使用 LangChain 文件庫來處理和分區您的非結構化資料,如任務 4 所示。

  2. 定義您要用於在攝取期間自動產生資料的內嵌模型。再一次,您可以利用 LangChain 與 HuggingFace 的整合,以單行程式碼部署任何預先訓練的 HuggingFace 模型。您只需指定想要使用的嵌入模型名稱即可。您也可以使用自訂的微調模型來達到此目的。執行下列命令。

    from langchain.embeddings import HuggingFaceEmbeddings
    embedding_model = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L12-v2")
    
  3. 使用 LangChain 建立具有 OpenSearch 的 OCI 連線、指定索引名稱、認證方法以及您要使用的內嵌模型。使用此方法時,系統會在擷取資料時建立指定索引名稱的索引,如果索引已經存在,則會以新資料更新索引。執行下列命令。

    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. 您也可以使用 LangChain,直接將已處理的資料區塊大量擷取至您的 OpenSearch 叢集。下列範例顯示如何在已處理文件區塊清單中以批次方式執行大量擷取。使用 tqdm 程式庫來追蹤資料擷取的進度。執行下列命令。

    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. 擷取資料之後,請執行下列命令來對您的索引執行語意搜尋。

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

接下來的步驟

OCI 與 LangChain 的 OpenSearch 整合,而 OCI Data Science 改變了遊戲規則,將大幅加快業務使用案例的企業應用程式開發,包括語意搜尋和 LLM。本教學課程提供在租用戶中使用 OpenSearch 和 OCI 資料科學設定 OCI 的完整指南,並利用 LangChain 執行語意搜尋。

在下一個教學課程中:教學課程 2:整合 LangChain、OCI 資料科學記事本、OCI 與 OpenSearch,以及 OCI Generative AI 以加速 RAG 和對話式搜尋的 LLM 開發,我們將討論如何運用 LangChain、OCI 資料科學、AI 快速操作和 OCI Generative AI 服務之間的無縫整合,來開發自己的自訂 LLM 應用程式。我們邀請您試用 OpenSearch 的 OCI,以處理您的企業業務 AI/ML 使用案例。

您可以在下列 GitHub 儲存區域中找到程式碼。

認可

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center