Azure LLM Functions を Elasticsearch と併用してよりスマートなクエリ エクスペリエンスを実現する

Azure Gen AI LLM 関数と Elasticsearch を使用して柔軟なハイブリッド検索結果を提供する不動産検索アプリの例を調べます。GitHub Codespaces でサンプル アプリを構成して実行する方法を段階的に説明します。

Elasticsearchは、業界をリードする生成AIツールやプロバイダーとネイティブに統合されています。RAG応用編やElasticベクトルデータベースで本番環境対応のアプリを構築する方法についてのウェビナーをご覧ください。

ユースケースに最適な検索ソリューションを構築するには、無料のクラウドトライアルを始めるか、ローカルマシンでElasticを試してみてください。

精度。重要なときは、それは非常に重要なのです。何か特定のものを検索する場合、精度は非常に重要です。ただし、クエリが正確すぎると結果が返されない場合もあるため、クエリの範囲を広げて関連する可能性のある追加のデータを見つける柔軟性があると便利です。

このブログ記事では、Elasticsearch と Azure Open AI を使用して、非常に具体的な不動産物件を検索するときに正確な結果を見つける方法を示すサンプル アプリを作成する方法について説明します。同時に、特定の一致が見つからない場合でも関連性の高い結果を提供します。検索テンプレートとともに Elasticsearch インデックスを作成するために必要なすべての手順を説明します。次に、Azure OpenAI を使用してユーザー クエリを取得し、それを Elasticsearch 検索テンプレート クエリに変換して、驚くほどカスタマイズされた結果を生成できるアプリを作成するプロセス全体を説明します。

以下は、サンプルの不動産検索アプリを作成するために使用するすべてのリソースのリストです。

スマートクエリワークフロー

このワークフローは、LLM、LLM ツール、および検索を組み合わせて、自然言語クエリを構造化された関連性の高い検索結果に変換します。

  • LLM (大規模言語モデル) - 複雑なユーザークエリを解釈し、ツールを調整して検索意図を抽出し、コンテキストを強化します。
  • LLM ツール- 各 LLM ツールは、この投稿用に作成した C# プログラムです。ツールは3つあります。
    • パラメータ抽出ツール: クエリから寝室、バスルーム、機能、価格などの主要な属性を取得します。
    • ジオコード ツール: 空間フィルタリングのために場所の名前を緯度/経度に変換します。
    • 検索ツール: Elasticsearch 検索テンプレートにクエリパラメータを入力し、検索を実行します。ハイブリッド検索- 組み込みの ML 推論を使用してハイブリッド検索 (フルテキスト + 高密度ベクトル) を実行します。この階層化されたアプローチにより、エンドユーザーにとってよりスマートでコンテキストを意識したクエリ エクスペリエンスが保証されます。

アプリケーションアーキテクチャ

以下はサンプル アプリのシステム アーキテクチャ図です。Elastic Cloud とやり取りするために、Codespaces Jupyter Notebook を使用します。

要件

[@portabletext/react] Unknown block type "block", specify a component for it in the `components.types` prop

Codespaces でサンプル アプリのリポジトリをクローンする

まず、サンプル アプリケーションのコードを複製します。これは、アプリケーションのクローンを作成して実行する方法を提供するGitHub Codespacesで実行できます。「新しいコードスペース」をクリックします。

次に、 リポジトリ ドロップダウンでリポジトリ jwilliams-elastic/msbuild-intelligent-query-demo を選択し、 コードスペースの作成を クリックします。

.env を作成するファイル

Elastic Cloud にアクセスして操作するには、Python Jupyter Notebook を使用します。これは、構成ファイルに保存されている構成値を使用して行われます。ノートブックの設定ファイルの名前は.envです。今すぐ作成してみましょう。

  1. GitHub Codespacesで、 「新規ファイル」ボタンをクリックし、 .envという名前のファイルを追加します。
  2. 新しく作成した.envに次の内容を追加します。ファイル

ご覧のとおり、 ELASTIC_URLELASTIC_API_KEYという2つの値が欠落しており、 .envに追加する必要があります。ファイル。サンプル アプリの検索機能を強化するバックエンドとして機能する Elasticsearch サーバーレス プロジェクトを作成して、これらを今すぐ取得しましょう。

Elastic Serverlessプロジェクトを作成する

  1. cloud.elastic.coにアクセスし、 「Create New Serverless project」をクリックします。
  2. Elasticsearch ソリューションの 「次へ」 をクリックします
  3. ベクター用に最適化を選択
  4. クラウドプロバイダーをAzureに設定する
  5. サーバーレスプロジェクトの作成をクリック
  6. メインナビゲーションメニューの「はじめに」をクリックし、下にスクロールして接続の詳細をコピーします。
  7. コピー ボタンをクリックして、 接続の詳細 から Elasticsearchエンドポイント をコピーします。
  8. .envを更新するELASTIC_URLをコピーしたElasticsearch エンドポイントに設定するファイル

