Itinai.com user using ui app iphone 15 closeup hands photo ca 286b9c4f 1697 4344 a04c a9a8714aca26 3
Itinai.com user using ui app iphone 15 closeup hands photo ca 286b9c4f 1697 4344 a04c a9a8714aca26 3

Building an A2A-Compliant Random Number Agent with Python: A Developer’s Guide

Understanding the A2A Protocol

The Agent-to-Agent (A2A) protocol is a groundbreaking standard developed by Google that facilitates seamless communication between AI agents, irrespective of their underlying frameworks. This is particularly beneficial for developers and businesses looking to create interoperable AI systems. With A2A, agents can communicate using standardized messages and agent cards, which describe their capabilities. This eliminates the need for complex integration logic, making it easier to build scalable multi-agent systems.

Setting Up Your Development Environment

Before diving into coding, it’s essential to set up your environment correctly. Start by installing the uv package manager. Depending on your operating system, the installation commands vary:

  • For Mac or Linux: curl -LsSf https://astral.sh/uv/install.sh | sh
  • For Windows (PowerShell): powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Once installed, create a new project directory and initialize it:

uv init a2a-demo

After that, set up a virtual environment and install the necessary dependencies:

uv add a2a-sdk python-a2a uvicorn

Building the Core Logic

The heart of your A2A agent lies in the Agent Executor. This component handles incoming requests and returns responses formatted according to the A2A protocol. For example, the RandomNumberAgentExecutor generates a random number between 1 and 100. When a request is received, it invokes the agent’s logic and pushes the result into an event queue as a standardized A2A message.

        import random
from a2a.server.agent_execution import AgentExecutor
from a2a.server.agent_execution.context import RequestContext
from a2a.server.events.event_queue import EventQueue
from a2a.utils import new_agent_text_message
from pydantic import BaseModel

class RandomNumberAgent(BaseModel):
    async def invoke(self) -> str:
        number = random.randint(1, 100)
        return f"Random number generated: {number}"

class RandomNumberAgentExecutor(AgentExecutor):
    def __init__(self):
        self.agent = RandomNumberAgent()

    async def execute(self, context: RequestContext, event_queue: EventQueue):
        result = await self.agent.invoke()
        await event_queue.enqueue_event(new_agent_text_message(result))
        
    

Configuring the A2A Server

Next, you need to set up the A2A server and define the agent card, which serves as the agent’s metadata. This includes details like the agent’s name, description, and capabilities. The server is configured using A2AStarletteApplication, which connects your agent logic with the request handler.

        import uvicorn
from a2a.server.apps import A2AStarletteApplication
from a2a.server.request_handlers import DefaultRequestHandler
from a2a.server.tasks import InMemoryTaskStore
from a2a.types import AgentCapabilities, AgentCard, AgentSkill
from agent_executor import RandomNumberAgentExecutor

def main():
    skill = AgentSkill(id="random_number", name="Random Number Generator", description="Generates a random number between 1 and 100")
    agent_card = AgentCard(name="Random Number Agent", description="An agent that returns a random number between 1 and 100", url="http://localhost:9999/")
    request_handler = DefaultRequestHandler(agent_executor=RandomNumberAgentExecutor(), task_store=InMemoryTaskStore())
    server = A2AStarletteApplication(http_handler=request_handler, agent_card=agent_card)
    uvicorn.run(server.build(), host="0.0.0.0", port=9999)

if __name__ == "__main__":
    main()
        
    

Creating the Client to Interact with the Agent

To interact with your A2A agent, you need to create a client that can send requests and receive responses. The client will fetch the agent card, initialize communication, and send a structured message to the agent.

        import uuid
import httpx
from a2a.client import A2ACardResolver, A2AClient
from a2a.types import Message, SendMessageRequest, Role, Part, TextPart

async def main() -> None:
    async with httpx.AsyncClient() as httpx_client:
        resolver = A2ACardResolver(httpx_client=httpx_client, base_url="http://localhost:9999")
        agent_card = await resolver.get_agent_card()
        client = A2AClient(httpx_client=httpx_client, agent_card=agent_card)
        message_payload = Message(role=Role.user, messageId=str(uuid.uuid4()), parts=[Part(root=TextPart(text="Give me a random number"))])
        request = SendMessageRequest(id=str(uuid.uuid4()), params=MessageSendParams(message=message_payload))
        response = await client.send_message(request)
        print("Response:", response.model_dump_json(indent=2))

if __name__ == "__main__":
    import asyncio
    asyncio.run(main())
        
    

Testing Your A2A Setup

To test your setup, run the agent server and then the client script. The server will listen for incoming requests, and the client will send a message asking for a random number. You should see the agent respond with a number between 1 and 100.

For full code access, refer to the original sources credited in this post. This hands-on approach not only enhances your understanding of the A2A protocol but also equips you with the skills to build scalable AI solutions.

Summary

Building an A2A-compliant random number agent demonstrates the power of interoperability in AI systems. By leveraging the A2A protocol, developers can create agents that communicate seamlessly, paving the way for more complex and scalable AI applications. This guide provides a foundational understanding and practical steps to implement your own A2A agents, enhancing your technical skills and opening new avenues for AI development.

Frequently Asked Questions

  • What is the A2A protocol? The A2A protocol is a standard that allows AI agents to communicate and collaborate seamlessly, regardless of their underlying frameworks.
  • How do I set up the A2A environment? You can set up the A2A environment by installing the uv package manager and initializing your project with the necessary dependencies.
  • What is an agent card? An agent card is a metadata file that describes an agent’s capabilities, skills, and communication methods.
  • How can I test my A2A agent? You can test your A2A agent by running the server and client scripts, which will allow you to send requests and receive responses.
  • What are the benefits of using the A2A protocol? The A2A protocol simplifies the integration of AI agents, enhances scalability, and allows for the development of more complex multi-agent systems.
Itinai.com office ai background high tech quantum computing 0002ba7c e3d6 4fd7 abd6 cfe4e5f08aeb 0

Vladimir Dyachkov, Ph.D
Editor-in-Chief itinai.com

I believe that AI is only as powerful as the human insight guiding it.

Unleash Your Creative Potential with AI Agents

Competitors are already using AI Agents

Business Problems We Solve

  • Automation of internal processes.
  • Optimizing AI costs without huge budgets.
  • Training staff, developing custom courses for business needs
  • Integrating AI into client work, automating first lines of contact

Large and Medium Businesses

Startups

Offline Business

100% of clients report increased productivity and reduced operati

AI news and solutions