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, Нью -Дели, и у меня интерес к науке о данных, особенно в нейронных сетях и их применении в различных областях.