Elastic APIキーを作成する

  1. Elasticsearchの Getting Started ページを開き、 APIキーの追加 セクションで 新規を クリックします。
  2. キーを入力してください
  3. APIキーの作成をクリック
  4. 「コピー」ボタンをクリックしてAPIキーの値をコピーします
  5. Codespacesに戻ると、 .envがある。 ファイルを開いて編集し、コピーした値を貼り付けてELASTIC_API_KEYを設定します。

Codespacesノートブックを開き、ライブラリの依存関係をインストールする

ファイル エクスプローラーでVectorDBSetup.ipynbファイルを選択し、ノートブックを開きます。ノートブックが読み込まれたら、 「ライブラリのインストール」 というタイトルのノートブックのセクション を見つけますセクションの再生ボタンをクリックします。

GitHub Codespaces でノートブックを初めて実行する場合は、Codespaces カーネルを選択して Python 環境を構成するように求められます。

Codespaces Notebook を使用してインポートを定義し、環境変数をロードする

ノートブックの次のセクションインポートの定義と環境変数の読み込み」に進みます。セクションの再生ボタンをクリックします。

このコードは、ノートブックで使用されるPythonライブラリをインポートし、 .envから環境変数を読み込みます。以前作成したもの。

Codespaces Notebook を使用して Elastic ML 推論エンドポイントを作成する

次の 「ML 推論エンドポイントの作成」 というノートブックのセクション に進みます。セクションの再生ボタンをクリックします。

これにより、Elasticsearch プロジェクトに新しい ML 推論エンドポイントが作成され、データからテキスト埋め込みを生成するために使用します。テキスト埋め込みは、セマンティック検索を強化するために Elasticsearch に保存されるテキストのベクトル表現です。

Codespaces Notebook を使用して Elasticsearch インデックスを作成する

次の 「Elasticsearch インデックスの作成」 というノートブックのセクション に進みます。セクションの再生ボタンをクリックします。

これにより、サンプル データと、ML 推論エンドポイントを介して生成された関連するベクトル データを保存する Elasticsearch インデックスが作成されます。

Codespaces Notebook を使用して Elasticsearch 検索テンプレートを作成する

次の 「検索テンプレート」 というノートブックのセクション に進みます。セクションの再生ボタンをクリックします。

これにより、検索テンプレートが作成されます。これは、ユーザーの検索クエリから解析された単語が入力さたテンプレートとしてサンプル アプリで使用されるものです。これにより、Elasticsearch インデックス内のデータをクエリする際の詳細度を設定および制御できるようになります。

Codespaces Notebook を使用して Elasticsearch インデックスにデータを取り込む

ノートブックの次のセクション Ingest property data」に進みます。セクション実行ボタンをクリックします。

このコード セクションを実行すると、 properties.jsonlファイルに含まれるサンプル データが一括ロードされます。数分後、プロセスが正常に完了したことを示す確認が表示されます。Elastic Cloud のインデックス管理セクションに移動すると、インデックスに予想されるレコードが含まれていることを確認できます。

C# アプリを構成するための appsetting.json を作成する

Elasticsearch インデックスが作成され、データが取り込まれたので、Elastic および Azure Cloud で動作するようにサンプル アプリを構成する準備が整いました。C# サンプル アプリは、 appsettings.jsonという名前のファイルを使用して、API キーなどのアクセス情報を保存および読み込みます。ここで、Codespaces のエディターを使用してappsettings.jsonファイルを作成します。

1. HomeFinderApp フォルダに appsettings.json を作成します。

2. 次のコードをappsettings.jsonファイルに貼り付けます。

3. ElasticSettings セクションの Url ApiKey の 値を見つけます。.envで設定した値と同じ値に設定します前の手順でファイルを作成します。

Azure OpenAI サービスを作成する

