ChatQnA アプリケーション

チャットボットは、大規模言語モデル (LLM) の強力なチャット機能と推論機能を活用する、最も広く採用されているユースケースです。チャットボット開発において、検索拡張生成 (RAG) アーキテクチャーは瞬く間に業界標準となりつつあり、ナレッジベース (ベクトル型データストア経由) と生成モデルのメリットを組み合わせ、ハルシネーションの回避、最新情報の維持、ドメイン固有のナレッジの活用を可能にしています。
RAG は関連情報を外部ソースから動的に取得することで知識のギャップを埋め、生成される回答が事実に基づいた最新のものとなるようにします。このアーキテクチャーの中核となるのがベクトル型データベースであり、効率的かつセマンティクス的な情報検索を可能にする手段です。RAG はこのデータベースにベクトル形式でデータを格納することで、セマンティック類似性に基づき、最も関連性の高いドキュメントやデータポイントに素早くアクセスすることができます。

＜インテルの Terraform 最適化クラウドモジュールを使用した Terraform ツールによる実装の自動化＞

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/47d05cc1-2333-4746-8e40-2de57760986b.png)

https://github.com/intel/terraform-intel-aws-vm/tree/main/examples/gen-ai-xeon-opea-chatqna

https://github.com/intel/terraform-intel-aws-vm/tree/main/examples/gen-ai-xeon-opea-chatqna-falcon11B

https://github.com/intel/terraform-intel-gcp-vm/tree/main/examples/gen-ai-xeon-opea-chatqna

＜インテルの Ansible 最適化クラウドモジュールを使用して (Terraform 未使用の場合でも) Ubuntu ベースシステムへの実装を自動化＞

インテル® Xeon® プロセッサーを搭載した Ubuntu ベースの既存システムに実装するには、インテルの Ansible 最適化クラウドモジュールを使用します。これは Terraform で使用されているものと同じ Ansible プレイブックです。Terraform を使用せず別のツールやベアメタルを含め手動でシステムのプロビジョニングを行った場合はこちらの方法をとります。

オペレーティング・システム	インテルの Ansible 最適化クラウドモジュール
Ubuntu 20.04	ChatQnA Ansible Module
https://github.com/intel/optimized-cloud-recipes/tree/main/recipes/ai-opea-chatqna-xeon　
Ubuntu 22.04	進行中

＜ChatQnA サービスの手動実装＞
ChatQnA サービスは、インテル® Gaudi® 2 アクセラレーター、インテル® Xeon® スケーラブル・プロセッサー、NVIDIA GPU のどれにでも簡単に実装することができます。
現在サポートしている ChatQnA パイプラインは、ChatQnA with/without Rerank の 2 タイプです。なお、ChatQnA without Rerank パイプラインは (埋め込み、検索、LLM を含め)、HPU でリランクを実行できないけれど高いパフォーマンスと精度を必要としている、インテル® Xeon® プロセッサーを使用する顧客環境に提供されます。
実装のクイックスタート手順:
1.	環境変数を設定する
2.	Docker Compose を実行する
3.	ChatQnA サービスの利用を開始する
注: まだ Docker をインストールしていない場合は、このスクリプトを実行するとインストールが完了します: bash docker_compose/install_docker.sh

【クイックスタート: 1. 環境変数の設定】

ChatQnA サービスを実装するための環境変数の設定は、以下の手順で行います。
1.	必要な環境変数を設定する
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/a05200af-bc1c-4ecd-a53d-950d6879a53f.png)
2.	プロキシー環境の場合は、プロキシー関連の環境変数も設定する
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/ef17a030-b371-4358-a604-e0866183c315.png)
3.	その他の環境変数を設定する
ハードウェアに合わせて環境を設定するには、以下のコマンドの中から 1 つしか選択できない点に注意してください。また、ポート番号が正しく設定されない可能性があります。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/a46cf70b-dc87-4376-869e-41b49a06d9a6.png)

【クイックスタート: 2. Docker Compose の実行】

ハードウェアに対応する compose.yaml ファイルを選択します。
CPU の例:
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/3c28f6fb-9a04-4bc0-a1fc-3064b9961c08.png)

