ノート:

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 Data Science Notebookの設定、ノートブック・セッションを使用したLangChainの構成、セマンティック検索の完全なユースケースのデプロイについて、エンドツーエンドの構成ステップについて詳しく説明します。

このチュートリアルでは、その基盤に基づいて、LangChain、OCIとOpenSearch、AI Quick Actions、OCI Generative AIのシームレスな統合によって、カスタム・ビジネス・ユース・ケースのLLMアプリケーション開発をどのように高速化できるかを説明します。特に、会話型検索、Retrieval-Augmented Generation(RAG)およびアンケート回答のチャットボットに関するソリューションを掘り下げ、これらのツールを併用することで、開発者が課題を克服し、最小限のコーディングで革新的でスケーラブルなアプリケーションを提供できるようになる方法を示します。

ノート:このチュートリアルの完全なコード・サンプルは、OCI OpenSearchサービス・コード・サンプルの公開サンプル・リポジトリにあります。

統合アプローチのメリット

LLMを使用したアプリケーションの構築には、複数のステップがあります。

各ステップには、特殊なツール、複雑なパイプライン、および開発に多大な労力が必要です。LangChainをOCIサービスと統合することで、開発者はこれらの課題に全体的に取り組むことができ、複雑さを軽減し、生産性を高めることができます。

目的

前提条件

タスク1: OCIデータ・サイエンス・プロジェクトの作成とノートブックの構成

OCI Data Science Notebookは、AIアプリケーションの開発、テストおよびデプロイのための柔軟でインタラクティブなプラットフォームを提供します。ノートブックとOCIサービスを統合することで、シームレスな開発体験が生まれ、外部ツールの必要性が減少します。ノートブックを使用すると、次のことができます。

OCIデータ・サイエンス・プロジェクトを作成してノートブックを構成するには、タスク2: OCIデータ・サイエンスでのJupyter Notebookの起動を参照してください。

タスク2: LangChainのインストール

LangChainは、LLMベースのアプリケーションを開発するための最も汎用性の高いフレームワークの1つです。そのモジュール設計と拡張ライブラリは、次のための堅牢な抽象化を提供します。

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生成AI Cohereを使用した埋込みモデルの構成

OCI生成AIサービスは、CohereやMetaのLLaMA-3など、最先端のLLMにアクセスするためのフルマネージド・プラットフォームを提供します。次のモデルがサポートされています:

AI Quick ActionsとOCI Generative AIの主な違いは、AI Quick Actionsはより広範なモデル・カタログを備えており、モデルのトレーニング、評価、ファインチューニング、ライフサイクル管理により柔軟性が高まることです。OCI生成AIの主な利点は、モデルをホストするインフラを所有する必要がないことです。使用可能な任意のモデルに対して汎用エンドポイントを使用でき、リクエスト数およびトークンの数に基づいてのみ請求されます。一方、AIクイック・アクションでは、LLMやAI/MLワークフローのオーケストレーションやライフサイクルに対する自律性が高まりますが、料金はインフラのコストに対してのみ支払われ、リクエストは無制限です。

さらに、OCI生成AIサービスは、エンタープライズ・データ用に構築され、ハギング・フェイス(特にカスタム・データ)から他の事前トレーニング済みのセンテンス・トランスフォーマ・モデルよりも優れたパフォーマンスを発揮することが知られているCohere Embed V3モデルなどのエンタープライズ埋込みモデルを使用する準備ができています。このモデルを起動して、データの埋込みを生成するだけです。したがって、OCI生成AIとAIクイック・アクションの両方を組み合せることで、ビジネス・アプリケーションにとって最高の価値を提供できると考えています。すでにデプロイされているOCI生成AI Cohere埋込みモデル・エンドポイントを起動してデータを埋め込み、AIクイック・アクションを使用してモデルを微調整、テスト、評価およびデプロイできます。

LangChainは、OCI生成AIおよびAIクイック・アクションとシームレスに統合されているため、開発者は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生成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クイック・アクションにより、LLMのデプロイと管理が複雑になることがなくなります。次のためのコードなしインタフェースを提供します。

AI Quick Actionsは使いやすく、OCI Data Science Notebook環境からアクセスできます。かなりの柔軟性があります。たとえば、OCI Object Storageまたはローカル・ノートブックに格納されているデータセットを使用して、モデルのトレーニング、微調整または評価を行うことができます。また、基礎となるコンピュートおよびストレージ・コストを超えて追加料金が発生することはないため、非常にコスト効率の高いソリューションでもあります。最も重要なことは、AI Quick Actionsで利用可能な審査済みモデルのカタログにアクセスでき、わずか数回のクリックで導入できます。さらに、コードを記述することなく、カスタム・データセットでこれらのモデルのいずれかを微調整および評価する柔軟性もあります。独自のモデル・アーティファクトを持ち込み、インフラストラクチャの複雑さを気にすることなくAIクイック・アクションでデプロイするオプションについては言うまでもありません。最後に、組込みのプロンプト・インタフェースを使用して、デプロイされたモデルのパフォーマンスをテストおよび評価できます。

AI Quick Actionは、OCI Data Science Notebookセッション内で使用できます。AIクイック・アクションを使用するには、テナンシで必要なポリシーを設定していることを確認してください。詳細は、AIクイック処理ポリシーを参照してください。

  1. 「AIクイック処理」をクリックして、ノートブック・セッションからAIクイック処理を起動します。

    イメージ

  2. LLMモデル・カタログにアクセスします。

    イメージ

  3. 「デプロイメント」および「デプロイメントの作成」をクリックします。

    イメージ

  4. 「モデルのデプロイ」ページで、モデル・デプロイメントの作成に必要な詳細を入力します。

    イメージ

  5. モデルを作成したら、デプロイされたモデルを表示およびテストできます。

    イメージ

  6. デプロイ済モデルの評価を作成します。

    イメージ

次のコードを実行して、LangChain統合を使用して、質問回答用のデプロイ済LLMモデルを起動します。この場合、次のように予測エンドポイントをコールして、AIクイック・アクションとともにデプロイされた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 Quick Actions、OCI Generative AI、およびノートブックの統合により、LLMアプリケーションを構築するための包括的なソリューションが提供されます。RAGシステムや会話型検索ツールの開発に関わらず、これらのテクノロジーは連携して、強力でスケーラブルで効率的なソリューションを提供します。

この統合アプローチを採用することで、開発者は生成AIの可能性を最大限に引き出し、ビジネスの成功を促進する変革的なアプリケーションを提供することができます。これらのツールを今すぐ探索し、AI搭載アプリケーションの未来を構築するための第一歩を踏み出しましょう。

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。