サンプル アプリでは、Azure OpenAI を使用してアプリ ユーザーのクエリを解析し、検索テンプレートを入力して Elasticsearch にリクエストを送信し、ユーザーが検索している内容を柔軟に伝えようとします。

  1. 新しいブラウザー タブを開き、Azure ポータルのAI Foundry | Azure OpenAIに移動します。+作成をクリック
  2. 作成フォームで、リソース グループを選択します。
  3. 名前を入力してください
  4. 価格帯を選択する
  5. 次へをクリック
  6. ネットワークタブで次へをクリックします
  7. 「タグ」タブで「次へ」をクリックします。
  8. 「確認と送信」タブで、 「作成」をクリックします。
  9. 作成が完了したら、 「リソースに移動」をクリックします。
  10. 左側のナビゲーションメニューからキーとエンドポイントを選択します
  11. エンドポイントをコピーし、Codespaces エディターが開いているブラウザー タブで作成したappsettings.jsonファイルに貼り付けます。
  12. 次に、Azure OpenAIキーとエンドポイント ページを含むブラウザー タブに戻ります。Key 1のコピー ボタンをクリックし、コピーした値を、Codespaces エディターが開いているブラウザー タブのappsettings.jsonファイルに貼り付けます。

Azure Open AI サービスに gpt-4o モデルのデプロイメントを追加する

素晴らしい。Azure OpenAI サービスが実行できるようになりました。ただし、サンプル アプリに必要な LLM 機能を提供するには、まだモデルのデプロイが必要です。選択できるモデルは多数あります。作成した appsettings.json ファイルですでに指定されているので 、gpt-4o をデプロイしましょう。

  1. Azure AI Foundryにアクセスし、 「デプロイの作成」をクリックします。
  2. gpt-4oを検索し、結果から選択します
  3. 確認をクリックして選択します
  4. 「デプロイ」をクリックしてモデルをデプロイします

gpt-4o モデルを正常にデプロイしたら、左側のナビゲーション メニューから[デプロイメント] を選択し、 gpt-4o デプロイメントが[成功] の 状態 でリストされていることを確認できます。

Azure Maps アカウントを作成する

私たちは、サンプル アプリのユーザーが特定のエリアの不動産物件を検索できるようにしたいと考えていますが、あまり具体的に検索する必要はありません。地元のファーマーズ マーケットの近くの物件を検索したい場合、Azure Maps は OpenAI LLM がマーケットの緯度と経度の座標を取得するために使用できるサービスです。その後、座標は、特定の場所と地理的距離を考慮したユーザークエリのために Elasticsearch に送信される検索テンプレートベースのリクエストに含めることができます。

  1. Azure Mapsアカウント で 作成を クリックします
  2. リソースグループを選択
  3. 名前を入力してください
  4. ライセンスとプライバシーに関する声明に同意する
  5. 「確認して作成」をクリック
  6. 作成をクリック
  7. アカウントの作成が完了したら、 「リソースに移動」をクリックします。
  8. 左側のナビゲーションメニューで「認証」をクリックします。
  9. 主キーの 値をコピーし、Codespaces エディターを含むブラウザー タブに戻って、 appsettings.json ファイルの AzureMapsSettings セクションの ApiKey の値として貼り付けます。

サンプルアプリを試してみる

さて、ここからが楽しい部分です。サンプルアプリを実行してみましょう。アプリを動かすために必要な Elastic Cloud および Azure Cloud リソースとともに、すべての構成の詳細が設定されました。

1. Codespaces エディターでターミナル ウィンドウを開きます。

2. 次のコマンドを使用して、アクティブ ディレクトリをサンプル アプリ フォルダーに変更します。

3. 次のdotnetコマンドを使用してアプリを実行します。

4. 「ブラウザで開く」ボタンが表示されたらクリックします。

5. デフォルトの検索をテストしてから、独自のカスタム検索をいくつか試します。検索結果を生成するためにバックエンドで実行される内容の詳細を確認するには、「ツールの呼び出し」の横にある「表示」リンクをクリックします

ボーナス: GPT-4o を実際にテストしたい場合は、次の検索を試してください:フロリダ州ディズニー ワールドの近くで、ベッドルーム 30 室以上、バスルーム 20 室以上、プールとガレージがあり、ビーチに近い物件を 20 万ドル未満で探しています。このクエリは、複数の検索ツールの呼び出し後に結果を返します。

Elasticは検索AIのソリューションです

実行中のアプリは、検索テンプレートを介して Elasticsearch を基礎データ ソースとして使用する Gen AI LLM ガイド付き検索の例です。自由にサンプル アプリを試してカスタマイズし、正確かつ柔軟な検索エクスペリエンスを作成して、ユーザーが探しているものを見つけられるようにしてください。

読んでいただきありがとうございます。Elastic Cloudをお試しください。

関連記事

最先端の検索体験を構築する準備はできましたか?

十分に高度な検索は 1 人の努力だけでは実現できません。Elasticsearch は、データ サイエンティスト、ML オペレーター、エンジニアなど、あなたと同じように検索に情熱を傾ける多くの人々によって支えられています。ぜひつながり、協力して、希望する結果が得られる魔法の検索エクスペリエンスを構築しましょう。

はじめましょう