Platform for AI (PAI) を使用すると、Elasticsearch を検索拡張生成 (RAG) ベースの大規模言語モデル (LLM) チャットボットと統合できます。これにより、モデルが生成する回答の精度と多様性が向上します。Elasticsearch は、効率的なデータ検索機能と、辞書設定やインデックス管理などの特別な機能を備えています。これにより、RAG ベースの LLM チャットボットは、ユーザーの要件をより的確に特定し、より適切で価値のあるフィードバックを提供できます。このトピックでは、RAG ベースの LLM チャットボットをデプロイする際に Elasticsearch を関連付ける方法について説明します。また、RAG ベースの LLM チャットボットが提供する基本機能と、Elasticsearch が提供する特別な機能についても説明します。
背景情報
EAS の概要
Elastic Algorithm Service (EAS) は、PAI のオンラインモデルサービスプラットフォームであり、モデルをオンライン推論サービスや AI を活用した Web アプリケーションとしてデプロイできます。EAS は、オートスケーリングやブルーグリーンデプロイメントなどの機能を提供します。これらの機能により、多数の同時リクエストを処理できる安定したオンラインモデルサービスを開発するコストを削減できます。さらに、EAS は、リソースグループ管理やモデルのバージョン管理などの機能、および包括的な O&M とモニタリング機能を提供します。詳細については、「EAS の概要」をご参照ください。
RAG の概要
AI 技術の急速な発展に伴い、生成 AI はテキスト生成や画像生成など、さまざまな分野で目覚ましい成果を上げています。しかし、LLM が広く使用されるにつれて、以下の固有の限界が徐々に明らかになってきました。
専門分野の知識の限界:ほとんどの場合、LLM は大規模な汎用データセットを使用してトレーニングされます。このため、LLM は専門的な垂直分野に対して、深く的を絞った処理を行うことが困難です。
情報の更新遅延:トレーニングデータセットが静的であるため、LLM はリアルタイムの情報や知識の更新にアクセスして取り込むことができません。
誤解を招く出力:LLM はハルシネーションを起こしやすく、もっともらしく見えても事実と異なる出力を生成することがあります。これは、データの偏りやモデル固有の限界などの要因に起因します。
これらの課題に対処し、LLM の能力と精度を向上させるために、RAG が開発されました。RAG は外部のナレッジベースを統合することで、LLM のハルシネーションの問題を大幅に軽減し、LLM が最新の知識にアクセスして適用する能力を向上させます。これにより、LLM をカスタマイズして、よりパーソナライズされ、精度の高いものにすることが可能になります。
Elasticsearch の概要
Alibaba Cloud Elasticsearch は、オープンソースの Elasticsearch をベースに開発されたフルマネージドのクラウドサービスです。Alibaba Cloud Elasticsearch は、オープンソースの Elasticsearch が提供するすべての機能と互換性があります。このサービスは、従量課金制ですぐに利用できます。Elasticsearch、Logstash、Kibana、Beats などの Elastic Stack コンポーネントに加えて、Alibaba Cloud Elasticsearch は Elastic 社と協力し、商用プラグイン X-Pack を無料で提供しています。オープンソースの Elasticsearch Platinum エディションで提供される X-Pack の高度な機能は、オープンソースの Elasticsearch チームが X-Pack プラグインをベースに開発したものです。これらの機能には、セキュリティ、SQL プラグイン、機械学習、アラート、モニタリングが含まれます。Alibaba Cloud Elasticsearch は、リアルタイムのログ分析と処理、情報検索、多次元データクエリ、統計データ分析などのシナリオで広く使用されています。詳細については、「Alibaba Cloud Elasticsearch とは」をご参照ください。
手順
EAS は、柔軟なパラメーター設定が可能な自社開発の RAG体系的ソリューションを提供します。Web UI を使用するか、API 操作を呼び出して RAG サービスにアクセスし、カスタムの RAG ベース LLM チャットボットを設定できます。RAG の技術アーキテクチャは、検索と生成に重点を置いています。
検索:EAS は、オープンソースの Faiss や、Milvus、Elasticsearch、Hologres、OpenSearch、AnalyticDB for PostgreSQL などの Alibaba Cloud サービスを含む、さまざまなベクトルデータベースを統合しています。
生成:EAS は、Qwen、Meta Llama、Mistral、Baichuan などのさまざまなオープンソースモデルをサポートし、ChatGPT も統合しています。
この例では、Elasticsearch クラスターを使用して、以下の手順で EAS と Elasticsearch を使用して RAG ベースの LLM チャットボットをデプロイする方法を示します。
Elasticsearch を使用したベクトルデータベースの準備
Elasticsearch クラスターを作成し、RAG ベースの LLM チャットボットが Elasticsearch クラスターと連携するために必要な設定項目を準備します。
RAG ベース LLM チャットボットのデプロイと Elasticsearch クラスターとの関連付け
RAG ベースの LLM チャットボットをデプロイし、EAS 上で Elasticsearch クラスターと関連付けます。
RAG ベースの LLM チャットボットで Elasticsearch クラスターに接続し、ビジネスデータファイルをアップロードしてから、ナレッジ Q&A を実行できます。
前提条件
Virtual Private Cloud (VPC)、vSwitch、およびセキュリティグループが作成されていること。詳細については、「IPv4 CIDR ブロックを持つ VPC の作成」および「セキュリティグループの作成」をご参照ください。
注意事項
このソリューションは、サーバーリソースのサイズと LLM サービスのデフォルトのトークン制限によって制約され、サポートされる会話の長さに制限があります。このガイドでは、RAG チャットボットの基本的な検索機能をテストする方法を説明します。
Elasticsearch を使用したベクトルデータベースの準備
ステップ 1:Alibaba Cloud Elasticsearch クラスターの作成
Alibaba Cloud Elasticsearch コンソールにログインします。左側のナビゲーションウィンドウで、[Elasticsearch クラスター] をクリックします。表示されたページで、[作成] をクリックします。次の表に、主要なパラメーターを示します。その他のパラメーターについては、「Alibaba Cloud Elasticsearch クラスターの作成」をご参照ください。
パラメーター | 説明 |
リージョンとゾーン | クラスターが存在するリージョンとゾーン。EAS がデプロイされているリージョンを選択します。 |
インスタンスタイプ | クラスターのタイプです。[Standard Edition]を選択します。 |
|
|
[パスワード] | クラスターへのアクセスに使用するパスワード。パスワードを設定し、ローカルマシンに保存します。 |
ステップ 2:設定項目の準備
Elasticsearch クラスターの URL を準備します。
[Elasticsearch クラスター] ページの上部のナビゲーションバーで、Elasticsearch クラスターが存在するリージョンを選択します。Elasticsearch クラスターのリストで、Elasticsearch クラスターを探し、その ID をクリックします。
クラスター詳細ページの [基本情報] セクションで、内部エンドポイントと対応するポート番号を取得します。非公開エンドポイントとポート番号を使用して Elasticsearch クラスターの URL を構築します。
フォーマット:
http://<Internal endpoint>:<Port number>重要内部エンドポイントを使用する場合、Elasticsearch クラスターと RAG ベースの LLM チャットボットが同じ VPC 内にあることを確認してください。そうでない場合、接続は失敗します。
インデックス名を準備します。
左側のナビゲーションウィンドウで、 を選択します。 表示されたページで、YML ファイル設定セクションの右上隅にある [設定の変更] をクリックします。 YML ファイル設定パネルで、[自動インデックス作成] パラメーターに [有効化] を選択します。 詳細については、「YML ファイルを設定する」をご参照ください。
設定が完了したら、RAG ベースの LLM チャットボットをデプロイする際にカスタムインデックス名を設定できます。たとえば、インデックス名を es-test に設定できます。
Elasticsearch クラスターのユーザー名とパスワードを準備します。
Elasticsearch クラスターのデフォルトのユーザー名は elastic です。パスワードは、Elasticsearch クラスターを作成するときに指定したものです。パスワードを忘れた場合は、パスワードをリセットできます。詳細については、「Elasticsearch クラスターのアクセスパスワードのリセット」をご参照ください。
RAG ベース LLM チャットボットのデプロイと Elasticsearch クラスターとの関連付け
PAI コンソールにログインします。 ページの上部で、ワークスペースを作成するリージョンを選択します。 左側のナビゲーションウィンドウで、モデルトレーニング > Elastic Algorithm Service (EAS) を選択します。 表示されたページで、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS) に移動] をクリックします。
[Elastic Algorithm Service (EAS)] ページで、[サービスのデプロイ] をクリックします。[シナリオベースのモデルデプロイメント] で、[RAG ベースのスマート対話デプロイメント] をクリックします。
[RAG ベースの LLM チャットボットデプロイメント] ページで、以下の表に記載のキーパラメーターを設定します。その他のパラメーターについては、「ステップ 1: RAG ベースのチャットボットをデプロイする」をご参照ください。
パラメーター
説明
[基本情報]
バージョン
[LLM 統合デプロイメント] を選択します。
モデルタイプ
モデルのタイプ。この例では、Qwen1.5-1.8b を使用します。
リソース構成
リソース設定
システムは、選択したモデルタイプに基づいて適切なリソース仕様を推奨します。他のリソース仕様を使用すると、モデルサービスが起動しない場合があります。
ベクトルデータベース設定
[ベクトルデータベースタイプ]
[Elasticsearch] を選択します。
[プライベートエンドポイントとポート]
ステップ 2 で取得した Elasticsearch クラスターの URL を入力します。値は
http://<Internal endpoint>:<Port number>の形式で指定します。インデックス名
新しいインデックス名または既存のインデックス名を入力します。既存のインデックス名を使用する場合、その構造は PAI-RAG の要件に準拠している必要があります。たとえば、以前に EAS を介して RAG サービスをデプロイしたときに自動的に作成されたインデックスを指定できます。
アカウント
elastic と入力します。
パスワード
ステップ 2 で指定したパスワード。
[VPC 設定] (オプション)
VPC
Elasticsearch クラスターが存在する VPC。
[vSwitch]
セキュリティグループ名
パラメーターを設定した後、[デプロイ] をクリックします。
RAG ベース LLM チャットボットの使用
以下では、RAG ベースの LLM チャットボットの使用方法について説明します。詳細については、「LLM 用 RAG チャットボット」をご参照ください。
1. ベクトルデータベース設定の確認
対象の RAG サービス名をクリックし、ページの右上隅にある [Web アプリの表示] をクリックします。
ベクトルデータベースの Elasticsearch 設定が正しいことを確認します。
システムはデフォルトのナレッジベースを自動的に設定し、RAG サービスのデプロイ時に指定されたベクトルデータベース設定を適用します。[ベクトルデータベース設定] セクションで、Elasticsearch の設定を確認します。必要に応じて、対応する設定を正しい設定に変更し、[ナレッジベースの更新] をクリックします。
2. ビジネスデータファイルのアップロード
[ナレッジベース] セクションの [ファイル管理] タブでナレッジベースファイルをアップロードします。
アップロード後、システムはファイルを PAI-RAG フォーマットでベクトルデータベースに自動的に保存します。ファイル名が重複している場合:
FAISS を除くすべてのベクトルデータベースは、既存のファイルを上書きします。
FAISS は元のファイルを保持します。
サポートされているファイルタイプ:
.html、.htm、.txt、.pdf、.pptx、.md、Excel (.xlsx または .xls)、.jsonl、.jpeg、.jpg、.png、.csv、Word (.docx)。

