Athrun Data Intelligence


Python A2A es una implementación del protocolo de agente a agente (A2A) de Google, que permite a los agentes de IA comunicarse entre sí utilizando un formato compartido y estandarizado, lo que elimina la aprieto de integración personalizada entre los servicios.

En este tutorial, utilizaremos el enfoque basado en el interiorista proporcionado por la Biblioteca Python-A2A. Con simple @agente y @tiento decoradores, puede especificar la identidad y el comportamiento de su agente, mientras que la biblioteca se encarga del manejo del protocolo y el flujo de mensajes.

Este método es consumado para construir rápidamente agentes efectos y centrados en las tareas sin preocuparse por la razonamiento de comunicación de bajo nivel.

Instalación de las dependencias

Para comenzar, deberá instalar la biblioteca Python-A2A, que proporciona una contemplación limpia para construir y ejecutar agentes que siguen el protocolo A2A.

Rada su terminal y ejecute:

Creando los agentes

Para este tutorial, crearemos dos agentes, uno para calcular los rendimientos de las acciones según la inversión, la tasa y el tiempo, y otro para ajustar una cantidad basada en la inflación durante un período de primaveras.

Agente EMI (emi_agent.py)

from python_a2a import A2AServer, skill, agent, run_server, TaskStatus, TaskState
import re

@agent(
    name="EMI Calculator Agent",
    description="Calculates EMI for a given principal, interest rate, and loan duration",
    version="1.0.0"
)
class EMIAgent(A2AServer):

    @skill(
        name="Calculate EMI",
        description="Calculates EMI given principal, annual interest rate, and duration in months",
        tags=("emi", "loan", "interest")
    )
    def calculate_emi(self, principal: float, annual_rate: float, months: int) -> str:
        monthly_rate = annual_rate / (12 * 100)
        emi = (principal * monthly_rate * ((1 + monthly_rate) ** months)) / (((1 + monthly_rate) ** months) - 1)
        return f"The EMI for a loan of ₹{principal:.0f} at {annual_rate:.2f}% interest for {months} months is ₹{emi:.2f}"

    def handle_task(self, task):
        input_text = task.message("content")("text")

        # Extract values from natural language
        principal_match = re.search(r"₹?(d{4,10})", input_text)
        rate_match = re.search(r"(d+(.d+)?)s*%", input_text)
        months_match = re.search(r"(d+)s*(months|month)", input_text, re.IGNORECASE)

        try:
            principal = float(principal_match.group(1)) if principal_match else 100000
            rate = float(rate_match.group(1)) if rate_match else 10.0
            months = int(months_match.group(1)) if months_match else 12

            print(f"Inputs → Principal: {principal}, Rate: {rate}, Months: {months}")
            emi_text = self.calculate_emi(principal, rate, months)

        except Exception as e:
            emi_text = f"Sorry, I couldn't parse your input. Error: {e}"

        task.artifacts = ({
            "parts": ({"type": "text", "text": emi_text})
        })
        task.status = TaskStatus(state=TaskState.COMPLETED)

        return task

# Run the server
if __name__ == "__main__":
    agent = EMIAgent()
    run_server(agent, port=4737)

Este agente de calculadora EMI está construido utilizando la biblioteca Python-A2A y sigue el enfoque basado en el interiorista. En la parte superior, usamos el @agente interiorista para especificar el nombre, la descripción y la traducción del agente. Esto registra al agente para que pueda comunicarse usando el protocolo A2A.

Interiormente de la clase, definimos una sola tiento usando el @SkilL interiorista. Esta tiento, convocatoria calculación_emirealiza el cálculo de EMI efectivo utilizando la fórmula normalizado. La fórmula toma tres parámetros: el principal del préstamo, la tasa de interés anual y la duración del préstamo en meses. Convertimos la tarifa anual en una tarifa mensual y la usamos para calcular el EMI mensual.

El Handle_Task El método es el núcleo del agente. Recibe el mensaje de entrada del becario, extrae números relevantes utilizando expresiones regulares simples y los pasa al método calculado_emi.

Finalmente, en la parte inferior del archivo, iniciamos el agente utilizando el run_server () función en el puerto 4737haciéndolo inteligente para tomar mensajes de protocolo A2A. Este diseño mantiene al agente simple, modular y tratable de extender con más habilidades en el futuro.

Agente de inflación (inflation_agent.py)

from python_a2a import A2AServer, skill, agent, run_server, TaskStatus, TaskState
import re

