Utilice el protocolo A2A para la comunicación con agentes de IA

Autores

Vanna Winland

AI Advocate & Technology Writer

El protocolo A2A, o Agent2Agent, es un estándar abierto que permite la comunicación estructurada entre agentes de IA, clientes y herramientas. En este tutorial, puede crear un sistema de agentes en el que un cliente de chat procese las consultas de los usuarios y las envíe a un agente de IA que se ejecuta en un servidor compatible con A2A.

La mayoría de las aplicaciones de IA agéntica implementan una comunicación personalizada entre componentes (por ejemplo, ChatChain de ChatDev), lo que dificulta la reutilización del mismo agente en diferentes aplicaciones o la integración de herramientas externas. Esta falta de estandarización impide la interoperabilidad y limita el desarrollo de un ecosistema de agentes más amplio.

A2A resuelve esta limitación separando la capa de comunicación de la lógica del agente a través de un protocolo estandarizado basado en HTTP, JSON-RPC 2.0 y Server-Sent Events (SSE). Este desacoplamiento permite a los agentes colaborar con otros agentes, atender solicitudes de clientes y acceder a herramientas externas sin código de integración personalizado.

A2A admite arquitecturas descentralizadas que permiten a los equipos evolucionar sus sistemas de IA de forma incremental sin romper el código del cliente. Los equipos pueden actualizar herramientas, intercambiar modelos o modificar el comportamiento de los agentes manteniendo una interfaz coherente en flujos de trabajo complejos.

Los agentes intercambian información en mensajes estructurados en formato JSON-RPC que incluyen metadatos que enriquecen las interacciones de los agentes con claridad y coherencia. Cada servidor A2A expone una AgentCard en un endpoint conocido (.well-known/agent-card.json) que describe las capacidades del agente como datos JSON estructurados. Por lo tanto, permite a los clientes descubrir dinámicamente lo que puede hacer un agente, de forma similar a como la documentación de la API describe los endpoint disponibles.

Siga para crear y ejecutar un sistema de agentes A2A y adquiera experiencia práctica con:

  • BeeAI: un marco agénticode código abierto para crear agentes de IA.
  • Protocolo A2A: un protocolo de comunicación estandarizado para la interoperabilidad de los agentes.
  • Ollama: una herramienta para ejecutar modelos de lenguaje de gran tamaño (LLM) localmente.
  • Herramientas agénticas: capacidades especializadas que incluyen búsqueda web (DuckDuckGo), datos meteorológicos (OpenMeteo), acceso a Wikipedia (WikipediaTool) y razonamiento (ThinkTool)

Nota: Si ha trabajado con ACP (Agent Communication Protocol), puede reconocer similitudes. ACP, desarrollado originalmente por BeeAI de IBM, ha unido fuerzas con Google A2A bajo la Fundación Linux. BeeAI ahora utiliza adaptadores A2A (A2AServer y A2AAgent) para proporcionar una comunicación compatible con A2A. A2A también funciona junto con MCP (Model Context Protocol) para permitir que los agentes interactúen con fuentes de datos y herramientas, creando ecosistemas de agentes interoperables.

Cómo funciona el sistema de chat A2A

Este proyecto demuestra cómo A2A permite una separación limpia entre la interfaz del cliente y la lógica del agente.

El flujo de trabajo sigue esta secuencia:

  1. Entrada del usuario: el cliente captura la entrada del usuario a través de la interfaz del terminal.
  2. Solicitud A2A: el cliente formatea la entrada como una carga útil de mensaje JSON-RPC y la envía al servidor del agente.
  3. Procesamiento del agente: el servidor reenvía la solicitud alRequirementAgent , que analiza la tarea y ejecuta las herramientas adecuadas según sea necesario.
  4. Respuesta A2A: el servidor devuelve la respuesta del agente como datos estructurados en formato JSON-RPC, transmitiendo los resultados en tiempo real a medida que se generan.
  5. Pantalla: el cliente extrae y muestra el texto de respuesta en el terminal.