3. ナレッジ Q&A の実行
RAG ベースの LLM チャットボットは、ベクトルデータベースから返された結果とクエリを選択したプロンプトテンプレートに入力し、そのテンプレートを LLM アプリケーションに送信して回答を提供します。

Elasticsearch が提供する特別な機能
カスタムメイン辞書とストップワード辞書の設定
Alibaba Cloud Elasticsearch には、analysis-ik という名前の組み込み IK 分析プラグインが付属しています。analysis-ik プラグインは、さまざまなカテゴリの一般的な単語を含む辞書として機能します。analysis-ik プラグインには、組み込みのメイン辞書とストップワード辞書が付属しています。メイン辞書は複雑なテキストを分析するために使用され、ストップワード辞書は意味のない高頻度の単語を削除するために使用されます。これにより、検索効率と精度が向上します。analysis-ik の組み込み辞書は包括的ですが、法律や医療などの専門分野の特定の用語や、デフォルトのナレッジベースにある製品名、会社名、ブランド名などが含まれていない場合があります。検索精度を向上させるために、ビジネス要件に基づいてカスタム辞書を作成できます。詳細については、「analysis-ik プラグインの使用」をご参照ください。
1. カスタムメイン辞書またはストップワード辞書の準備
ローカルマシンでカスタムメイン辞書またはストップワード辞書を準備します。辞書ファイルは、次の要件を満たす必要があります。
フォーマット:ファイル名拡張子は
.dicである必要があります。ファイル名は 1〜30 文字の長さで、文字、数字、アンダースコア (_) を含めることができます。たとえば、new_word.dic という名前の辞書ファイルを準備できます。内容:辞書ファイルの各行には、1 つのトークンまたはストップワードのみを含めることができます。たとえば、組み込みのメイン辞書を使用する場合、「cloud server」というフレーズは「cloud」と「server」の 2 つの別々の単語にトークン化されます。アプリケーションで「cloud server」を 1 つの用語として扱う必要がある場合は、「cloud server」をカスタム辞書に追加できます。次の例は、new_word.dic という名前のカスタム辞書を定義する方法を示しています。
cloud server custom token
2. 辞書ファイルのアップロード
辞書ファイルを準備したら、指定した場所に辞書ファイルをアップロードする必要があります。この例では、標準更新を使用して辞書ファイルをアップロードする方法について説明します。詳細については、「analysis-ik プラグインの使用」をご参照ください。
Elasticsearch クラスターの詳細ページに移動します。
Alibaba Cloud Elasticsearch コンソールにログインします。
左側のナビゲーションウィンドウで、[Elasticsearch クラスター] をクリックします。
目的のクラスターに移動します。
上部のナビゲーションバーで、クラスターが属するリソースグループとクラスターが存在するリージョンを選択します。
[Elasticsearch クラスター] ページで、クラスターを見つけ、その ID をクリックします。
表示されたページの左側のナビゲーションウィンドウで、 を選択します。
[組み込みプラグイン] タブで、analysis-ik プラグインを見つけ、[操作] 列の [ローリングアップデート] をクリックします。
[IK 辞書の設定 - ローリングアップデート] パネルで、更新する辞書の右側にある [編集] をクリックし、辞書ファイルをアップロードして、[保存] をクリックします。
次のいずれかの方法で辞書ファイルを更新できます。
[ローカルファイルのアップロード]:アップロードエリアをクリックして、ローカルマシンからアップロードするファイルを選択します。または、ローカルマシンからアップロードするファイルをアップロードエリアにドラッグします。
OSS ファイルのアップロード: Bucket Name と File Name パラメーターを設定し、[追加] をクリックします。
指定したバケットが Elasticsearch クラスターと同じリージョンにあることを確認してください。
指定した辞書ファイルは自動的に更新されません。OSS に保存されている辞書ファイルの内容が変更された場合は、ローリングアップデートを実行して変更を有効にする必要があります。
説明ファイル名拡張子は
.dicである必要があります。ファイル名は 1〜30 文字の長さで、文字、数字、アンダースコア (_) を含めることができます。アップロードした辞書ファイルを変更する場合は、ファイルの横にある
アイコンをクリックしてダウンロードし、変更できます。その後、ファイルを削除して再度アップロードします。複数の辞書ファイルをアップロードできます。クラスターの再起動は、辞書ファイルの内容が変更された場合にのみ必要です。辞書ファイル名と辞書ファイルの数が変更されない場合、システムはクラスターを再起動しません。ビジネスに影響が出ないように、オフピーク時に更新を実行することを推奨します。再起動が完了すると、新しい辞書ファイルが有効になります。
[OK] をクリックします。 辞書ファイルが更新された後、Web UI で RAG ベースの LLM チャットボットを Elasticsearch クラスターに再接続します。 詳細については、「ベクトルデータベースに接続する」をご参照ください。
RAG ベースの LLM チャットボットが Elasticsearch クラスターに再接続されたら、Web UI でナレッジ Q&A を実行します。[検索モード] パラメーターで [キーワードのみ] または [ハイブリッド] を選択した場合、Elasticsearch クラスターの更新された辞書ファイルを使用して全文クエリを実行できます。

