Platform for AI (PAI) を使用すると、Elasticsearchを検索拡張世代 (RAG) ベースの大規模言語モデル (LLM) チャットボットと統合できます。 このようにして、モデルによって生成される回答の精度および多様性が高められる。 Elasticsearchは効率的なデータ取得機能を備え、辞書の設定やインデックス管理などの特別な機能を提供します。 これにより、RAGベースのLLMチャットボットは、ユーザーの要件をより適切に特定し、より適切で価値のあるフィードバックを提供できます。 このトピックでは、RAGベースのLLMチャットボットをデプロイするときに、ElasticsearchをRAGベースのLLMチャットボットに関連付ける方法について説明します。 このトピックでは、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の高度な機能は、X-Packプラグインに基づいてオープンソースのElasticsearchチームによって開発されています。 機能には、セキュリティ、SQLプラグイン、機械学習、アラート、および監視が含まれます。 Alibaba Cloud Elasticsearchは、リアルタイムのログ分析と処理、情報取得、多次元データクエリ、統計データ分析などのシナリオで広く使用されています。 詳細については、「Alibaba Cloud Elasticsearchとは」をご参照ください。
手順
EASは、柔軟なパラメータ構成で自己開発のRAG体系的ソリューションを提供します。 webユーザーインターフェイス (UI) を使用するか、API操作を呼び出してカスタムRAGベースのLLMチャットボットを構成することで、RAGサービスにアクセスできます。 RAGの技術アーキテクチャは、検索と生成に焦点を当てています。
検索: EASは、Milvus、Elasticsearch、Hologres、OpenSearch、AnalyticDB for PostgreSQLなどのオープンソースのFaissおよび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を実行できます。
前提条件
仮想プライベートクラウド (VPC) 、vSwitch、およびセキュリティグループが作成されます。 詳細については、「IPv4 CIDRブロックを使用したVPCの作成」および「セキュリティグループの作成」をご参照ください。
注意事項
この方法は、LLMサービスのトークンの最大数に左右され、RAGベースのLLMチャットボットの基本的な検索機能を理解するのに役立つように設計されています。
チャットボットは、LLMサービスのサーバーリソースサイズとトークンのデフォルト数によって制限されます。 チャットボットがサポートする会話の長さも制限されています。
複数回の会話を実行する必要がない場合は、WebUIページでチャットボットのチャット履歴機能を無効にすることを推奨します。 これは、限界に達する可能性を効果的に低減する。 詳細については、「RAGベースのチャットボットのチャット履歴機能を無効にするにはどうすればよいですか?」をご参照ください。
Elasticsearchを使用したベクターデータベースの準備
手順1: Elasticsearchクラスターの作成
Elasticsearchコンソールにログインします。 左側のナビゲーションウィンドウで、[Elasticsearchクラスター] をクリックします。 表示されるページで、[作成] をクリックします。 次の表に、主要なパラメーターを示します。 その他のパラメーターについては、「Elasticsearchクラスターの作成」をご参照ください。
パラメーター | 説明 |
リージョンとゾーン | クラスターが存在するリージョンとゾーン。 EASがデプロイされているリージョンを選択します。 |
[インスタンスタイプ] | クラスターのタイプ。 [Standard Edition] を選択します。 |
|
|
Password | クラスターへのアクセスに使用されるパスワード。 パスワードを設定し、オンプレミスマシンに保存します。 |
ステップ2: 設定アイテムの準備
ElasticsearchクラスターのURLを準備します。
[Elasticsearchクラスター] ページの上部のナビゲーションバーで、Elasticsearchクラスターが存在するリージョンを選択します。 Elasticsearchクラスターリストで、Elasticsearchクラスターを見つけ、そのIDをクリックします。
クラスターの詳細ページの [基本情報] セクションで、内部エンドポイントと対応するポート番号を取得します。 プライベートエンドポイントとポート番号を使用して、ElasticsearchクラスターのURLを作成します。
形式:
http:// <内部エンドポイント >:< ポート番号>
重要内部エンドポイントを使用する場合は、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 Chatbotデプロイ] ページで、次の表に示す主要なパラメーターを設定します。 その他のパラメーターについては、「手順1: RAGベースのチャットボットのデプロイ」をご参照ください。
パラメーター
説明
基本情報
モデルソース
[オープンソースモデル] を選択します。
モデルタイプ
モデルタイプ。 この例では、Qwen1.5 − 1.8bが使用される。
リソース設定
リソース設定
システムは、選択したモデルタイプに基づいて適切なリソース仕様を推奨します。 他のリソース仕様を使用すると、モデルサービスの起動に失敗することがあります。
ベクトルデータベース设定
Vectorデータベース型
[Elasticsearch] を選択します。
プライベートエンドポイントとポート
ステップ2で取得したElasticsearchクラスターのURLを入力します。 値を
http://<Internal endpoint >:< Port number>
形式で指定します。インデックス名
インデックスの名前。 新しいインデックス名または既存のインデックス名を入力できます。 既存のインデックス名を使用する場合、インデックススキーマはRAGベースのチャットボットの要件を満たす必要があります。 たとえば、EASを使用してRAGベースのチャットボットをデプロイするときに自動的に作成されるインデックスの名前を入力できます。
[アカウント]
elasticを入力します。
Password
ステップ2で指定したパスワード。
VPC設定 (オプション)
[VPC]
Elasticsearchクラスターが存在するVPC。
vSwitch
セキュリティグループ名
パラメーターを設定したら、[デプロイ] をクリックします。
RAGベースのLLMチャットボットの使用
次のセクションでは、RAGベースのLLMチャットボットの使用方法について説明します。 詳細については、「RAGベースのLLMチャットボット」をご参照ください。
1. ベクトルデータベースに接続する
RAGベースのチャットボットをデプロイした後、[サービスタイプ] 列の [Webアプリの表示] をクリックしてweb UIに移動します。
Elasticsearchクラスター内のベクターデータベースが接続されているかどうかを確認します。
システムは、チャットボットのデプロイ時に構成されたベクトルデータベース設定を認識して適用します。 [ElasticSearchの接続] をクリックして、Elasticsearchクラスターのベクターデータベースが接続されているかどうかを確認します。 接続に失敗した場合は、手順2: 構成項目の準備に基づいて、ベクターデータベースの設定が正しいかどうかを確認します。 設定が正しくない場合は、設定項目を変更し、[ElasticSearchの接続] をクリックしてElasticsearchクラスターを再接続します。
2. ビジネスデータファイルのアップロード
ナレッジベースファイルをアップロードします。 システムは、知識ベースをPAI-RAGフォーマットで、検索のためにベクトルデータベースに自動的に格納する。 データベース内の既存のナレッジベースを使用することもできますが、ナレッジベースはPAI-RAG形式の要件を満たす必要があります。 そうしないと、検索中にエラーが発生する可能性があります。
[アップロード] タブで、チャンクパラメーターを設定します。
次のパラメーターは、ドキュメントチャンクの粒度とQ&A抽出を有効にするかどうかを制御します。
パラメーター
説明
チャンクサイズ
各チャンクのサイズ。 単位はバイトです。 デフォルト値: 500。
チャンク重複
隣接するチャンク間のオーバーラップ。 デフォルト値は 10 です。
QA抽出モデルによるプロセス
Q&A情報を抽出するかどうかを指定します。 [はい] を選択すると、ナレッジファイルがアップロードされた後、システムは自動的に質問と対応する回答をペアで抽出します。 これにより、データクエリでより正確な回答が返されます。
[ファイル] タブまたは [ディレクトリ] タブで、1つ以上のビジネスデータファイルをアップロードします。 ビジネスデータファイルを含むディレクトリをアップロードすることもできます。 サポートされているファイルタイプ: txt、.pdf、Excel (.xlsxまたは.xls)、. csv、Word (.docxまたは. doc) 、Markdown、または. html。 設定例:
[アップロード] をクリックします。 システムは、ビジネスデータファイルをアップロードする前に、ビジネスデータファイルに対してデータクレンジングおよびセマンティックベースのチャンキングを実行する。 データクレンジングは、テキスト抽出およびハイパーリンク置換を含む。
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つだけ含めることができます。 たとえば、組み込みのメイン辞書を使用する場合、「クラウドサーバー」というフレーズは、「クラウド」と「サーバー」の2つの別々の単語にトークン化されます。 アプリケーションで「クラウドサーバー」を単一の用語として扱う必要がある場合は、「クラウドサーバー」をカスタム辞書に追加できます。 次の例は、new_word.dicという名前のカスタム辞書を定義する方法を示しています。
cloud server custom token
2. 辞書ファイルのアップロード
辞書ファイルを準備したら、指定した場所に辞書ファイルをアップロードする必要があります。 この例では、標準更新を使用して辞書ファイルをアップロードする方法を説明します。 詳細については、「analysis-ikプラグインの使用」をご参照ください。
Elasticsearchクラスターの詳細ページに移動します。
Elasticsearchコンソールにログインします。
左側のナビゲーションウィンドウで、[Elasticsearchクラスター] をクリックします。
目的のクラスターに移動します。
上部のナビゲーションバーで、クラスターが属するリソースグループとクラスターが存在するリージョンを選択します。
[Elasticsearchクラスター] ページで、クラスターのIDをクリックします。
表示されるページの左側のナビゲーションウィンドウで、 を選択します。
内蔵プラグインタブで、analysis-ikプラグインを見つけて、アクション列のローリングアップデートをクリックします。
IK辞書の設定-ローリングアップデートパネルで、更新したい辞書の右側で編集をクリックし、辞書ファイルをアップロードし、保存をクリックします。
次のいずれかの方法で辞書ファイルを更新できます。
オンプレミスファイルのアップロード: アップロード領域をクリックし、オンプレミスマシンからアップロードするファイルを選択します。 または、アップロードするファイルをオンプレミスマシンからアップロード領域にドラッグします。
OSSファイルのアップロード: バケット名とファイル名のパラメーターを設定し、[追加] をクリックします。
指定したバケットがElasticsearchクラスターと同じリージョンにあることを確認します。
指定した辞書ファイルは自動更新できません。 OSSに保存されている辞書ファイルの内容が変更された場合は、変更を有効にするためにローリングアップデートを実行する必要があります。
説明ファイル名の拡張子は
. dic
. ファイル名は1 ~ 30文字で、英数字、アンダースコア (_) を使用できます。アップロードした辞書ファイルを変更する場合は、ファイルの横にあるアイコンをクリックしてダウンロードして変更します。 次に、ファイルを削除し、ファイルを再度アップロードします。
複数の辞書ファイルをアップロードできます。 辞書ファイルの内容が変更された場合にのみ、クラスターを再起動する必要があります。 辞書ファイル名と辞書ファイルの数が変更されていない場合、システムはクラスタを再起動しません。 ビジネスに影響を与えないように、オフピーク時に更新を実行することを推奨します。 再起動が完了すると、新しい辞書ファイルが有効になります。
[OK] をクリックします。 辞書ファイルが更新されたら、RAGベースのLLMチャットボットをweb UIのElasticsearchクラスターに再接続します。 詳細については、「ベクターデータベースへの接続」をご参照ください。
RAGベースのLLMチャットボットをElasticsearchクラスターに再接続した後、web UIでナレッジQ&Aを実行します。 [検索モード] パラメーターに [キーワードのみ] または [ハイブリッド] を選択した場合、Elasticsearchクラスターの更新された辞書ファイルを使用してフルテキストクエリを実行できます。
インデックス管理
Elasticsearchはインデックス管理機能を提供します。 効果的なインデックス管理により、RAGベースのLLMチャットボットは、膨大なデータセットから貴重な情報を効率的かつ正確に取得し、高品質の回答を生成できます。 インデックスを管理するには、次の手順を実行します。
Elasticsearchクラスターの詳細ページに移動します。
Elasticsearchコンソールにログインします。
左側のナビゲーションウィンドウで、[Elasticsearchクラスター] をクリックします。
目的のクラスターに移動します。
上部のナビゲーションバーで、クラスターが属するリソースグループとクラスターが存在するリージョンを選択します。
[Elasticsearchクラスター] ページで、クラスターのIDをクリックします。
表示されるページの左側のナビゲーションウィンドウで、を選択します。
表示されるページの [Kibana] セクションで、[設定の変更] をクリックします。 [Kibanaの設定] ページで、KibanaのプライベートまたはパブリックIPアドレスのホワイトリストを設定します。
詳細については、「KibanaのパブリックまたはプライベートIPアドレスホワイトリストの設定」をご参照ください。
Kibanaコンソールにログインします。
ページの左上隅にある戻るアイコンをクリックして、データ可視化ページに戻ります。
[Kibana] セクションで、[インターネット経由のアクセス] または [内部ネットワーク経由のアクセス] をクリックします。
説明[Access over Internet] または [Access over Internal Network] エントリは、Kibanaの [Public Network Access] または [Private Network Access] スイッチがオンになった場合にのみ表示されます。
Kibanaログインページで、ユーザー名とパスワードを入力します。
ユーザー名: Elasticsearchクラスターのデフォルトのユーザー名はelasticです。
ユーザー名をカスタマイズすることもできます。 詳細については、「Elasticsearch X-Packが提供するRBACメカニズムを使用したアクセス制御の実装」をご参照ください。
パスワード: エラスティックユーザー名に対応するパスワード。 Elasticsearchクラスターの作成時に、elasticアカウントのパスワードが指定されます。 パスワードを忘れた場合は、リセットできます。
パスワードをリセットする手順と注意事項の詳細については、「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チャットボットを使用することもできます。 実装の詳細とパラメーター設定の詳細については、「RAGベースのLLMチャットボット」をご参照ください。
RAGベースのLLMチャットボットは、OpenSearchとApsaraDB RDS for PostgreSQLなどの他のタイプのベクターデータベースに関連付けることもできます。
詳細については、「 EASとOpenSearchを使用してRAGベースのチャットボットをデプロイする」または「EASとApsaraDB RDS for PostgreSQLを使用してRAGベースのLLMチャットボットをデプロイする」をご参照ください。