ノート:
- このチュートリアルでは、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 Data Science Notebookの設定、ノートブック・セッションを使用したLangChainの構成、セマンティック検索の完全なユースケースのデプロイについて、エンドツーエンドの構成ステップについて詳しく説明します。
このチュートリアルでは、その基盤に基づいて、LangChain、OCIとOpenSearch、AI Quick Actions、OCI Generative AIのシームレスな統合によって、カスタム・ビジネス・ユース・ケースのLLMアプリケーション開発をどのように高速化できるかを説明します。特に、会話型検索、Retrieval-Augmented Generation(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クラスタを作成します。詳細は、OpenSearchでのOracle Cloud Infrastructure Searchを使用したデータの検索およびビジュアル化を参照してください。
-
OCI Data Scienceノートブック・セッションを作成します。詳細は、データ・サイエンスの概要を参照するか、最初のチュートリアル(OCI Data Science Notebook内のOpenSearchおよびLangChainへのOCIの統合)を参照するか、テナンシでのデータ・サイエンス・ノートブックの設定に従うこともできます。
タスク1: OCIデータ・サイエンス・プロジェクトの作成とノートブックの構成
OCI Data Science Notebookは、AIアプリケーションの開発、テストおよびデプロイのための柔軟でインタラクティブなプラットフォームを提供します。ノートブックとOCIサービスを統合することで、シームレスな開発体験が生まれ、外部ツールの必要性が減少します。ノートブックを使用すると、次のことができます。
- プロトタイプ・アプリケーション: LangChain、OCI生成AI、およびOCIとOpenSearchの統合を実験します。
- ワークフローの実行:ファインチューニング、デプロイメントおよび取得ワークフローを実行します。
- コラボレーション:チーム・メンバーとプロジェクトを共有して反復します。
OCIデータ・サイエンス・プロジェクトを作成してノートブックを構成するには、タスク2: OCIデータ・サイエンスでのJupyter Notebookの起動を参照してください。
タスク2: LangChainのインストール
LangChainは、LLMベースのアプリケーションを開発するための最も汎用性の高いフレームワークの1つです。そのモジュール設計と拡張ライブラリは、次のための堅牢な抽象化を提供します。
- プロンプト管理:様々なユース・ケースのプロンプト作成を簡素化および最適化します。
- エージェント・サポート: 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生成AI Cohereを使用した埋込みモデルの構成
OCI生成AIサービスは、CohereやMetaのLLaMA-3など、最先端のLLMにアクセスするためのフルマネージド・プラットフォームを提供します。次のモデルがサポートされています:
- オンデマンド・モデル:推論可能な事前トレーニング済モデルにアクセスします。
- カスタム・モデル:ドメイン固有のデータを使用してLLMを微調整し、応答を調整します。
- スケーラブルなAIクラスタ:大規模なデプロイメントに高パフォーマンスのインフラストラクチャを活用します。
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のデプロイと管理が複雑になることがなくなります。次のためのコードなしインタフェースを提供します。
- モデル・デプロイメント:事前トレーニング済またはファインチューニング済のモデルをHTTPエンドポイントとしてデプロイします。
- ファインチューニング:カスタム・データセットを使用してモデルをトレーニングし、ドメイン固有のパフォーマンスを向上させます。
- 評価: ROUGEやBERTScoreなどのメトリックを使用してモデルをテストします。
AI Quick Actionsは使いやすく、OCI Data Science Notebook環境からアクセスできます。かなりの柔軟性があります。たとえば、OCI Object Storageまたはローカル・ノートブックに格納されているデータセットを使用して、モデルのトレーニング、微調整または評価を行うことができます。また、基礎となるコンピュートおよびストレージ・コストを超えて追加料金が発生することはないため、非常にコスト効率の高いソリューションでもあります。最も重要なことは、AI Quick Actionsで利用可能な審査済みモデルのカタログにアクセスでき、わずか数回のクリックで導入できます。さらに、コードを記述することなく、カスタム・データセットでこれらのモデルのいずれかを微調整および評価する柔軟性もあります。独自のモデル・アーティファクトを持ち込み、インフラストラクチャの複雑さを気にすることなくAIクイック・アクションでデプロイするオプションについては言うまでもありません。最後に、組込みのプロンプト・インタフェースを使用して、デプロイされたモデルのパフォーマンスをテストおよび評価できます。
AI Quick Actionは、OCI Data Science Notebookセッション内で使用できます。AIクイック・アクションを使用するには、テナンシで必要なポリシーを設定していることを確認してください。詳細は、AIクイック処理ポリシーを参照してください。
-
「AIクイック処理」をクリックして、ノートブック・セッションからAIクイック処理を起動します。
-
LLMモデル・カタログにアクセスします。
-
「デプロイメント」および「デプロイメントの作成」をクリックします。
-
「モデルのデプロイ」ページで、モデル・デプロイメントの作成に必要な詳細を入力します。
-
モデルを作成したら、デプロイされたモデルを表示およびテストできます。
-
デプロイ済モデルの評価を作成します。
次のコードを実行して、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搭載アプリケーションの未来を構築するための第一歩を踏み出しましょう。
関連リンク
承認
-
著者 - 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
G25115-01
January 2025