インデックス管理
Elasticsearch はインデックス管理機能を提供します。効果的なインデックス管理により、RAG ベースの LLM チャットボットは、膨大なデータセットから価値のある情報を効率的かつ正確に検索し、高品質の回答を生成できます。インデックスを管理するには、次の手順を実行します。
Elasticsearch クラスターの詳細ページに移動します。
Alibaba Cloud Elasticsearch コンソールにログインします。
左側のナビゲーションウィンドウで、[Elasticsearch クラスター] をクリックします。
目的のクラスターに移動します。
上部のナビゲーションバーで、クラスターが属するリソースグループとクラスターが存在するリージョンを選択します。
[Elasticsearch クラスター] ページで、クラスターを見つけ、その ID をクリックします。
表示されたページの左側のナビゲーションウィンドウで、 を選択します。
表示されたページの [Kibana] セクションで、[設定の変更] をクリックします。 Kibana 設定ページで、Kibana 用の非公開またはパブリック IP アドレスのホワイトリストを設定します。
詳細については、「Kibana のパブリックまたはプライベート IP アドレスホワイトリストの設定」をご参照ください。
Kibana コンソールにログインします。
ページの左上隅にある戻るアイコンをクリックして、データ可視化ページに戻ります。
[Kibana] セクションで、[インターネット経由でアクセス] または [内部ネットワーク経由でアクセス] をクリックします。
説明[インターネット経由でアクセス] または [内部ネットワーク経由でアクセス] のエントリは、Kibana の [パブリックネットワークアクセス] または [プライベートネットワークアクセス] スイッチがオンになった後にのみ表示されます。

