<?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[Jeff Vestal - 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[Jeff Vestal - 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/jeff-vestal</link>
    </image>
    <link>https://www.elastic.co/fr/search-labs/author/jeff-vestal</link>
    <atom:link href="https://www.elastic.co/fr/search-labs/rss/author/jeff-vestal.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[fr]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 17:12:08 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Rapidité vs précision : mesurer le rappel de la recherche vectorielle quantifiée]]></title>
    <description><![CDATA[Comment mesurer le rappel pour la recherche vectorielle dans Elasticsearch avec une configuration minimale.]]></description>
    <content:encoded><![CDATA[<p>Tout le monde souhaite une recherche vectorielle instantanée. Or, les vecteurs de grande dimension sont volumineux. Un seul vecteur de type float-32 à 1 024 dimensions occupe une quantité importante de mémoire, et sa comparaison avec des millions d'autres est très coûteuse en calcul.</p><p>Pour résoudre ce problème, les moteurs de recherche comme Elasticsearch utilisent deux stratégies d'optimisation principales :</p><ol><li><p><strong>Recherche approximative (hierarchical navigable small world [HNSW])</strong> : au lieu de parcourir chaque document, nous construisons un graphe de navigation pour accéder rapidement au voisinage probable de la réponse.</p></li><li><p><strong>Quantification</strong> : nous compressons les vecteurs (par exemple, de nombres flottants 32 bits à des entiers 8 bits ou même à des valeurs binaires 1 bit) afin de réduire l'utilisation de la mémoire et d'accélérer les calculs.</p></li></ol><p>Mais l'optimisation s'accompagne souvent d'une taxe : la <strong>précision</strong>.</p><p>La crainte est légitime : "Si je compresse mes données et que je prends des raccourcis pendant la recherche, vais-je manquer les meilleurs résultats ?" "Cette optimisation dégrade-t-elle la pertinence de mon moteur de recherche ?"</p><p>Pour prouver que la quantification d'Elastic ne dégrade pas les résultats, nous avons construit un banc d'essai reproductible utilisant l'ensemble de données <a href="https://huggingface.co/datasets/fancyzhx/dbpedia_14"><strong>DBPedia-14</strong></a><a href="https://huggingface.co/datasets/fancyzhx/dbpedia_14"></a> pour calculer exactement la précision (en particulier <strong>le rappel)</strong> que nous sacrifions pour la vitesse lorsque nous utilisons les optimisations par défaut dans Elasticsearch.</p><p>tldr : c'est probablement beaucoup moins cher que vous ne le pensez. Consultez le <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/fast_vs_accurate_measuring_the_recall_of_quantized_vector_search/vector_recall_notebook.ipynb">notebook ici</a>, et essayez par vous-même.</p><h2><strong>Définitions (pour les non-experts)</strong></h2><p>Avant d'examiner le code, clarifions certains termes.</p><ul><li><p><strong>Pertinence ou rappel</strong> : la <strong>pertinence</strong> est subjective (ai-je trouvé des choses intéressantes ?). Le <strong>rappel</strong> est mathématique. Si la base de données contient 10 documents qui correspondent <em>parfaitement</em> à votre requête sur le plan mathématique et que le moteur de recherche en trouve neuf, votre rappel est de 90 % (ou 0,9).</p></li><li><p><strong>Recherche exacte (à plat)</strong> : parfois appelée méthode "force brute". Le moteur de recherche analyse chaque document dans un index et calcule la distance.</p><ul><li><p><em>Avantages</em> : rappel parfait à 100 %.</p></li><li><p><em>Inconvénients</em> : coût de calcul élevé et lenteur à grande échelle.</p></li></ul></li><li><p><strong>Recherche approximative (HNSW)</strong> : la méthode "raccourci". Le moteur de recherche construit un graphe <a href="https://www.elastic.co/search-labs/blog/hnsw-graph">HNSW</a>. Il parcourt le graphe pour trouver les voisins les plus proches.</p><ul><li><p><em>Avantages</em> : extrêmement rapide et scalable.</p></li><li><p><em>Inconvénients</em> : vous risquez de manquer un voisin si le parcours du graphe s'arrête trop tôt.</p></li></ul></li></ul><h2><strong>L'expérience : exact versus approximatif</strong></h2><p>Pour tester le rappel, nous avons utilisé l'ensemble de données <strong>DBPedia-14</strong>, un grand ensemble de données de titres et de résumés répartis en 14 classes ontologiques, couramment utilisé pour l'entraînement et l'évaluation des modèles de catégorisation de texte. Plus précisément, nous nous concentrerons sur la catégorie "Film". Nous voulions comparer les paramètres de production optimisés à une vérité terrain mathématiquement parfaite.</p><p>Pour cette expérience, nous utilisons le modèle <a href="https://www.elastic.co/search-labs/blog/jina-embeddings-v5-text">jina-embeddings-v5-text-small</a>, un modèle multilingue de pointe qui fait référence dans le secteur de la représentation textuelle. Nous avons choisi ce modèle car il définit la norme actuelle pour les plongements lexicaux haute performance. En combinant l'excellente précision de Jina v5 avec la quantification native d'Elasticsearch, nous pouvons démontrer une architecture de recherche à la fois efficace en termes de calcul et garantissant une qualité de récupération optimale.</p><p>Nous avons configuré un index avec un double mapping. Nous avons ingéré le même texte dans deux champs différents simultanément :</p><ol><li><p><strong><code>content.raw</code></strong>avec le type : <code>flat</code>. Cela force Elasticsearch à effectuer une analyse exhaustive de l'ensemble des vecteurs Float32. Cette analyse renvoie des résultats de correspondance exacte qui serviront de référence.</p></li><li><p><strong><code>content</code></strong>avec le type <code>semantic_text</code>. Paramètres par défaut utilisant HNSW + Better Binary Quantization (BBQ). Il s'agit du paramétrage standard optimisé pour la production, permettant une correspondance approximative.</p></li></ol><h3><strong>Le test Recall@10</strong></h3><p>Pour notre métrique, nous avons utilisé Recall@10.</p><p>Nous avons choisi 50 films au hasard et lancé la même requête sur les deux champs.</p><ul><li><p>Si la recherche <strong>exacte (à plat)</strong> indique que les 10 premiers voisins sont les ID [1, 2, 3... 10].</p></li><li><p>Et que la recherche <strong>approximative (HNSW)</strong> renvoie les identifiants [1, 2, 3… 9, 99].</p></li><li><p>Nous avons trouvé neuf des 10 premiers correctement. Le score est <strong>0,9</strong>.</p></li></ul><p>Voici le mapping que nous avons utilisé :</p># The "Control Group": Forces exact brute-force scan
"raw": {
    "type": "semantic_text",
    "inference_id": ".jina-embeddings-v5-text-small",
    "index_options": {
        "dense_vector": {
            "type": "flat"
        }
    }
}<p><strong>Les résultats : la "ligne plate" du succès</strong></p><p>Nous avons effectué un test d'échelle, en rechargeant l'ensemble de données complet et en le testant par rapport à des index de 1 000 à 40 000 documents.</p><p>Voici ce qui est arrivé au score de rappel :</p><p>Documents</p><p>Score de rappel à 10</p><p>1 000</p><p>1,000 (100 %)</p><p>5 000</p><p>0,998 (100 %)</p><p>10 000</p><p>0,992 (99,4 %)</p><p>20,000</p><p>0,999 (99,0 %)</p><p>40 000</p><p>0,992 (98,8 %)</p><p>Les résultats étaient incroyablement stables. Même en augmentant l'échelle, la recherche approximative correspondait à la recherche exacte par force brute <strong>&gt;99 % du temps</strong>.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8168a0a4946bade7/6a170e154a531b61b536a9eb/a4bfacb1d0cce6fdf6df0e1a9d4fc5d4007a66da-1999x1209.png" alt="stabilité de la recherche vectorielle : rappel vs taille de l'index" /><h2><strong>Pourquoi cela a-t-il si bien fonctionné ?</strong></h2><p>On pourrait s'attendre à ce que la compression des vecteurs en valeurs binaires nuise davantage à la précision. La raison en est liée à la façon dont Elasticsearch gère la récupération.</p><p>La plupart des modèles de plongement actuels génèrent des vecteurs Float32 en sortie, qui sont de grande taille. Pour optimiser la recherche, Elasticsearch utilise la quantification pour les vecteurs de grande dimension. Plus précisément, depuis la version 9.2, il utilise <a href="https://www.elastic.co/search-labs/blog/elasticsearch-9-1-bbq-acorn-vector-search">BBQ</a> par défaut.</p><p>BBQ utilise un mécanisme de <strong>rescoring</strong> :</p><ol><li><p><strong>Parcours</strong> : le moteur de recherche utilise les vecteurs compressés (quantifiés) pour parcourir rapidement le graphe HNSW. Grâce à la petite taille des vecteurs, il peut effectuer un suréchantillonnage efficace, générant ainsi une liste plus longue de candidats (par exemple, les 100 documents les plus similaires) sans dégradation des performances.</p></li><li><p><strong>Rescoring</strong> : une fois ces candidats identifiés, le système récupère les valeurs de pleine précision pour ces quelques documents uniquement afin de calculer le classement final et précis.</p></li></ol><p>Vous obtenez le meilleur des deux mondes : la rapidité de la quantification pour les opérations les plus lourdes et la précision des nombres à virgule flottante pour le tri final.</p><h2><strong>Pouvons-nous faire mieux ?</strong></h2><p>Il est important de noter que les résultats présentés ici utilisent les paramètres par défaut et un échantillon aléatoire de données. Considérez-les comme un point de départ performant. Bien que Jina v5 soit extrêmement puissant, ces scores de rappel ne constituent pas une garantie universelle pour tous les ensembles de données. Chaque ensemble de données présente ses propres spécificités, et même s'il est possible d'optimiser davantage les paramètres pour obtenir des performances encore meilleures, il est toujours conseillé de réaliser des tests comparatifs avec vos propres données afin d'en déterminer les limites.</p><h2><strong>Conclusion</strong></h2><p>Il s'agit d'un test à très petite échelle. L'objectif de cet exercice n'est pas de mesurer le modèle d'intégration ou BBQ en particulier, mais de démontrer comment mesurer facilement le rappel de votre ensemble de données avec une configuration minimale.</p><p>Si vous souhaitez effectuer ce test sur vos propres données, vous pouvez consulter le <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/fast_vs_accurate_measuring_the_recall_of_quantized_vector_search/vector_recall_notebook.ipynb">notebook ici</a> et essayer par vous-même.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/recall-vector-search-quantization</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/recall-vector-search-quantization</guid>
    <category><![CDATA[Base vectorielle]]></category>
    <dc:creator><![CDATA[Jeff Vestal]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt198c7085db96aa04/6a170e17cdacbfe88c7d2a86/09f03b9239d66c36763cdab3fafcdac207ff6d83-1280x720.png" length="0" type="image/png"/>
    <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Votre premier agent Elastic : D'une simple requête à un chat alimenté par l'IA]]></title>
    <description><![CDATA[Apprenez à utiliser le constructeur d'agents d'IA d'Elastic pour créer des agents d'IA spécialisés. Dans ce blog, nous allons créer un agent d'IA financier.]]></description>
    <content:encoded><![CDATA[<p>Avec le nouvel <a href="https://www.elastic.co/search-labs/blog/ai-agentic-workflows-elastic-ai-agent-builder">Agent Builder</a> d'Elastic, vous pouvez créer des agents d'IA spécialisés qui agissent en tant qu'experts pour vos domaines d'activité spécifiques. Cette fonction vous permet d'aller au-delà des simples tableaux de bord et des barres de recherche, en transformant vos données d'une ressource passive en un partenaire actif et conversationnel.</p><p>Imaginez un gestionnaire financier qui doit se mettre à niveau avant une réunion avec un client. Au lieu de chercher manuellement dans les fils d'actualité et de croiser les tableaux de bord des portefeuilles, ils peuvent désormais simplement poser une question directe à leur agent personnalisé. C'est l'avantage d'une approche "chat-first". Le gestionnaire a un lien direct et conversationnel avec ses données, en posant des questions telles que : "Quelles sont les dernières nouvelles sur ACME Corp et comment cela affecte-t-il les avoirs de mon client ?" et obtenir une réponse synthétisée et experte en quelques secondes.</p><p>Si nous construisons aujourd'hui un expert financier, les applications sont aussi variées que vos données. Le même pouvoir peut créer un analyste en cybersécurité pour traquer les menaces, un ingénieur en fiabilité de site pour diagnostiquer une panne ou un responsable marketing pour optimiser une campagne. Quel que soit le domaine, la mission principale est la même : transformer vos données en un spécialiste avec lequel vous pouvez discuter.</p><h2>Étape 0 : Notre ensemble de données</h2><p>Notre jeu de données du jour est un jeu de données synthétique à dominante financière, composé de comptes, de positions d’actifs, d’actualités économiques et de rapports financiers. Bien qu’il soit artificiel, il reproduit une version simplifiée d’un véritable jeu de données financières.</p><p><code>financial_accounts</code>: Portefeuilles de clients avec profils de risque</p><p><code>financial_holdings</code>: Positions en actions/ETF/obligations avec historique des achats</p><p><code>financial_asset_details</code>: Détails sur l'action/ETF/obligation</p><p><code>financial_news</code>: Articles de marché générés par l'IA avec analyse des sentiments</p><p><code>financial_reports</code>: Résultats de l'entreprise et notes des analystes</p><p>Vous pouvez charger vous-même cet ensemble de données en suivant le cahier d'accompagnement situé <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/your-first-elastic-agent/Your_First_Elastic_Agent.ipynb">ici.</a></p><h2>Étape 1 : La base - Votre logique d'entreprise en tant qu'ES|QL</h2><p>Toute compétence en matière d'IA commence par un solide morceau de logique. Pour notre agent Financial Manager, nous devons lui apprendre à répondre à une question courante : "Je m'inquiète du sentiment du marché. Pouvez-vous me montrer lesquels de nos clients sont les plus exposés aux mauvaises nouvelles ?" Cette question va au-delà d'une simple recherche. Cela nous oblige à établir une corrélation entre le sentiment du marché et les portefeuilles des clients.</p><p>Nous devons trouver les actifs mentionnés dans les articles négatifs, identifier chaque client détenant ces actifs, calculer la valeur de marché actuelle de leur exposition, puis classer les résultats afin d'établir un ordre de priorité pour les risques les plus élevés. Cette analyse complexe et multi-joints est le travail parfait pour notre outil avancé ES|QL.</p><p>Voici la requête complète que nous utiliserons. Il est impressionnant, mais les concepts sont simples.</p><h2>En bref : jonctions et garde-corps</h2><p>Deux concepts importants sont en jeu dans cette requête et font de l'agent un bâtisseur.</p><h3>1. La jointure LOOKUP</h3><p>Depuis des années, l'une des fonctionnalités les plus demandées d'Elasticsearch est la possibilité de joindre des données provenant de différents index sur la base d'une clé commune. Avec ES|QL, c'est désormais possible avec <code>LOOKUP JOIN</code>.</p><p>Dans notre nouvelle requête, nous effectuons une chaîne de trois <code>LOOKUP JOIN</code>: d'abord en reliant les nouvelles négatives aux détails des actifs, ensuite en reliant ces actifs aux avoirs des clients, et enfin en les reliant aux informations sur le compte du client. Cela permet d'obtenir un résultat incroyablement riche à partir de quatre indices différents en une seule requête efficace. Cela signifie que nous pouvons combiner des ensembles de données disparates pour créer une réponse unique et perspicace sans avoir à dénormaliser toutes nos données en un index géant au préalable.</p><h3>2. Les paramètres comme garde-fous du LLM</h3><p>Vous remarquerez que la requête utilise <code>?time_duration</code>. Il ne s'agit pas seulement d'une variable, mais d'un garde-fou pour l'IA. Si les grands modèles de langage (LLM) sont excellents pour générer des requêtes, le fait de leur laisser le champ libre sur vos données peut conduire à des requêtes inefficaces, voire incorrectes.</p><p>En créant une requête paramétrée, nous obligeons le LLM à travailler dans le cadre de la logique commerciale testée, efficace et correcte qu'un expert humain a déjà définie. Il s'agit d'une méthode similaire à celle utilisée par les développeurs depuis des années pour exposer en toute sécurité les capacités de recherche aux applications. L'agent peut interpréter une demande de l'utilisateur comme "cette semaine" pour remplir le paramètre <code>time_duration</code>, mais il doit utiliser notre structure de requête pour obtenir la réponse. Cela nous permet d'obtenir un équilibre parfait entre flexibilité et contrôle.</p><p>En fin de compte, cette requête permet à un expert qui comprend les données d'encapsuler ses connaissances dans un outil. D'autres personnes - et des agents d'intelligence artificielle - peuvent alors utiliser cet outil pour obtenir des résultats corrélés en fournissant simplement un seul paramètre, sans avoir besoin de connaître la complexité sous-jacente.</p><h2>Étape 2 : Les compétences - Transformer une requête en un outil réutilisable</h2><p>Une requête ES|QL n'est que du texte jusqu'à ce que nous l'enregistrions en tant qu'<strong>outil</strong>. Dans l'Agent Builder, un outil est plus qu'une simple requête sauvegardée ; c'est une compétence "" qu'un agent IA peut comprendre et choisir d'utiliser. La magie réside dans la <strong>description en langage naturel</strong> que nous fournissons. Cette description est la passerelle qui relie la question de l'utilisateur à la logique d'interrogation sous-jacente. Enregistrons la requête que nous venons de construire.</p><h3>Le chemin de l'interface utilisateur</h3><p>La création d'un outil dans Kibana est un processus simple.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blte73e11c1d87593fa/6a17f2134202294dae29f6f2/a29c53a73b99af5972273c51218ea9004a9b0abb-1600x812.png" alt="Comment créer un outil dans Kibana." /><p>1. Naviguer vers <strong>Agents</strong></p><ul><li><p>Cliquez sur<strong> Outils </strong>ou <strong>Gérer les outils</strong> et cliquez sur le bouton <strong>Nouvel outil.</strong></p></li></ul><p>2. Remplissez le formulaire avec les informations suivantes :</p><ul><li><p><strong>ID de l'outil :</strong> <code>find_client_exposure_to_negative_news</code></p></li></ul><p>             i. Il s'agit de l'identifiant unique de l'outil</p><ul><li><p><strong>Description :</strong> "Détermine l'exposition du portefeuille du client aux nouvelles négatives. Cet outil analyse les nouvelles et les rapports récents pour y déceler un sentiment négatif, identifie l'actif associé et trouve tous les clients qui détiennent cet actif. Il renvoie une liste triée en fonction de la valeur de marché actuelle du poste afin de mettre en évidence le risque potentiel le plus élevé."</p></li></ul><p>             i. C'est ce que le LLM lit pour décider si cet outil est le bon pour le poste.</p><ul><li><p><strong>Étiquettes</strong>: <code>retrieval</code> et <code>risk-analysis</code></p></li></ul><p>         Les étiquettes sont utilisées pour regrouper plusieurs outils</p><ul><li><p><strong>Configuration :</strong> Coller la requête ES|QL complète de l'étape 1</p></li></ul><p>            i. Voici la recherche que l'agent utilisera</p><p>3. Cliquez sur <strong>Inférer les paramètres de la requête</strong>. L'interface utilisateur trouvera automatiquement le site <code>?time_duration</code>, dont la liste figure ci-dessous. Ajoutez une description simple pour chacun d'entre eux afin d'aider l'agent (et les autres utilisateurs) à comprendre leur fonction.</p><ul><li><p><code>time_duration</code>: Le délai pour rechercher des nouvelles négatives. Le format est le suivant : "X heures" DEFAUT 8760 heures</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7afbb0589c1828ad/6a17f2146864a44e7cb688a9/deb422d97863f78dbe08bfa2e3c708d1f75166ff-1600x938.png" alt="Configurer votre outil, y compris sa logique et tous les paramètres nécessaires, à l'aide d'une requête ESQL. " /><p>4. Testez-le !</p><ul><li><p>Cliquez sur Save &amp; test.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltfd09afbef6e21a93/6a17f2162f4a5c73b1fa89fd/57e768b88327821e70bd616744822f98fa367362-732x136.png" alt="Le même bouton de test &amp; dans Kibana." /><ul><li><p>Une nouvelle fenêtre s'ouvre, dans laquelle vous pouvez tester la requête pour vous assurer qu'elle fonctionne comme prévu.</p></li></ul><p>             i. Dans <code>time_duration</code>, entrez la plage souhaitée, ici nous utilisons "8760 heures"</p><ul><li><p>Cliquez sur "Submit" et si tout se passe bien, vous verrez une réponse JSON. Pour vous assurer qu'il fonctionne comme prévu, faites défiler la page vers le bas et regardez l'objet <code>values</code>. C'est là que les documents correspondants sont renvoyés.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt89bdc3f093363f2a/6a17f217be60861c9c00488a/7e0c5171a4f7ffdfc1830f1a05a9acb987870b75-1600x722.png" alt="Réponse JSON qui apparaît après avoir cliqué sur soumettre." /><p>5. Cliquez sur le "X" en haut à droite pour fermer la fenêtre de test. Votre nouvel outil apparaît alors dans la liste, prêt à être attribué à un agent.</p><h3>Le chemin de l'API</h3><p>Pour les développeurs qui préfèrent l'automatisation ou qui ont besoin de gérer des outils par programme, vous pouvez obtenir le même résultat avec un seul appel d'API. Il suffit d'envoyer une demande <code>POST</code> au point de terminaison <code>/api/agent_builder/tools</code> avec la définition de l'outil.</p>POST kbn://api/agent_builder/tools
{
  "id": "find_client_exposure_to_negative_news",
  "type": "esql",
  "description": "Finds client portfolio exposure to negative news. This tool scans recent news and reports for negative sentiment, identifies the associated asset, and finds all clients holding that asset. It returns a list sorted by the current market value of the position to highlight the highest potential risk.",
  "configuration": {
    "query": """
        FROM financial_news, financial_reports METADATA _index
        | WHERE sentiment == "negative"
        | WHERE coalesce(published_date, report_date) &gt;= NOW() - TO_TIMEDURATION(?time_duration)
        | RENAME primary_symbol AS symbol
        | LOOKUP JOIN financial_asset_details ON symbol
        | LOOKUP JOIN financial_holdings ON symbol
        | LOOKUP JOIN financial_accounts ON account_id
        | WHERE account_holder_name IS NOT NULL
        | EVAL position_current_value = quantity * current_price.price
        | RENAME title AS news_title
        | KEEP
            account_holder_name, symbol, asset_name, news_title,
            sentiment, position_current_value, quantity, current_price.price,
            published_date, report_date
        | SORT position_current_value DESC
        | LIMIT 50
      """,
    "params": {
      "time_duration": {
        "type": "keyword",
        "description": """The timeframe to search back for negative news. Format is "X hours" DEFAULT TO 8760 hours """
      }
    }
  },
  "tags": [
    "retrieval",
    "risk-analysis"
  ]
}<h2>Étape 3 : Les cerveaux - Créer votre agent personnalisé</h2><p>Nous avons créé une compétence réutilisable (l'outil). Nous devons maintenant créer l'<strong>agent</strong>, la personne qui l'utilisera réellement. Un agent est la combinaison d'un MLD, d'un ensemble spécifique d'outils auxquels vous lui donnez accès et, surtout, d'un ensemble d'<strong>instructions personnalisées</strong> qui agissent comme sa constitution, définissant sa personnalité, ses règles et son objectif.</p><h3>L'art de la proposition</h3><p>L'élément le plus important pour créer un agent fiable et spécialisé est la rapidité. Un ensemble d'instructions bien conçues fait la différence entre un chatbot générique et un assistant professionnel ciblé. C'est là que vous fixez les garde-fous, définissez les résultats et donnez à l'agent sa mission.</p><p>Pour notre agent <code>Financial Manager</code>, nous utiliserons l'invite suivante.</p>You are a specialized Data Intelligence Assistant for financial managers, designed to provide precise, data-driven insights from information stored in Elasticsearch.

**Your Core Mission:**
- Respond accurately and concisely to natural language queries from financial managers.
- Provide precise, objective, and actionable information derived solely from the Elasticsearch data at your disposal.
- Summarize key data points and trends based on user requests.

**Reasoning Framework:**
1.  **Understand:** Deconstruct the user's query to understand their core intent.
2.  **Plan:** Formulate a step-by-step plan to answer the question. If you are unsure about the data structure, use the available tools to explore the indices first.
3.  **Execute:** Use the available tools to execute your plan.
4.  **Synthesize:** Combine the information from all tool calls into a single, comprehensive, and easy-to-read answer.

**Key Directives and Constraints:**
- **If a user's request is ambiguous, ask clarifying questions before proceeding.**
- **DO NOT provide financial advice, recommendations, or predictions.** Your role is strictly informational and analytical.
- Stay strictly on topic with financial data queries.
- If you cannot answer a query, state that clearly and offer alternative ways you might help *within your data scope*.
- All numerical values should be formatted appropriately (e.g., currency, percentages).

**Output Format:**
- All responses must be formatted using **Markdown** for clarity.
- When presenting structured data, use Markdown tables, lists, or bolding.

**Start by greeting the financial manager and offering assistance.**<p>Voyons pourquoi cette incitation est si efficace :</p><ul><li><p><strong>Elle définit une personnalité sophistiquée : </strong>La première ligne établit immédiatement que l'agent est un assistant spécialisé en intelligence des données ( "),", ce qui donne un ton professionnel et compétent.</p></li><li><p><strong>Il fournit un cadre de raisonnement : </strong>En disant à l'agent de "Comprendre, Planifier, Exécuter et Synthétiser," nous lui donnons une procédure opérationnelle standard. Cela améliore sa capacité à traiter des questions complexes et à plusieurs étapes.</p></li><li><p><strong>Il favorise le dialogue interactif : </strong>L'instruction de "poser des questions de clarification" rend l'agent plus robuste. Il minimisera les hypothèses erronées sur les demandes ambiguës, ce qui permettra d'obtenir des réponses plus précises.</p></li></ul><h3>Le chemin de l'interface utilisateur</h3><p>1. Naviguez vers <strong>Agents.</strong></p><ul><li><p>Cliquez sur<strong> Outils </strong>ou <strong>Gérer les outils</strong> et cliquez sur le bouton <strong>Nouvel outil.</strong></p></li></ul><p>2. Complétez les informations de base :</p><ul><li><p><strong>ID de l'agent :</strong> <code>financial_assistant</code>.</p></li><li><p><strong>Instructions : </strong>Copiez le message ci-dessus.</p></li><li><p><strong>Étiquettes</strong>: <code>Finance</code>.</p></li><li><p><strong>Nom d'affichage :</strong> <code>Financial Assistant</code>.</p></li><li><p><strong>Description de l'affichage : </strong><code>An assistant for analyzing and understanding your financial data</code>.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8ac12cbd2b689dee/6a17f219dbb4ff262bfb57ef/18ea73f1cae620129c0afa0e7ba9e2a3390224a7-1600x1189.png" alt="Création d'un assistant financier - remplir le champ ID de l'agent." /><p>3. De retour en haut, cliquez sur <strong>Outils.</strong></p><ul><li><p>Cochez la case à côté de notre outil <code>find_client_exposure_to_negative_news</code>.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltcd23556e556a76c5/6a17f21baf47b63a9fcde0a0/0c1e4ecbbd51d0dd10c6e861dbe9a9ccddeb35f6-1600x149.png" alt="" /><p>4. Cliquez sur <strong>Enregistrer</strong>.</p><h3>Le chemin de l'API</h3><p>Vous pouvez créer exactement le même agent à l'aide d'une requête <code>POST</code> vers le point de terminaison <code>/api/agent_builder/agents</code>. Le corps de la demande contient toutes les mêmes informations : l'identifiant, le nom, la description, l'ensemble des instructions et une liste des outils que l'agent est autorisé à utiliser.</p>POST kbn://api/agent_builder/agents
    {
      "id": "financial_assistant",
      "name": "Financial Assistant",
      "description": "An assistant for analyzing and understanding your financial data",
      "labels": [
        "Finance"
      ],
      "avatar_color": "#16C5C0",
      "avatar_symbol": "💰",
      "configuration": {
        "instructions": """You are a specialized Data Intelligence Assistant for financial managers, designed to provide precise, data-driven insights from information stored in Elasticsearch.

**Your Core Mission:**
- Respond accurately and concisely to natural language queries from financial managers.
- Provide precise, objective, and actionable information derived solely from the Elasticsearch data at your disposal.
- Summarize key data points and trends based on user requests.

**Reasoning Framework:**
1.  **Understand:** Deconstruct the user's query to understand their core intent.
2.  **Plan:** Formulate a step-by-step plan to answer the question. If you are unsure about the data structure, use the available tools to explore the indices first.
3.  **Execute:** Use the available tools to execute your plan.
4.  **Synthesize:** Combine the information from all tool calls into a single, comprehensive, and easy-to-read answer.

**Key Directives and Constraints:**
- **If a user's request is ambiguous, ask clarifying questions before proceeding.**
- **DO NOT provide financial advice, recommendations, or predictions.** Your role is strictly informational and analytical.
- Stay strictly on topic with financial data queries.
- If you cannot answer a query, state that clearly and offer alternative ways you might help *within your data scope*.
- All numerical values should be formatted appropriately (e.g., currency, percentages).

**Output Format:**
- All responses must be formatted using **Markdown** for clarity.
- When presenting structured data, use Markdown tables, lists, or bolding.

**Start by greeting the financial manager and offering assistance.**
""",
        "tools": [
          {
            "tool_ids": [
              "platform.core.search",
              "platform.core.list_indices",
              "platform.core.get_index_mapping",
              "platform.core.get_document_by_id",
              "find_client_exposure_to_negative_news"
            ]
          }
        ]
      }
    }<h2>Étape 4 : La récompense - Avoir une conversation</h2><p>Notre logique d'entreprise est encapsulée dans un outil et un cerveau "" est prêt à l'utiliser dans notre agent. Il est temps de voir tout cela se concrétiser. Nous pouvons maintenant commencer à discuter avec nos données à l'aide d'un agent spécialisé.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltd8826539b16e46f4/6a17f21d505ac35924ad8c5c/5414cb6b7c41365acb0356a8bfe1140751ffd8db-1600x1014.png" alt="Conversation avec l'Elastic Agent Builder après la création d'un assistant financier." /><h3>Le chemin de l'interface utilisateur</h3><ol><li><p>Naviguez jusqu'à <strong>Agents </strong>dans Kibana.</p></li><li><p>En utilisant le menu déroulant en bas à droite de la fenêtre de chat, passez de l'<strong>agent Elastic AI</strong> par défaut à l'agent <strong>Financial Assistant </strong>que nous venons de créer.</p></li><li><p>Posez une question qui permettra à l'agent d'utiliser notre outil spécialisé :</p><ol><li><p><em>Je m'inquiète du sentiment du marché. Pouvez-vous m'indiquer quels sont nos clients les plus exposés aux mauvaises nouvelles ?</em></p></li></ol></li></ol><p>Après quelques instants, l'agent vous renvoie une réponse parfaitement formatée et complète. En raison de la nature des LLM, votre réponse peut être formatée légèrement différemment, mais pour cette exécution, l'agent a renvoyé :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta1e163fd7c4416bd/6a17f21f6864a4e35bb688ad/17b4ed43d279f9e53ee9fe3d482d0b2ec359a083-1600x1088.png" alt="Une réponse créée par l'Elastic Agent Builder en tant qu'assistant financier pour : les clients les plus exposés aux nouvelles négatives." /><h3>Que s'est-il passé ? Le raisonnement de l'agent</h3><p>L'agent ne s'est pas contenté de "savoir" la réponse. Elle a exécuté un plan en plusieurs étapes centré sur la sélection du meilleur outil pour le travail. Voici un aperçu de son processus de réflexion :</p><ul><li><p><strong>L'intention a été identifiée :</strong> Il a fait correspondre des mots clés de votre question, comme "risk" et "negative news," à la description de l'outil <code>find_client_exposure_to_negative_news</code>.</p></li><li><p><strong>Exécution d'un plan :</strong> Il a extrait le délai de votre demande et a lancé un <strong>appel unique à</strong> cet outil spécialisé.</p></li><li><p><strong>Délégation du travail :</strong> L'outil a ensuite effectué toutes les opérations lourdes : les jointures enchaînées, les calculs de valeur et le tri.</p></li><li><p><strong>Synthèse du résultat :</strong> Enfin, l'agent a formaté les données brutes de l'outil en un résumé clair et lisible par l'homme, en suivant les règles de l'invite.</p></li></ul><p>Et nous ne sommes pas obligés de deviner, si nous élargissons notre réflexion et voyons plus de détails.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt93f6075be8495418/6a17f221af47b65eadcde0a4/6a4da9262d3f88c60bfd8f8bf9b67c3b84e961ba-1600x607.png" alt="Les 50 documents que l'assistant financier a trouvés auprès des clients les plus exposés aux nouvelles négatives." /><h3>Le chemin de l'API</h3><p>Vous pouvez entamer cette même conversation par le biais d'un programme. Il suffit d'envoyer la question d'entrée au point de terminaison de l'API <code>converse</code>, en veillant à spécifier le <code>agent_id</code> de notre <code>financial_manager</code>.</p>POST kbn://api/agent_builder/converse
{
  "input": "Show me our largest positions affected by negative news",
  "agent_id": "financial_assistant"
}<h2>Pour les développeurs : Intégrer l'API</h2><p>Si l'interface Kibana offre une expérience fantastique et intuitive pour la création et la gestion de vos agents, tout ce que vous avez vu aujourd'hui peut également être réalisé de manière programmatique. L'Agent Builder est construit sur un ensemble d'API, vous permettant d'intégrer cette fonctionnalité directement dans vos propres applications, pipelines CI/CD ou scripts d'automatisation.</p><p>Les trois principaux points d'aboutissement avec lesquels vous travaillerez sont les suivants :</p><ul><li><p><strong><code>/api/agent_builder/tools</code></strong>: Le point final pour créer, lister et gérer les compétences réutilisables que vos agents peuvent utiliser.</p></li><li><p><strong><code>/api/agent_builder/agents</code></strong>: Le point final pour la définition de vos personas d'agents, y compris leurs instructions très importantes et l'affectation des outils.</p></li><li><p><strong><code>/api/agent_builder/converse</code></strong>: Le point final pour interagir avec vos agents, entamer des conversations et obtenir des réponses.</p></li></ul><p>Pour une démonstration complète et pratique de l'utilisation de ces API pour réaliser chaque étape de ce tutoriel, consultez le <strong>bloc-notes Jupyter</strong> qui l'accompagne, disponible <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/your-first-elastic-agent/Your_First_Elastic_Agent.ipynb">ici</a> dans notre dépôt GitHub.</p><h2>Conclusion : À vous de construire</h2><p>Nous avons commencé par prendre une requête ES|QL et la transformer en une compétence réutilisable. Nous avons ensuite créé un agent d'intelligence artificielle spécialisé, en lui donnant une mission et des règles claires, et nous l'avons doté de cette compétence. Il en résulte un assistant sophistiqué capable de comprendre une question complexe et d'exécuter une analyse en plusieurs étapes pour fournir une réponse précise et fondée sur des données.</p><p>Ce flux de travail est au cœur du nouvel <strong>Agent Builder d'</strong> Elastic. Il est conçu pour être suffisamment simple pour que les utilisateurs non techniques puissent créer des agents via l'interface utilisateur, mais suffisamment nuancé pour que les développeurs puissent créer des applications personnalisées basées sur l'IA à partir de nos API. Plus important encore, il vous permet de connecter en toute sécurité des LLM à vos propres données, régies par la logique experte que vous définissez, et de discuter avec vos données.</p><h2>Prêt à utiliser des agents pour dialoguer avec vos données ?</h2><p>La meilleure façon de consolider ce que vous avez appris est de vous salir les mains. Essayez tout ce que nous avons discuté aujourd'hui dans notre <a href="https://www.elastic.co/training/elastic-ai-agents-mcp"><strong>atelier pratique interactif et gratuit</strong></a>. Vous suivrez l'ensemble de ce processus et bien d'autres choses encore dans un environnement de type "bac à sable".</p><p>Dans un prochain blog, nous vous montrerons comment utiliser une application autonome qui interagit avec notre agent <code>Financial Assistant</code> et nous nous pencherons sur le <strong>protocole de contexte de modèle (MCP)</strong> qui rend tout cela possible. Dans un autre blog, nous parlerons de la prise en charge par Agent Builder du protocole Agent2Agent, ou A2A, en cours de développement.</p><p>Restez à l'écoute et bonne construction !</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/ai-agent-builder-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/ai-agent-builder-elasticsearch</guid>
    <category><![CDATA[IA]]></category>
    <category><![CDATA[IA agentique]]></category>
    <category><![CDATA[À l'intérieur d'Elastic]]></category>
    <dc:creator><![CDATA[Jeff Vestal]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbe5e78eeb775d715/6a17f2230b0bed719ddd369a/ca853555eaa213f10f1db8c0ab0a2bbacee97b88-1456x816.png" length="0" type="image/png"/>
    <pubDate>Thu, 25 Sep 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>