Руководство по созданию агентного веб-приложения в Службе приложений Azure с помощью LangGraph или Службы агента Foundry (Python)

В этом руководстве показано, как добавить агентные возможности в существующее CRUD-приложение FastAPI, ориентированное на данные. Это делается с помощью двух различных подходов: LangGraph и Агентской службы Foundry.

Если веб-приложение уже имеет полезные функции, такие как покупки, бронирование отелей или управление данными, это относительно просто добавить функции агента в веб-приложение, упаковав эти функции в подключаемый модуль (для LangGraph) или как конечную точку OpenAPI (для службы агента Foundry). В этом руководстве вы начнете с простого приложения со списком дел. К концу вы сможете создавать, обновлять и управлять задачами с агентом в приложении службы приложений.

Служба агента LangGraph и Foundry позволяют создавать агентские веб-приложения с возможностями на основе ИИ. LangGraph похож на Microsoft Agent Framework и является пакетом SDK. В следующей таблице показаны некоторые рекомендации и компромиссы.

Рассмотрение LangGraph или Microsoft Agent Framework Служба агента Foundry
Performance Быстро (работает локально) Медленнее (управляемая, удаленная служба)
Развитие Полный код, полный контроль Низкий код, быстрая интеграция
Testing Ручные тесты/модульные тесты в коде Встроенная площадка для быстрого тестирования
Масштабируемость Управляется через приложение Под управлением Azure, с автоматическим масштабированием
Ограничительные меры безопасности Требуется настраиваемая реализация Встроенная безопасность содержимого и модерация
Идентичность Требуется настраиваемая реализация Встроенный идентификатор агента и проверка подлинности
Предприятие Требуется настраиваемая интеграция Встроенное развертывание Microsoft 365/Teams и вызовы интегрированных средств Microsoft 365.

В этом руководстве вы узнаете, как:

  • Преобразуйте существующие функции приложения в подключаемый модуль для LangGraph.
  • Добавьте подключаемый модуль в агент LangGraph и используйте его в веб-приложении.
  • Преобразуйте существующую функциональность приложения в конечную точку OpenAPI для службы Foundry Agent.
  • Вызвать агента Foundry в веб-приложении.
  • Назначьте необходимые разрешения для подключения с использованием управляемой идентичности.

Предпосылки

Открытие примера с помощью codespaces

Проще всего приступить к работе с помощью GitHub Codespaces, который предоставляет полную среду разработки со всеми необходимыми средствами, предварительно установленными.

  1. Перейдите в репозиторий GitHub по адресу https://github.com/Azure-Samples/app-service-agentic-langgraph-foundry-python.

  2. Нажмите кнопку "Код" , перейдите на вкладку "Пространства кода" и выберите "Создать пространство кода" на главном.

  3. Подождите несколько минут, пока пространство кода инициализируется. Когда вы будете готовы, вы увидите полностью настроенную среду разработки в браузере.

  4. Запустите приложение локально:

    python3 -m venv venv
    source venv/bin/activate
    pip install -r requirements.txt
    uvicorn src.app:app --host 0.0.0.0 --port 3000
    
  5. Когда вы увидите сообщение Ваше приложение, запущенное на порту 3000, доступно, выберите Open in Browser и добавьте несколько задач.

    Агенты не полностью настроены, поэтому они еще не работают. Вы настроите их позже.

Просмотреть код агента

Оба подхода используют один и тот же шаблон реализации, где агент инициализируется при запуске приложения и отвечает на пользовательские сообщения с помощью запросов POST.

LangGraphTaskAgent инициализируется в конструкторе в src/agents/langgraph_task_agent.py. Код инициализации выполняет следующие действия:

  • Настраивает клиент AzureChatOpenAI с помощью переменных среды.
  • Создает предварительно созданный агент ReAct с памятью и набором средств CRUD для управления задачами (см. краткое руководство по LangGraph).
# Initialize Azure OpenAI client
credential = DefaultAzureCredential()
azure_ad_token_provider = get_bearer_token_provider(
    credential, "https://cognitiveservices.azure.com/.default"
)

self.llm = AzureChatOpenAI(
    azure_endpoint=endpoint,
    azure_deployment=deployment_name,
    azure_ad_token_provider=azure_ad_token_provider,
    api_version="2024-10-21"
)

# Define tools
tools = [
    self._create_task_tool(),
    self._get_tasks_tool(),
    self._get_task_tool(),
    self._update_task_tool(),
    self._delete_task_tool()
]

# Create the agent
self.agent = create_react_agent(self.llm, tools, checkpointer=self.memory)
print("LangGraph Task Agent initialized successfully")

При обработке сообщений пользователей агент вызывается с ainvoke() сообщением пользователя и идентификатором потока для непрерывности общения.

result = await self.agent.ainvoke(
    {"messages": [("user", message)]},
    config=config
)

