Verwenden Sie das A2A-Protokoll für die KI-Agent-Kommunikation

Autoren

Vanna Winland

AI Advocate & Technology Writer

Das A2A- oder Agent2Agent-Protokoll ist ein offener Standard, der eine strukturierte Kommunikation zwischen KI-Agenten, Clients und Tools ermöglicht. In diesem Tutorial können Sie ein Agentensystem erstellen, in dem ein Chat-Client Benutzeranfragen verarbeitet und an einen KI-Agenten sendet, der auf einem A2A-kompatiblen Server läuft.

Die meisten Anwendungen der agentischen KI implementieren benutzerdefinierte Kommunikation zwischen Komponenten (zum Beispiel ChatChain von ChatDev), was es schwierig macht, denselben Agenten in verschiedenen Anwendungen wiederzuverwenden oder externe Tools zu integrieren. Diese mangelnde Standardisierung verhindert Interoperabilität und schränkt die Entwicklung eines breiteren Agenten-Ökosystems ein.

A2A löst diese Einschränkung, indem es die Kommunikationsschicht von der Agentenlogik durch ein standardisiertes Protokoll trennt, das auf HTTP, JSON-RPC 2.0 und Server-Sent Events (SSE) basiert. Dank dieser Entkopplung können Agenten mit anderen Agenten zusammenarbeiten, Client-Anfragen bearbeiten und auf externe Tools zugreifen, ohne dass ein benutzerdefinierter Integrationscode erforderlich ist.

A2A unterstützt dezentrale Architekturen, die es Teams ermöglichen, ihre KI-Systeme schrittweise weiterzuentwickeln, ohne den Client-Code zu beschädigen. Teams können Tools aktualisieren, Modelle austauschen oder das Verhalten des Agenten ändern und gleichzeitig eine konstante Schnittstelle für komplexe Workflows beibehalten.

Agenten tauschen Informationen in Nachrichten aus, die im JSON-RPC-Format strukturiert sind und Metadaten enthalten, die Interaktionen der Agenten durch Klarheit und Konstanz bereichern. Jeder A2A-Server stellt eine AgentCard an einem bekannten Endpunkt (.well-known/agent-card.json) bereit, die die Funktionen des Agenten als strukturierte JSON-Daten beschreibt. So können Clients dynamisch herausfinden, was ein Agent tun kann, ähnlich wie die API-Dokumentation verfügbare Endpunkte beschreibt.

Befolgen Sie die Schritte, um ein A2A-Agentensystem zu erstellen und auszuführen, und sammeln Sie praktische Erfahrungen mit:

  • BeeAI: Ein Open-Source-Framework für die Entwicklung von KI-Agenten.
  • A2A-Protokoll: Ein standardisiertes Kommunikationsprotokoll für Agenten-Interoperabilität.
  • Ollama: Ein Tool zum lokalen Ausführen großer Sprachmodelle (LLMs).
  • Agenten-Tools: Spezialisierte Funktionen wie Websuche (DuckDuckGo), Wetterdaten (OpenMeteo), Wikipedia-Zugriff (WikipediaTool) und Argumentation (ThinkTool)

Hinweis: Wenn Sie mit ACP (Agent Communication Protocol) gearbeitet haben, können Sie Ähnlichkeiten erkennen. ACP, ursprünglich von IBMs BeeAI entwickelt, hat sich mit Google A2A zur Linux Foundation zusammengeschlossen. BeeAI verwendet jetzt A2A-Adapter (A2AServer und A2AAgent), um eine A2A-konforme Kommunikation zu ermöglichen. A2A arbeitet auch mit MCP (Model Context Protocol) zusammen, um Agenten die Interaktion mit Datenquellen und Tools zu ermöglichen und so interoperable Agenten-Ökosysteme zu schaffen.

So funktioniert das A2A-Chatsystem

Dieses Projekt zeigt, wie A2A eine saubere Trennung zwischen der Client-Schnittstelle und der Agentenlogik ermöglicht.

Der Workflow folgt dieser Abfolge:

  1. Benutzereingabe: Der Client erfasst Eingabe über die Terminalschnittstelle.
  2. A2A-Anfrage: Der Client formatiert die Eingabe als JSON-RPC-Nachrichtennutzlast und sendet sie an den Agentenserver.
  3. Verarbeitung durch den Agenten: Der Server leitet die Anfrage weiter anRequirementAgent , der die Aufgabe analysiert und bei Bedarf geeignete Tools ausführt.
  4. A2A-Antwort: Der Server gibt die Antwort des Agenten als strukturierte Daten im JSON-RPC-Format zurück und streamt die Ergebnisse in Echtzeit, während sie generiert werden.
  5. Anzeige: Der Client extrahiert den Antworttext und zeigt ihn im Terminal an.

