Поделиться через


Руководство. Создание чат-бота с помощью Службы приложений Azure и Azure OpenAI (.NET)

В этом руководстве вы создадите интеллектуальное приложение ИИ, интегрируя Azure OpenAI с приложением Java Spring Boot и развертывая его в Службе приложений Azure. Вы создадите страницу Razor, которая отправляет запросы на завершение чата в модель в Azure OpneAI и передает ответ обратно на страницу.

Снимок экрана: чат-бот, работающий в Службе приложений Azure.

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

  • Создание ресурса Azure OpenAI и развертывание языковой модели
  • Создание приложения Blazor с помощью Azure OpenAI
  • Развертывание приложения в Службе приложений Azure
  • Реализация проверки подлинности без пароля как в среде разработки, так и в Azure

Предпосылки

1. Создание ресурса Azure OpenAI

В этом разделе вы будете использовать GitHub Codespaces для создания ресурса Azure OpenAI с помощью Azure CLI.

  1. Перейдите в GitHub Codespaces и войдите с помощью учетной записи GitHub.

  2. Найдите пустой шаблон GitHub и выберите "Использовать этот шаблон ", чтобы создать пустое пространство кода.

  3. В терминале Codespace установите Azure CLI:

    curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
    
  4. Вход в учетную запись Azure:

    az login
    

    Следуйте инструкциям в терминале для проверки подлинности.

  5. Задайте переменные среды для имени группы ресурсов, имени службы Azure OpenAI и расположения:

    export RESOURCE_GROUP="<group-name>"
    export OPENAI_SERVICE_NAME="<azure-openai-name>"
    export APPSERVICE_NAME="<app-name>"
    export LOCATION="eastus2"
    

    Это важно

    Регион имеет решающее значение, так как он привязан к региональной доступности выбранной модели. Доступность модели и доступность типов развертывания зависят от региона к региону. В этом руководстве используется gpt-4o-mini, который доступен в eastus2 типе развертывания "Стандартный". При развертывании в другом регионе эта модель может быть недоступна или может потребоваться другой уровень. Перед изменением регионов ознакомьтесь с сводной таблицей модели и доступностью регионов , чтобы проверить поддержку моделей в предпочитаемом регионе.

  6. Создайте группу ресурсов и ресурс Azure OpenAI с личным доменом, а затем добавьте модель gpt-4o-mini:

    # Resource group
    az group create --name $RESOURCE_GROUP --location $LOCATION
    # Azure OpenAI resource
    az cognitiveservices account create \
      --name $OPENAI_SERVICE_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --custom-domain $OPENAI_SERVICE_NAME \
      --kind OpenAI \
      --sku s0
    # gpt-4o-mini model
    az cognitiveservices account deployment create \
      --name $OPENAI_SERVICE_NAME \
      --resource-group $RESOURCE_GROUP \
      --deployment-name gpt-4o-mini \
      --model-name gpt-4o-mini \
      --model-version 2024-07-18 \
      --model-format OpenAI \
      --sku-name Standard \
      --sku-capacity 1
    # Cognitive Services OpenAI User role that lets the signed in Azure user to read models from Azure OpenAI
    az role assignment create \
      --assignee $(az ad signed-in-user show --query id -o tsv) \
      --role "Cognitive Services OpenAI User" \
      --scope /subscriptions/$(az account show --query id -o tsv)/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.CognitiveServices/accounts/$OPENAI_SERVICE_NAME
    

Теперь, когда у вас есть ресурс Azure OpenAI, вы создадите веб-приложение для взаимодействия с ним.

2. Создание и настройка веб-приложения Blazor

В этом разделе описано, как создать веб-приложение Blazor с помощью .NET CLI.

  1. В терминале Codespace создайте новое приложение Blazor и попробуйте запустить его в первый раз.

    dotnet new blazor -o .
    dotnet run
    

    Вы увидите уведомление в GitHub Codespaces, указывающее, что приложение доступно на определенном порту. Нажмите кнопку "Открыть в браузере ", чтобы запустить приложение на новой вкладке браузера.

  2. Вернитесь в терминал Codespace, остановите приложение с помощью CTRL+C.

  3. Установите необходимые пакеты NuGet для работы с Azure OpenAI:

    dotnet add package Azure.AI.OpenAI
    dotnet add package Azure.Identity
    
  4. Откройте Components/Pages/Home.razor и замените его содержимое следующим кодом для простого вызова потока завершения чата с помощью Azure OpenAI:

    @page "/"
    @rendermode InteractiveServer
    @using Azure.AI.OpenAI
    @using Azure.Identity
    @using OpenAI.Chat
    @inject Microsoft.Extensions.Configuration.IConfiguration _config
    
    <h3>Azure OpenAI Chat</h3>
    <div class="mb-3 d-flex align-items-center" style="margin:auto;">
        <input class="form-control me-2" @bind="userMessage" placeholder="Type your message..." />
        <button class="btn btn-primary" @onclick="SendMessage">Send</button>
    </div>
    <div class="card p-3" style="margin:auto;">
        @if (!string.IsNullOrEmpty(aiResponse))
        {
            <div class="alert alert-info mt-3 mb-0">@aiResponse</div>
        }
    </div>
    
    @code {
        private string? userMessage;
        private string? aiResponse;
    
        private async Task SendMessage()
        {
            if (string.IsNullOrWhiteSpace(userMessage)) return;
    
            // Initialize the Azure OpenAI client
            var endpoint = new Uri(_config["AZURE_OPENAI_ENDPOINT"]!);
            var client = new AzureOpenAIClient(endpoint, new DefaultAzureCredential());
            var chatClient = client.GetChatClient("gpt-4o-mini");
    
            aiResponse = string.Empty;
            StateHasChanged();
    
            // Create a chat completion streaming request
            var chatUpdates = chatClient.CompleteChatStreamingAsync(
                [
                    new UserChatMessage(userMessage)
                ]);
    
                await foreach(var chatUpdate in chatUpdates)
                {
                    // Update the UI with the streaming response
                    foreach(var contentPart in chatUpdate.ContentUpdate)
                {
                    aiResponse += contentPart.Text;
                    StateHasChanged();
                }
            }
        }
    }
    
  5. В терминале получите конечную точку OpenAI:

    az cognitiveservices account show \
      --name $OPENAI_SERVICE_NAME \
      --resource-group $RESOURCE_GROUP \
      --query properties.endpoint \
      --output tsv
    
  6. Запустите приложение еще раз, добавив AZURE_OPENAI_ENDPOINT со значением из вывода командной строки (CLI):

    AZURE_OPENAI_ENDPOINT=<output-from-previous-cli-command> dotnet run
    
  7. Нажмите кнопку "Открыть в браузере ", чтобы запустить приложение на новой вкладке браузера.

  8. Введите сообщение в текстовое поле и нажмите кнопку "Отправить и дать приложению несколько секунд ответить с сообщением из Azure OpenAI.

