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, ChatDev’s ChatChain), 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 mientras mantienen 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.

Síganos para crear y ejecutar un sistema de agentes A2A, y obtenga experiencia práctica con:

  • BeeAI: Una infraestructura de agencia de 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 grandes (LLM) localmente.
  • Herramientas de agente: 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 trabaja 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. SolicitudA2A: el cliente formatea la entrada como una carga útil de mensaje JSON-RPC y la envía al servidor del agente.
  3. Procesamiento de agentes: 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 la terminal.

Este flujo de trabajo demuestra un patrón reutilizable aplicable a casos de uso que requieren una comunicación estructurada entre el cliente y el 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 desplegar varios agentes especializados, cada uno centrado en dominios o tareas específicos.

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

  • ThinkTool para razonamiento y 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 manejar 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 endpoint HTTP compatible 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 maneja la comunicación con el servidor mediante el SDK de A2A y la biblioteca asyncio de Python para el manejo asincrónico 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()
)

Hayurl El parámetro 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 admitir tareas de larga duración.

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

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

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

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 los modeloslocales)
  • Versión de Python: >= 3.11

Requisitos de herramientas y proveedores

Antes de comenzar, aquí hay 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 admite varios proveedores de LLM, incluidos Ollama (utilizado en este tutorial), OpenAI y Anthropic.
  • Ollama: Para ejecutar LLM locales y potenciar el agente de IA.
  • Protocolo A2A: Integrado en la infraestructura 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 múltiples 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:
    - Visite Ollama e instale la aplicación para su sistema operativo
  2. Inicie el servidor Ollama:
    abra una 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 usar cualquier modelo compatible con Ollama configurando elBEEAI_MODEL . Consulte la bibliotecade modelos de Ollama para conocer los modelos disponibles y sus tamaños.

Pasos

Paso 1. Clone 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 una 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 abierta su terminal actual, luego abra una segunda terminal y asegúrese de que ambas se dirijan al directorio del proyecto correcto (ela2a_tutorial directorio raíz).

¿Usa un IDE?

Si está utilizando un IDE como Visual Studio Code, puede usar la característica Split Terminal para administrar múltiples terminales lado a lado.

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:

Navegue hasta labeeai-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: use venv\Scripts\activate para activar el entorno virtual.

Para el cliente:

Navegue hasta labeeai-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

Puedes correrpip freeze en la terminal para Verify que el entorno esté actualizado con las dependencias.

Paso 5. Inicie el servidor del agente A2A

En la primera 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. Inicie el cliente A2A

En la otra terminal, inicie el cliente A2A:  

python beeai_chat_client.py

Esto debería darle instrucción para la entrada:

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

Paso 7. Interactuar con el agente

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

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

En la 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 resultados de los LLM son probabilísticos y pueden variar cada vez que ejecuta 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: "¿Cómo es el tiempo en Tokio?"
  • Wikipedia: “Háblame 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 de .

{
    “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 admitidos
  • Cualquier requisito o restricción

Esta AgentCard permite que cualquier cliente que cumpla con A2A descubra e interactúe con el agente sin conocer previamente los detalles de su implementación.

Conclusión

En este tutorial, creó un sistema de chat mediante el uso de 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 configuraciones de herramientas sin cambiar el código del cliente. Esta flexibilidad es especialmente valiosa cuando se coordinan tareas que requieren entradas, se realiza un seguimiento del estado de las tareas o se trata 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 fundamentales proporcionados por el repositorio de muestras A2A. Para obtener más información sobre la implementación original, consulte el archivo Léame en el repositorio, que proporciona más contexto y ejemplos para crear sistemas compatibles con A2A.

Para despliegues en el 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 manejar 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.

Apagar el 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 resultados como:

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 que cumple con A2A.

Soluciones relacionadas
Agentes de IA para empresas

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

    Explore watsonx Orchestrate
    Soluciones de agentes de IA de IBM

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

    Explorar las soluciones de agentes de IA
    Servicios de IA de IBM Consulting

    Los servicios de IA de IBM Consulting ayudan a reinventar la forma en que las empresas trabajan con IA para la transformación.

    Explorar los servicios de inteligencia artificial
    Dé el siguiente paso

    Ya sea que elija personalizar aplicaciones y habilidades predefinidas o crear y desplegar servicios agénticos personalizados utilizando un estudio de IA, la plataforma IBM watsonx responde a sus necesidades.

    Explore watsonx Orchestrate Explore watsonx.ai