Dieser Workflow zeigt ein wiederverwendbares Muster, das für Anwendungsfälle geeignet ist, die eine strukturierte Kommunikation zwischen Client und Agenten erfordern, wie z. B. Chatbots, Systeme zur Automatisierung, Kundensupport und Forschungsassistenten mit Tool-Orchestrierung.

A2A-Agent

Dieses Projekt verwendet einen einzigen KI-Agenten mit mehreren Toolfunktionen. In komplexeren Systemen können Sie mehrere spezialisierte Agenten bereitstellen, die sich jeweils auf bestimmte Bereiche oder Aufgaben konzentrieren.

RequirementAgent (BeeAI): Ein deklarativer Agent, der dynamisch mehrere Tools auf der Grundlage der Benutzeranfrage auswählt und koordiniert. Er verwendet:

  • ThinkTool für Argumentation und logische Operationen
  • DuckDuckGoSearchTool für Websuchen
  • OpenMeteoTool  nach Wetterdaten
  • WikipediaTool zum Abrufen von Informationen

Der A2A-Server

Der A2A-Server (beeai-a2a-server/beeai_chat_server.py ) stellt die Agentenfunktionalität über eine HTTP-API bereit. Er übernimmt drei Hauptaufgaben:

  1. LLM-Initialisierung: Lädt ein lokales Sprachmodell über Ollama
llm = ChatModel.from_name(os.environ.get(“BEEAI_MODEL”, “ollama:granite3.3:8b”))

 

