SearchQnA アプリケーション

検索質問回答 (SearchQnA) は、Google Search のような検索エンジンと大規模言語モデル (LLM) のシナジー効果を活用して、Q&A の品質向上につなげるアプリケーションです。LLM は一般的なナレッジには強いものの、事前に学習したデータへの依存度が高いため、特定の詳細情報にリアルタイムでアクセスするには限界があります。SearchQnA では検索エンジンと統合することでこうしたギャップを補います。

LangChain フレームワークで動く Google Search QnA チャットボットは、情報を反復的に検索、選択、合成することで、人間の行動を模倣します。その仕組みは次のとおりです。

• 多様な検索クエリー: システムは 1 つのプロンプトから複数の検索クエリーを生成する LLM によって、包括的な結果を得るために不可欠な幅広いクエリー条件を確認。

• 検索の並列実行: 複数のクエリーを同時に実行し、データ収集を加速。この同時実行のアプローチによってボットは何ページもの情報を同時に「読む」ことが可能。これこそ AI 固有のメリット。

• 上位リンクの優先順位付け: アルゴリズムが特定した各クエリーの上位 K 件のリンクについて、ボットは並列処理でページ全体のコンテンツを取得して解析 (スクレイピング)。この優先順位付けにより、最も関連性の高い情報を確実に抽出。

• データの効率的なインデックス作成: 抽出したデータは細かくインデックス化され専用のベクトル型データストア (Chroma DB) に格納、後続ステップでの検索と比較を最適化。

• コンテキストに基づいた結果照合: ボットは元の検索クエリーとベクトル型データストア内に格納されている関連ドキュメントを照合し、正確でコンテキストに一致する結果をユーザーに提示。

この Google Search QnA チャットボットは、検索機能と LangChain フレームワークの LLM を統合することで、人間が行う検索に近い包括的で正確な回答を生成します。

ワークフローは以下のようなアーキテクチャーに分類されます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/ba416c2b-c308-51a0-8a59-c37081958e49.png)

こちらは GenAIComps で定義されているコンポーネント・レベルのマイクロサービスを使用して実装した SearchQnA の例です。以下のフローチャートは、この実装例でのマイクロサービス間の情報の流れを示しています。
https://github.com/opea-project/GenAIComps
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/b49047b7-5414-dc7c-0d0d-d675c0503c24.png)

【SearchQnA サービスの実装】
SearchQnA サービスはインテル® Gaudi® 2 アクセラレーターまたはインテル® Xeon® スケーラブル・プロセッサーのどちらでも簡単に実装することができます。
現在サポートしているのは Docker Compose を使用した 2 つの実装方法です。
1.docker hub 上で Docker イメージを使用してサービスを開始:
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/2e4e6957-6f61-9189-574e-e3e16dd0c573.png)

2.built from source からビルドした Docker イメージを使用してサービスを開始: ガイド
https://github.com/opea-project/GenAIExamples/tree/main/SearchQnA/docker_compose/

【環境変数の設定】
SearchQnA サービスを実装するための環境変数の設定は、以下の手順で行います。
1.	必要な環境変数を設定する
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/2ce993be-ca6e-1ec8-4499-d09bc19aabe3.png)

2.	プロキシー環境の場合は、プロキシー関連の環境変数も設定する
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/8306f936-7186-3a54-ac6e-6b0920820286.png)

3.	その他の環境変数を設定する
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/82b7dad4-e969-d464-e934-54fa16e996d0.png)

【SearchQnA のインテル® Gaudi® アクセラレーターへの実装】
v1.16.0 より前の Habana Driver を使用している場合 (hl-smi で確認できます)、以下のコマンドを直接実行して SearchQnA サービスを開始します。該当の compose.yaml を検索します。
https://github.com/opea-project/GenAIExamples/blob/main/SearchQnA/docker_compose/intel/hpu/gaudi/compose.yaml
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/dfecbdc8-00f7-4e0f-1e66-dd99587ba4c9.png)
ソースから Docker イメージをビルドする方法については、インテル® Gaudi® アクセラレーターのガイドを参照してください。
https://github.com/opea-project/GenAIExamples/blob/main/SearchQnA/docker_compose/intel/hpu/gaudi/README.md

【SearchQnA のインテル® Xeon® プロセッサーへの実装】
該当の compose.yaml を検索します。
https://github.com/opea-project/GenAIExamples/blob/main/SearchQnA/docker_compose/intel/cpu/xeon/compose.yaml
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/f8b979a0-bd1a-f046-c4f9-9a9721667c2a.png)
ソースから Docker イメージをビルドする詳しい手順については、インテル® Xeon® プロセッサーのガイドを参照してください。
https://github.com/opea-project/GenAIExamples/blob/main/SearchQnA/docker_compose/intel/cpu/xeon/README.md

【SearchQnA サービスの利用】
2 パターンの SearchQnA サービス利用方法:
1.Terminal で cURL コマンドを実行する
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/d7642834-a64e-83c4-1178-db6bd074076d.png)

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

【トラブルシューティング】
1.「アクセスが拒否されました」といったエラーが表示される場合、まずはマイクロサービスを確認してください。簡単な例を示します。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3490396/e7d60f6f-80b8-361a-b49a-08281415bd37.png)

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

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