Utiliser Azure LLM Functions avec Elasticsearch pour des requêtes plus intelligentes

Explorez un exemple d'application de recherche immobilière qui utilise Azure Gen AI LLM Functions avec Elasticsearch pour fournir des résultats de recherche hybrides flexibles. Voyez étape par étape comment configurer et exécuter l'application d'exemple dans GitHub Codespaces.

Elasticsearch dispose d'intégrations natives avec les outils et fournisseurs d'IA générative leaders du secteur. Consultez nos webinars sur le dépassement des bases de RAG ou sur la création d'applications prêtes à l'emploi avec la Base vectorielle Elastic.

Pour élaborer les meilleures solutions de recherche pour votre cas d'utilisation, commencez un essai gratuit d'Elastic Cloud ou essayez Elastic sur votre machine locale dès maintenant.

Précision. Quand c'est important, c'est très important. Lorsque vous recherchez quelque chose de spécifique, la précision est très importante. Cependant, il arrive qu'une requête trop précise ne donne aucun résultat. Il est donc avantageux d'avoir la possibilité d'élargir le champ d'une requête afin de trouver d'autres données potentiellement pertinentes.

Cet article de blog traite de l'utilisation d'Elasticsearch et d'Azure Open AI pour créer un exemple d'application qui démontre comment trouver des résultats exacts lors de la recherche de biens immobiliers très spécifiques tout en fournissant des résultats pertinents lorsqu'une correspondance spécifique n'est pas disponible. Nous verrons toutes les étapes nécessaires à la création d'un index Elasticsearch et d'un modèle de recherche. Ensuite, nous présenterons l'ensemble du processus de création d'une application qui utilise Azure OpenAI pour prendre en compte les requêtes des utilisateurs et les transformer en requêtes de modèles de recherche Elasticsearch qui peuvent produire des résultats étonnamment personnalisés.

Voici une liste de toutes les ressources que nous utiliserons pour créer notre exemple d'application de recherche immobilière :

  • Index et modèle de recherche Elasticsearch
  • Azure OpenAI
  • API Azure Maps
  • Codespaces Jupyter Notebook
  • Noyau sémantique
  • Application C# avec Blazor Frontend

Processus d'interrogation intelligent

Ce flux de travail combine le LLM, les outils LLM et la recherche pour transformer les requêtes en langage naturel en résultats de recherche structurés et pertinents :

  • LLM (Large Language Model) - Interprète les requêtes complexes des utilisateurs et orchestre les outils pour extraire les intentions de recherche et enrichir le contexte.
  • Outils LLM - Chaque outil LLM est un programme C# que nous avons créé pour cet article. Il existe trois outils :
    • Outil d'extraction de paramètres: il extrait de la requête des attributs clés tels que les chambres, les salles de bain, les caractéristiques et le prix.
    • Outil GeoCode: convertit les noms de lieux en latitude/longitude pour le filtrage spatial.
    • Outil de recherche: remplit un modèle de recherche Elasticsearch avec des paramètres de requête et exécute une recherche. Recherche hybride - Exécute une recherche hybride (texte intégral + vecteur dense) avec inférence ML intégrée. Cette approche stratifiée garantit à l'utilisateur final des expériences de recherche plus intelligentes et adaptées au contexte.

Architecture de l'application

Voici un schéma de l'architecture du système de l'application d'exemple. Nous utiliserons un carnet Jupyter de Codespaces pour interagir avec Elastic Cloud.

Produits requis

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

Cloner le repo de l'application exemple dans Codespaces

Commencez par cloner le code de l'application d'exemple. Vous pouvez le faire dans GitHub Codespaces, qui permet de cloner et d'exécuter des applications. Cliquez sur New Codespace.

Ensuite, sélectionnez le repo jwilliams-elastic/msbuild-intelligent-query-demo dans la liste déroulante Repository et cliquez sur Create Codespace.

Créer un fichier .env fichier

