附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱 Oracle Cloud Infrastructure Free Tier 入門。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
整合 LangChain、OCI Data Science Notebook、OCI 與 OpenSearch 和 OCI Generative AI,以加速 RAG 和對話搜尋的 LLM 開發
簡介
在本教學課程中,我們將探討 LangChain、Oracle Cloud Infrastructure (OCI) Data Science Notebook、OCI with OpenSearch、OCI Data Science AI Quick Actions (AI Quick Actions) 和 OCI Generative AI 服務如何緊密整合,以簡化大型語言模型 (LLM) 應用程式開發。這些工具可加速工作流程、提高生產力,並加快部署針對特定業務需求量身打造的尖端 AI 解決方案。
在第一個教學課程中:教學課程 1:將 OCI Search 與 OCI Data Science Notebook 中的 OpenSearch 和 LangChain 整合,我們討論了將 LangChain、OCI 與 OpenSearch 和 Hugging Face 整合的轉型影響,示範這些技術如何與 OCI Data Science Notebook 搭配運作,簡化企業企業語意搜尋解決方案的開發和生產。我們詳細說明了使用 OpenSearch 設定 OCI 的端對端組態步驟、設定 OCI 資料科學記事本、在記事本階段作業設定 LangChain,以及部署語意搜尋的完整使用案例。
本教學課程以該基礎為基礎,著重於如何與 LangChain、OCI 與 OpenSearch、AI Quick Actions 及 OCI Generative AI 緊密整合,以加速自訂業務使用案例的 LLM 應用程式開發。我們將特別深入討論對話式搜尋、檢索增強生成 (RAG) 和問題回答的聊天機器人解決方案,展示這些工具如何相輔相成,協助開發人員克服挑戰,並以最少的編碼提供創新、可擴展的應用程式。
注意:您可以在我們的公用範例儲存區域中找到此教學課程的完整程式碼範例: OCI OpenSearch 服務程式碼範例。
整合方法的優點
-
降低複雜性:跨 LangChain、OCI 服務和記事本的無縫整合可免除複雜管線的需求,並降低開發開銷。
-
更快的上市時間:開發人員可以快速建立應用程式原型、測試及部署,確保更快地將價值交付給使用者。
-
擴展性與彈性: OCI 健全的基礎架構支援企業應用程式日益增加的需求,而 LangChain 的模組化設計則有助於輕鬆擴展。
-
增強的生產力:透過自動化重複性任務並簡化工作流程,開發人員可以專注於創新而非營運挑戰。
使用 LLM 建置應用程式涉及多個步驟:
- 存取和部署高效能模型。
- 使用網域特定資料微調模型。
- 整合檢索系統以有效進行資料查詢。
- 大規模測試、評估及部署模型。
每個步驟都需要特殊工具、複雜的管線,以及大量的開發工作。透過將 LangChain 與 OCI 服務整合,開發人員可以全面解決這些挑戰,從而降低複雜性並提高生產力。
目標
-
瞭解 LangChain、OCI 與 OpenSearch、OCI Data Science Notebook、OCI Generative AI 和 AI Quick Actions 整合的運作方式。
-
瞭解如何使用 AI 快速操作部署 LLM 模型。
-
使用 OCI 與 OpenSearch、OCI GenAI 服務及 OCI Data Science 的 LangChain 整合,以加速 LLM 應用程式開發。
必要條件
-
建立版本為 2.11 或更新版本的 OpenSearch 叢集。如需詳細資訊,請參閱使用 Oracle Cloud Infrastructure Search 搭配 OpenSearch 搜尋及視覺化資料。
-
建立 OCI 資料科學記事本階段作業。如需詳細資訊,請參閱資料科學概要,您也可以閱讀第一個教學課程:在 OCI 資料科學記事本中將 OCI 與 OpenSearch 和 LangChain 整合,或依照在您的租用戶中設定資料科學記事本進行。
作業 1:建立 OCI 資料科學專案並設定記事本
OCI 資料科學記事本提供彈性且互動式的平台,可用於開發、測試及部署 AI 應用程式。將筆記本與 OCI 服務整合可建立無縫的開發體驗,減少對外部工具的需求。使用筆記本,您可以:
- 原型應用程式:使用 LangChain、OCI Generative AI 和 OCI 與 OpenSearch 整合進行實驗。
- 執行工作流程:執行微調、部署及擷取工作流程。
- 協同合作:與團隊成員共用並反覆執行專案。
若要建立 OCI 資料科學專案並設定記事本,請參閱工作 2:在 OCI 資料科學中啟動 Jupyter Notebook 。
工作 2:安裝 LangChain
LangChain 是開發 LLM 型應用程式的最多功能架構之一。其模組化設計與擴充式磁帶櫃提供了強大的抽象概念:
- 提示管理:簡化並最佳化不同使用案例的提示建立。
- 代理程式支援:建立與 API 或外部工具互動的智慧型代理程式。
- 資料介面:整合資料來源、擷取系統和向量儲存。
LangChain 能夠與 OCI Generative AI、OCI 與 OpenSearch 等雲端服務無縫連接,而 OCI Data Science 增強了建立企業級應用程式的實用性。LangChain 的靈活性可讓開發人員快速製作應用程式原型並加以迭代,使其成為 RAG 和對話式搜尋解決方案的理想選擇。其與 OCI 服務的整合可進一步簡化開發流程,讓開發人員能夠專注於提供價值。在第一個教學課程中,我們討論如何在筆記型電腦環境中設定 LangChain,並探討如何使用 LangChain 處理非結構化資料、使用 OpenSearch 將資料擷取至 OCI,以及執行語意搜尋的端對端範例。
在您的記事本中執行下列命令,以設定 LangChain 和其他金鑰庫。
!pip install -U oci oracle_ads langchain langchain-community langchain-huggingface opensearch-py pypdf
工作 3:使用 LangChain 預先處理及分區您的資料
使用下列 Python 程式碼。
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)
作業 4:使用 OCI Generative AI Cohere 設定內嵌模型
OCI Generative AI 服務提供完全託管的平台,以存取最先進的 LLM,例如 Cohere 和 Meta 的 LLaMA-3。它支援下列模型:
- 隨選模型:存取準備推論的預先訓練模型。
- 自訂模型:使用網域特定資料微調 LLM,以進行量身打造的回應。
- 可擴展的 AI 叢集:運用高效能基礎架構進行大規模部署。
AI Quick Actions 和 OCI Generative AI 的主要差異在於 AI Quick Actions 具有更廣泛的模型目錄,並透過模型訓練、評估、微調和生命週期管理提供更多靈活性。OCI Generative AI 的主要優勢在於,您無需擁有託管模型的資訊基礎架構。您可以將一般端點用於任何可用的模型,而且只根據要求數目和記號數目收費。相較之下,使用 AI Quick Actions 時,對 LLM 或任何 AI/ML 工作流程協調和生命週期擁有更多自主性,您只需支付基礎架構成本並擁有無限請求。
此外,OCI Generative AI 服務已準備好使用企業內嵌模型,例如專為企業資料打造的 Cohere Embed V3 模型,其執行效能比其他預先訓練的句子轉換器模型更佳,尤其是針對自訂資料。您只需要呼叫此模型,即可產生資料的內嵌。因此,我們相信結合 OCI Generative AI 和 AI Quick Actions 能夠為您的業務應用程式帶來最佳價值。您可以呼叫已經部署的 OCI Generative AI Cohere 內嵌模型端點來內嵌資料,並使用 AI Quick Actions 來微調、測試、評估及部署模型。
LangChain 與 OCI Generative AI 和 AI Quick Action 緊密整合,讓開發人員能夠直接從 OCI 環境調用模型。開發人員只需最少的組態,即可開始使用預先訓練或微調的模型。
以下範例說明如何使用 LangChain 整合來呼叫 Cohere 內嵌的 V3 模型,並在資料擷取期間使用它內嵌文件。
from langchain_community.embeddings import OCIGenAIEmbeddings
oci_cohere_embedding_model = OCIGenAIEmbeddings(
model_id="cohere.embed-english-v3.0",
service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
compartment_id="<>YOUR-COMPARTMENT-OCID",
auth_type="RESOURCE_PRINCIPAL",
model_kwargs={"input_type": "SEARCH_DOCUMENT"}
)
作業 5:使用 OpenSearch 與 LangChain 設定 OCI 以啟用 RAG 工作流程
RAG 仰賴快速且準確的擷取系統。OCI 與 OpenSearch 服務提供基礎架構來:
- 索引與查詢資料:儲存大型資料集並快速擷取相關資訊。
- 語意搜尋:使用內嵌來增強擷取準確性。
- 擴展性:處理展開的資料集,而不會影響效能。
LangChain 的向量儲存區功能與 OCI 與 OpenSearch 整合,以支援 RAG 工作流程。開發人員可以使用 OCI Generative AI 的內嵌功能,透過 OpenSearch 有效地從 OCI 編製資料索引和擷取資料。
使用下列 Python 程式碼。
from langchain.vectorstores import OpenSearchVectorSearch
import oci
# setup 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=oci_cohere_embedding_model,
signer=auth_provider,
auth_type="RESOURCE_PRINCIPAL",
http_auth=auth)
作業 6:擷取您的資料
使用下列 Python 程式碼擷取您的資料。
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)
作業 7:使用 LangChain 設定 RAG 的 LLM
OCI Data Science 中的 AI Quick Actions 消除了部署和管理 LLM 的複雜性。它提供用於下列項目的無程式碼介面:
- 模型部署:將預先訓練或微調的模型部署為 HTTP 端點。
- 微調:使用自訂資料集訓練模型,以提升網域特定效能。
- 評估:使用 ROUGE 和 BERTScore 等測量結果來測試模型。
透過 OCI 資料科學記事本環境,即可輕鬆使用並存取 AI 快速操作。它提供了大量的彈性。例如,您可以使用 OCI Object Storage 或本機筆記本中儲存的資料集來訓練、微調或評估模型。它也是一個非常符合成本效益的解決方案,因為除了基礎運算和儲存成本之外,沒有其他費用。最重要的是,您可以存取 AI 快速操作中可用的已審查模型目錄,只要按幾下滑鼠即可部署。此外,您還可以靈活地微調和評估自訂資料集上的任何模型,而無需編寫任何程式碼。不用提及自備模型構件的選項,只要使用 AI 快速操作進行部署,無須擔心基礎架構複雜性。最後,您可以使用內建的提示介面來測試和評估已部署模型的效能。
OCI 資料科學記事本階段作業內提供 AI 快速操作。若要使用 AI 快速操作,請確定已在租用戶中設定必要的原則。如需詳細資訊,請參閱 AI 快速操作政策。
-
按一下 AI 快速操作,從您的記事本階段作業啟動 AI 快速操作。
-
存取 LLM 模型目錄。
-
按一下部署和建立部署。
-
在部署模型頁面中,輸入建立模型部署所需的詳細資料。
-
建立模型之後,您可以檢視及測試部署的模型。
-
建立已部署模型的評估。
執行下列程式碼以使用 LangChain 整合來呼叫已部署的 LLM 模型進行問題回答。在此情況下,我們將使用與 AI Quick Actions 一起部署的 LLM 模型,並呼叫其預測端點如下:
import ads
from langchain_community.llms import OCIModelDeploymentLLM
ads.set_auth("resource_principal")
endpoint = "https://modeldeployment.us-ashburn-1.oci.customer-oci.com/ocid1.datasciencemodeldeployment.oc1.iad.am....................../predict"
oads_llm = OCIModelDeploymentLLM(
endpoint=endpoint,
model="odsc-llm",
model_kwargs={"temperature": 0, "max_tokens": 500, 'top_p': 1.0, 'top_k': 1}
)
#test the invoke method to make sure model is deployed and active
oads_llm.invoke("who was the first president of the united states?")
工作 8:執行對話搜尋和 RAG
使用下列 Python 程式碼執行對話搜尋和 RAG。
# Create a retriever from the OpenSearch vector database
retriever = vector_db.as_retriever()
# Load a QA chain that combines the documents and generates an answer
combine_documents_chain = load_qa_chain(oads_llm, chain_type="stuff")
# Create the RetrievalQA chain
qa_chain = RetrievalQA(combine_documents_chain=combine_documents_chain, retriever=retriever)
# Example query
query="What was Notre Dame's first college? be explicit"
response = qa_chain.run(query)
print("Answer:", response)
此 RAG 應用程式的整個端對端程式碼可以在這裡找到: OCI OpenSearch 服務範例筆記型電腦。此教學課程的整個 GitHub 儲存區域可在此處找到: opensearch-integration-with-langchain 。
接下來的步驟
LangChain、OCI 與 OpenSearch、AI 快速操作、OCI Generative AI 和筆記本的整合,為建置 LLM 應用程式提供了全面的解決方案。無論您是要開發 RAG 系統還是對話式搜尋工具,這些技術都能共同運作,提供強大、可擴展且高效率的解決方案。
藉由採用這種整合式方法,開發人員可以充分發揮生成式 AI 的潛力,並提供推動業務成功的轉型應用程式。立即開始探索這些工具,並邁出建立 AI 應用程式未來的第一步。
相關連結
認可
-
作者 - Landry Kezebou (OCI OpenSearch 資深機器學習工程師)、Sreeni Simhadri (軟體開發資深協理)、Saiprasad Sethuram (工程資深經理)
-
貢獻者 - Julien Lehmann (Oracle Data Platform 產品行銷經理),Andy Hind (資深應用程式架構師)
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Integrate LangChain, OCI Data Science Notebook, OCI with OpenSearch and OCI Generative AI to Accelerate LLM Development for RAG and Conversational Search
G25119-01
January 2025