自動的に docker hub への Docker イメージのダウンロードが始まります。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/f21ee4d8-5479-4e12-af84-1dfc96e2c21a.png)

次のような場合は、ソースから自分で Docker イメージをビルドすることも可能です。
•	Docker イメージのダウンロードに失敗した
•	特定のバージョンを指定して Docker イメージを使用したい
こちらのガイドの「Docker イメージのビルド」を参照してください。
https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/docker_compose/intel/cpu/xeon/README.md

【クイックスタート: 3. ChatQnA サービスの利用開始】
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/6daab6a2-420c-4794-b7b8-0eb2bd387294.png)

＜アーキテクチャーと実装の詳細＞
ChatQnA のアーキテクチャーを以下に示します。 
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/a04ab90c-a538-4228-9859-57ba5e02ed00.png)

こちらは GenAIComps で定義されているコンポーネント・レベルのマイクロサービスを使用して実装した CHatQnA の例です。以下のフローチャートは、この実装例でのマイクロサービス間の情報の流れを示しています。
https://github.com/opea-project/GenAIComps

![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/efb3f31a-b928-4e19-9301-764f343de216.png)

この ChatQnA ユースケースでは、インテル® Gaudi® 2 アクセラレーター またはインテル® Xeon® スケーラブル・プロセッサー上で LangChain、Redis VectorDB、テキスト生成推論 (TGI) を使用して RAG を実行します。以下の表に、ChatQnA アーキテクチャーを構成する各マイクロサービスのコンポーネント、オープンソース・プロジェクトのデフォルト構成、ハードウェア、ポート、エンドポイントをまとめました。

https://www.intel.com/content/www/us/en/products/details/processors/ai-accelerators/gaudi-overview.html

https://www.intel.com/content/www/us/en/products/details/processors/xeon.html

インテル® Gaudi® アクセラレーターのデフォルト compose.yaml
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/9acbe952-1508-4fd3-8725-96f9a2b562bd.png)

【必要なモデル】
以下のとおり、埋め込み、リランク、LLM のモデルがデフォルト値に設定されています。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/1423d9d8-e570-41f7-a28a-9c9732392579.png)

必要に応じて docker_compose/xxx/set_env.sh 内の xxx_MODEL_ID を変更してください。
プロキシー関連の問題が発生した場合でも、ChatQnA では ModelScope からのモデルもサポートされています。詳しくは、ReadMe を参照してください。

https://www.modelscope.cn/models

https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/docker_compose/intel/cpu/xeon/README.md

＜ChatQnA のインテル® Gaudi® アクセラレーターへの実装＞
該当の compose.yaml を検索します。
https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/docker_compose/intel/hpu/gaudi/compose.yaml

![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/cfcb8764-f111-498f-afbd-295d07206fa7.png)

ソースから Docker イメージをビルドする方法については、インテル® Gaudi® アクセラレーターのガイドを参照してください。
https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/docker_compose/intel/hpu/gaudi/README.md

＜ChatQnA のインテル® Xeon® プロセッサーへの実装＞
該当の compose.yaml を検索します。
https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/docker_compose/intel/cpu/xeon/compose.yaml
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/cf9b3af3-e0f4-4f69-a4b4-4bf7b9511dad.png)

ソースから Docker イメージをビルドする詳しい手順については、インテル® Xeon® プロセッサーのガイドを参照してください。

https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/docker_compose/intel/cpu/xeon/README.md

＜ChatQnA の NVIDIA GPU への実装＞
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/cca89df8-d4c2-4c30-8ce4-b726e5c92577.png)

ソースから Docker イメージをビルドする詳しい手順については、NVIDIA GPU のガイドを参照してください。
https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/docker_compose/nvidia/gpu/README.md

＜Kubernetes を使用した ChatQnA のインテル® Xeon® プロセッサー / インテル® Gaudi® アクセラレーターへの実装 (GMC あり)＞

Kubernetes (GMC あり) を使用して ChatQnA をインテル® Xeon® プロセッサー / インテル® Gaudi® アクセラレーターに実装する手順については、Kubernetes のガイドを参照してください。
https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/kubernetes/intel/README_gmc.md