Развертывание примера приложения

Репозиторий с примерами содержит шаблон Azure Developer CLI (AZD), который создает приложение App Service с управляемой идентичностью и развертывает ваше приложение-пример.

  1. В терминале войдите в Azure с помощью Интерфейса командной строки разработчика Azure:

    azd auth login
    

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

  2. Разверните приложение Службы приложений Azure с помощью шаблона AZD:

    azd up
    
  3. При появлении запроса укажите следующие ответы:

    Question Ответ
    Введите новое имя среды: Введите уникальное имя.
    Выберите подписку Azure для использования: Выберите подписку.
    Выберите группу ресурсов для использования: Выберите "Создать группу ресурсов".
    Выберите расположение для создания группы ресурсов в: Выберите Швецию Центральную.
    Введите имя новой группы ресурсов: Нажмите Enter.
  4. В выходных данных AZD найдите URL-адрес приложения и перейдите к нему в браузере. URL-адрес выглядит следующим образом в выходных данных AZD:

     Deploying services (azd deploy)
    
       (✓) Done: Deploying service web
       - Endpoint: <URL>
     
  5. Откройте автоматически созданную схему OpenAPI по пути https://....azurewebsites.net/openapi.json. Вам потребуется эта схема позже.

    Теперь у вас есть приложение App Service с управляемым системой удостоверением.

Создание и настройка ресурса Microsoft Foundry

  1. На портале Foundry убедитесь, что верхний переключатель New Foundry установлен в положение "активный", и затем создайте проект.

  2. Разверните модель выбранного варианта (см. краткое руководство по Microsoft Foundry: создание ресурсов).

  3. В верхней части игровой площадки модели скопируйте имя модели.

  4. Самый простой способ получить конечную точку Azure OpenAI по-прежнему с классического портала. Нажмите переключатель New Foundry, затем выберите Azure OpenAI, а потом скопируйте URL-адрес в Azure OpenAI endpoint на будущее.

    Снимок экрана, показывающий, как скопировать конечный URL-адрес OpenAI и конечный URL-адрес проекта Foundry в портале Foundry.

Назначьте необходимые разрешения

  1. В верхнем меню нового портала Foundry выберите "Работа", а затем выберите "Администратор". В строке проекта Foundry вы увидите две ссылки. Один из столбцов Name — ресурс проекта Foundry, а в столбце "Родительский ресурс" — ресурс Foundry.

    Снимок экрана, показывающий, как быстро перейти к ресурсу литейного производства или ресурсу проекта литейного производства.

  2. Выберите ресурс Foundry в родительском ресурсе и выберите "Управление этим ресурсом" на портале Azure. На портале Azure можно назначить доступ на основе ролей к ресурсу, относящемуся к развернутому веб-приложению.

  3. Добавьте следующую роль для управляемой учетной записи служебного приложения App Service:

    Целевой ресурс Требуемая роль Требуется для
    Литейный завод Пользователь когнитивных сервисов OpenAI Служба завершения чата в Microsoft Agent Framework.

    Инструкции см. в статье "Назначение ролей Azure" с помощью портала Azure.

Настройка переменных подключения в примере приложения

  1. Откройте .env. Используя значения, скопированные ранее на портале Foundry, настройте следующие переменные:

    Variable Description
    AZURE_OPENAI_ENDPOINT Конечная точка Azure OpenAI (скопирована с классического портала Foundry).
    AZURE_OPENAI_DEPLOYMENT_NAME Имя модели в развертывании (скопированное с площадки модели в новом портале Foundry).

    Замечание

    Чтобы упростить руководство, вы будете использовать эти переменные в .env вместо того, чтобы переопределять их с помощью настроек приложения в App Service.

    Замечание

    Чтобы упростить руководство, вы будете использовать эти переменные в .env вместо того, чтобы переопределять их с помощью настроек приложения в App Service.

  2. Войдите в Azure с помощью Azure CLI:

    az login
    

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

  3. Запустите приложение локально:

    npm run build
    npm start
    
  4. Когда вы увидите Приложение, работающее на порту 3000, доступно, выберите Открыть в браузере.

  5. Выберите ссылку агента LangGraph и ссылку агента Foundry , чтобы попробовать интерфейс чата. Если вы получите ответ, приложение успешно подключается к ресурсу Microsoft Foundry.

  6. Вернитесь в пространство кода GitHub, разверните изменения приложения.

    azd up
    
  7. Перейдите к развернутому приложению еще раз и протестируйте агенты чата.

Очистите ресурсы

После завершения работы с приложением можно удалить ресурсы службы приложений, чтобы избежать дополнительных затрат:

azd down --purge

Так как шаблон AZD не включает ресурсы Microsoft Foundry, их необходимо удалить вручную, если вы хотите.

Дополнительные ресурсы