2. Agenteneinrichtung: Erstellt einen RequirementAgent mit Tools und Speicher, um den Lebenszyklus des Agenten zu verwalten

    agent = RequirementAgent(
        llm=llm,
        tools=[ThinkTool(), DuckDuckGoSearchTool(), OpenMeteoTool(), WikipediaTool()],
        memory=UnconstrainedMemory(),
        description=”An agent that can search the web, check the weather, and think through problems step-by-step.”,

 

3. Serverkonfiguration: Exponiert den Agenten über A2A-kompatible HTTP-Endgeräte

A2AServer(
    config=A2AServerConfig(port=int(os.environ.get(“A2A_PORT”, 9999))),
    memory_manager=LRUMemoryManager(maxsize=100)
).register(agent).serve()

 

Der Server stellt automatisch eine AgentCard unter /.well-known/agent-card.json zur Verfügung, die die Funktionen des Agenten beschreibt und hilft, die Agentenkonfigurationen zu validieren.

Der A2A-Client

Der A2A-Client (beeai-a2a-client/beeai_chat_client.py ) stellt die Benutzeroberfläche bereit und übernimmt die Kommunikation mit dem Server, indem er das A2A SDK und die asyncio-Bibliothek von Python für die asynchrone Nachrichtenverarbeitung verwendet.

Verbindungseinrichtung: Erstellt einen A2A-Client-Adapter

agent = A2AAgent(
    url=os.environ.get(“BEEAI_AGENT_URL”, “http://127.0.0.1:9999”),
    memory=UnconstrainedMemory()
)

Dieurl Der Parameter gibt das Endgerät des A2A-konformen Servers an (Standard:http://127.0.0.1:9999 ). Diememory Der Parameter speichert den Gesprächsverlauf lokal, sodass der Client den Kontext während der Interaktionen beibehalten und lange laufende Aufgaben unterstützen kann.

Nachrichtenaustausch: Sendet asynchrone Prompts und verarbeitet Antworten:

for prompt in reader:
    response = await agent.run(prompt)
    # Extract and display response text

DieA2AAgent ist ein clientseitiger Adapter, der JSON-RPC-Kommunikationsdetails abstrahiert. Es handelt sich dabei nicht um einen autonomen Agenten – er wandelt einfach Eingaben in A2A-konforme Nachrichten um und verarbeitet Serverantworten, wodurch ein nahtloser Datenaustausch und Observability ermöglicht werden.

Voraussetzungen zum Ausführen dieses Projekts

Systemvoraussetzungen

Hier sind die Systemanforderungen zum Ausführen dieses Projekts:

  • Betriebssystem: macOS, Linux oder Windows
  • Arbeitsspeicher (RAM): > = 8 GB (empfohlen: 16 GB oder mehr für die Ausführung lokaler LLMs)
  • Festplattenspeicher: >= 5 GB freier Speicherplatz (Empfohlen: 10 GB oder mehr, um die Python-Umgebung und lokale Modelle aufzunehmen)
  • Python-Version: >= 3.11

Anforderungen an Tools und Anbieter

Bevor Sie loslegen, finden Sie hier einen Überblick über die für dieses Projekt benötigten Tools:

  • BeeAI: Ein Open-Source-Agenten-Entwicklungskit für die Erstellung von KI-Agenten. BeeAI unterstützt mehrere LLM-Anbieter, darunter Ollama (in diesem Tutorial verwendet), OpenAI und Anthropic.
  • Ollama: Zum Ausführen lokaler LLMs, die den KI-Agenten antreiben.
  • A2A-Protokoll: Integriert in das BeeAI-Framework, um eine strukturierte Kommunikation zwischen Client und Server zu ermöglichen.
  • Terminal oder IDE: Ein Terminal oder eine IDE wie Visual Studio Code (empfohlen für die Verwaltung mehrerer Terminals und die Anzeige von Protokollen).
  • Virtuelle Python-Umgebung: Um Abhängigkeiten für den Client und den Server zu isolieren.

Anforderungen an LLM-Anbieter

Dieses Projekt verwendet Ollama als Modellanbieter für den KI-Agenten. Befolgen Sie diese Schritte, um Ollama einzurichten:

  1. Ollama herunterladen und installieren:
    Besuchen Sie Ollama und installieren Sie die Anwendung für Ihr Betriebssystem.
  2. Starten Sie den Ollama-Server 
    – Öffnen Sie ein Terminal und führen Sie Folgendes aus:
    ollama serve
  3. Rufen Sie das Standardmodell ab (erfordert ca. 5 GB Festplattenspeicher):

    ollama pull granite3.3:8b

Hinweis: Sie können jedes mit Ollama kompatible Modell verwenden, indem Sie dieBEEAI_MODEL Umgebungsvariable festlegen. In der Ollama-Modellbibliothek finden Sie die verfügbaren Modelle und deren Größen.

Schritte

Schritt 1. Klonen des GitHub-Repository

Um dieses Projekt auszuführen, klonen Sie das GitHub-Repository, indem Sie https://github.com/IBM/ibmdotcom-tutorials.git als HTTPS-URL verwenden. Detaillierte Schritte zum Klonen eines Repository finden Sie in der GitHub-Dokumentation.

Dieses Tutorial befindet sich im Projektverzeichnis des Repos..

Navigieren Sie in einem Terminal zum Verzeichnis dieses Tutorials:

cd docs/tutorials/projects/a2a_tutorial

Schritt 2. Einrichten der Entwicklungsumgebung

Für dieses Projekt müssen zwei separate Python-Skripte gleichzeitig ausgeführt werden, eines für den Server und das andere für den Client. Sie müssen zwei Terminalfenster oder Registerkarten öffnen.

Lassen Sie Ihr aktuelles Terminal geöffnet, öffnen Sie dann ein zweites Terminal und stellen Sie sicher, dass sich beide im richtigen Projektverzeichnis befinden (dasa2a_tutorial Stammverzeichnis).

Verwenden Sie ein IDE?

Wenn Sie ein IDE wie Visual Studio Code verwenden, können Sie die Funktion „Split Terminal“ verwenden, um mehrere Terminals nebeneinander zu verwalten.

Andernfalls öffnen Sie zwei eigenständige Terminalfenster und navigieren jeweils zum Projektverzeichnis.

Schritt 3. Erstellen und Aktivieren von virtuellen Umgebungen

Virtuelle Umgebungen helfen dabei, dass Abhängigkeiten getrennt und gewartet bleiben. Damit die Server- und Clientabhängigkeiten getrennt bleiben, erstellen Sie für jede Komponente eine virtuelle Umgebung.

Für den Server:

Navigieren Sie zumbeeai-a2a-server Verzeichnis:

cd beeai-a2a-server

Erstellen Sie eine virtuelle Umgebung mit Python 3.11:

python3.11 -m venv venv

Aktivieren der virtuellen Umgebung:

source venv/bin/activate

Hinweis für Windows-Benutzer: Verwenden Sie venv\Scripts\activate, um die virtuelle Umgebung zu aktivieren.

Für den Client:

Navigieren Sie zumbeeai-a2a-client Verzeichnis:

cd beeai-a2a-client

Erstellen und Aktivieren einer virtuellen Umgebung:

python3.11 -m venv venv
source venv/bin/activate

Schritt 4. Installieren von Abhängigkeiten

Installieren Sie die erforderlichen Abhängigkeiten für jede Komponente, indem Sie den folgenden Code in jedem Terminal ausführen:

pip install -r requirements.txt

Die Ausführung erfolgtpip freeze im Terminal, um zu verifizieren, dass die Umgebung mit Abhängigkeiten auf dem neuesten Stand ist.

Schritt 5. Starten des A2A-Agent-Servers

Starten Sie im ersten Terminal den A2A-Agentenserver:

python beeai_chat_server.py

Das sollten Sie sehen:

INFO:     Started server process [88159]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:9999 (Press CTRL+C to quit)

Der Server überwacht nun eingehende Anforderungen von der Client-Anwendung und ist bereit, die Kommunikation zwischen den Agenten zu unterstützen.

Schritt 6. Starten des A2A-Clients

Starten Sie im anderen Terminal den A2A-Client:  

python beeai_chat_client.py

Dies sollte Sie zu einer Eingabe auffordern:

Type your message (Ctrl+C to exit):
You:

Schritt 7. Interagieren mit dem Agenten

Geben Sie eine Nachricht in das Client-Terminal ein und klicken Sie aufEnter . Der Agent bearbeitet Ihre Anfrage und antwortet:

You: What is the capital of France?
Agent 🤖 : The capital of France is Paris.

Im Server-Terminal können Sie A2A-Protokolle sehen, die die Kommunikation mit Push-Benachrichtigungen anzeigen:

INFO:     127.0.0.1:49292 - “GET /.well-known/agent-card.json HTTP/1.1” 200 OK
INFO:     127.0.0.1:49294 - “POST / HTTP/1.1” 200 OK

Die erste Anfrage ruft die AgentCard ab, die die Funktionen des Agenten beschreibt. Die zweite Anfrage sendet Ihre Nachricht alsTextPart (eine Textinhaltseinheit innerhalb der A2A-Nachricht) und empfängt die Antwort.

Hinweis: Die Ausgaben von LLMs sind probabilistisch und können jedes Mal, wenn Sie den Workflow ausführen, variieren, selbst bei gleicher Eingabe.

Probieren Sie verschiedene Abfragen aus

Experimentieren Sie mit verschiedenen Arten von Abfragen, um die verschiedenen Tools des Agenten zu testen:

  • Websuche: „Suchen Sie nach aktuellen Nachrichten über künstliche Intelligenz“
  • Wetterdaten: „Wie ist das Wetter in Tokio?“
  • Wikipedia: „Erzählen Sie mir etwas über Quantencomputing“
  • Argumentation: „Aus welchen drei Gründen ist der Himmel blau?“

Anzeigen der AgentCard

Navigieren Sie in Ihrem Browser zu https://0.0.0.0:9999/.well-known/agent-card.json, umRequirementAgent s AgentCard anzuzeigen.

{
    “capabilities”: {
        “streaming”: true
    },
    “defaultInputModes”: [
        “text”
    ],
    “defaultOutputModes”: [
        “text”
    ],
    “description”: “An agent that can search the web, check the weather, and think through problems step-by-step.”,
    “name”: “RequirementAgent”,
    “preferredTransport”: “JSONRPC”,
    “protocolVersion”: “0.3.0”,
    “skills”: [
        {
            “description”: “An agent that can search the web, check the weather, and think through problems step-by-step.”,
            “id”: “RequirementAgent”,
            “name”: “RequirementAgent”,
            “tags”: []
        }
    ],
    “url”: “http://localhost:9999”,
    “version”: “1.0.0”
}

In diesem JSON-Dokument wird Folgendes beschrieben:

  • Der Name des Agenten (RequirementAgent) und eine kurze Beschreibung seiner Funktionen.
  • Die unterstützten Kommunikationsprotokolle und Nachrichtenformate
  • Jegliche Anforderungen oder Einschränkungen

Diese AgentCard ermöglicht es jedem A2A-kompatiblen Client, den Agenten zu erkennen und mit ihm zu interagieren, ohne zuvor Kenntnisse der Implementierungsdetails zu haben.

Zusammenfassung

In diesem Tutorial haben Sie ein Chat-System anhand eines A2A-Beschwerdeservers erstellt, der eine strukturierte Schnittstelle für die Kommunikation zwischen Client und Agent bereitstellt. Durch die Trennung der Messaging-Ebene von der internen Logik ermöglicht das Agent2Agent-Protokoll es Teams, Agentenfunktionen zu aktualisieren, Modelle auszutauschen oder Toolkonfigurationen zu ändern, ohne den Client-Code zu ändern. Diese Flexibilität ist besonders wertvoll, wenn es darum geht, Aufgaben zu koordinieren, die Eingaben erfordern, den Aufgabenstatus zu verfolgen oder jeden Vorgang als eigenständige Arbeitseinheit zu behandeln.

A2A definiert ein gemeinsames Nachrichtenformat, das jede konforme Komponente verstehen kann, sodass autonome Agenten mit anderen Agenten zusammenarbeiten können. Die Protokollspezifikation definiert, wie Nachrichten im JSON-RPC-Format strukturiert und mit Metadaten angereichert werden, um Konstanz und Klarheit über Interaktionen hinweg zu gewährleisten.

Dieses Tutorial baut auf den grundlegenden Beispielen auf, die im A2A-Beispiel-Repository bereitgestellt werden. Weitere Informationen zur ursprünglichen Implementierung finden Sie in der Readme-Datei im Repository, die mehr Kontext und Beispiele für die Erstellung von A2A-konformen Systemen enthält.

Für die reale Bereitstellungen können A2A-Server Authentifizierungsmechanismen zur Sicherung von Agenten-Endgeräten implementieren, Server-sent-Ereignisse für Streaming-Antworten verwenden und skalieren, um Produktions-Workflows zu bearbeiten. Durch die Verfolgung dieses Workflows haben Sie gesehen, wie ein Befehlszeilenclient mit einem KI-Agenten über ein standardisiertes Protokoll interagiert, sodass der Agent mehrere Tools koordinieren und kontextbezogene Antworten bereitstellen kann. Dieser Ansatz zeigt die Effizienz von A2A, wartbare, skalierbare und flexible KI-Systeme zu ermöglichen.

Das System herunterfahren

Wenn Sie mit dem Experimentieren mit dem System fertig sind, führen Sie die folgenden Schritte aus, um alle laufenden Komponenten sauber herunterzufahren:

Stoppen Sie jeden laufenden Server

Drücken Sie in jedem Terminalfenster Strg+C, um den laufenden Vorgang zu stoppen.

Sie sollten eine Ausgabe wie die folgende sehen:

INFO:     Shutting down
INFO:     Finished server process

Wenn der Server während des Herunterfahrens hängt

Wenn der Server nicht mehr reagiert oder beim Herunterfahren hängen bleibt, können Sie das Beenden erzwingen:

Finden Sie die Prozess-ID (PID):

ps aux | grep python

Identifizieren Sie die PID des Vorgangs, den Sie stoppen möchten.

Beenden Sie den Vorgang:

kill -9 <PID>

Wiederholen Sie diesen Vorgang bei Bedarf für jeden Server.

Das war's. Sie haben erfolgreich ein vollständiges A2A-konformes Chatsystem ausgeführt.

Weiterführende Lösungen
KI-Agenten für Unternehmen

Entwickeln, implementieren und verwalten Sie leistungsstarke KI-Assistenten und -Agenten, die Workflows und Prozesse mit generativer KI automatisieren.

    Entdecken Sie watsonx Orchestrate
    IBM KI-Agenten-Lösungen

    Gestalten Sie die Zukunft Ihres Unternehmens mit KI-Lösungen, denen Sie vertrauen können.

    KI-Agenten-Lösungen erkunden
    IBM Consulting KI-Dienstleistungen

    Die KI-Services von IBM Consulting unterstützen Sie dabei, die Art und Weise, wie Unternehmen mit KI arbeiten, neu zu denken.

    Erkunden Sie die Services im Bereich der künstlichen Intelligenz
    Machen Sie den nächsten Schritt

    Ganz gleich, ob Sie vorgefertigte Apps und Skills anpassen oder mithilfe eines KI-Studios eigene Agentenservices erstellen und bereitstellen möchten, die IBM watsonx-Plattform bietet Ihnen alles, was Sie brauchen.

    Entdecken Sie watsonx Orchestrate watsonx.ai erkunden