Azure AI Searchで文書検索をやってみた(LangChain使用)

はじめに

Azure AI Searchで文書検索をやってみました。

環境

  • Windows 11
  • Python 3.11.5
  • LangChain
  • Azure OpenAI
  • Azure AI Search

ライブラリのインストール

以下のコマンドで必要なライブラリをインストールします。azure-search-documentsは11.4.0b8を指定しないとエラーが起きる場合があるため、注意してください。

実装

Azure AI Searchリソースの作成

Azure Portalから「AI Search」のページに移動し、「作成」を選択します。

入力項目を埋め、「確認および作成」を選択します。

記事投稿用 (11).png

検証が完了したら、「作成」を選択します。

記事投稿用 (12).png

デプロイが完了したら、「リソースに移動」を選択します。

記事投稿用 (13).png

「設定」の「キー」タブを選択し、プライマリー管理者キーをコピーします。

image.png

インデックスの追加

以下のドキュメントをインデックスに追加します。

https://learn.microsoft.com/pdf?url=https%3A%2F%2Flearn.microsoft.com%2Fja-jp%2Fazure%2Fai-services%2Ftoc.json

追加に使用するコードは以下のとおりです。環境変数はご自身の環境に合わせてください。

test.py

Azure OpenAIでPDFドキュメントの内容をインデックス化し、Azure AI Searchにアップロードします。

上記のファイルを実行すると、AI Searchのインデックスに以下のように追加されます。

image.png

類似性検索

類似性検索では、クエリ文から生成されたベクトルの応答結果がk個返されます。
以下は類似性検索の例です。

test.py

similarity_searchメソッドを用いて、「利用可能なAzure AIサービスは?」というクエリを実行します。k=3で取得する検索結果の数を3個に指定しています。

結果

類似性スコア付きの検索

類似性検索では、類似性スコア順に検索結果が並び替えられますが、そのスコアを取得することもできます。
以下は類似性検索のスコアまで取得する例です。

test.py

similarity_search_with_relevance_scoresメソッドを用いて、クエリに対する検索結果をスコアと合わせて取得します。k=4で取得する検索結果の数を4個に指定しています。score_thresholdで取得するスコアの閾値を指定しています。

結果

ハイブリッド検索

ハイブリッド検索では、ベクトル検索とキーワード検索を組み合わせて処理することができます。
以下はハイブリッド検索の例です。

test.py

hybrid_searchメソッドを用います。k=3で取得する検索結果の数を3個に指定しています.

結果

おわりに

お疲れ様でした!
以下で情報発信しています!

https://x.com/t___tatsuki

参考資料

https://python.langchain.com/docs/integrations/vectorstores/azuresearch

https://github.com/Azure/azure-search-vector-samples/blob/main/demo-python/code/azure-search-vector-python-langchain-sample.ipynb

この記事を書いた人

azure-recipe-user