Nous utiliserons un carnet Jupyter Python pour accéder et interagir avec Elastic Cloud en utilisant les valeurs de configuration qui sont stockées dans un fichier de configuration. Le fichier de configuration de l'ordinateur portable doit avoir le nom de fichier .env. et vous allez le créer maintenant.

  1. Dans GitHub Codespaces, cliquez sur le bouton New File et ajoutez un fichier nommé .env.
  2. Ajoutez le contenu suivant au fichier .env nouvellement créé fichier

Comme vous pouvez le voir, nous avons quelques valeurs manquantes, ELASTIC_URL et ELASTIC_API_KEY, qui doivent être ajoutées au fichier .env. fichier. Commençons maintenant par créer un projet Elasticsearch serverless qui servira de backend pour alimenter la fonctionnalité de recherche de notre application d'exemple.

Créer un projet Elastic Serverless

  1. Allez sur cloud.elastic.co et cliquez sur Create New Serverless project (Créer un nouveau projet sans serveur).
  2. Cliquez sur Suivant pour la solution Elasticsearch
  3. Sélection optimisée pour les vecteurs
  4. Définir le fournisseur de services en nuage comme étant Azure
  5. Cliquez sur Créer un projet sans serveur
  6. Cliquez sur " Getting Started" dans le menu de navigation principal et faites défiler vers le bas pour copier les " Connection Details" (détails de connexion).
  7. Cliquez sur le bouton Copier pour copier le point de terminaison Elasticsearch à partir des détails de la connexion.
  8. Mise à jour du fichier .env pour définir l'URL ELASTIC comme étant le point de terminaison Elasticsearchcopié.

Créer une clé API Elastic

  1. Ouvrez la page Elasticsearch Getting Started, cliquez sur New dans la section Add an API Key.
  2. Saisir un nom declé
  3. Cliquez sur Créer une clé API
  4. Cliquez sur le bouton Copier pour copier la valeur de la clé API.
  5. De retour dans Codespaces, où nous avons le fichier .env ouvert pour édition, collez la valeur copiée pour définir la clé ELASTIC_API_KEY

Ouvrez le Codespaces Notebook et installez les dépendances de la bibliothèque.

Dans l'explorateur de fichiers, sélectionnez le fichier VectorDBSetup.ipynb pour ouvrir le carnet de notes. Une fois le Notebook chargé, recherchez la section du Notebook intitulée Installer les bibliothèques. Cliquez sur le bouton de lecture de la section.

Si c'est la première fois que vous exécutez un Notebook dans GitHub Codespaces, vous serez invité à sélectionner un Codespaces Kernel et à configurer l'environnement Python.

Définir les importations et charger les variables d'environnement à l'aide de Codespaces Notebook

Passez à la section suivante du Carnet de notes intitulée Définir les importations et charger les variables d'environnement. Cliquez sur le bouton de lecture de la section.

Ce code importe les bibliothèques Python utilisées par le Notebook et charge les variables d'environnement à partir du fichier .env que vous avez créée précédemment.

Créer un point de terminaison d'inférence Elastic ML à l'aide de Codespaces Notebook

Passez à la section suivante du Notebook intitulée Create ML inference endpoint (Créer un point de terminaison d'inférence ML). Cliquez sur le bouton de lecture de la section.

Cela créera un nouveau point de terminaison d'inférence ML dans le projet Elasticsearch que nous utiliserons pour générer des enchâssements de texte à partir de nos données. Les text embeddings sont des représentations vectorielles du texte qui seront stockées dans Elasticsearch pour alimenter la recherche sémantique.

Créer un index Elasticsearch avec Codespaces Notebook

Passez à la section suivante du Notebook intitulée Create Elasticsearch index (Créer un index Elasticsearch). Cliquez sur le bouton de lecture de la section.

Cela créera l'index Elasticsearch qui stockera nos données d'exemple et toutes les données vectorielles associées générées via le point de terminaison de l'inférence ML.

Créer un modèle de recherche Elasticsearch à l'aide de Codespaces Notebook

Passez à la section suivante du carnet de notes intitulée Modèle de recherche. Cliquez sur le bouton de lecture de la section.

Cela permet de créer un modèle de recherche, que notre exemple d'application utilisera en tant que modèle rempli avec les mots analysés à partir de la requête de recherche de l'utilisateur. Cela nous permet de configurer et de contrôler à quel point nous sommes spécifiques lorsque nous interrogeons des données dans l'index Elasticsearch.

Ingérer des données dans l'index Elasticsearch à l'aide de Codespaces Notebook

Passez à la section suivante du Carnet de notes , intitulée Acquisition de données sur les biens immobiliers. Cliquez sur le bouton d'exécution de la section.

L'exécution de cette section de code permet de charger en bloc les données de l'exemple contenues dans le fichier properties.jsonl. Au bout de quelques minutes, vous devriez voir apparaître une confirmation indiquant que le processus s'est déroulé avec succès. Vous pouvez confirmer que l'index contient l'enregistrement attendu en allant dans la section Gestion de l'index dans Elastic Cloud.

Créer appsetting.json pour configurer l'application C#

Notre index Elasticsearch étant créé et alimenté en données, nous sommes maintenant prêts à configurer l'application d'exemple pour qu'elle fonctionne avec Elastic et Azure Cloud. L'application d'exemple C# utilise un fichier nommé appsettings.json pour stocker et charger ses informations d'accès telles que les clés API. Vous allez créer le fichier appsettings.json en utilisant l'éditeur de Codespaces.

1. Créer appsettings.json dans le dossier HomeFinderApp

2. Collez le code suivant dans le fichier appsettings.json

3. Trouvez les valeurs Url et ApiKey dans la section ElasticSettings . Définissez les mêmes valeurs que celles que vous avez définies dans le fichier .env dans une étape précédente.

Créer un service Azure OpenAI

Notre application d'exemple va utiliser Azure OpenAI pour analyser la requête de l'utilisateur de l'application et ensuite soumettre une demande à Elasticsearch en remplissant le modèle de recherche pour tenter de communiquer de manière flexible ce que l'utilisateur recherche.

  1. Ouvrez un nouvel onglet de navigateur et accédez à AI Foundry | Azure OpenAI dans le portail Azure. Cliquez sur+Créer
  2. Dans le formulaire de création, sélectionnez un groupe de ressources.
  3. Saisir un nom
  4. Choisir un niveau de tarification
  5. Cliquez sur Suivant
  6. Dans l'onglet Réseau, cliquez sur Suivant
  7. Dans l'onglet Tags, cliquez sur Suivant
  8. Dans l'onglet Réviser et soumettre, cliquez sur Créer
  9. Une fois la création terminée, cliquez sur Aller à la ressource.
  10. Sélectionnez Keys and Endpoint dans le menu de navigation de gauche.
  11. Copiez le point de terminaison et collez-le dans le fichier appsettings.json que vous avez créé dans l'onglet de votre navigateur où se trouve l'éditeur Codespaces.
  12. Retournez ensuite à l'onglet de votre navigateur contenant la clé Azure OpenAI et la page du point de terminaison. Cliquez sur le bouton copier pour la clé 1, et collez la valeur copiée dans le fichier appsettings.json, dans l'onglet de votre navigateur où se trouve l'éditeur Codespaces ouvert.

Ajouter le déploiement du modèle gpt-4o au service Azure Open AI

Super, nous avons maintenant un service Azure OpenAI qui fonctionne, mais il a encore besoin d'un déploiement de modèle pour nous donner les capacités LLM dont notre application d'exemple a besoin. Il existe une multitude de modèles. Déployons gpt-4o puisqu'il est déjà spécifié dans le fichier appsettings.json que vous avez créé.

  1. Accédez à Azure AI Foundry et cliquez sur Créer un déploiement.
  2. Rechercher gpt-4o et le sélectionner dans les résultats
  3. Cliquez sur Confirmer pour le sélectionner
  4. Cliquez sur Déployer pour déployer le modèle

Une fois que vous avez déployé avec succès le modèle gpt-4o, vous pouvez sélectionner Déploiements dans le menu de navigation de gauche et confirmer que le déploiement gpt-4o est listé avec l'état " Succeeded".

Créer un compte Azure Maps

Nous voulons que les utilisateurs de notre exemple d'application puissent rechercher des biens immobiliers dans des zones spécifiques, mais sans avoir à être trop précis. Si quelqu'un veut chercher une propriété près du marché local, Azure Maps est un service que l'OpenAI LLM peut utiliser pour obtenir les coordonnées de latitude et de longitude du marché. Les coordonnées peuvent ensuite être incluses dans les requêtes basées sur le modèle de recherche envoyé à Elasticsearch pour les requêtes des utilisateurs qui incluent des emplacements spécifiques et des considérations de géo-distance.

  1. Cliquez sur Créer dans les comptes Azure Maps
  2. Sélectionner un groupe de ressources
  3. Saisir un nom
  4. Accepter la licence et la déclaration de confidentialité
  5. Cliquez sur Réviser et créer
  6. Cliquez sur Créer
  7. Une fois la création du compte terminée, cliquez sur Aller à la ressource.
  8. Cliquez sur Authentification dans le menu de navigation de gauche
  9. Copier la valeur de la clé primaire et la coller comme valeur de l'ApiKey dans la section AzureMapsSettings du fichier appsettings.json, de nouveau dans l'onglet de votre navigateur contenant l'éditeur Codespaces.

Essayez l'application d'exemple

Passons maintenant à la partie la plus amusante. Il est temps d'exécuter l'application d'exemple. Nous avons mis en place tous les détails de configuration ainsi que les ressources Elastic Cloud et Azure Cloud dont nous avons besoin pour faire fonctionner l'application.

1. Ouvrez une fenêtre Terminal dans l'éditeur Codespaces.

2. Utilisez la commande suivante pour modifier le répertoire actif afin qu'il devienne le dossier de l'application d'exemple.

3. Utilisez la commande dotnet suivante pour exécuter l'application.

4. Cliquez sur le bouton Ouvrir dans le navigateur lorsqu'il apparaît.

5. Testez la recherche par défaut, puis testez vos propres recherches personnalisées. Si vous souhaitez obtenir plus de détails sur ce qui est exécuté en amont pour générer les résultats de la recherche, vous pouvez cliquer sur le lien Afficher situé à côté de Invocations d'outils.

Bonus : Si vous voulez vraiment tester GPT-4o, essayez la recherche suivante : Je cherche une propriété près de Disney World Fl avec plus de 30 chambres et plus de 20 salles de bain, une piscine, un garage et près de la plage pour moins de 200K. Cette requête renverra des résultats après plusieurs invocations de l'outil de recherche.

Elastic est votre solution pour Search AI

L'application en cours est un exemple de recherche guidée Gen AI LLM utilisant Elasticsearch via des modèles de recherche comme source de données de base. N'hésitez pas à expérimenter et à personnaliser l'application d'exemple pour créer une expérience de recherche à la fois précise et flexible, afin d'aider vos utilisateurs à trouver ce qu'ils recherchent.

Merci de votre lecture. Essayez Elastic Cloud.

Pour aller plus loin

Prêt à créer des expériences de recherche d'exception ?

Une recherche suffisamment avancée ne se fait pas avec les efforts d'une seule personne. Elasticsearch est alimenté par des data scientists, des ML ops, des ingénieurs et bien d'autres qui sont tout aussi passionnés par la recherche que vous. Mettons-nous en relation et travaillons ensemble pour construire l'expérience de recherche magique qui vous permettra d'obtenir les résultats que vous souhaitez.

Jugez-en par vous-même