Elasticsearch チャットボットの作成
目標
このチュートリアルでは、IBM watsonx.ai モデルが、ナレッジベースに関連する質問に答えることができるチャットボットを生成するために、Web サイトからコンテンツをスパイダーして得た知識でどのように強化できるかを示します。 この技法はRAG(Retrieval-Augmented Generation)と呼ばれる。 事前に訓練された大規模な言語モデルは、公共コンテンツの大規模なコーパスで訓練されているため、 _一般的な知識には長けて_いるが、次のような、あなたのビジネスに関する_ドメイン固有の知識には欠けて_いる:
- "箱が開封されていたら返金してもらえますか?"
- "治療待ちリストは?"
- 「土曜日は配達していますか?
以下のIBM Cloudサービスを使ってチャットボットを構築できる:
- Databases for Elasticsearchは、ELSER自然言語処理(NLP)モデルを実行し、Elasticsearchインデックスに格納される前に、入力されたデータを強化します。 _インジェスト・パイプライン_は、強化されたデータが保存される前にELSERにデータを送り込むために使用される。
- Elastic Enterprise Search は、IBM Cloud® Code Engine 上にデプロイされ、ウェブサイトをスパイダーしてドメイン固有のデータを収集し、Elasticsearch のインジェストパイプラインにフィードするために使用されます。
- Kibana は IBM Cloud Code Engine 上にデプロイされ、Elasticsearch と Elastic Enterprise Search のウェブ UI になります。 これは、ウェブ・クローラーを指定し、作動させるために使用される。
- IBM watsonx.ai は、チャットボットのリクエストに答えるために、事前に訓練された機械学習モデルを実行します。 このモデルのAPIは、Elasticsearchにあるスパイリングされ、拡張されたデータに対してプロンプトを実行することによって収集されたユーザープロンプトとコンテキストデータが与えられたチャットボットの応答を生成するために使用されます。
- シンプルなPythonアプリが、IBM Cloud Code Engineにデプロイされ、チャットボットのウェブインターフェースを提供します。 ユーザーからのプロンプトを収集し、Elasticsearch データにクエリを行い、IBM watsonx.ai を使ってレスポンスを生成する。
Databases for Elasticsearch、IBM Cloud Code Engine、IBM watsonxは有料製品ですので、このチュートリアルは有料です。
前提条件
- IBM Cloud アカウント。
- Terraform- インフラを展開する。
- チャットボットの専門知識を強化するために「スパイダー」する、一般向けのテキストコンテンツを含むウェブサイト。
- Docker がローカルマシンで動作しています。
以下の手順に従って、IBM Cloud APIキーを作成し、Terraformがあなたのアカウントにインフラストラクチャをプロビジョニングできるようにします。 最大 20 個の API キーを作成できます。
安全上の理由により、API キーをコピーまたはダウンロードできるのは作成時のみになります。 API キーを紛失した場合は、新しい API キーを作成する必要があります。
IBM watsonx.ai プロジェクトをセットアップする
インフラのほとんどはTerraformを通じてデプロイされるが、IBM watsonx.ai は手動でセットアップしなければならない。
IBMwatsonx.aiは、機械学習アプリケーションを構築するための基盤モデルによって提供される、生成的なAI機能を扱うための統合ツールのスタジオです。 IBM watsonx.ai コンポーネントは、組織の信頼できるデータにアクセスし、AI プロセスを自動化し、アプリケーションで AI を提供する、安全でコラボレーティブな環境を提供します。
以下の手順に従って、IBM watsonx.ai: をセットアップしてください
- IBM watsonx.ai as a Service にサインアップし、watsonx.ai の Get Started リンクをクリックします。 地域を選択し、ログインする。
- watsonx.ai内にプロジェクトを作成します。 プロジェクトボックスで、+ とプロジェクトの作成をクリックします。 プロジェクトに名前を付け、IBM Cloud® Object Storageインスタンスにプロジェクトの状態を保存します。 (Object Storageのインスタンスがない場合は、作成してください。
- プロジェクトの管理タブの一般ページで、「プロジェクトID」をメモする。
- プロジェクトの管理タブのサービスと統合ページで、関連サービスをクリックします。 次に、New Service をクリックし、Watson Machine Learning オプションを選択します。 ライトプランを使用するので、作成をクリックするだけです。
Terraformでインフラをプロビジョニングする
レポをクローンする:
git clone https://github.com/IBM/icd-elastic-bot.git
cd icd-elastic-bot
cd terraform
このディレクトリに、以下のデータを含む terraform.tfvars
という名前のファイルを作成します。ただし、プレースホルダー(MY_*
の値)は独自のものに置き換えてください:
ibmcloud_api_key="MY_IBM_CLOUD_API_KEY"
region="eu-gb"
es_username="admin"
es_password="MY_ELASTICSEARCH_PASSWORD"
es_version="8.12"
wx_project_id="MY_WATSONX_PROJECT_ID"
安全な Elasticsearch パスワードを選び、Elasticsearch ユーザー名と共に、Elasticsearch と Kibana ウェブユーザーインターフェイスにアクセスするために必要な認証情報とします。
でインフラを展開する:
terraform init
terraform apply --auto-approve
Terraformは出力する:
- Kibanaインスタンスの URL。
- Python アプリの URL。
次のステップのために、これらの値をメモしておくこと。
データのフィード
このステップでは、Databases for Elasticsearchインスタンスにウェブサイトのデータをフィードします。 Elasticウェブクローラを使用します。 Kibanaからアクセスできるこの機能は、あらゆるウェブサイトからデータを抽出するために使用される。
以下の手順に従ってデータを追加します。
- Kibana URL にナビゲートする - Terraform は前節の URL を出力する。 選択した Elasticsearch ユーザー名とパスワードでログインします。
- Kibana UIの検索セクションで、概要オプションを選択します。 クロール URL をクリックする。
- インデックスにsearch-botという名前を付けます(
search-
という接頭辞はすでにあります)。 **「索引の作成」**をクリックします。 - インデックスのドメイン管理セクションにあなたのウェブサイトの URL。 ドメインの検証をクリックし、ドメインの追加をクリックします。
- Machine Learning Inference PipelineセクションのAdd Inference Pipelineをクリックし、手順に従ってください。 .elser_model_1を選択し、Started状態であることを確認します。 Select field mappingsステップでタイトル・フィールドを選択し、Add、Continue、Create pipeline の順にクリックします。
- すべてのドメインをクロールするをクリックし、次にこのインデックス上のすべてのドメインをクロールするをクリックする。 そして、データが収集されるまで待つ。
データの照会
ウェブブラウザで Python アプリの URL に移動する。 python_endpoint
は Terraform から出力されたもので、前のステップで として見つけることができる。
質問をしてモデルと対話し始めると、IBM watsonx.ai によって生成された答えが返ってくる。 Pythonアプリは、あなたのプロンプトを受け取り、Elasticsearchインデックスを検索します。 そして、IBM watsonx.ai APIを使って、Elasticsearch の結果から提供されるコンテキストからレスポンスを生成します。
結論
このチュートリアルでは、Databases for Elasticsearch インスタンスを作成し、IBM Cloud Code Engine 上でホストされている Kibana と Elastic Enterprise Search と組み合わせました。 そして、ElasticsearchのElserモデルをパイプラインで使用するように設定し、Webサイトのコンテンツを検索したときに、そのJSONドキュメントが_スパースベクトル_データで補強されるようにしました。 また、Python アプリをデプロイしました。このアプリは、ユーザーのプロンプトを受け取り、Elasticsearch でクエリを実行して、ドメイン固有のコンテキストを収集してから、watsonx.ai の大規模な言語モデルにプロンプトとコンテキストを送信して、プロンプトに対する応答を作成します。
watsonx.aiを使って、Databases for Elasticsearchに保持されている独自のドメイン固有データをモデリングすることによって強化された、独自のチャットアプリケーションを作成できるようになりました。
Databases for Elasticsearchは有料です。 このチュートリアルを終えたら、プロジェクトの terraform
ディレクトリに行き、コマンドを使ってすべてのインフラストラクチャを削除することができます:
terraform destroy