Как использовать Python-A2A для создания и подключения финансовых агентов с протоколом Google-Agent-Agent (A2A)

Python A2A-это реализация протокола Google агента-агента (A2A), который позволяет агентам искусственного интеллекта взаимодействовать друг с другом, используя общий стандартизированный формат, что подтверждает необходимость пользовательской интеграции между службами.

В этом уроке мы будем использовать подход на основе декоратора, предоставленный библиотекой Python-A2A. С простым @agent и @навык Декораторы, вы можете определить личность и поведение вашего агента, в то время как библиотека заботится об обращении с протоколом и потоком сообщений.

Этот метод идеально подходит для быстрого создания полезных, ориентированных на задачи агентов, не беспокоясь о низкоуровневой логике связи.

Установка зависимостей

Для начала, вам нужно будет установить библиотеку Python-A2A, которая обеспечивает чистую абстракцию для создания и запуска агентов, которые следуют протоколу A2A.

Откройте свой терминал и запустите:

Создание агентов

Для этого урока мы будем создавать два агента – один для расчета доходности акций на основе инвестиций, ставки и времени, а другой для корректировки суммы на основе инфляции в течение нескольких лет.

Агент 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)

Этот агент калькулятора EMI построен с использованием библиотеки Python-A2A и следует за подходом на основе декоратора. На вершине мы используем @agent декоратор, чтобы определить имя, описание и версию агента. Это регистрирует агента так, чтобы он мог общаться, используя протокол A2A.

Внутри класса мы определяем один навык, используя @skilL Декоратор. Этот навык называется Рассчитайте_EMIвыполняет фактический расчет EMI, используя стандартную формулу. Формула принимает три параметра: основная сумма кредита, годовая процентная ставка и продолжительность кредита за несколько месяцев. Мы конвертируем годовой ставку в ежемесячную ставку и используем ее для вычисления ежемесячного EMI.

А handle_task Метод является ядром агента. Он получает входное сообщение пользователя, извлекает соответствующие числа, используя простые регулярные выражения, и передает его методу CALLUTE_EMI.

Наконец, в нижней части файла мы запускаем агента, используя run_server () функция на порту 4737Готовясь к получению сообщений протокола A2A. Этот дизайн делает агента простым, модульным и простым в расширении с большими навыками в будущем.

Инфляционный агент (инфляция_агент.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)

Этот агент помогает рассчитать, сколько будет стоить данная сумма в будущем после корректировки инфляции. Он использует ту же конструкцию на основе декоратора, предоставленную библиотекой Python-A2A. А @agent декоратор определяет метаданные для этого агента и @навык Декоратор регистрирует основную логику под названием «Регулировка инфляции».

А handle_input Метод – это то, где происходит основная обработка. Он извлекает сумму, коэффициент инфляции и количество лет из ввода пользователя, используя простые регулярные выражения. Если присутствуют все три значения, она использует стандартную формулу будущего значения для расчета суммы с поправкой на инфляцию:

Скорректированное значение = сумма × (1 + скорость/100) ^ лет.

Если какое -либо значение отсутствует, агент возвращает полезную подсказку, сообщая пользователю, что предоставить, включая пример. А handle_task Функция соединяет все, взяв сообщение пользователя, передавая его к функции навыка и возвращая форматированный результат обратно пользователю.

Наконец, агент запускается с использованием run_server () на порту 4747что готово к обработке запросов A2A.

Создание сети агентов

Сначала запустите оба агента в двух отдельных терминалах

python inflation_agent.py

Каждый из этих агентов обнажает конечную точку API REST (например, http: // localhost: 4737 для EMI, http: // localhost: 4747 для инфляции) с использованием протокола A2A. Они слушают входящие задачи (например, «Рассчитайте EMI ​​за 2,00 000 фунтов стерлингов…») и отвечают текстовыми ответами.

Теперь мы добавим эти два агента в нашу сеть

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")

Далее мы создадим маршрутизатор для разумного прямого запроса лучшему агенту. Это основная полезность протокола A2A – он определяет стандартный формат задачи, чтобы агенты могли быть равномерно запросить, и маршрутизаторы могут принимать интеллектуальные решения по маршрутизации с использованием LLMS.

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

Наконец, мы будем запрашивать агенты

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}")

Проверьте Notebooks- Inflation_agent.pyВ Network.ipynb и emi_agent.pyПолем Весь кредит на это исследование направлено на исследователей этого проекта. Кроме того, не стесняйтесь следить за нами Twitter И не забудьте присоединиться к нашему 100K+ ML Subreddit и подписаться на Наша информационный бюллетеньПолем


Я выпускник гражданского строительства (2022) из ​​Jamia Millia Islamia, Нью -Дели, и у меня интерес к науке о данных, особенно в нейронных сетях и их применении в различных областях.

Source link

Scroll to Top