Itinai.com it company office background blured chaos 50 v b3314315 0308 4954 a141 47b85163297e 2

Создание агента случайных чисел с поддержкой A2A: пошаговое руководство для бизнеса

Itinai.com it company office background blured chaos 50 v b3314315 0308 4954 a141 47b85163297e 2

Введение в построение A2A-совместимого агента случайных чисел

В мире автоматизации бизнеса и разработки ИИ, вопрос о том, как обеспечить эффективное взаимодействие между различными ИИ-агентами, становится все актуальнее. Представьте, что у вас есть несколько агентов, каждый из которых выполняет свою уникальную задачу, но они не могут общаться друг с другом. Как решить эту проблему? Ответ кроется в использовании протокола A2A (Agent-to-Agent), который позволяет агентам взаимодействовать независимо от используемых технологий. В этой статье мы рассмотрим, как построить A2A-совместимого агента случайных чисел на Python, используя шаблон низкоуровневого исполнителя.

Польза от A2A-протокола

A2A-протокол предоставляет стандартизированные средства для общения между различными ИИ-агентами. Это значит, что ущерб от интеграции различных систем снижается, а разработчики могут сосредоточиться на создании уникальных функций для своих приложений. В результате, бизнес получает более гибкие и масштабируемые решения, которые можно использовать в различных контекстах.

Шаг 1: Установка зависимостей

Для реализации нашего проекта нам необходимо установить несколько инструментов и библиотек. Начнем с установки пакетного менеджера uv.

curl -LsSf https://astral.sh/uv/install.sh | sh  // для Mac и Linux
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"  // для Windows

После установки создадим новый проект и активируем виртуальное окружение:

uv init a2a-demo
cd a2a-demo
uv venv
source .venv/bin/activate  // для Mac и Linux
.venv\Scripts\activate  // для Windows

Установим необходимые зависимости:

uv add a2a-sdk python-a2a uvicorn

Шаг 2: Реализация логики агента

Теперь мы можем перейти к реализации логики нашего агента, который будет генерировать случайные числа. Создадим файл agent_executor.py и напишем код:

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"Сгенерировано случайное число: {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))

Шаг 3: Настройка A2A сервера и карточки агента

Далее мы создадим сервер и определим карточку нашего агента, в которой будут указаны его возможности. Создаем файл main.py:

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="Генератор случайных чисел",
        description="Генерирует случайное число от 1 до 100",
        tags=["random", "number", "utility"],
        examples=["Дай мне случайное число", "Скинь число", "Случайно"],
    )

    agent_card = AgentCard(
        name="Агент случайных чисел",
        description="Агент, который возвращает случайное число от 1 до 100",
        url="http://localhost:9999/",
        defaultInputModes=["text"],
        defaultOutputModes=["text"],
        skills=[skill],
        version="1.0.0",
        capabilities=AgentCapabilities(),
    )

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

Шаг 4: Взаимодействие с агентом

Теперь создадим клиентский скрипт для взаимодействия с нашим агентом. Создаем файл client.py:

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

PUBLIC_AGENT_CARD_PATH = "/.well-known/agent.json"
BASE_URL = "http://localhost:9999"

async def main() -> None:
    async with httpx.AsyncClient() as httpx_client:
        resolver = A2ACardResolver(httpx_client=httpx_client, base_url=BASE_URL)
        agent_card: AgentCard = 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="Дай мне случайное число"))],
        )
        request = SendMessageRequest(
            id=str(uuid.uuid4()),
            params=MessageSendParams(message=message_payload),
        )

        response = await client.send_message(request)
        print("Ответ:")
        print(response.model_dump_json(indent=2))

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

Шаг 5: Запуск агента и клиента

Чтобы протестировать нашу установку, сначала запустите сервер агента:

uv run main.py

Затем запустите клиентский скрипт:

uv run client.py

Поздравляю! Теперь ваш A2A-совместимый агент случайных чисел готов к работе.

FAQ

  • Что такое A2A-протокол? — Это стандарт, позволяющий ИИ-агентам общаться друг с другом.
  • Каковы основные преимущества использования A2A? — Снижение сложности интеграции и возможность создания масштабируемых систем.
  • В чем заключается низкоуровневый шаблон исполнителя? — Это подход к обработке запросов от клиентов и возвращению ответов в стандартизированном формате.
  • Какова роль карточки агента? — Она описывает возможности и функции агента, облегчая его интеграцию с другими системами.
  • Могу ли я настроить агента для выполнения других задач? — Да, вы можете изменить логику агента и добавить новые навыки.
  • Как взаимодействовать с агентом? — Используйте A2AClient для отправки запросов к агенту.
  • Что делать, если агент не отвечает? — Проверьте настройки сервера и убедитесь, что он работает корректно.
  • Как оптимизировать производительность агента? — Используйте асинхронные операции для обработки запросов.
  • Где можно получить помощь? — Обратитесь к документации A2A или сообществу разработчиков.
  • Каковы основные ошибки при разработке агента? — Недостаточная обработка ошибок и отсутствие тестирования.

Заключение

Построение A2A-совместимого агента случайных чисел на Python — это не только интересный проект, но и реальный шаг к созданию более сложных и интуитивно понятных ИИ-систем. Используя указанный подход, вы сможете быстро развивать свои навыки и создавать мощные инструменты для автоматизации бизнеса. Не бойтесь экспериментировать и искать новые решения, ведь именно они ведут к успеху!

Запустите свой ИИ проект бесплатно

ИИ-агенты искусственный интеллект онлайн для бизнеса

Лучший ИИ онлайн