Приложение использует DefaultAzureCredential, которое автоматически использует azure CLI, выполнившего вход пользователя для проверки подлинности маркера. Далее в этом руководстве вы развернете приложение Blazor в Службе приложений Azure и настройте его для безопасного подключения к ресурсу Azure OpenAI с помощью управляемого удостоверения. То же самое DefaultAzureCredential в вашем коде может обнаружить управляемое удостоверение и использовать его для аутентификации. Дополнительный код не требуется.

3. Развертывание в Службе приложений Azure и настройка подключения OpenAI

Теперь, когда приложение работает локально, давайте развернем его в Службе приложений Azure и настроим подключение службы к Azure OpenAI с помощью управляемого удостоверения.

  1. Сначала разверните приложение в Службе приложений Azure с помощью команды az webapp upAzure CLI. Эта команда создает веб-приложение и развертывает код в нем:

    az webapp up \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --name $APPSERVICE_NAME \
      --plan $APPSERVICE_NAME \
      --sku B1 \
      --os-type Linux \
      --track-status false
    

    Время выполнения этой команды может занять несколько минут. Он создает веб-приложение в той же группе ресурсов, что и ресурс OpenAI.

  2. После развертывания приложения создайте подключение службы между веб-приложением и ресурсом Azure OpenAI с помощью управляемого удостоверения:

    az webapp connection create cognitiveservices \
      --resource-group $RESOURCE_GROUP \
      --name $APPSERVICE_NAME \
      --target-resource-group $RESOURCE_GROUP \
      --account $OPENAI_SERVICE_NAME
      --connection azure-openai \
      --system-identity
    

    Эта команда создает подключение между веб-приложением и ресурсом Azure OpenAI, выполнив следующие действия.

    • Создание системного управляемого удостоверения для веб-приложения.
    • Добавление роли участника Cognitive Services OpenAI для управляемого удостоверения ресурса Azure OpenAI.
    • Добавление настройки приложения AZURE_OPENAI_ENDPOINT в ваше веб-приложение.

    Ваше приложение теперь развернуто и подключено к Azure OpenAI с использованием управляемой идентификации. Я считываю AZURE_OPENAI_ENDPOINT параметр приложения с помощью внедрения IConfiguration.

  3. Откройте развернутое веб-приложение в браузере. Найдите URL-адрес развернутого веб-приложения в выходных данных терминала. Откройте веб-браузер и перейдите на нужный сайт.

    az webapp browse
    
  4. Введите сообщение в текстовое поле и нажмите кнопку "Отправить и дать приложению несколько секунд ответить с сообщением из Azure OpenAI.

    Снимок экрана: чат-бот, работающий в Службе приложений Azure.

Часто задаваемые вопросы


Что делать, если я хочу подключиться к OpenAI вместо Azure OpenAI?

Чтобы подключиться к OpenAI, используйте следующий код:

@using OpenAI.Client

var client = new OpenAIClient("<openai-api-key>");

Дополнительные сведения см. в разделе "Проверка подлинности API OpenAI".

При работе с секретами подключения в службе приложений следует использовать ссылки Key Vault вместо хранения секретов непосредственно в базе кода. Это гарантирует, что конфиденциальная информация остается безопасной и управляется централизованно.


Можно ли подключиться к Azure OpenAI с помощью ключа API?

Да, вы можете подключиться к Azure OpenAI с помощью ключа API вместо управляемого удостоверения. Этот подход поддерживается SDK для Azure OpenAI и Semantic Kernel.

При работе с секретами подключения в службе приложений следует использовать ссылки Key Vault вместо хранения секретов непосредственно в базе кода. Это гарантирует, что конфиденциальная информация остается безопасной и управляется централизованно.


Как работает DefaultAzureCredential в этой инструкции?

DefaultAzureCredential упрощает аутентификацию, автоматически выбирая лучший доступный метод аутентификации:

  • Во время локальной разработки: после запуска az login используются ваши локальные учетные данные Azure CLI.
  • При развертывании в Службе приложений Azure используется управляемое удостоверение приложения для безопасной проверки подлинности без пароля.

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

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