<?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[Justin Castilla - 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[Justin Castilla - 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/justin-castilla</link>
    </image>
    <link>https://www.elastic.co/fr/search-labs/author/justin-castilla</link>
    <atom:link href="https://www.elastic.co/fr/search-labs/rss/author/justin-castilla.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[fr]]></language>
    <lastBuildDate>Mon, 28 Sep 2026 04:22:21 GMT</lastBuildDate>
  <item>
    <title><![CDATA[Création d'une salle de presse avec agent LLM, protocole A2A et MCP dans Elasticsearch : Partie II]]></title>
    <description><![CDATA[Découvrez comment construire une salle de presse hybride spécialisée pour les agents LLM en utilisant le protocole A2A pour la collaboration entre agents et MCP pour l'accès aux outils dans Elasticsearch.]]></description>
    <content:encoded><![CDATA[<h2>A2A et MCP : le code en action</h2><p>Cet article est le complément de l'article "Creating an LLM Agent newsroom with A2A protocol and MCP in Elasticsearch !", qui expliquait les avantages de la mise en œuvre des architectures A2A et MCP au sein du même agent afin de profiter pleinement des avantages uniques des deux frameworks. Un <a href="https://github.com/justincastilla/elastic-newsroom">référentiel</a> est disponible si vous souhaitez exécuter la démo par vous-même.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt232e466d2153c764/6a17f15f631730042d585b8d/7196f004089127f83547b2e5dc3f663205cfcdce-1162x1600.png" alt="A2A &amp; Flux de travail de l'agent de protocole MCP" /><p>Voyons comment les agents de notre salle de presse collaborent en utilisant à la fois A2A et MCP pour produire un article. Le référentiel d'accompagnement pour voir les agents en action est disponible <a href="https://github.com/justincastilla/elastic-newsroom">ici.</a></p><h3>Étape 1 : Attribution de l'histoire</h3><p>Le <strong>chef de l'information</strong> (agissant en tant que client) attribue un sujet :</p>{
  "message_type": "task_request",
  "sender": "news_chief",
  "receiver": "reporter_agent",
  "payload": {
    "task_id": "story_renewable_energy_2024",
    "assignment": {
      "topic": "Renewable Energy Adoption in Europe",
      "angle": "Policy changes driving solar and wind expansion",
      "target_length": 1200,
      "deadline": "2025-09-30T18:00:00Z"
    }
  }
}<h3>Étape 2 : Le journaliste demande des recherches</h3><p>L'<strong>agent rapporteur</strong> reconnaît qu'il a besoin d'informations générales et délègue à l'<strong>agent chercheur</strong> par l'intermédiaire de l'A2A :</p>{
  "message_type": "task_request",
  "sender": "reporter_agent",
  "receiver": "researcher_agent",
  "payload": {
    "task_id": "research_eu_renewable_2024",
    "parent_task_id": "story_renewable_energy_2024",
    "capability": "fact_gathering",
    "parameters": {
      "queries": [
        "EU renewable energy capacity 2024",
        "Solar installations growth Europe",
        "Wind energy policy changes 2024"
      ],
      "depth": "comprehensive"
    }
  }
}<h3>Étape 3 : Le rapporteur demande le contexte historique à l'agent d'archivage</h3><p>L'<strong>agent rapporteur</strong> reconnaît que le contexte historique renforcerait l'histoire. Il délègue à l'<strong>agent d'archivage</strong> (alimenté par l'<a href="https://www.elastic.co/docs/solutions/search/elastic-agent-builder">agent A2A d'Elastic</a>), via A2A, le soin d'effectuer des recherches dans les archives d'articles de la salle de presse alimentées par Elasticsearch :</p>{
  "message_type": "task_request",
  "sender": "reporter_agent",
  "receiver": "archive_agent",
  "payload": {
    "task_id": "archive_search_renewable_2024",
    "parent_task_id": "story_renewable_energy_2024",
    "capability": "search_archive",
    "parameters": {
      "query": "European renewable energy policy changes and adoption trends over past 5 years",
      "focus_areas": ["solar", "wind", "policy", "Germany", "France"],
      "time_range": "2019-2024",
      "result_count": 10
    }
  }
}<h3>Étape 4 : L'agent d'archivage utilise l'agent Elastic A2A avec MCP</h3><p>L'<strong>agent d'archivage</strong> utilise l'agent A2A d'Elastic, qui à son tour utilise MCP pour accéder aux outils Elasticsearch. Ceci démontre l'architecture hybride où A2A permet la collaboration des agents tandis que MCP fournit l'accès aux outils :</p># Archive Agent using Elastic A2A Agent
async def search_historical_articles(self, query_params):
    # The Archive Agent sends a request to Elastic's A2A Agent
    elastic_response = await self.a2a_client.send_request(
        agent="elastic_agent",
        capability="search_and_analyze",
        parameters={
            "natural_language_query": query_params["query"],
            "index_pattern": "newsroom-articles-*",
            "filters": {
                "topics": query_params["focus_areas"],
                "date_range": query_params["time_range"]
            },
            "analysis_type": "trend_analysis"
        }
    )
    
    # Elastic's A2A Agent internally uses MCP tools:
    # - platform.core.search (to find relevant articles)
    # - platform.core.generate_esql (to analyze trends)
    # - platform.core.index_explorer (to identify relevant indices)
    
    return elastic_response<p>L'<strong>agent d'archivage</strong> reçoit des données historiques complètes de l'agent A2A d'Elastic et les renvoie au rapporteur :</p>{
  "message_type": "task_response",
  "sender": "archive_agent",
  "receiver": "reporter_agent",
  "payload": {
    "task_id": "archive_search_renewable_2024",
    "status": "completed",
    "archive_data": {
      "historical_articles": [
        {
          "title": "Germany's Energiewende: Five Years of Solar Growth",
          "published": "2022-06-15",
          "key_points": [
            "Germany added 7 GW annually 2020-2022",
            "Policy subsidies drove 60% of growth"
          ],
          "relevance_score": 0.94
        },
        {
          "title": "France Balances Nuclear and Renewables",
          "published": "2023-03-20",
          "key_points": [
            "France increased renewable target to 40% by 2030",
            "Solar capacity doubled 2021-2023"
          ],
          "relevance_score": 0.89
        }
      ],
      "trend_analysis": {
        "coverage_frequency": "EU renewable stories increased 150% since 2019",
        "emerging_themes": ["policy incentives", "grid modernization", "battery storage"],
        "coverage_gaps": ["Small member states", "offshore wind permitting"]
      },
      "total_articles_found": 47,
      "search_confidence": 0.91
    }
  }
}<p>Cette étape montre comment l'agent A2A d'Elastic s'intègre dans le flux de travail de la salle de presse. L'Archive Agent (un agent spécifique à la salle de presse) se coordonne avec l'A2A Agent d'Elastic (un spécialiste tiers) pour exploiter les puissantes capacités de recherche et d'analyse d'Elasticsearch. L'agent Elastic utilise MCP en interne pour accéder aux outils Elasticsearch, ce qui montre la séparation nette entre la coordination de l'agent (A2A) et l'accès aux outils (MCP).</p><h3>Étape 5 : Le chercheur utilise les serveurs MCP</h3><p>L'<strong>agent chercheur</strong> accède à plusieurs serveurs MCP pour recueillir des informations :</p># Researcher Agent using MCP to access tools
async def gather_facts(self, queries):
    results = []
    
    # Use News API MCP Server
    news_data = await self.mcp_client.invoke_tool(
        server="news_api_mcp",
        tool="search_articles",
        parameters={
            "query": queries[0],
            "date_range": "2024-01-01 to 2024-09-30",
            "sources": ["reuters", "bloomberg", "euractiv"]
        }
    )
    
    # Use Statistics MCP Server
    stats_data = await self.mcp_client.invoke_tool(
        server="eurostat_mcp",
        tool="get_energy_statistics",
        parameters={
            "metrics": ["solar_capacity_mw", "wind_capacity_mw"],
            "countries": ["EU27"],
            "year": 2024
        }
    )
    
    # Use Fact-Checking MCP Server
    verified_facts = await self.mcp_client.invoke_tool(
        server="factcheck_mcp",
        tool="verify_claims",
        parameters={
            "claims": [
                "EU solar capacity increased 40% in 2024",
                "Germany leads in wind installations"
            ]
        }
    )
    
    return self._synthesize_research(news_data, stats_data, verified_facts)<h3>Étape 6 : Le chercheur renvoie les données au rapporteur</h3><p>L'<strong>agent chargé de la recherche</strong> renvoie la recherche complète par l'intermédiaire de l'A2A :</p>{
  "message_type": "task_response",
  "sender": "researcher_agent",
  "receiver": "reporter_agent",
  "payload": {
    "task_id": "research_eu_renewable_2024",
    "status": "completed",
    "research_data": {
      "key_facts": [
        {
          "claim": "EU solar capacity reached 260 GW in 2024",
          "source": "Eurostat Q3 2024 Report",
          "confidence": 0.95,
          "verified": true
        },
        {
          "claim": "Germany installed 12 GW of wind capacity in 2024",
          "source": "German Federal Network Agency",
          "confidence": 0.92,
          "verified": true
        }
      ],
      "statistics": {
        "solar_growth_rate": "35%",
        "wind_growth_rate": "28%"
      },
      "sources_count": 15
    }
  }
}<h3>Étape 7 : Le journaliste rédige un article</h3><p>L'<strong>agent rapporteur</strong> utilise les données de recherche et ses propres capacités LLM pour rédiger l'article. Pendant la rédaction, le Reporter utilise les serveurs MCP pour le style et les modèles :</p># Reporter Agent writing with MCP assistance
async def write_article(self, research_data, assignment):
    # Get style guidelines via MCP
    style_guide = await self.mcp_client.get_resource(
        server="newsroom_mcp",
        resource="style://editorial/ap_style_guide"
    )
    
    # Get article template via MCP
    template = await self.mcp_client.get_resource(
        server="newsroom_mcp",
        resource="template://articles/news_story"
    )
    
    # Generate article using LLM + research + style
    draft = await self.llm.generate(
        prompt=f"""
        Write a news article following these guidelines:
        {style_guide}
        
        Using this template:
        {template}
        
        Based on this research:
        {research_data}
        
        Assignment: {assignment}
        """
    )
    
    # Self-evaluate confidence in claims
    confidence_check = await self._evaluate_confidence(draft)
    
    return draft, confidence_check<h3>Étape 8 : le manque de confiance déclenche une nouvelle recherche</h3><p>L'<strong>agent déclarant</strong> évalue son projet et constate qu'une créance a un faible degré de confiance. Il envoie une autre demande à l'<strong>agent du chercheur :</strong></p>{
  "message_type": "collaboration_request",
  "sender": "reporter_agent",
  "receiver": "researcher_agent",
  "payload": {
    "request_type": "fact_verification",
    "claims": [
      {
        "text": "France's nuclear phase-down contributed to 15% increase in renewable capacity",
        "context": "Discussing policy drivers for renewable growth",
        "current_confidence": 0.45,
        "required_confidence": 0.80
      }
    ],
    "urgency": "high"
  }
}<p>Le <strong>chercheur</strong> vérifie l'allégation à l'aide des serveurs MCP de vérification des faits et renvoie les informations mises à jour :</p>{
  "message_type": "collaboration_response",
  "sender": "researcher_agent",
  "receiver": "reporter_agent",
  "payload": {
    "verified_claims": [
      {
        "original_claim": "France's nuclear phase-down contributed to 15% increase...",
        "verified_claim": "France's renewable capacity increased 18% in 2024, partially offsetting reduced nuclear output",
        "confidence": 0.88,
        "corrections": "Percentage was 18%, not 15%; nuclear phase-down is gradual, not primary driver",
        "sources": ["RTE France", "French Energy Ministry Report 2024"]
      }
    ]
  }
}<h3>Étape 9 : Le journaliste révise le texte et le soumet au rédacteur en chef</h3><p>Le <strong>rapporteur</strong> incorpore les faits vérifiés et envoie le projet complet à l'<strong>agent rédacteur</strong> par l'intermédiaire de l'A2A :</p>{
  "message_type": "task_request",
  "sender": "reporter_agent",
  "receiver": "editor_agent",
  "payload": {
    "task_id": "edit_renewable_story",
    "parent_task_id": "story_renewable_energy_2024",
    "content": {
      "headline": "Europe's Renewable Revolution: Solar and Wind Surge 30% in 2024",
      "body": "[Full article text...]",
      "word_count": 1185,
      "sources": [/* array of sources */]
    },
    "editing_requirements": {
      "check_style": true,
      "check_facts": true,
      "check_seo": true
    }
  }
}<h3>Étape 10 : Examens des éditeurs à l'aide des outils MCP</h3><p>L'<strong>agent rédacteur</strong> utilise plusieurs serveurs MCP pour réviser l'article :</p># Editor Agent using MCP for quality checks
async def review_article(self, content):
    # Grammar and style check
    grammar_issues = await self.mcp_client.invoke_tool(
        server="grammarly_mcp",
        tool="check_document",
        parameters={"text": content["body"]}
    )
    
    # SEO optimization check
    seo_analysis = await self.mcp_client.invoke_tool(
        server="seo_mcp",
        tool="analyze_content",
        parameters={
            "headline": content["headline"],
            "body": content["body"],
            "target_keywords": ["renewable energy", "Europe", "solar", "wind"]
        }
    )
    
    # Plagiarism check
    originality = await self.mcp_client.invoke_tool(
        server="plagiarism_mcp",
        tool="check_originality",
        parameters={"text": content["body"]}
    )
    
    # Generate editorial feedback
    feedback = await self._generate_feedback(
        grammar_issues, 
        seo_analysis, 
        originality
    )
    
    return feedback<p>Le <strong>rédacteur en chef</strong> approuve l'article et le transmet :</p>{
  "message_type": "task_response",
  "sender": "editor_agent",
  "receiver": "reporter_agent",
  "payload": {
    "status": "approved",
    "quality_score": 9.2,
    "minor_edits": [
      "Changed 'surge' to 'increased' in paragraph 3 for AP style consistency",
      "Added Oxford comma in list of countries"
    ],
    "approved_content": "[Final edited article]"
  }
}<h3>Étape 11 : L'éditeur publie via CI/CD</h3><p>Enfin, l'<strong>agent imprimeur</strong> publie l'article approuvé en utilisant les serveurs MCP pour le CMS et le pipeline CI/CD :</p># Publisher Agent publishing via MCP
async def publish_article(self, content, metadata):
    # Upload to CMS via MCP
    cms_result = await self.mcp_client.invoke_tool(
        server="wordpress_mcp",
        tool="create_post",
        parameters={
            "title": content["headline"],
            "body": content["body"],
            "status": "draft",
            "categories": metadata["categories"],
            "tags": metadata["tags"],
            "featured_image_url": metadata["image_url"]
        }
    )
    
    post_id = cms_result["post_id"]
    
    # Trigger CI/CD deployment via MCP
    deploy_result = await self.mcp_client.invoke_tool(
        server="cicd_mcp",
        tool="trigger_deployment",
        parameters={
            "pipeline": "publish_article",
            "environment": "production",
            "post_id": post_id,
            "schedule": "immediate"
        }
    )
    
    # Track analytics
    await self.mcp_client.invoke_tool(
        server="analytics_mcp",
        tool="register_publication",
        parameters={
            "post_id": post_id,
            "publish_time": datetime.now().isoformat(),
            "story_id": metadata["story_id"]
        }
    )
    
    return {
        "status": "published",
        "post_id": post_id,
        "url": f"https://newsroom.example.com/articles/{post_id}",
        "deployment_id": deploy_result["deployment_id"]
    }<p>L'<strong>éditeur</strong> confirme la publication via A2A :</p>{
  "message_type": "task_complete",
  "sender": "printer_agent",
  "receiver": "news_chief",
  "payload": {
    "task_id": "story_renewable_energy_2024",
    "status": "published",
    "publication": {
      "url": "https://newsroom.example.com/articles/renewable-europe-2024",
      "published_at": "2025-09-30T17:45:00Z",
      "post_id": "12345"
    },
    "workflow_metrics": {
      "total_time_minutes": 45,
      "agents_involved": ["reporter", "researcher", "archive", "editor", "printer"],
      "iterations": 2,
      "mcp_calls": 12
    }
  }
}<p>Voici la séquence complète du flux de travail A2A dans le référentiel d'accompagnement en utilisant les mêmes agents que ceux décrits ci-dessus.</p><p>#</p><p>De</p><p>Pour</p><p>Action</p><p>Protocole</p><p>Description</p><p>1</p><p>Utilisateur</p><p>Chef de l'information</p><p>Attribuer l'histoire</p><p>HTTP POST</p><p>L'utilisateur soumet le sujet et l'angle de l'article</p><p>2</p><p>Chef de l'information</p><p>Interne</p><p>Créer une histoire</p><p>-</p><p>Création d'un enregistrement d'histoire avec un identifiant unique</p><p>3</p><p>Chef de l'information</p><p>Reporter</p><p>Affectation des délégués</p><p>A2A</p><p>Envoi de l'article via le protocole A2A</p><p>4</p><p>Reporter</p><p>Interne</p><p>Accepter l'affectation</p><p>-</p><p>Stockage interne de l'affectation</p><p>5</p><p>Reporter</p><p>Serveur MCP</p><p>Générer un plan</p><p>MCP/HTTP</p><p>Création d'un plan d'article et de questions de recherche</p><p>6a</p><p>Reporter</p><p>Chercheur</p><p>Demande de recherche</p><p>A2A</p><p>Envoie des questions (parallèle avec 6b)</p><p>6b</p><p>Reporter</p><p>Archiviste</p><p>Recherche dans les archives</p><p>A2A JSONRPC</p><p>Recherche d'articles historiques (parallèle avec 6a)</p><p>7</p><p>Chercheur</p><p>Serveur MCP</p><p>Questions de recherche</p><p>MCP/HTTP</p><p>Utilise l'Anthropique via le MCP pour répondre aux questions</p><p>8</p><p>Chercheur</p><p>Reporter</p><p>Recherche en matière de retour</p><p>A2A</p><p>Réponses à la recherche sur les retours</p><p>9</p><p>Archiviste</p><p>Elasticsearch</p><p>Index de recherche</p><p>API REST ES</p><p>Requêtes news_archive index</p><p>10</p><p>Archiviste</p><p>Reporter</p><p>Retour à l'archive</p><p>A2A JSONRPC</p><p>Renvoie les résultats de la recherche historique</p><p>11</p><p>Reporter</p><p>Serveur MCP</p><p>Générer un article</p><p>MCP/HTTP</p><p>Création d'un article dans un contexte de recherche ou d'archives</p><p>12</p><p>Reporter</p><p>Interne</p><p>Projet de magasin</p><p>-</p><p>Sauvegarde interne du projet</p><p>13</p><p>Reporter</p><p>Chef de l'information</p><p>Soumettre le projet</p><p>A2A</p><p>Soumission d'un projet achevé</p><p>14</p><p>Chef de l'information</p><p>Interne</p><p>Mise à jour de l'histoire</p><p>-</p><p>Stocke le projet, met à jour le statut à "draft_submitted"</p><p>15</p><p>Chef de l'information</p><p>Éditeur</p><p>Projet de révision</p><p>A2A</p><p>Routes automatiques vers l'éditeur pour révision</p><p>16</p><p>Éditeur</p><p>Serveur MCP</p><p>Article de synthèse</p><p>MCP/HTTP</p><p>Analyse du contenu à l'aide d'Anthropic via MCP</p><p>17</p><p>Éditeur</p><p>Chef de l'information</p><p>Retourner à l'examen</p><p>A2A</p><p>Envoi d'un retour d'information et de suggestions éditoriales</p><p>18</p><p>Chef de l'information</p><p>Interne</p><p>Revue des magasins</p><p>-</p><p>Stocke les commentaires des éditeurs</p><p>19</p><p>Chef de l'information</p><p>Reporter</p><p>Appliquer les modifications</p><p>A2A</p><p>Acheminement du retour d'information sur l'examen au rapporteur</p><p>20</p><p>Reporter</p><p>Serveur MCP</p><p>Appliquer les modifications</p><p>MCP/HTTP</p><p>Révision de l'article en fonction du retour d'information</p><p>21</p><p>Reporter</p><p>Interne</p><p>Projet de mise à jour</p><p>-</p><p>Mise à jour du projet avec des révisions</p><p>22</p><p>Reporter</p><p>Chef de l'information</p><p>Retour Révisé</p><p>A2A</p><p>Retourne l'article révisé</p><p>23</p><p>Chef de l'information</p><p>Interne</p><p>Mise à jour de l'histoire</p><p>-</p><p>Stocker le projet révisé, statut à "révisé"</p><p>24</p><p>Chef de l'information</p><p>Éditeur</p><p>Publier un article</p><p>A2A</p><p>Routes automatiques vers l'éditeur</p><p>25</p><p>Éditeur</p><p>Serveur MCP</p><p>Générer des étiquettes</p><p>MCP/HTTP</p><p>Création d'étiquettes et de catégories</p><p>26</p><p>Éditeur</p><p>Elasticsearch</p><p>Index Article</p><p>API REST ES</p><p>Indexe l'article dans l'index news_archive</p><p>27</p><p>Éditeur</p><p>Système de fichiers</p><p>Sauvegarder la démarque</p><p>Fichier E/S</p><p>Enregistre l'article au format .md fichier dans /articles</p><p>28</p><p>Éditeur</p><p>Chef de l'information</p><p>Confirmer la publication</p><p>A2A</p><p>Renvoie l'état de réussite</p><p>29</p><p>Chef de l'information</p><p>Interne</p><p>Mise à jour de l'histoire</p><p>-</p><p>Mise à jour du statut de l'article à "publié"</p><h2>Conclusion</h2><p>L'A2A et le MCP ont tous deux un rôle important à jouer dans le paradigme moderne de l'infrastructure augmentée-LLM. L'A2A offre une certaine souplesse pour les systèmes multi-agents complexes, mais potentiellement moins de portabilité et une plus grande complexité opérationnelle. MCP offre une approche standardisée pour l'intégration des outils, plus simple à mettre en œuvre et à maintenir, bien qu'il ne soit pas conçu pour gérer l'orchestration multi-agents.</p><p>Le choix n'est pas binaire. Comme le montre notre exemple de salle de presse, les systèmes les plus sophistiqués et les plus efficaces soutenus par le LLM combinent souvent les deux approches : les agents se coordonnent et se spécialisent par le biais de protocoles A2A tout en accédant à leurs outils et à leurs ressources par le biais de serveurs MCP. Cette architecture hybride offre les avantages organisationnels des systèmes multi-agents ainsi que les avantages de la normalisation et de l'écosystème du MCP. Cela suggère qu'il n'est peut-être pas nécessaire de faire un choix : il suffit d'utiliser les deux en tant qu'approche standard.</p><p>C'est à vous, en tant que développeur ou architecte, de tester et de déterminer le meilleur mélange de ces deux solutions pour obtenir le bon résultat pour votre cas d'utilisation spécifique. Comprendre les points forts, les limites et les applications appropriées de chaque approche vous permettra de construire des systèmes d'IA plus efficaces, plus faciles à maintenir et plus évolutifs.</p><p>Que vous construisiez une salle de presse numérique, une plateforme de service à la clientèle, un assistant de recherche ou toute autre application alimentée par le LLM, l'examen attentif de vos besoins de coordination (A2A) et des exigences d'accès aux outils (MCP) vous mettra sur la voie de la réussite.</p><h2>Ressources supplémentaires</h2><ul><li><p><strong>Elasticsearch Agent Builder </strong><a href="https://www.elastic.co/docs/solutions/search/elastic-agent-builder">: https://www.elastic.co/docs/solutions/search/elastic-agent-builder</a></p></li><li><p><strong>Spécification A2A</strong> <a href="https://a2a-protocol.org/latest/specification/">: https://a2a-protocol.org/latest/specification/</a></p></li><li><p><strong>Intégration A2A et MCP</strong> <a href="https://a2a-protocol.org/latest/topics/a2a-and-mcp/">: https://a2a-protocol.org/latest/topics/a2a-and-mcp/</a></p></li><li><p><strong>Modèle de protocole de contexte</strong> <a href="https://modelcontextprotocol.io/">: https://modelcontextprotocol.io</a></p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/a2a-protocol-mcp-llm-agent-workflow-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/a2a-protocol-mcp-llm-agent-workflow-elasticsearch</guid>
    <category><![CDATA[IA agentique]]></category>
    <category><![CDATA[IA]]></category>
    <dc:creator><![CDATA[Justin Castilla]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1b1f22cdc2130333/6a17f161ec0f8917fa5a6712/f87330e5d4ca961593b3cfb861ca850a4cc34186-1519x1173.png" length="0" type="image/png"/>
    <pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Création d'une salle de presse LLM Agent avec le protocole A2A et MCP dans Elasticsearch : Partie I]]></title>
    <description><![CDATA[Explorer les concepts du protocole A2A et du MCP dans le cadre d'un exemple pratique de salle de presse où des agents LLM spécialisés collaborent à la recherche, à la rédaction, à l'édition et à la publication d'articles de presse.]]></description>
    <content:encoded><![CDATA[<h2>Introduction</h2><p>Les systèmes actuels soutenus par le LLM évoluent rapidement au-delà des applications à modèle unique vers des réseaux complexes où des agents spécialisés travaillent ensemble pour accomplir des tâches que l'informatique moderne n'aurait jamais cru possibles auparavant. Au fur et à mesure que ces systèmes gagnent en complexité, l'infrastructure permettant la communication entre les agents et l'accès aux outils devient l'objectif principal du développement. Deux approches complémentaires sont apparues pour répondre à ces besoins : Les protocoles <strong>Agent2Agent (A2A)</strong> pour la coordination multi-agents, et le <strong>Model Context Protocol (MCP)</strong> pour l'accès standardisé aux outils et aux ressources.</p><p>Comprendre quand utiliser l'un et l'autre en harmonie ou non peut avoir un impact significatif sur l'évolutivité, la maintenabilité et l'efficacité de vos applications. Cet article explore les concepts et les implémentations de l'<strong>A2A</strong> dans l'exemple pratique d'une salle de presse numérique, où des agents LLM spécialisés collaborent à la recherche, à la rédaction, à l'édition et à la publication d'articles de presse.</p><p>Un référentiel d'accompagnement est disponible <a href="https://github.com/justincastilla/elastic-newsroom/tree/main">ici</a>, et nous examinerons des exemples concrets d'A2A en action vers la fin de l'article, à la section 5.</p><h3>Produits requis</h3><p>Le <a href="https://github.com/justincastilla/elastic-newsroom/tree/main">référentiel</a> est constitué d'implémentations basées sur Python des agents A2A. Un serveur API est fourni en Flask, ainsi qu'un service de messagerie Python personnalisé appelé Event Hub, qui achemine les messages pour la journalisation et les mises à jour de l'interface utilisateur. Enfin, une interface utilisateur React est fournie pour une utilisation autonome des fonctionnalités de la salle de presse. Tout est contenu dans une image Docker pour faciliter la mise en œuvre. Si vous souhaitez utiliser les services directement sur votre machine, vous devez vous assurer que ces technologies sont installées :</p><p>Langages et moteurs d'exécution</p><ul><li><p>Python 13.12 - Langage de base du backend</p></li><li><p>Node.js 18+ - React UI en option</p></li></ul><p>Cadres de base et SDKS :</p><ul><li><p>A2A SDK 0.3.8 - Coordination et communication des agents</p></li><li><p>Anthropic SDK - Intégration de Claude pour la génération d'IA</p></li><li><p>Uvicorn - Serveur ASGI pour l'exécution des agents</p></li><li><p>FastMCP 2.12.5+ - Implémentation du serveur MCP</p></li><li><p>React 18.2 - Cadre d'interface utilisateur frontale</p></li></ul><p>Données &amp; recherche</p><ul><li><p>Elasticsearch 9.1.1+ - Indexation et recherche d'articles</p></li></ul><p>Déploiement de Docker (facultatif, mais recommandé)</p><ul><li><p>Docker 28.5.1+</p></li></ul><h2>Section 1 : Qu'est-ce que l'Agent2Agent (A2A) ?</h2><h3>Définition et concepts de base</h3><p>Agent2Agent (A2A) est un protocole standardisé pour l'interaction entre des agents LLM indépendants. Plutôt que de confier toutes les tâches à un seul système monolithique, l'A2A permet à plusieurs agents spécialisés de communiquer, de coordonner et de collaborer afin d'accomplir des flux de travail complexes qui seraient difficiles, lents ou carrément impossibles à gérer efficacement par un seul agent.</p><p><strong>Spécification officielle</strong> <a href="https://a2a-protocol.org/latest/specification/">: https://a2a-protocol.org/latest/specification/</a></p><h3>Origines et évolution</h3><p>Le concept de communication Agent2Agent, ou de systèmes multi-agents, trouve ses racines dans les systèmes distribués, les microservices et la recherche multi-agents qui remonte à <a href="https://en.wikipedia.org/wiki/Multi-agent_system">plusieurs dizaines d'années</a>. Les premiers travaux sur l'intelligence artificielle distribuée ont jeté les bases d'agents capables de négocier, de coordonner et de collaborer. Ces premiers systèmes étaient destinés à des <a href="https://www.jasss.org/5/1/7.html">simulations sociales</a> à grande échelle, à la <a href="https://arxiv.org/html/2410.09403v1">recherche universitaire</a> et à la <a href="https://www.researchgate.net/publication/334765661_Generation_Expansion_Planning_Considering_Investment_Dynamic_of_Market_Participants_Using_Multi-agent_System">gestion des réseaux électriques</a>.</p><p>Avec l'arrivée des LLM et la réduction des coûts d'exploitation, les systèmes multi-agents sont devenus accessibles aux marchés "grand public", avec le soutien de Google et de l'ensemble de la communauté des chercheurs en intelligence artificielle. Désormais connu sous le nom de systèmes Agent2Agent, l'ajout du protocole A2A a évolué pour devenir une norme moderne conçue spécifiquement pour l'ère des modèles linguistiques multiples et de grande envergure coordonnant les efforts et les tâches.</p><p>Le protocole A2A garantit une communication et une coordination transparentes entre les agents en appliquant des normes et des principes cohérents aux points d'interaction où les MFR se connectent et communiquent. Cette normalisation permet aux agents de différents développeurs - utilisant différents modèles sous-jacents - de travailler ensemble de manière efficace.</p><p>Les protocoles de communication ne sont pas nouveaux et sont largement ancrés dans presque toutes les transactions numériques effectuées sur l'internet. Si vous avez tapé <a href="https://www.elastic.co/search-labs">https://www.elastic.co/search-labs</a> dans un navigateur pour accéder à cet article, il y a de fortes chances que les protocoles TCP/IP, de transport HTTP et de recherche DNS aient tous été exécutés, ce qui nous garantit une expérience de navigation cohérente.</p><h3>Caractéristiques principales</h3><p>Les systèmes A2A reposent sur plusieurs principes fondamentaux qui garantissent une communication fluide. Le fait de s'appuyer sur ces principes garantit que différents agents, basés sur des LLM, des cadres et des langages de programmation différents, interagissent tous de manière transparente.</p><p>Voici les quatre grands principes :</p><ul><li><p><strong>Transmission de messages</strong>: Les agents communiquent par le biais de messages structurés dont les propriétés et les formats sont bien définis.</p></li><li><p><strong>Coordination</strong>: Les agents orchestrent des flux de travail complexes en se déléguant des tâches et en gérant les dépendances sans bloquer les autres agents.</p></li><li><p><strong>Spécialisation</strong>: Chaque agent se concentre sur un domaine ou une capacité spécifique, devenant ainsi un expert dans son domaine et offrant la possibilité d'accomplir des tâches basées sur cet ensemble de compétences.</p></li><li><p><strong>État distribué</strong>: L'état et les connaissances sont répartis entre les agents plutôt que centralisés, les agents ayant la possibilité de s'informer mutuellement de l'état d'avancement des tâches et des retours partiels (artefacts).</p></li></ul><h3>La salle de presse : Un exemple concret</h3><p>Imaginez une salle de rédaction numérique alimentée par des agents d'IA, chacun spécialisé dans un aspect différent du journalisme :</p><ul><li><p><strong>Chef de l'information</strong> (coordinateur/client) : Assigne les sujets et supervise le flux de travail</p></li><li><p><strong>Agent Reporter</strong>: Rédige des articles sur la base de recherches et d'interviews</p></li><li><p><strong>Agent de recherche</strong>: Recueille des faits, des statistiques et des informations de base</p></li><li><p><strong>Agent d'archivage</strong>: Recherche d'articles historiques et identification de tendances à l'aide d'Elasticsearch</p></li><li><p><strong>Agent rédacteur</strong>: Vérifie la qualité, le style et l'optimisation du référencement des articles.</p></li><li><p><strong>Agent de publication</strong>: Publie les articles approuvés sur la plateforme de blogs via CI/CD</p></li></ul><p>Ces agents ne travaillent pas isolément ; lorsque le chef de l'information confie un article sur l'<em>adoption des énergies renouvelables</em>, le journaliste a besoin du chercheur pour rassembler des statistiques, du rédacteur en chef pour réviser le projet et de l'éditeur pour publier l'article final. Cette coordination s'effectue par le biais de protocoles A2A.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb6c7215a96326481/6a17f2dd445de953024d0243/cc0760dbd74c49b92fa00dafbb8c2e8740eb70b6-963x693.png" alt="" /><h2>Section 2 : comprendre l'architecture A2A</h2><h3>Rôles de l'agent client et de l'agent distant</h3><p>Dans l'architecture A2A, les agents jouent deux rôles principaux. L'<strong>agent client</strong> est chargé de formuler et de communiquer des tâches aux autres agents du système. Il identifie les agents distants et leurs capacités, et utilise ces informations pour prendre des décisions éclairées en matière de délégation de tâches. L'agent client coordonne le flux de travail global, en veillant à ce que les tâches soient correctement réparties et à ce que le système progresse vers ses objectifs.</p><p>L'<strong>agent à distance</strong>, quant à lui, s'occupe des tâches déléguées par les clients. Il fournit des informations ou entreprend des actions spécifiques en réponse à des demandes, mais n'entreprend pas d'actions de manière indépendante. Les agents à distance peuvent également communiquer avec d'autres agents à distance si nécessaire pour s'acquitter des responsabilités qui leur sont confiées, créant ainsi un réseau collaboratif de capacités spécialisées.</p><p>Dans notre salle de presse, le chef de l'information joue le rôle d'agent client, tandis que le journaliste, le chercheur, le rédacteur en chef et l'éditeur sont des agents distants qui répondent aux demandes et se coordonnent les uns avec les autres.</p><h3>Capacités essentielles de l'A2A</h3><p>Les protocoles A2A définissent plusieurs capacités permettant une collaboration multi-agents :</p><h4>1. La découverte</h4><p>Les serveurs A2A doivent annoncer leurs capacités afin que les clients sachent quand et comment les utiliser pour des tâches spécifiques. Pour ce faire, les cartes d'agent sont des documents JSON qui décrivent les capacités, les entrées et les sorties d'un agent. Les cartes d'agent sont disponibles à des points d'extrémité cohérents et bien connus (tels que le point d'extrémité recommandé <code>/.well-known/agent-card.json</code> ), ce qui permet aux clients de découvrir et d'interroger les capacités d'un agent avant d'entamer une collaboration.</p><p>Voici un exemple de carte d'agent pour l'agent d'archivage personnalisé d'Elastic "Archie Archivist". Notez que les fournisseurs de logiciels tels qu'Elastic hébergent leurs agents A2A et fournissent une adresse URL pour l'accès :</p>{
  "name": "Archie Archivist",
  "description": "Helps find historical news documents in the Elasticsearch Index of archived news articles and content.",
  "url": "https://xxxxxxxxxxxxx-abc123.kb.us-central1.gcp.elastic.cloud/api/agent_builder/a2a/archive-agent",
  "provider": {
    "organization": "Elastic",
    "url": "https://elastic.co"
  },
  "version": "0.1.0",
  "protocolVersion": "0.3.0",
  "preferred_transport": "JSONRPC",
  "documentationURL": "https://www.elastic.co/docs/solutions/search/agent-builder/a2a-server"
  "capabilities": {
    "streaming": false,
    "pushNotifications": false,
    "stateTransitionHistory": false
  },
  "skills": [
    {
      "id": "platform.core.search",
      "name": "platform.core.search",
      "description": "A powerful tool for searching and analyzing data within your Elasticsearch cluster.",
      "inputModes": ["text/plain", "application/json"],
      "outputModes": ["text/plain", "application/json"]
    },
    {
      "id": "platform.core.index_explorer",
      "name": "platform.core.index_explorer",
      "description": "List relevant indices, aliases and datastreams based on a natural language query.",
      "inputModes": ["text/plain", "application/json"],
      "outputModes": ["text/plain", "application/json"]
    }
  ],
  "defaultInputModes": ["text/plain"],
  "defaultOutputModes": ["text/plain"]
}<p>Cette carte d'agent révèle plusieurs aspects importants de l'agent d'archivage d'Elastic. L'agent s'identifie comme "Archie Archivist" et indique clairement son objectif : aider à trouver des documents d'actualités historiques dans un index Elasticsearch. La carte précise le fournisseur (Elastic) et la version du protocole (0.3.0), ce qui garantit la compatibilité avec d'autres agents conformes à la norme A2A. Plus important encore, le tableau <code>skills</code> énumère les capacités spécifiques offertes par cet agent, notamment une puissante fonctionnalité de recherche et une exploration intelligente de l'index. Chaque compétence définit les modes d'entrée et de sortie qu'elle prend en charge, ce qui permet aux clients de savoir exactement comment communiquer avec cet agent. Cet agent est dérivé du service Agent Builder d'Elastic, qui fournit une suite d'outils et de points d'extrémité d'API natifs soutenus par LLM pour avoir une conversation avec votre magasin de données, et pas seulement pour en extraire des données. L'accès aux agents A2A dans Elasticsearch peut être trouvé <a href="https://www.elastic.co/docs/solutions/search/agent-builder/a2a-server">ici.</a></p><h4>2. Négociation</h4><p>Les clients et les agents doivent se mettre d'accord sur les méthodes de communication - que les interactions se fassent par le biais de textes, de formulaires, d'iframes ou même d'audio/vidéo - afin de garantir une interaction correcte entre les utilisateurs et l'échange de données. Cette négociation a lieu au début de la collaboration des agents et établit les protocoles qui régiront leur interaction tout au long du flux de travail. Par exemple, un agent du service clientèle basé sur la voix peut négocier pour communiquer via des flux audio, tandis qu'un agent chargé de l'analyse des données peut préférer JSON structuré. Le processus de négociation permet aux deux parties d'échanger efficacement des informations dans un format adapté à leurs capacités et aux exigences de la tâche à accomplir.</p><p>Les capacités énumérées dans l'extrait JSON ci-dessus ont toutes des schémas d'entrée et de sortie ; ces schémas définissent la manière dont les autres agents doivent interagir avec cet agent.</p><h4>3. Gestion des tâches et des états</h4><p>Les clients et les agents ont besoin de mécanismes pour communiquer l'état des tâches, les changements et les dépendances tout au long de l'exécution des tâches. Il s'agit notamment de gérer l'ensemble du cycle de vie d'une tâche, depuis sa création et son affectation jusqu'aux mises à jour et aux changements d'état. Les statuts typiques sont les suivants : en attente, en cours, terminé ou en échec. Le système doit également suivre les dépendances entre les tâches afin de s'assurer que les travaux préalables sont achevés avant que les tâches dépendantes ne commencent. La gestion des erreurs et la logique de réessai sont également des éléments essentiels, qui permettent au système de se remettre gracieusement des défaillances et de continuer à progresser vers l'objectif principal.</p><p>Exemple de message de tâche :</p>{
  "message_id": "msg_789xyz",
  "message_type": "task_request",
  "sender": "news_chief",
  "receiver": "researcher_agent",
  "timestamp": "2025-09-30T10:15:00Z",
  "payload": {
    "task_id": "task_456abc",
    "capability": "fact_gathering",
    "parameters": {
      "query": "renewable energy adoption rates in Europe 2024",
      "sources": ["eurostat", "iea", "ember"],
      "depth": "comprehensive"
    },
    "context": {
      "story_id": "story_123",
      "deadline": "2025-09-30T18:00:00Z",
      "priority": "high"
    }
  }
}<p>Cet exemple de message de tâche démontre plusieurs aspects clés de la communication A2A.</p><ul><li><p>La structure du <strong>message</strong> comprend des métadonnées telles qu'un identifiant de message unique, le type de message envoyé, l'identification de l'expéditeur et du destinataire, et un horodatage pour le suivi et le débogage.</p></li><li><p>La <strong>charge utile</strong> contient les informations relatives à la tâche proprement dite, spécifiant la capacité invoquée sur l'agent distant et fournissant les paramètres nécessaires à l'exécution de cette capacité.</p></li><li><p>La section <strong>contexte</strong> fournit des informations supplémentaires qui aident l'agent récepteur à comprendre le flux de travail général, y compris les délais et les niveaux de priorité qui indiquent comment l'agent doit allouer ses ressources et planifier son travail.</p></li></ul><h4>4. La collaboration</h4><p>Les clients et les agents <strong>doivent</strong> permettre une interaction dynamique mais structurée, permettant aux agents de demander des clarifications, des informations ou des sous-actions au client, à d'autres agents ou à des utilisateurs. Cela crée un environnement de collaboration dans lequel les agents peuvent poser des questions complémentaires lorsque les instructions initiales sont ambiguës, demander un contexte supplémentaire pour prendre de meilleures décisions, déléguer des sous-tâches à d'autres agents ayant une expertise plus appropriée et fournir des résultats intermédiaires pour obtenir un retour d'information avant de procéder à l'ensemble de la tâche. Cette communication multidirectionnelle garantit que les agents ne travaillent pas de manière isolée, mais qu'ils sont au contraire engagés dans un dialogue permanent qui aboutit à de meilleurs résultats.</p><h3>Communication distribuée, d'égal à égal</h3><p>L'A2A permet une communication distribuée où les agents peuvent être hébergés par différentes organisations, certains agents étant maintenus en interne tandis que d'autres sont fournis par des services tiers. Ces agents peuvent fonctionner sur différentes infrastructures - couvrant potentiellement plusieurs fournisseurs de services en nuage ou des centres de données sur site. Ils peuvent utiliser différents LLM sous-jacents, certains agents étant alimentés par des modèles GPT, d'autres par Claude, et d'autres encore par des alternatives à code source ouvert. Les agents peuvent même opérer dans différentes régions géographiques pour se conformer aux exigences en matière de souveraineté des données ou pour réduire les temps de latence. Malgré cette diversité, tous les agents conviennent d'un protocole de communication commun pour l'échange d'informations, ce qui garantit l'interopérabilité indépendamment des détails de la mise en œuvre. Cette architecture distribuée offre une certaine souplesse dans la manière dont les systèmes sont construits et déployés, ce qui permet aux organisations de combiner les agents et les infrastructures les mieux adaptés à leurs besoins spécifiques.</p><p>Il s'agit de l'architecture finale de l'application de la salle de presse :</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt74d59cd9267f54d8/6a17f2de505ac31129ad8c71/82e01a0d9746038eafd69d11177042b5390507ae-1600x838.png" alt="" /><h2>Section 3 : Protocole de contexte de modèle (PCM)</h2><h3>Définition et objectif</h3><p>Le Model Context Protocol (MCP) est un protocole standardisé développé par Anthropic pour améliorer et renforcer un LLM individuel avec des outils, des ressources et des invites définis par l'utilisateur, ainsi que d'autres ajouts supplémentaires à la base de code. MCP fournit une interface universelle entre les modèles linguistiques et les ressources externes dont ils ont besoin pour accomplir efficacement leurs tâches. Cet <a href="https://www.elastic.co/search-labs/blog/mcp-current-state">article</a> présente l'état actuel du MCP avec des exemples de cas d'utilisation, les tendances émergentes et la propre mise en œuvre d'Elastic.</p><h3>Concepts de base du MCP</h3><p>MCP fonctionne selon une architecture client-serveur avec trois composants principaux :</p><ul><li><p><strong>Clients :</strong> applications (comme Claude Desktop ou des applications IA personnalisées) qui se connectent aux serveurs MCP pour accéder à leurs capacités.</p></li><li><p><strong>Serveurs</strong>: applications qui exposent les ressources, les outils et les messages-guides aux modèles linguistiques. Chaque serveur est spécialisé dans l'accès à des capacités ou à des sources de données spécifiques.</p><ul><li><p><strong>Outils</strong>: fonctions définies par l'utilisateur que les modèles peuvent invoquer pour effectuer des actions, telles que la recherche dans des bases de données, l'appel à des API externes ou l'exécution de transformations sur les données.</p></li><li><p><strong>Ressources :</strong> sources de données que les modèles peuvent lire, servies avec des données dynamiques ou statiques, et accessibles via des modèles d'URI (similaires aux routes REST).</p></li><li><p><strong>Invitations : </strong>modèles d'invitations réutilisables avec des variables qui guident le modèle dans l'accomplissement de tâches spécifiques.</p></li></ul></li></ul><h3>Modèle demande-réponse</h3><p>MCP suit un modèle d'interaction demande-réponse familier, similaire aux API REST. Le client (LLM) demande une ressource ou invoque un outil, puis le serveur MCP traite la demande et renvoie le résultat, que le LLM utilise pour poursuivre sa tâche. Ce modèle centralisé avec des serveurs périphériques offre un modèle d'intégration plus simple que la communication d'agent pair à pair.</p><h3>MCP dans la salle de presse</h3><p>Dans notre exemple de salle de presse, les agents individuels utilisent des serveurs MCP pour accéder aux outils et aux données dont ils ont besoin :</p><ul><li><p><strong>Le chercheur</strong> utilise l'agent:</p><ul><li><p>Serveur MCP News API (accès aux bases de données d'actualités)</p></li><li><p>Fact-Checking MCP Server (vérification des affirmations par rapport à des sources fiables)</p></li><li><p>Base de données académique MCP Server (articles et recherches universitaires)</p></li></ul></li><li><p>Utilisation de l'<strong>agent rapporteur</strong>:</p><ul><li><p>Guide de style MCP Server (normes de rédaction des salles de presse)</p></li><li><p>Serveur de modèles MCP (modèles et formats d'articles)</p></li><li><p>Bibliothèque d'images MCP Server (photos d'archives et graphiques)</p></li></ul></li><li><p>L<strong>'éditeur</strong> utilise l'agent:</p><ul><li><p>Grammar Checker MCP Server (outils de qualité linguistique)</p></li><li><p>Serveur MCP de détection du plagiat (vérification de l'originalité)</p></li><li><p>Analyse SEO MCP Server (optimisation des titres et des mots-clés)</p></li></ul></li><li><p>L'<strong>agent éditeur</strong> utilise :</p><ul><li><p>Serveur CMS MCP (système de gestion de contenu API)</p></li><li><p>Serveur CI/CD MCP (pipeline de déploiement)</p></li><li><p>Serveur Analytics MCP (suivi et contrôle)</p></li></ul></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt195fe0bd36d36a48/6a17f2e0b1e113afe479f36c/b67311e3b58b27f9eb1b42a7b1dbad47ef3be4ad-808x535.png" alt="" /><h2>
Section 4 : comparaison des architectures</h2><h3>Quand utiliser A2A</h3><p>L'architecture A2A excelle dans les <strong>scénarios nécessitant une véritable collaboration multi-agents</strong>. Les flux de travail à plusieurs étapes nécessitant une coordination bénéficient grandement de l'A2A, en particulier lorsque les tâches impliquent plusieurs étapes séquentielles ou parallèles, les flux de travail nécessitant une itération et un affinement, et les processus avec des points de contrôle et des besoins de validation. Dans notre exemple de salle de presse, le flux de travail de l'article exige que le journaliste écrive, mais il peut être nécessaire de revenir au chercheur si la confiance en certains faits est faible, puis de passer au rédacteur en chef et enfin à l'éditeur.</p><p>La <strong>spécialisation spécifique à un domaine</strong> est un autre cas d'utilisation important de l'A2A. Lorsque plusieurs experts dans différents domaines sont nécessaires pour accomplir une tâche plus importante, chaque agent apportant une connaissance approfondie du domaine et des capacités de raisonnement spécialisées pour différents aspects, A2A fournit le cadre de coordination nécessaire pour établir ces connexions. La salle de rédaction en est un parfait exemple : le chercheur se spécialise dans la collecte d'informations, le journaliste dans la rédaction et le rédacteur en chef dans le contrôle de la qualité, chacun ayant une expertise distincte.</p><p>La nécessité d'un comportement autonome des agents rend l'A2A particulièrement utile. Les agents capables de<strong> prendre des décisions indépendantes, d'adopter un comportement proactif en fonction de l'évolution des conditions et de s'adapter de manière dynamique aux exigences du flux de travail</strong> s'épanouissent dans une architecture A2A. L'échelonnement horizontal des fonctions spécialisées est un autre avantage clé : plutôt que d'avoir un seul maître à tout faire, plusieurs agents spécialisés travaillent en coordination, et plusieurs instances du même agent peuvent gérer des tâches secondaires de manière asynchrone. Dans notre salle de presse, par exemple, lors d'une nouvelle de dernière minute, plusieurs agents de Reporter peuvent travailler simultanément sur différents aspects d'un même sujet.</p><p>Enfin, les tâches nécessitant une véritable collaboration multi-agents sont idéales pour l'A2A. Cela inclut les mécanismes d'<a href="https://arxiv.org/abs/2404.18796">évaluation du LLM en tant que jury</a>, les systèmes de consensus et de vote, et la <strong>résolution collaborative de problèmes où de multiples perspectives sont nécessaires</strong> pour atteindre le meilleur résultat.</p><h3>Quand utiliser MCP</h3><p>Le protocole de contexte de modèle est idéal pour étendre les capacités d'un modèle d'IA unique. Lorsqu'un modèle d'IA unique doit accéder à plusieurs outils et sources de données, MCP fournit la solution parfaite avec un raisonnement centralisé associé à des outils distribués et à une intégration simple des outils. Dans notre exemple de salle de presse, l'agent chercheur (un modèle) doit avoir accès à plusieurs sources de données, notamment l'API des actualités, les services de vérification des faits et les bases de données universitaires, toutes accessibles par l'intermédiaire de serveurs MCP normalisés.</p><p>L'intégration d'outils normalisés devient une priorité lorsque le partage et la réutilisation des intégrations d'outils sont importants. MCP se distingue ici par son écosystème de serveurs MCP préconstruits qui réduisent considérablement le temps de développement pour les intégrations courantes. Lorsque la simplicité et la facilité de maintenance sont requises, les modèles demande-réponse de MCP sont familiers aux développeurs, plus faciles à comprendre et à déboguer que les systèmes distribués, et leur complexité opérationnelle est moindre.</p><p>Enfin, le MCP est souvent proposé par les fournisseurs de logiciels pour faciliter la communication à distance avec leurs systèmes. Ces serveurs MCP proposés par les fournisseurs réduisent considérablement le temps d'intégration et de développement tout en offrant une interface standardisée avec les systèmes propriétaires, ce qui rend l'intégration beaucoup plus simple que le développement d'API personnalisées.</p><h3>Quand utiliser les deux (A2A ❤️'s MCP)</h3><p>De nombreux systèmes sophistiqués bénéficient de la combinaison d'A2A et de MCP, comme l'indique la <a href="https://a2a-protocol.org/latest/topics/a2a-and-mcp/">documentation d'A2A sur l'intégration de MCP</a>. Les systèmes nécessitant à la fois une coordination et une normalisation sont des candidats idéaux pour une approche hybride. A2A s'occupe de la coordination des agents et de l'orchestration du flux de travail, tandis que MCP permet aux agents individuels d'accéder aux outils. Dans notre exemple de salle de presse, les agents se coordonnent via A2A, le flux de travail passant du journaliste au chercheur, puis au rédacteur en chef et à l'éditeur. Cependant, chaque agent utilise des serveurs MCP pour ses outils spécialisés, ce qui crée une séparation architecturale nette.</p><p>Plusieurs agents spécialisés, chacun utilisant MCP pour l'accès aux outils, représentent un modèle commun où il y a une couche de coordination des agents gérée par A2A et une couche d'accès aux outils gérée par MCP. Cette séparation claire des préoccupations rend les systèmes plus faciles à comprendre et à entretenir.</p><p>Les avantages de la combinaison de ces deux approches sont considérables. Vous bénéficiez des avantages organisationnels des systèmes multi-agents, notamment la spécialisation, l'autonomie et le traitement parallèle, tout en profitant de la normalisation et des avantages de l'écosystème du MCP, tels que l'intégration des outils et l'accès aux ressources. Il existe une séparation claire entre la coordination des agents (A2A) et l'accès aux ressources (MCP) et, surtout, l'A2A n'est pas nécessaire pour les petites tâches telles que l'accès à l'API uniquement - MCP les gère efficacement sans les frais généraux de l'orchestration multi-agents.</p><p><strong>FAQ : A2A vs. MCP - Cas d'utilisation</strong></p><p>Fonctionnalité</p><p>Agent2Agent (A2A)</p><p>Protocole de contexte de modèle (MCP)</p><p>Hybride (A2A + MCP)</p><p>Objectif principal</p><p>Coordination multi-agents : Permet à une équipe d'agents spécialisés de travailler ensemble sur des flux de travail complexes à plusieurs étapes.</p><p>Amélioration de l'agent unique : Extension des capacités d'un seul LLM/Agent à l'aide d'outils, de ressources et de données externes.</p><p>Une force combinée : A2A gère le flux de travail de l'équipe, tandis que MCP fournit des outils à chaque membre de l'équipe.</p><p>Exemple d'équipe de salle de presse</p><p>La chaîne de travail : Chef de l'information → Reporter → Chercheur → Rédacteur en chef → Éditeur. Il s'agit de la couche de coordination.</p><p>Outils individuels de l'agent : L'agent rapporteur accède au serveur de guides de style et au serveur de modèles (via MCP). Il s'agit de la couche d'accès aux outils.</p><p>Le système complet : Le journaliste se coordonne avec le rédacteur en chef (A2A) et le journaliste utilise le serveur MCP de la bibliothèque d'images pour trouver un graphique pour l'article.</p><p>Quand utiliser quoi ?</p><p>Lorsque vous avez besoin d'une véritable collaboration, d'une itération et d'un perfectionnement, ou d'une expertise spécialisée répartie entre plusieurs agents.</p><p>Lorsqu'un agent unique a besoin d'accéder à plusieurs outils et sources de données ou nécessite une intégration standardisée avec des systèmes propriétaires.</p><p>Lorsque vous avez besoin des avantages organisationnels des systèmes multi-agents et des avantages de normalisation et d'écosystème du MCP.</p><p>Prestations de base</p><p>Autonomie et mise à l'échelle : Les agents peuvent prendre des décisions indépendantes et le système permet une mise à l'échelle horizontale des fonctions spécialisées.</p><p>Simplicité et normalisation : Le raisonnement centralisé facilite le débogage et la maintenance et fournit une interface universelle pour les ressources.</p><p>Séparation claire des préoccupations : Facilite la compréhension du système : A2A = travail d'équipe, MCP = accès aux outils.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1735ea5de41e10fd/6a17f2e26864a4125cb688c4/ddf6a29b1107ac6a63e94ecef703abc561a29e1e-986x656.png" alt="" /><h2>Conclusion</h2><p>Il s'agit de la première section de deux articles couvrant la mise en œuvre d'agents basés sur A2A et renforcés par des serveurs MCP pour fournir un support et un accès externe aux données et aux outils. La prochaine partie explorera le code réel pour démontrer qu'ils travaillent ensemble afin d'émuler les activités d'une salle de rédaction en ligne. Bien que les deux cadres soient extrêmement compétents et flexibles, vous verrez à quel point ils se complètent lorsqu'ils travaillent en tandem.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/a2a-protocol-mcp-llm-agent-newsroom-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/a2a-protocol-mcp-llm-agent-newsroom-elasticsearch</guid>
    <category><![CDATA[IA agentique]]></category>
    <category><![CDATA[IA]]></category>
    <dc:creator><![CDATA[Justin Castilla]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt2716d804698ec878/6a17f2e41480095fd7b48888/9f938d8e2f0fdf7509edf028816c48bdbc8b3fc7-1600x900.png" length="0" type="image/png"/>
    <pubDate>Thu, 13 Nov 2025 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>