Este flujo de trabajo demuestra un patrón reutilizable aplicable a casos de uso que requieren una comunicación estructurada entre cliente y agente, como chatbots, sistemas de automatización de tareas, agentes de atención al cliente y asistentes de investigación con orquestación de herramientas.

Agente A2A

Este proyecto utiliza un único agente de IA con múltiples capacidades de herramientas. En sistemas más complejos, puede implementar varios agentes especializados, cada uno centrado en dominios o tareas específicos.

RequirementAgent (BeeAI): un agente declarativo que selecciona y coordina dinámicamente varias herramientas en función de la solicitud del usuario. Utiliza:

  • ThinkTool para el razonamiento y las operaciones lógicas
  • DuckDuckGoSearchTool para búsquedas web
  • OpenMeteoTool  para datos meteorológicos
  • WikipediaTool para la recuperación de información

El servidor A2A

El servidor A2A (beeai-a2a-server/beeai_chat_server.py ) expone la funcionalidad del agente a través de una API HTTP. Maneja tres responsabilidades clave:

  1. Inicialización de LLM: carga un modelo de lenguaje local a través de Ollama
llm = ChatModel.from_name(os.environ.get(“BEEAI_MODEL”, “ollama:granite3.3:8b”))

 

2. Configuración del agente: crea un RequirementAgent con herramientas y memoria para gestionar el ciclo de vida del agente

    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. Configuración del servidor: expone el agente a través de endpoints HTTP compatibles con A2A

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

 

El servidor expone automáticamente una AgentCard en /.well-known/agent-card.json que describe las capacidades del agente y ayuda a validar las configuraciones del agente.

El cliente A2A

El cliente A2A (beeai-a2a-client/beeai_chat_client.py ) proporciona la interfaz de usuario y gestiona la comunicación con el servidor mediante el SDK A2A y la biblioteca asyncio de Python para la gestión asíncrona de mensajes.

Configuración de la conexión: crea un adaptador de cliente A2A

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