@agent(
    name="Inflation Adjusted Amount Agent",
    description="Calculates the future value adjusted for inflation",
    version="1.0.0"
)
class InflationAgent(A2AServer):

    @skill(
        name="Inflation Adjustment",
        description="Adjusts an amount for inflation over time",
        tags=("inflation", "adjustment", "future value")
    )
    def handle_input(self, text: str) -> str:
        try:
            # Extract amount
            amount_match = re.search(r"₹?(d{3,10})", text)
            amount = float(amount_match.group(1)) if amount_match else None

            # Extract rate (e.g. 6%, 7.5 percent)
            rate_match = re.search(r"(d+(.d+)?)s*(%|percent)", text, re.IGNORECASE)
            rate = float(rate_match.group(1)) if rate_match else None

            # Extract years (e.g. 5 years)
            years_match = re.search(r"(d+)s*(years|year)", text, re.IGNORECASE)
            years = int(years_match.group(1)) if years_match else None

            if amount is not None and rate is not None and years is not None:
                adjusted = amount * ((1 + rate / 100) ** years)
                return f"₹{amount:.2f} adjusted for {rate:.2f}% inflation over {years} years is ₹{adjusted:.2f}"

            return (
                "Please provide amount, inflation rate (e.g. 6%) and duration (e.g. 5 years).n"
                "Example: 'What is ₹10000 worth after 5 years at 6% inflation?'"
            )
        except Exception as e:
            return f"Sorry, I couldn't compute that. Error: {e}"

    def handle_task(self, task):
        text = task.message("content")("text")
        result = self.handle_input(text)

        task.artifacts = ({
            "parts": ({"type": "text", "text": result})
        })
        task.status = TaskStatus(state=TaskState.COMPLETED)
        return task

if __name__ == "__main__":
    agent = InflationAgent()
    run_server(agent, port=4747)

Este agente ayuda a calcular cuánto valdría una cantidad determinada en el futuro posteriormente de ajustar la inflación. Utiliza la misma estructura basada en el interiorista proporcionada por la biblioteca Python-A2A. El @agente interiorista define los metadatos para este agente y el @tiento El interiorista registra la razonamiento principal bajo el nombre de «Ajuste de inflación».

El manejar_input El método es donde ocurre el procesamiento principal. Extrae la cantidad, la tasa de inflación y el número de primaveras de la entrada del becario utilizando expresiones regulares simples. Si los tres títulos están presentes, utiliza la fórmula de valía futuro normalizado para calcular la cantidad ajustada por inflación:

Valía razonable = cantidad × (1 + tasa/100) ^ primaveras.

Si descuido algún valía, el agente devuelve un mensaje útil que le dice al becario qué proporcionar, incluido un ejemplo. El Handle_Task La función conecta todo al tomar el mensaje del becario, pasarlo a la función de tiento y devolver el resultado formateado al becario.

Finalmente, el agente se gancho usando run_server () en el puerto 4747haciéndolo inteligente para manejar consultas A2A.

Creando la red de agentes

Primero ejecuta uno y otro agentes en dos terminales separadas

python inflation_agent.py

Cada uno de estos agentes expone un punto final API REST (por ejemplo, http: // localhost: 4737 para EMI, http: // localhost: 4747 para inflación) usando el protocolo A2A. Escuchan tareas entrantes (como «Calcule EMI por ₹ 2,00,000 …») y responden con respuestas de texto.

Ahora, agregaremos estos dos agentes a nuestra red

from python_a2a import AgentNetwork, A2AClient, AIAgentRouter

# Create an agent network
network = AgentNetwork(name="Economics Calculator")

# Add agents to the network
network.add("EMI", "http://localhost:4737")
network.add("Inflation", "http://localhost:4747")

A continuación, crearemos un enrutador para dirigir de forma inteligente las consultas al mejor agente. Esta es una utilidad central del protocolo A2A: define un formato de tarea normalizado para que los agentes puedan ser consultados de forma uniforme, y los enrutadores pueden tomar decisiones de enrutamiento inteligentes utilizando LLM.

router = AIAgentRouter(
    llm_client=A2AClient("http://localhost:5000/openai"),  # LLM for making routing decisions
    agent_network=network
)

Por postrero, consultaremos a los agentes

query = "Calculate EMI for ₹200000 at 5% interest over 18 months."
agent_name, confidence = router.route_query(query)
print(f"Routing to {agent_name} with {confidence:.2f} confidence")

# Get the selected agent and ask the question
agent = network.get_agent(agent_name)
response = agent.ask(query)
print(f"Response: {response}")
query = "What is ₹1500000 worth if inflation is 9% for 10 years?"
agent_name, confidence = router.route_query(query)
print(f"Routing to {agent_name} with {confidence:.2f} confidence")

# Get the selected agent and ask the question
agent = network.get_agent(agent_name)
response = agent.ask(query)
print(f"Response: {response}")

Mira el Cuadernos inflation_agent.py, network.ipynb y emi_agent.py. Todo el crédito por esta investigación va a los investigadores de este esquema. Adicionalmente, siéntete dispensado de seguirnos Gorjeo Y no olvides unirte a nuestro Subreddit de 100k+ ml y suscribirse a Nuestro boletín.


Soy un reconocido de ingeniería civil (2022) de Jamia Millia Islamia, Nueva Delhi, y tengo un gran interés en la ciencia de datos, especialmente las redes neuronales y su aplicación en varias áreas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *