<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Jonathan Simon - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Jonathan Simon - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/fr/search-labs/author/jonathan-simon</link>
    </image>
    <link>https://www.elastic.co/fr/search-labs/author/jonathan-simon</link>
    <atom:link href="https://www.elastic.co/fr/search-labs/rss/author/jonathan-simon.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[fr]]></language>
    <lastBuildDate>Wed, 23 Sep 2026 04:41:54 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Premiers pas avec Elastic Agent Builder et le SDK Strands Agents]]></title>
    <description><![CDATA[Découvrez comment créer un agent avec Elastic Agent Builder, puis explorez comment utiliser cet agent via le protocole A2A orchestré à l’aide du SDK Strands Agents.]]></description>
    <content:encoded><![CDATA[<p>Vous avez une idée d’agent IA ? Cela implique sans doute d’exploiter des données : pour que l’agent exécute une action utile, il doit prendre une décision, et pour cela, il lui faut les bonnes données.</p><p>Elastic Agent Builder simplifie la création d’agents IA connectés aux données. Nous vous expliquons comment faire dans cet article de blog. Voici toutes les étapes pour créer un agent avec un outil MCP capable d’accéder aux données stockées dans Elastic. Nous utiliserons ensuite le SDK Strands Agents et ses fonctionnalités Agent2Agent (A2A) pour piloter l’agent. Le <a href="https://strandsagents.com/">SDK Strands Agents</a> est une plateforme de développement d’IA multi-agents, conçue pour créer des applications autonomes avec juste ce qu’il faut de code pour obtenir les résultats souhaités.</p><p>Construisons un agent IA capable de jouer à RPS+, une version revisitée du jeu classique « Pierre, feuille, ciseaux », enrichie de quelques choix supplémentaires pour les joueurs.</p><h2>Produits requis</h2><p>Voici ce dont vous avez besoin pour suivre les étapes décrites dans cet article de blog :</p><ul><li><p>Un éditeur de texte fonctionnant sur votre ordinateur local</p><ul><li><p>Nous utiliserons <a href="https://code.visualstudio.com/download">Visual Studio Code</a> pour suivre les exemples présentés dans cet article de blog.</p></li></ul></li><li><p><a href="https://www.python.org/downloads/">Python 3.10 ou version supérieure</a> installé localement sur votre machine</p></li></ul><h2>Créez un projet sans serveur</h2><p>La première étape consiste à créer un projet Elasticsearch Serverless, qui inclut Elastic Agent Builder.</p><p>Accédez à <a href="http://cloud.elastic.co/">cloud.elastic.co</a> et créez un nouveau projet Elasticsearch Serverless.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3472edce39ec0b81/6a17060e66c4f93c17f8bf57/31b6a5c1c30dacbb4d5e58d1c566071e7143a0c8-1600x879.gif" alt="" /><h2>Créer un index et ajouter des données</h2><p>Ensuite, nous allons ajouter des données à notre projet Elasticsearch. Ouvrez les Developer Tools pour exécuter des commandes : nous allons créer un nouvel index et y insérer des données. Dans le menu principal, sélectionnez Developer Tools.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaedaa94068c07a17/6a17060f961e697558c4ce5f/f97d5af077504463155655a9e27c171a7f974f71-1600x879.jpg" alt="" /><p>Copiez-collez la commande PUT suivante dans la zone de saisie de requêtes de la console Developer Tools. Cette commande crée un index Elasticsearch nommé « game-docs ».</p>PUT /game-docs
{
  "mappings": {
    "properties": {
      "title": { "type": "text" },
      "content": { 
        "type": "text"
      },
      "filename": { "type": "keyword" },
      "last_modified": { "type": "date" }
    }
  }
}<p>Cliquez sur le bouton <strong>Envoyer la requête</strong> à droite de l’instruction dans Developer Tools. Une notification doit confirmer que l’index <em>game-docs</em> a bien été créé, dans la zone de réponse de Developer Tools.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt430c357b479d93af/6a170611a6c2b98191e79624/be0555a1930e4d4f58b7ed8b669c9b702532ed17-1600x880.jpg" alt="" /><p>L’index nommé <em>game-docs</em> est l’endroit idéal pour stocker les données du jeu que nous créons. Ajoutons maintenant un document nommé <em>rps++-md</em> dans cet index, contenant toutes les données nécessaires au jeu. Copiez-collez la commande PUT suivante dans la console Developer Tools.</p>PUT /game-docs/_doc/rps+-md
{
  "title": "Rock Paper Scissors +",
  "content": "
# Game Name
RPS+

# Starting Prompt
Let's play RPS+ !
---
What do you choose?

# Game Objects
1. Rock 🪨 👊
2. Paper 📜 🖐
3. Scissors ✄ ✌️
4. Light ☼ 👍
5. Dark Energy ☄ 🫱

# Judgement of Victory
* Rock beats Scissors
  * because rocks break scissors
* Paper beats Rock
  * because paper covers rock
* Scissors beat Paper
  * because scissors cut paper
* Rock beats Light
  * because you can build a rock structure to block out light
* Paper beats Light
  * because knowledge stored in files and paper books helps us understand light
* Light beats Dark Energy
  * because light enables humans to lighten up and laugh in the face of dark energy as it causes the eventual heat death of the universe
* Light beats Scissors
  * because light is needed to use scissors safely
* Dark Energy beats Rock
  * because dark energy rocks more than rocks. It rocks rocks and everything else in its expansion of the universe
* Dark Energy beats Paper
  * because humans, with their knowledge stored in files and paper books, can't explain dark energy 
* Scissors beat Dark Energy
  * because a human running with scissors is darker than dark energy

# Invalid Input
I was hoping for an worthy opponent
  - but alas it appears that time has past
  - but alas there's little time for your todo list when [todo:fix this] is so vast

# Cancel Game
The future belongs to the bold. Goodbye..
",
  "filename": "RPS+.md",
  "last_modified": "2025-11-25T12:00:00Z"
}<p>Cliquez sur le bouton <strong>Envoyer la requête</strong> à côté de l’instruction pour l’exécuter et ajouter le document <em>rps++-md</em> à l’index game-docs.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt64d49e13754d5b25/6a17061214b270524be3c55d/3c01d8a4602de5c33337457591a388a4a4e3fad3-1600x879.jpg" alt="" /><p>Nous avons maintenant des données à interroger, et avec Agent Builder, c’est plus simple que jamais.</p><p>Dans le menu de navigation principal, sélectionnez <strong>Agents</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb4d374bf2ba9135c/6a1706147d8d67468570e63e/82dbd2e9a439cabd5a5eea3d0ce005b87df0c3ea-1600x879.jpg" alt="" /><p>Ensuite, il vous suffit de demander à l'agent Elastic AI par défaut, « Quelles données ai-je ? »</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc0f879cf28772718/6a1706161949f7f25ee7a92d/f7a2f39c9d1486bdf02d9e88a732b540ac2e2cd1-1600x872.gif" alt="" /><p>L’agent IA Elastic analyse les données et fournit une explication claire des informations disponibles.</p><h2>Créer un outil</h2><p>Nous avons maintenant des données dans Elastic, mettons-les à profit. Agent Builder inclut un support natif pour créer des outils <a href="https://modelcontextprotocol.io/">MCP</a>, qui permettent aux agents d’accéder aux données dont ils ont besoin pour disposer du bon contexte. Créons un outil simple pour récupérer les données de notre jeu.</p><p>Cliquez sur le menu des actions dans Agent Builder.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7802a6b94e81440c/6a170618ab7f085287db9db4/0e327c202674dda33bcc0e494d2b588fa8b32e4f-1600x879.png" alt="" /><p>Dans les options du menu, sélectionnez <strong>Afficher tous les outils</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt9f52ffe114fb6ea7/6a17061a4a531b801b36a884/1ebf58650e9fb56750d3f0b1700fab50b44f9bdf-1600x879.png" alt="" /><p>Cliquez sur <strong>+ Nouvel outil</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8090769f6c4d1899/6a17061c286714294093e219/6c03a7f28b99ac2d805f34f39948979893316a00-1600x879.png" alt="" /><p>Dans le formulaire <strong>Créer un outil</strong> , sélectionnez <a href="https://www.elastic.co/docs/explore-analyze/query-filter/languages/esql"><strong>ES|QL</strong></a> <strong>Saisissez</strong> l'outil et entrez les valeurs suivantes.</p><p>Pour <strong>Tool ID </strong>:</p>example.get_game_docs<p>Pour <strong>Description</strong> :</p>Get RPS+ doc from Elasticsearch game-docs index.<p>Pour <strong>Configuration, </strong>saisissez la requête suivante dans la zone de texte <strong>ES|QL Query</strong> :</p>FROM game-docs | WHERE filename == "RPS+.md"<p>Le formulaire <strong>Créer outil</strong> complété devrait ressembler à ceci. Cliquez sur <strong>Enregistrer</strong> pour créer l'outil.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt77034c305198217a/6a17061e66c4f9e54ef8bf5e/b6c93e344600f319b9d2c3030020cf2d171ac1c4-1600x1312.png" alt="" /><p>Un nouvel outil a été ajouté à notre tableau de bord. Les outils ne sont pas faits pour rester inutilisés : ils doivent être mis à profit. Créons un agent qui saura exploiter notre nouvel outil personnalisé.</p><h2>Créez un agent et attribuez-lui un outil</h2><p>Créer un agent est d’une simplicité rafraîchissante avec Agent Builder. Il vous suffit de saisir quelques instructions pour l’agent, avec quelques détails : c’est tout. Créons un agent dès maintenant.</p><p>Cliquez sur <strong>Gérer les agents.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaa8a83fc2f3758a9/6a1706201949f71a10e7a931/53934b93db07187e251d4b321cb9ca647e2fd51b-1600x858.png" alt="" /><p>Cliquez<strong> + Nouvel agent.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3778403c5101a000/6a17062160084be12f3c449e/fae3ad8f31e71a6dfd044e1daa025a4e280b4e68-1600x490.png" alt="" /><p>Saisissez les informations suivantes dans le formulaire <strong>Nouvel agent</strong>.</p><p>Pour <strong>l'identification de l'agent, </strong>saisissez le texte ci-dessous :</p>rps_plus_agent<p>Dans la section texte <strong>Instructions personnalisées </strong>, saisissez les instructions suivantes :</p>When prompted, if the prompt contains an integer, then select the corresponding numbered item in the list of "Game Objects" from your documents. Otherwise select a random game object. This is your chosen game object for a single round of the game.

# General Game Rules
* 2 players
    - the user: the person playing the game
    - you: the agent playing the game and serving as the game master
* Each player chooses a game object which will be compared and cause them to tie, win or lose.

# Start the game
1. This is the way each new game always starts. You make the first line of your response only the name of your chosen game object. 

2. The remainder of your response should be the "Starting Prompt" text from your documents and generate a list of "Game Objects" for the person playing the game to choose a game object from.  

# End of Game: The game ends in one of the following three outcomes:
1. Invalid Input: If the player responds with an invalid game object choice, respond with variations of the "Invalid Input" text from your documents and then end the game.

2. Tie: The game ends in a tie if the user chooses the same game object as your game object choice.

3. Win or Lose: The game winner is decided based on the "Judgement of Victory" conditions from your documents. Compare the user's game object choice and your game object choice and determine who chose the winning game object.

# Game conclusion
Respond with a declaration of the winner of the game by outputting the corresponding text in the "Judgement of Victory" section of your documents.<p>Pour le <strong>Nom d'affichage, </strong>entrez le texte ci-dessous :</p>RPS+ Agent<p>Pour la <strong>Description de l’affichage, </strong>saisissez le texte ci-dessous :</p>An agent that plays the game RPS+<p>Donnez à l'agent l'outil personnalisé que nous avons créé précédemment en cliquant sur l'onglet <strong>Outils</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte5b0fe00abdde07c/6a17062314b2704bc4e3c563/1778f64bc3a1b4004998dc3668ef7f666788e193-1600x1390.png" alt="" /><p>Sélectionnez uniquement <em>example.get_game_docs</em>, l'outil que nous avons créé précédemment.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2210212e07e06104/6a170625a929cf3277ae08d1/7d734cd80161bcc058817482eb330ffcf1cb567b-1600x1363.png" alt="" /><p>Cliquez sur <strong>Enregistrer</strong> pour créer le nouvel agent.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt6e3afc1918e26f14/6a170627ab7f084746db9db8/c0014faf605ce50c03679ed0d073bd9f3ae7234d-1600x468.png" alt="" /><p>Testons notre nouvel agent. Un lien pratique vous permet de démarrer une conversation avec n’importe quel agent de la liste.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blteb4b69dc5971d3a0/6a1706286f7f046840914743/b7d6943ad90a4f68691207caf66b81742e712145-1600x560.png" alt="" /><p>Saisissez simplement « start game » pour lancer la partie. Ça fonctionne !</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte5b621d602223dff/6a17062ab339d568a1769ef8/984d008e4cc3f08cc1f101720673b0f7347c066c-1600x874.gif" alt="" /><p>L’agent affiche son choix pour la partie en haut de sa réponse. Cela permet de visualiser le choix de l’agent et de vérifier que le jeu fonctionne comme prévu. Cela dit, connaître le choix de votre adversaire avant de jouer n’est pas idéal pour une partie de pierre-feuille-ciseaux. Pour peaufiner le jeu, on peut utiliser une plateforme d’orchestration d’agents capable de les piloter via du code.</p><p>Le SDK Strands Agents entre en scène.</p><h2>Strands Agents SDK</h2><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt73901ec745a97fbf/6a17062c964cea23c808bab3/c195bba6ff2754f5d8fda174a0c1d247bc283710-456x156.png" alt="" /><p>Si vous souhaitez essayer de nouveaux frameworks de développement d'agents, le <a href="https://strandsagents.com/latest/">SDK Strands Agents</a> vaut la peine d'être essayé. <a href="https://aws.amazon.com/blogs/opensource/introducing-strands-agents-an-open-source-ai-agents-sdk/">Le SDK Strands Agents a été publié par AWS (mai 2025)</a> en tant qu'implémentation <a href="https://github.com/strands-agents/sdk-python">Python</a> open source, et il existe désormais une version <a href="https://dev.to/aws/strands-agents-now-speaks-typescript-a-side-by-side-guide-12b3">Typescript</a>.</p><h2>Premiers pas avec le SDK Strands Agents en Python</h2><p>Lancez vos environnements de développement : nous allons cloner et exécuter une application d’exemple qui utilise Strands Agents pour piloter l’<em>agent RPS+</em> via le protocole A2A. Créons une version personnalisée du jeu RPS+ dans laquelle le choix de l’agent est révélé après votre propre décision, afin de préserver l’effet de surprise et le côté ludique du jeu Pierre-Feuille-Ciseaux.</p><p>Sur votre ordinateur local, ouvrez <a href="https://code.visualstudio.com/download">Visual Studio Code</a> et ouvrez un nouveau terminal.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3de752025d62993f/6a17062d0c4857f16501a997/2339cc37c89a3524f2b2a21684bc61dae958e1cf-915x460.jpg" alt="" /><p>Dans le terminal que vous venez d’ouvrir, exécutez la commande suivante pour cloner le dépôt Elasticsearch Labs :</p>git clone https://github.com/elastic/elasticsearch-labs<p>Exécution de la commande <em>cd </em>suivante pour changer de répertoire dans le répertoire Elasticsearch Labs :</p>cd elasticsearch-labs<p>Ensuite, exécutez cette commande pour ouvrir le dépôt dans Visual Studio Code :</p>code .<p>Dans l'explorateur de fichiers de Visual Studio, développez les dossiers <em>supporting-blog-content</em> et <em>agent-builder-a2a-strands-agents</em> , puis ouvrez le fichier <em>elastic_agent_builder_a2a_rps+.py.</em> Voici à quoi ressemble le fichier ouvert dans Visual Studio Code :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt65ef8036a70bcaf1/6a17062f1949f7af36e7a935/d153b19e0e016c701576edb99ccab5af7c554f34-1484x1530.jpg" alt="" /><p>Voici le contenu de <em>elastic_agent_builder_a2a_rps+.py </em>que vous devriez voir dans votre éditeur de texte :</p>import asyncio
from dotenv import load_dotenv
from uuid import uuid4
import httpx
import os
import random
from a2a.client import A2ACardResolver, ClientConfig, ClientFactory
from a2a.types import Message, Part, Role, TextPart

DEFAULT_TIMEOUT = 60  # set request timeout to 1 minute


def create_message(*, role: Role = Role.user, text: str, context_id=None) -&gt; Message:
    return Message(
        kind="message",
        role="user",
        parts=[Part(TextPart(kind="text", text=text))],
        message_id=uuid4().hex,
        context_id=context_id,
    )


async def main():
    load_dotenv()
    a2a_agent_host = os.getenv("ES_AGENT_URL")
    a2a_agent_key = os.getenv("ES_API_KEY")
    custom_headers = {"Authorization": f"ApiKey {a2a_agent_key}"}

    async with httpx.AsyncClient(
        timeout=DEFAULT_TIMEOUT, headers=custom_headers
    ) as httpx_client:
        # Get agent card
        resolver = A2ACardResolver(httpx_client=httpx_client, base_url=a2a_agent_host)
        agent_card = await resolver.get_agent_card(
            relative_card_path="/rps_plus_agent.json"
        )
        # Create client using factory
        config = ClientConfig(
            httpx_client=httpx_client,
            streaming=True,
        )
        factory = ClientFactory(config)
        client = factory.create(agent_card)
        # Use the client to communicate with the agent
        print("\nSending 'start game' message to Elastic A2A agent...")
        random_game_object = random.randint(1, 5)
        msg = create_message(text=f"start with game object {random_game_object}")
        async for event in client.send_message(msg):
            if isinstance(event, Message):
                context_id = event.context_id
                response_complete = event.parts[0].root.text
                # Get agent choice from the first line of the response
                parsed_response = response_complete.split("\n", 1)
                agent_choice = parsed_response[0]
                print(parsed_response[1])
        # User choice sent for game results from the agent
        prompt = input("Your Choice  : ")
        msg = create_message(text=prompt, context_id=context_id)
        async for event in client.send_message(msg):
            if isinstance(event, Message):
                print(f"Agent Choice : {agent_choice}")
                print(event.parts[0].root.text)


if __name__ == "__main__":
    asyncio.run(main())<p>Examinons ce qui se passe dans ce code. En commençant par la méthode <em><code>main()</code></em> , le code commence par accéder aux variables d’environnement pour l’URL de l’agent et la clé API. Ensuite, nous utilisons ces valeurs pour créer un <em><code>httpx</code></em><code> client</code> que nous pouvons utiliser pour obtenir la carte d'agent de l'agent. Le client utilise ensuite les détails de la carte d’agent pour envoyer une demande de « démarrer la partie » à l’agent. Il est intéressant de noter que nous incluons la valeur <code>random_game_object</code> dans la requête <code>"start game"</code>. Cette valeur est un nombre aléatoire généré par le module <em>aléatoire</em> de la bibliothèque standard de Python. La raison pour laquelle nous faisons cela est qu'il s'avère que les puissants LLM (qui rendent possibles les agents IA) ne sont pas très doués pour le hasard. Pas de problème, Python vient à la rescousse.</p><p>En poursuivant dans le code, une fois que l’agent a répondu à la requête start game, le code extrait le choix de l’agent et le stocke dans la variable <em>agent_choice</em>. Le reste de la réponse est affiché sous forme de texte à destination de l’utilisateur final. L’utilisateur est ensuite invité à saisir son propre choix d’objet de jeu, qui est envoyé à l’agent. Le code affiche ensuite le choix de l’agent, ainsi que le résultat final du jeu selon l’agent.</p><h2>Définir l’URL de votre agent et la clé API comme variables d’environnement</h2><p>Comme l’application d’exemple sera exécutée en local, nous devons fournir au SDK Strands Agents une URL A2A et une clé API pour communiquer avec notre agent. L’application d’exemple utilise un fichier nommé <em>.env</em> pour stocker ces valeurs.</p><p>Faites une copie du fichier <em>env.example</em> et nommez le nouveau fichier <em>.env</em></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta17961cbcb42985c/6a170631b0367dc5a072bc55/25ead5f15a17dedb777132a082097cffb06cae4d-1600x843.jpg" alt="" /><p>Retournez dans Elastic Agent Builder pour récupérer les deux valeurs nécessaires.</p><p>Sélectionnez <strong>Afficher tous les outils</strong> dans le menu d'action d'Agent Builder en haut à droite de la page.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt140885d7ebfcb969/6a1706327d8d67b17670e646/9c4f4e4a3bd76e11e0a182fa007a2f6aec7777b4-1600x880.jpg" alt="" /><p>Cliquez sur le menu déroulant <strong>MCP Server</strong> en haut de la page Outils et sélectionnez <strong>Copier l’URL MCP Server.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc153c2caa27e949b/6a170634a292997793d00f6d/6cde0de678bb6f81bef8a59deffb110ad6c6ce26-1600x882.jpg" alt="" /><p>Collez <strong>l’URL du serveur MCP</strong> dans le <em>fichier .env</em> fichier en remplacement de la valeur d'espace réservé <strong>&lt;YOUR-ELASTIC-AGENT-BUILDER-URL&gt; </strong>. Nous devons maintenant apporter une modification à l'URL, à savoir remplacer le texte final « mcp » par « a2a », car le <a href="https://a2a-protocol.org/">protocole A2A</a> est celui que le SDK Agent Strands utilisera pour communiquer avec l'agent exécuté dans Elastic Agent Builder.</p><p>L’URL modifiée devrait ressembler à ceci :</p>https://rps-game-project-12345a.kb.us-east-1.aws.elastic.cloud/api/agent_builder/a2a<p>L'autre valeur dont nous avons besoin d'obtenir pendant que nous sommes ici dans Elastic Cloud est une clé d'API. Cliquez sur <strong>Elasticsearch </strong>dans la navigation principale.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltada5de819f31d8ff/6a170635b339d55ae9769efc/651676b9be65178cdad50b5d24f26441c0bf3f97-1600x549.jpg" alt="" /><p>Cliquez sur le <strong>bouton Copier la clé API </strong>pour copier la clé API.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta18f85790df00706/6a170637cf4f257145b2d0bd/17f1e2ed5c7682630c71e75b0b09ffb1d9036210-1600x879.jpg" alt="" /><p>Maintenant, de retour dans Visual Studio Code, collez la Clé d'API dans le fichier <em>.env</em> fichier pour remplacer le texte de l'espace réservé <strong>&lt;YOUR-ELASTIC-API-KEY&gt; </strong>. Votre <em>.env</em> Le fichier devrait ressembler à ceci :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt92ab4b37cdcca85e/6a1706386f7f0472ed914747/a357947e07f29c8c03382e00c7baedf04a399297-1600x286.jpg" alt="" /><h2>Lancer l’application d’exemple</h2><p>Ouvrez un nouveau terminal dans Visual Studio Code.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8702d826849755d0/6a17063a60084b45ca3c44a2/33e1174c68ea1ed47c7fe62ab6a6da657c606f56-1413x711.jpg" alt="" /><p>Commencez par exécuter la commande <em>cd</em> suivante dans le terminal :</p>cd elasticsearch-labs/supporting-blog-content/agent-builder-a2a-strands-agents<p>Exécutez la commande suivante pour créer un environnement virtuel Python.</p>python -m venv .venv<p>Selon le système d’exploitation de votre machine, exécutez la commande suivante pour activer l’environnement virtuel.</p><ul><li><p>MacOS/Linux</p></li></ul>source .venv/bin/activate<ul><li><p>Windows</p></li></ul>.venv\Scripts\activate<p>L’application d’exemple utilise le SDK Strands Agents, et nous arrivons à l’étape où il faut l’installer. Exécutez la commande suivante pour installer le SDK Strands Agents avec toutes ses dépendances Python.</p>pip install -r requirements.txt<p>Il est temps de dégager la rampe de lancement et de commencer le compte à rebours. Nous sommes prêts à lancer cette application. Reculez un peu. Lançons-la avec la commande suivante :</p>python elastic_agent_builder_a2a_rps+.py<p>Le défi ? Une partie de RPS+ vous attend. Bravo et bonne chance pour la suite !</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbb3715672995fcfa/6a17063c6234e07b76db195f/041df81fbf1776f09e1243af0a435c4c0af6aca1-1600x948.gif" alt="" /><h2>Créez vos applications d'IA avec un contexte pertinent</h2><p>La création d'un agent IA fait désormais partie de vos compétences. Vous avez vu aussi combien il est facile d'utiliser Elastic Agent Builder via A2A dans des frameworks de développement d'agents comme les SDK Strands Agents. <a href="https://cloud.elastic.co/registration?utm_source=agentic-ai-category&amp;utm_medium=search-labs&amp;utm_campaign=agent-builder">Essayez Elastic</a> pour créer des agents IA connectés au contexte pertinent dans vos données personnalisées.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/agent-builder-a2a-strands-agents-guide</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/agent-builder-a2a-strands-agents-guide</guid>
    <category><![CDATA[IA]]></category>
    <category><![CDATA[IA agentique]]></category>
    <dc:creator><![CDATA[Jonathan Simon]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt3472edce39ec0b81/6a17060e66c4f93c17f8bf57/31b6a5c1c30dacbb4d5e58d1c566071e7143a0c8-1600x879.gif" length="0" type="image/gif"/>
    <pubDate>Mon, 15 Dec 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Utiliser Azure LLM Functions avec Elasticsearch pour des requêtes plus intelligentes]]></title>
    <description><![CDATA[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.]]></description>
    <content:encoded><![CDATA[<p>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.</p><p>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.</p><p>Voici une liste de toutes les ressources que nous utiliserons pour créer notre exemple d'application de recherche immobilière :</p><ul><li><p>Index et modèle de recherche Elasticsearch</p></li><li><p>Azure OpenAI</p></li><li><p>API Azure Maps</p></li><li><p><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb">Codespaces Jupyter Notebook</a></p></li><li><p>Noyau sémantique</p></li><li><p>Application C# avec Blazor Frontend</p></li></ul><h2>Processus d'interrogation intelligent</h2><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0461b58012efd772/6a17f73fa292997d52d02e19/0c4a7c835e06c514f158c00ab1055a7ba719a35f-1600x765.png" alt="Processus d'interrogation intelligent" /><p>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 :</p><ul><li><p><strong>LLM (Large Language Model)</strong> - Interprète les requêtes complexes des utilisateurs et orchestre les outils pour extraire les intentions de recherche et enrichir le contexte.</p></li><li><p><strong>Outils LLM</strong> - Chaque outil LLM est un programme C# que nous avons créé pour cet article. Il existe trois outils :</p><ul><li><p><em>Outil d'extraction de paramètres</em>: il extrait de la requête des attributs clés tels que les chambres, les salles de bain, les caractéristiques et le prix.</p></li><li><p><em>Outil GeoCode</em>: convertit les noms de lieux en latitude/longitude pour le filtrage spatial.</p></li><li><p><em>Outil de recherche</em>: remplit un modèle de recherche Elasticsearch avec des paramètres de requête et exécute une recherche. <strong>Recherche hybride</strong> - 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.</p></li></ul></li></ul><h2>Architecture de l'application</h2><p>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.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7617ae80295a3e2b/6a17f74196142a35deeb1cb0/2880afee184cd9270c0eb4310e51418e2339784d-936x452.png" alt="Schéma d'architecture d'une application Azure LLM Functions." /><h2>Produits requis</h2><p>Vous n'aurez besoin que de votre navigateur, car nous utiliserons GitHub Codespaces pour cloner l'application d'exemple, la configurer et l'exécuter. Pour la partie Elastic de la solution, nous utiliserons Elastic Cloud pour créer un projet Elasticsearch Serverless. Nous utiliserons <a href="https://portal.azure.com/">Azure Portal</a> pour travailler avec les ressources Azure.</p><h2>Cloner le repo de l'application exemple dans Codespaces</h2><p>Commencez par cloner le code de l'application d'exemple. Vous pouvez le faire dans <a href="https://github.com/codespaces/">GitHub Codespaces</a>, qui permet de cloner et d'exécuter des applications. Cliquez sur <strong>New Codespace</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd4ed9c67e2d79c41/6a17f7436df73146a20a10bc/b89cbec491659b6c8a0bb9551ed2629f7a37f9fd-1600x427.png" alt="Clonage d'un repo d'application d'exemple dans Codespaces." /><p>Ensuite, sélectionnez le repo <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo">jwilliams-elastic/msbuild-intelligent-query-demo</a> dans la liste déroulante <strong>Repository</strong> et cliquez sur <strong>Create Codespace</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltdfcc992a6cb7a7d7/6a17f7450b0bed67c1dd3750/43ea377554527af9578400f16cd2342bf8fff3a2-1600x1049.png" alt="Repository et cliquez sur Create Codespace." /><h2>Créer un fichier .env fichier</h2><p>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 <em><strong>.env.</strong></em> et vous allez le créer maintenant.</p><ol><li><p>Dans GitHub Codespaces, cliquez sur le bouton <strong>New File </strong>et ajoutez un fichier nommé <em><strong>.env.</strong></em></p></li><li><p>Ajoutez le contenu suivant au <em><strong> fichier .env</strong></em> nouvellement créé fichier</p></li></ol>ELASTIC_URL=
ELASTIC_API_KEY=<img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1a7dcb2fd2bb24f5/6a17f7462f4a5c21abfa8aa9/84d4f327948858ba61db0001dd8cf780d42fe0a7-1600x875.gif" alt="un carnet de notes Python Jupyter pour accéder à Elastic Cloud et interagir avec lui, en utilisant les valeurs de configuration stockées dans un fichier de configuration. " /><p>Comme vous pouvez le voir, nous avons quelques valeurs manquantes, <strong>ELASTIC_URL</strong> et <strong>ELASTIC_API_KEY,</strong> qui doivent être ajoutées au <em> fichier .env.</em> 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.</p><h2>Créer un projet Elastic Serverless</h2><ol><li><p>Allez sur <a href="http://cloud.elastic.co">cloud.elastic.co</a> et cliquez sur <strong>Create New Serverless project (Créer un nouveau projet sans serveur)</strong>.</p></li><li><p>Cliquez sur <strong>Suivant </strong>pour la solution <strong>Elasticsearch</strong></p></li><li><p>Sélection <strong>optimisée pour les vecteurs</strong></p></li><li><p>Définir le <strong>fournisseur de services en nuage</strong> comme étant <strong>Azure</strong></p></li><li><p>Cliquez sur <strong>Créer un projet sans serveur</strong></p></li><li><p>Cliquez sur " <strong>Getting Started"</strong> dans le menu de navigation principal et faites défiler vers le bas pour copier les " <strong>Connection Details" (détails de connexion)</strong>.</p></li><li><p>Cliquez sur le bouton <strong>Copier </strong>pour copier le <strong>point de terminaison Elasticsearch</strong> à partir des <strong>détails de la connexion.</strong></p></li><li><p>Mise à jour du <em><strong> fichier .env</strong></em> pour définir l'<strong>URL ELASTIC</strong> comme étant le <strong>point de terminaison Elasticsearch</strong>copié.</p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt95b7fefa05173822/6a17f748ec0f89f05f5a67c6/77a35e55446d396066b68cfd132d1543a07b81cc-1600x875.gif" alt="Comment créer un nouveau projet Serverless dans Elasticsearch." /><h2>Créer une clé API Elastic</h2><ol><li><p>Ouvrez la page Elasticsearch <strong>Getting Started</strong>, cliquez sur <strong>New</strong> dans la section <strong>Add an API Key.</strong></p></li><li><p>Saisir un <strong>nom de</strong>clé</p></li><li><p>Cliquez sur<strong> Créer une clé API</strong></p></li><li><p>Cliquez sur le bouton Copier pour copier la valeur de la clé API.</p></li><li><p>De retour dans <strong>Codespaces,</strong> où nous avons le fichier <em><strong>.env</strong></em>ouvert pour édition, collez la valeur copiée pour définir la<strong> clé ELASTIC_API_KEY</strong></p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltf6b1c85d267e6ad0/6a17f74a4b055d118143239a/20168cba493d8e2c0d9ae7704eb0ae707df58e4c-1600x875.gif" alt="Comment créer une clé API Elastic." /><h2>Ouvrez le Codespaces Notebook et installez les dépendances de la bibliothèque.</h2><p>Dans l'explorateur de fichiers, sélectionnez le fichier <em><strong>VectorDBSetup.ipynb</strong></em> pour ouvrir le carnet de notes. Une fois le Notebook chargé, recherchez la <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L40-L52">section du </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L40-L52"><strong>Notebook intitulée Installer</strong></a><strong> les bibliothèques. </strong>Cliquez sur le bouton de lecture de la section.</p><p>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.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt970f4fa30c6c9302/6a17f74c505ac30ee6ad8ceb/2272f70615dfb9dcbeb91f39b6dd5076213e24a5-1600x875.gif" alt="Installation des dépendances de la bibliothèque dans le Codespaces Notebook." /><h2>Définir les importations et charger les variables d'environnement à l'aide de Codespaces Notebook</h2><p>Passez à la section suivante du Carnet de notes <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L58-L104">intitulée </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L58-L104"><strong>Définir les importations et charger les variables d'environnement</strong></a>. Cliquez sur le bouton de lecture de la section.</p><p>Ce code importe les bibliothèques Python utilisées par le Notebook et charge les variables d'environnement à partir du fichier <em>.env </em>que vous avez créée précédemment.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt6d74b41258420d5a/6a17f74e6317301f2f585c16/aa9f9198ff452ac0c4ce33b00f253731dbee22c5-1600x875.gif" alt="Définition des importations et chargement des variables d'environnement à l'aide de Codespaces Notebook." /><h2>Créer un point de terminaison d'inférence Elastic ML à l'aide de Codespaces Notebook</h2><p>Passez à la <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L112-L157">section suivante du Notebook intitulée </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L112-L157"><strong>Create ML inference endpoint (Créer un point de terminaison d'inférence</strong></a> ML). Cliquez sur le bouton de lecture de la section.</p><p>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.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt87581300d4d0b66e/6a17f750e9ea875a81a9c795/97c1afab3e64027ee5ae77f377d56ba406ae1765-1600x875.gif" alt="Création d'un point de terminaison d'inférence Elastic ML à l'aide de Codespaces Notebook." /><h2>Créer un index Elasticsearch avec Codespaces Notebook</h2><p>Passez à la <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L165-L224">section suivante du </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L165-L224"><strong>Notebook intitulée Create Elasticsearch index (Créer</strong></a> un index Elasticsearch). Cliquez sur le bouton de lecture de la section.</p><p>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.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta2d2d5a10c84a1b7/6a17f7527f6f15775cc09cd6/23a66283ee41239e24fb8455c3cd95641982ca6b-1600x875.gif" alt="Créer un index Elasticsearch en utilisant Codespaces Notebook." /><h2>Créer un modèle de recherche Elasticsearch à l'aide de Codespaces Notebook</h2><p>Passez à la <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L232-L384">section suivante du carnet </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L232-L384"><strong>de notes intitulée Modèle de</strong></a> recherche. Cliquez sur le bouton de lecture de la section.</p><p>Cela permet de créer un <a href="https://www.elastic.co/fr/docs/solutions/search/search-templates">modèle de recherche</a>, 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.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt194d6557d096ac25/6a17f7545772628d901bcda0/4c001a3e4d1cca4cfb5c043fea92c7ccaf9cb64a-1600x875.gif" alt="Création d'un modèle de recherche Elasticsearch à l'aide de Codespaces Notebook." /><h2>Ingérer des données dans l'index Elasticsearch à l'aide de Codespaces Notebook</h2><p>Passez à la section suivante du Carnet de notes <a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L392-L450">, intitulée </a><a href="https://github.com/jwilliams-elastic/msbuild-intelligent-query-demo/blob/main/VectorDBSetup.ipynb?short_path=17c25d8#L392-L450"><strong>Acquisition de données sur les biens immobiliers</strong></a>. Cliquez sur le bouton d'exécution de la section.</p><p>L'exécution de cette section de code permet de charger en bloc les données de l'exemple contenues dans le fichier <em>properties.jsonl. </em> 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 <strong>Gestion de l'index</strong> dans Elastic Cloud.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltaf1b5ad59c75716d/6a17f7566864a4528fb6894b/e9698c798541ccfc08143a939846597028e3c566-1600x875.gif" alt="Ingestion de données dans l'index Elasticsearch à l'aide de Codespaces Notebook." /><h2>Créer appsetting.json pour configurer l'application C#</h2><p>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é <em>appsettings.json</em> pour stocker et charger ses informations d'accès telles que les clés API. Vous allez créer le fichier <em>appsettings.json</em> en utilisant l'éditeur de Codespaces.</p><p>1. Créer <em>appsettings.json</em> dans le dossier <strong>HomeFinderApp </strong></p><p>2. Collez le code suivant dans le fichier <em>appsettings.json</em></p>{
 "ElasticSettings": {
   "Url": "",
   "ApiKey": "",
   "IndexName": "properties",
   "TemplateId": "properties-search-template"
 },
 "AzureOpenAISettings": {
   "Endpoint": "",
   "ApiKey": "",
   "DeploymentName": "gpt-4o"
 },
 "AzureMapsSettings": {
   "Url": "https://atlas.microsoft.com/geocode",
   "ApiKey": ""
 },
 "Logging": {
   "LogLevel": {
 	"Default": "Information",
 	"Microsoft.AspNetCore": "Warning"
   }
 },
 "AllowedHosts": "*"
}
<p>3. Trouvez les valeurs <strong>Url</strong> et <strong>ApiKey</strong> dans la section <strong>ElasticSettings </strong>. Définissez les mêmes valeurs que celles que vous avez définies dans le fichier <em>.env</em> dans une étape précédente.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt28afc316da403ec9/6a17f758faa913584d93ca28/00dad25bacdea2adcbd1e6eca7658867a49b0d8c-1600x875.gif" alt="Création de appsetting.json pour configurer l'application C#." /><h2>Créer un service Azure OpenAI</h2><p>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.</p><ol><li><p>Ouvrez un nouvel onglet de navigateur et accédez à <a href="https://portal.azure.com/#blade/Microsoft_Azure_ProjectOxford/CognitiveServicesHub/OpenAI">AI Foundry | Azure OpenAI</a> dans le portail Azure. Cliquez sur<strong>+Créer</strong></p></li><li><p>Dans le formulaire de création, sélectionnez un <strong>groupe de ressources</strong>.</p></li><li><p>Saisir un <strong>nom</strong></p></li><li><p>Choisir un <strong>niveau de tarification</strong></p></li><li><p>Cliquez sur <strong>Suivant</strong></p></li><li><p>Dans l'onglet <strong>Réseau</strong>, cliquez sur<strong> Suivant</strong></p></li><li><p>Dans l'onglet <strong>Tags</strong>, cliquez sur <strong>Suivant</strong></p></li><li><p>Dans l'onglet <strong>Réviser et soumettre</strong>, cliquez sur <strong>Créer</strong></p></li><li><p>Une fois la création terminée, cliquez sur <strong>Aller à la ressource.</strong></p></li><li><p>Sélectionnez <strong>Keys and Endpoint</strong> dans le menu de navigation de gauche.</p></li><li><p>Copiez le <strong>point de terminaison</strong> et collez-le dans le fichier <em>appsettings.json</em> que vous avez créé dans l'onglet de votre navigateur où se trouve l'éditeur Codespaces.</p></li><li><p>Retournez ensuite à l'onglet de votre navigateur contenant la <strong>clé</strong> Azure OpenAI et la page du point de terminaison. Cliquez sur le bouton copier pour la <strong>clé 1</strong>, et collez la valeur copiée dans le fichier <em>appsettings.json</em>, dans l'onglet de votre navigateur où se trouve l'éditeur Codespaces ouvert.</p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd01a5e82d9003d02/6a17f75a148009be65b48904/6d49197302d110410dca0a53b6ae90237cf2dfd6-1600x875.gif" alt="Création d'un service Azure OpenAI." /><h2>Ajouter le déploiement du modèle gpt-4o au service Azure Open AI</h2><p>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 <em>gpt-4o</em> puisqu'il est déjà spécifié dans le fichier <em>appsettings.json</em> que vous avez créé.</p><p></p><ol><li><p>Accédez à <a href="https://ai.azure.com/resource/playground">Azure AI Foundry</a> et cliquez sur <strong>Créer un déploiement.</strong></p></li><li><p>Rechercher <em>gpt-4o</em> et le sélectionner dans les résultats</p></li><li><p>Cliquez sur <strong>Confirmer</strong> pour le sélectionner</p></li><li><p>Cliquez sur <strong>Déployer</strong> pour déployer le modèle</p></li></ol><p>Une fois que vous avez déployé avec succès le modèle <em>gpt-4o</em>, vous pouvez sélectionner <strong>Déploiements</strong> dans le menu de navigation de gauche et confirmer que le déploiement <em><strong>gpt-4o</strong></em> est listé avec l'<strong>état</strong> " <strong>Succeeded"</strong>.
</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte82341dd8a4982b0/6a17f75c4b055d9e0943239e/1b817ab67c05634e9c72777593b4d1a2c6c28191-1600x875.gif" alt="Ajout d'un déploiement de modèle gpt-4o au service Azure Open AI." /><h2>Créer un compte Azure Maps</h2><p>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.</p><ol><li><p>Cliquez sur <strong>Créer</strong> dans les <a href="https://portal.azure.com/#browse/Microsoft.Maps%2Faccounts">comptes Azure Maps</a></p></li><li><p>Sélectionner un <strong>groupe de ressources</strong></p></li><li><p>Saisir un <strong>nom</strong></p></li><li><p>Accepter la licence et la déclaration de confidentialité</p></li><li><p>Cliquez sur <strong>Réviser et créer</strong></p></li><li><p>Cliquez sur <strong>Créer</strong></p></li><li><p>Une fois la création du compte terminée, cliquez sur <strong>Aller à la ressource.</strong></p></li><li><p>Cliquez sur <strong>Authentification</strong> dans le menu de navigation de gauche</p></li><li><p>Copier la valeur de la <strong>clé primaire</strong> et la coller comme valeur de l'<strong>ApiKey</strong> dans la section <strong>AzureMapsSettings</strong> du fichier <em>appsettings.json</em>, de nouveau dans l'onglet de votre navigateur contenant l'éditeur Codespaces.</p></li></ol><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt42a4ab4bb7a96d24/6a17f75edbb4ff4f91fb5892/90fadd48e366682e2bad91e32988f93c6354e126-1600x875.gif" alt="Création d'un compte Azure Maps." /><h2>Essayez l'application d'exemple</h2><p>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.</p><p>1. Ouvrez une fenêtre Terminal dans l'éditeur Codespaces.</p><p>2. Utilisez la commande suivante pour modifier le répertoire actif afin qu'il devienne le dossier de l'application d'exemple.
</p>cd HomeFinderApp<p>3. Utilisez la commande <em>dotnet</em> suivante pour exécuter l'application.</p>dotnet run<p>4. Cliquez sur le bouton <strong>Ouvrir dans le navigateur </strong>lorsqu'il apparaît.</p><p>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 <strong>Afficher </strong>situé à côté de <strong>Invocations d'outils.</strong></p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt41adf6631ba91be1/6a17f760505ac30986ad8cf1/821fe7b9446de5ed646d938cc9484a7ddad21030-1600x875.gif" alt="Essai de l'application d'exemple." /><p><strong>Bonus : </strong>Si vous voulez vraiment tester GPT-4o, essayez la recherche suivante : <em>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. </em>Cette requête renverra des résultats après plusieurs invocations de l'outil de recherche.</p><h2>Elastic est votre solution pour Search AI</h2><p>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.</p><p>Merci de votre lecture. Essayez <a href="https://cloud.elastic.co/registration">Elastic Cloud</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/azure-llm-functions-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/azure-llm-functions-elasticsearch</guid>
    <category><![CDATA[IA]]></category>
    <dc:creator><![CDATA[Jonathan Simon,James Williams]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt93dd59caccfd7fc8/6a17f7614202292a7129f799/1431b90c7e00de06574c1e33c44a2e89296c824e-1200x628.png" length="0" type="image/png"/>
    <pubDate>Fri, 13 Jun 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>