Elurl especifica el endpoint del servidor compatible con A2A (predeterminado:http://127.0.0.1:9999 ). Elmemory El parámetro almacena el historial de conversaciones localmente, lo que permite al cliente mantener el contexto durante las interacciones y respaldar tareas de larga duración.

Intercambio de mensajes: envía instrucciones asincrónicas y procesa las respuestas:

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

ElA2AAgent es un adaptador del lado del cliente que abstrae los detalles de la comunicación JSON-RPC. No es un agente autónomo, simplemente convierte la entrada del usuario en mensajes compatibles con A2A y gestiona las respuestas del servidor, lo que permite un intercambio de datos y una observabilidad fluidos.

Requisitos previos para ejecutar este proyecto

Requisitos del sistema

Estos son los requisitos del sistema para ejecutar este proyecto:

  • Sistema operativo: macOS, Linux o Windows
  • Memoria (RAM): >= 8 GB (recomendado: 16 GB o más para ejecutar LLM locales)
  • Espacio en disco: >= 5 GB de espacio libre (recomendado: 10 GB o más para adaptarse al entorno Python y a los modelos locales)
  • Versión de Python: >= 3.11

Requisitos de herramientas y proveedores

Antes de empezar, he aquí una descripción general de las herramientas necesarias para este proyecto:

  • BeeAI: un kit de desarrollo de agentes de código abierto para crear agentes de IA. BeeAI es compatible con varios proveedores de LLM, incluidos Ollama (utilizado en este tutorial), OpenAI y Anthropic.
  • Ollama: para ejecutar LLM locales que alimenten al agente de IA.
  • Protocolo A2A: integrado en el marco BeeAI para permitir la comunicación estructurada entre el cliente y el servidor.
  • Terminal o IDE: un terminal o IDE como Visual Studio Code (recomendado para administrar varios terminales y ver registros).
  • Entorno virtual de Python: para aislar las dependencias del cliente y el servidor.

Requisitos del proveedor de LLM

Este proyecto utiliza Ollama como proveedor de modelos para el agente de IA. Siga estos pasos para configurar Ollama:

  1. Descargue e instale Ollama:
    viisite Ollama e instale la aplicación para su sistema operativo
  2. Inicie el servidor Ollama:
    abra un terminal y ejecute:
    ollama serve
  3. Extraiga el modelo predeterminado (requiere aproximadamente 5 GB de espacio en disco):

    ollama pull granite3.3:8b

Nota: puede utilizar cualquier modelo compatible con Ollama configurando laBEEAI_MODEL variable de entorno. Consulte la biblioteca de modelos de Ollama para conocer los modelos disponibles y sus tamaños.

Pasos

Paso 1. Clonar el repositorio de GitHub

Para ejecutar este proyecto, clone el repositorio de GitHub utilizando https://github.com/IBM/ibmdotcom-tutorials.git como URL HTTPS. Para conocer los pasos detallados sobre cómo clonar un repositorio, consulte la documentación de GitHub.

Este tutorial se puede encontrar dentro del directorio de proyectos del repositorio.

Dentro de un terminal, navegue hasta el directorio de este tutorial:

cd docs/tutorials/projects/a2a_tutorial

Paso 2. Configurar el entorno de desarrollo

Este proyecto requiere dos scripts de Python separados para ejecutarse simultáneamente, uno para el servidor y otro para el cliente. Debe abrir dos ventanas o pestañas de terminal.

Mantenga abierto su terminal actual, luego abra un segundo terminal y asegúrese de que ambos se dirijan al directorio del proyecto correcto (ela2a_tutorial directorio raíz).

¿Utiliza un IDE?

Si utiliza un IDE como Visual Studio Code, puede utilizar la característica Split Terminal (Terminal dividida) para gestionar varias terminales en paralelo.

De lo contrario, abra dos ventanas de terminal independientes y navegue cada una hasta el directorio del proyecto.

Paso 3. Crear y activar entornos virtuales

Los entornos virtuales ayudan a mantener las dependencias separadas y mantenidas. Para mantener separadas las dependencias del servidor y del cliente, cree un entorno virtual para cada componente.

Para el servidor:

Vaya albeeai-a2a-server directorio:

cd beeai-a2a-server

Cree un entorno virtual con Python 3.11:

python3.11 -m venv venv

Active el entorno virtual:

source venv/bin/activate

Nota para usuarios de Windows: utilice venv\Scripts\activate para activar el entorno virtual.

Para el cliente:

Vaya albeeai-a2a-client directorio:

cd beeai-a2a-client

Cree y active un entorno virtual:

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

Paso 4. Instalar dependencias

Instale las dependencias necesarias para cada componente ejecutando este código en cada terminal:

pip install -r requirements.txt

Puede ejecutarpip freeze en el terminal para verificar que el entorno esté actualizado con las dependencias.

Paso 5. Iniciar el servidor del agente A2A

En el primer terminal, inicie el servidor del agente A2A:

python beeai_chat_server.py

Debería ver:

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)

El servidor ahora está escuchando las solicitudes entrantes de la aplicación cliente, listo para admitir la comunicación de agente a agente.

Paso 6. Iniciar el cliente A2A

En el otro terminal, inicie el cliente A2A:  

python beeai_chat_client.py

Esto debería solicitarle una entrada:

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

Paso 7. Interactuar con el agente

Escriba un mensaje en el terminal de cliente y pulseEnter . El agente procesa su consulta y responde:

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

En el terminal del servidor, puede ver los registros del protocolo A2A que muestran la comunicación con notificaciones push:

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

La primera solicitud recupera la AgentCard que describe las capacidades del agente. La segunda solicitud envía su mensaje comoTextPart (una unidad de contenido de texto dentro del mensaje A2A) y recibe la respuesta.

Nota: los outputs de los LLM son probabilísticos y pueden variar cada vez que ejecute el flujo de trabajo, incluso con la misma entrada.

Probar diferentes consultas

Experimente con diferentes tipos de consultas para probar las diversas herramientas del agente:

  • Búsqueda web: "Buscar noticias recientes sobre inteligencia artificial"
  • Datos meteorológicos: "¿Qué tiempo hace en Tokio?"
  • Wikipedia: "Hábleme de la computación cuántica"
  • Razonamiento: "¿Cuáles son las tres razones por las que el cielo es azul?"