Kibana ログインページで、ユーザー名とパスワードを入力します。
ユーザー名:Elasticsearch クラスターのデフォルトのユーザー名は elastic です。
ユーザー名をカスタマイズすることもできます。詳細については、「Elasticsearch X-Pack が提供する RBAC メカニズムを使用したアクセス制御の実装」をご参照ください。
パスワード:elastic ユーザー名に対応するパスワード。elastic アカウントのパスワードは、Elasticsearch クラスターを作成するときに指定します。パスワードを忘れた場合は、リセットできます。
パスワードのリセット手順と注意事項の詳細については、「Elasticsearch クラスターのアクセスパスワードのリセット」をご参照ください。
[ログイン] をクリックします。次の図に示すページが表示されます。
インデックスの表示と管理
上部のナビゲーションバーで、
アイコンをクリックし、 を選択します。左側のナビゲーションウィンドウで、[データ] > [インデックス管理] を選択します。
表示されたページの [インデックス] タブで、管理するインデックスを表示し、インデックスの無効化、リフレッシュ、クリア、削除などの管理操作を実行します。次の図は、es_test という名前のインデックスを管理する方法の例を示しています。
関連ドキュメント
EAS は、AI 生成コンテンツ (AIGC) と LLM の典型的な最先端シナリオ向けに簡素化されたデプロイ方法を提供します。ComfyUI、Stable Diffusion WebUI、ModelScope、Hugging Face、Triton Inference Server、TensorFlow Serving などのデプロイ方法を使用して、モデルサービスを簡単にデプロイできます。詳細については、「シナリオベースのデプロイ」をご参照ください。
RAG ベースの LLM チャットボットの Web UI でさまざまな推論パラメーターを設定して、多様な要件を満たすことができます。また、API 操作を呼び出して RAG ベースの LLM チャットボットを使用することもできます。実装の詳細とパラメーター設定については、「LLM 用 RAG チャットボット」をご参照ください。
RAG ベースの LLM チャットボットは、OpenSearch、ApsaraDB RDS for PostgreSQL など、他のタイプのベクトルデータベースとも関連付けることができます。詳細については、EAS と OpenSearch を使用した RAG ベースチャットボットのデプロイ、または EAS と RDS PostgreSQL を使用した RAG チャットボットのデプロイをご参照ください。