＜Kubernetes を使用した ChatQnA のインテル® Xeon® プロセッサー / インテル® Gaudi® アクセラレーターへの実装 (GMC なし)＞

Kubernetes (GMC なし) を使用して ChatQnA をインテル® Xeon® プロセッサー / インテル® Gaudi® アクセラレーターに実装する手順については、Kubernetes のガイドを参照してください。

https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/kubernetes/intel/README.md

＜Helm Chart を使用し ChatQnA を Kubernetes に実装＞
まずは Helm (v3.15 以降) をインストールします。詳しくは、Helm インストール・ガイドを参照してください。
https://helm.sh/docs/intro/install/

Kubernetes を使用して ChatQnA をインテル® Xeon® プロセッサー / インテル® Gaudi® アクセラレーターに実装する手順については、ChatQnA helm chart を参照してください。
https://github.com/opea-project/GenAIInfra/tree/main/helm-charts/chatqna/README.md

＜ChatQnA の AI PC への実装＞
AI PC に ChatQnA を実装する手順については、AI PC のガイドを参照してください。
https://github.com/opea-project/GenAIExamples/blob/main/ChatQnA/docker_compose/intel/cpu/aipc/README.md

＜ChatQnA の Red Hat OpenShift Container Platform (RHOCP) への実装＞
ChatQnA のプロトタイプを Red Hat OpenShift AI (RHOAI) を使用して RHOCP に実装する手順については、intel-technology-enabling-for-openshift ページの Readme ファイルを参照してください。

https://www.redhat.com/en/technologies/cloud-computing/openshift/openshift-ai

https://github.com/intel/intel-technology-enabling-for-openshift/blob/main/workloads/opea/chatqna/README.md

＜ChatQnA サービスと RAG の利用＞
【サービス状況の確認】
ChatQnA サービスの利用を開始する前に、TGI/vLLM サービスの準備ができているか確認してください (開始までに約 2 分ほどかかります)。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/58edb325-dce7-40c4-a272-18b53900b2ec.png)

ChatQnA サービスの利用を開始すると、以下のような TGI 応答が返ってきます。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/74e145eb-d550-48da-b79c-283fd71ec894.png)

【RAG ファイルのアップロード (オプション)】
取得した情報とチャットするには、Dataprep サービスを使用してファイルをアップロードする必要があります。
以下のコマンドラインは Nike 2023.pdf の例です。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/1841195c-b555-4b59-b1d5-552156e5841e.png)

【ChatQnA サービスの利用】
2 パターンの ChatQnA サービス利用方法:
1.	Terminal で cURL コマンドを実行する
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/26daf24e-f593-43a3-8a1b-11d47213b447.png)

2.	フロントエンド経由でアクセスする
フロントエンドにアクセスするには、ブラウザーで以下の URL を開放します。
http://{host_ip}:5173
デフォルトの場合 UI は内部的にポート 5173 で起動します。
従来型の UI を選択した場合は、こちらの URL を使用: http://{host_ip}:5174

＜トラブルシューティング＞
1.	「アクセスが拒否されました」といったエラーが表示される場合、まずはマイクロサービスを確認してください。簡単な例を示します。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/0ab98c63-bd6f-4c14-a664-e6b711188e8c.png)

2.	(Docker のみ) すべてのマイクロサービスが問題なく起動している場合、ポート ${host_ip}:8888 を確認。ポートがほかのユーザーによって割り当てられていることもあるため、compose.yaml を修正します。

3.	(Docker のみ) 「指定されたコンテナ名は使用中です」などのエラーが表示される場合は、compose.yaml 内のコンテナ名を変更。

＜Prometheus と Grafana ダッシュボードによる OPEA サービスのモニタリング＞
OPEA マイクロサービスの実装は、Prometheus の収集データと連動する Grafana ダッシュボード経由で簡単にモニタリングすることができます。README の手順に従って Prometheus と Grafana サーバーを設定し、ダッシュボードをインポートして OPEA サービスをモニタリングします。
https://github.com/opea-project/GenAIEval/blob/main/evals/benchmark/grafana/README.md

![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/62b6cbe2-1b03-4998-bd5e-e469aa19c14e.png)

![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/38be7eed-50ab-49b4-aa5b-5056293663d6.png)