Ver la AgentCard

Vaya a https://0.0.0.0:9999/.well-known/agent-card.json en su navegador para ver elRequirementAgent AgentCard.

{
    “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”
}

Este documento JSON describe:

  • El nombre del agente (RequirementAgent) y una breve descripción de sus capacidades.
  • Los protocolos de comunicación y formatos de mensaje compatibles
  • Cualquier requisito o restricción

Esta AgentCard permite a cualquier cliente compatible con A2A descubrir e interactuar con el agente sin conocer previamente los detalles de su implementación.

Conclusión

En este tutorial, creó un sistema de chat utilizando un servidor de quejas A2A que expuso una interfaz estructurada para la comunicación cliente-agente. Al separar la capa de mensajería de la lógica interna, el protocolo Agent2Agent permite a los equipos actualizar las capacidades de los agentes, intercambiar modelos o modificar las configuraciones de las herramientas sin cambiar el código del cliente. Esta flexibilidad es especialmente valiosa a la hora de coordinar tareas que requieren entradas, realizar un seguimiento del estado de las tareas o tratar cada operación como una unidad de trabajo discreta.

A2A funciona definiendo un formato de mensaje común que cualquier componente compatible puede entender, lo que permite a los agentes autónomos colaborar con otros agentes. La especificación del protocolo define cómo se estructuran los mensajes en formato JSON-RPC y se enriquecen con metadatos para garantizar la coherencia y la claridad en todas las interacciones.

Este tutorial se basa en los ejemplos fundacionales proporcionados por el repositorio de muestras A2A. Para obtener más información sobre la implementación original, consulte el archivo "Léame" del repositorio, que proporciona más contexto y ejemplos para crear sistemas compatibles con A2A.

Para las implementaciones del mundo real, los servidores A2A pueden implementar mecanismos de autenticación para proteger los endpoints de los agentes, utilizar eventos enviados por el servidor para transmitir respuestas y escalar para gestionar los flujos de trabajo de producción. Al seguir este flujo de trabajo, vio cómo un cliente de línea de comandos puede interactuar con un agente de IA a través de un protocolo estandarizado, lo que permite al agente coordinar múltiples herramientas y proporcionar respuestas contextuales. Este enfoque demuestra el poder de A2A para permitir sistemas de IA mantenibles, escalables y flexibles.

Apagado del sistema

Cuando haya terminado de experimentar con el sistema, siga estos pasos para apagar limpiamente todos los componentes en ejecución:

Detener cada servidor en ejecución

En cada ventana de terminal, presione Ctrl+C para detener el proceso en ejecución.

Debería ver un output similar al siguiente:

INFO:     Shutting down
INFO:     Finished server process

Si el servidor se cuelga durante un apagado

Si el servidor deja de responder o se bloquea al apagarse, puede detenerlo a la fuerza:

Encuentre el ID de proceso (PID):

ps aux | grep python

Identifique el PID del proceso que está intentando detener.

Finalice el proceso:

kill -9 <PID>

Repita este proceso para cada servidor si es necesario.

Eso es todo. Ha ejecutado correctamente un sistema de chat completo compatible con A2A.

Soluciones relacionadas
Agentes de IA para empresas

Cree, implemente y gestione potentes asistentes y agentes de IA que automaticen flujos de trabajo y procesos con IA generativa.

    Explore watsonx Orchestrate
    Soluciones de agente de IA de IBM

    Construya el futuro de su empresa con soluciones de IA en las que puede confiar.

    Explore las soluciones de los agentes de IA
    Servicios de IA de IBM Consulting

    Los servicios de IA de IBM Consulting ayudan a reinventar la forma de trabajar de las empresas usando IA para la transformación.

    Explore los servicios de inteligencia artificial
    Dé el siguiente paso

    Tanto si opta por personalizar las aplicaciones y habilidades prediseñadas como si prefiere crear e implementar servicios agentivos personalizados mediante un estudio de IA, la plataforma IBM watsonx le ofrece todo lo que necesita.

    Explore watsonx Orchestrate Explore watsonx.ai