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


Сводка текста с помощью приложения чата ИИ Azure с помощью .NET

Приступая к работе с семантического ядра, создав простое консольное приложение чата .NET 8. Приложение будет выполняться локально и использовать модель OpenAI gpt-35-turbo , развернутую в учетной записи Azure OpenAI. Выполните следующие действия, чтобы подготовить Azure OpenAI и узнать, как использовать семантические ядра.

Приступая к работе с пакетом SDK для .NET Azure OpenAI, создав простое консольное приложение чата .NET 8. Приложение будет выполняться локально и использовать модель OpenAI gpt-35-turbo , развернутую в учетной записи Azure OpenAI. Выполните следующие действия, чтобы подготовить Azure OpenAI и узнать, как использовать пакет SDK для .NET Azure OpenAI.

Необходимые компоненты

Развертывание ресурсов Azure

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

  1. Клонирование репозитория: dotnet/ai-samples

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

  3. Это подготавливает ресурсы Azure OpenAI. Для создания службы Azure OpenAI и развертывания модели может потребоваться несколько минут.

    azd up
    

Примечание.

Если у вас уже есть доступная служба Azure OpenAI, можно пропустить развертывание и использовать это значение в Program.cs, предпочтительно из IConfiguration.

Устранение неполадок

В Windows после выполнения azd upмогут появиться следующие сообщения об ошибках:

postprovision.ps1 не имеет цифровой подписи. Сценарий не будет выполняться в системе

Скрипт postprovision.ps1 выполняется для задания секретов пользователей .NET, используемых в приложении. Чтобы избежать этой ошибки, выполните следующую команду PowerShell:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass

Затем повторно запустите azd up команду.

Еще одна возможная ошибка:

Pwsh не распознается как внутренняя или внешняя команда, операблирование программы или пакетного файла. ПРЕДУПРЕЖДЕНИЕ: сбой перехватчика postprovision с кодом выхода: "1", путь: ".\infra\post-script\postprovision.ps1". : код выхода: 1 Выполнение будет продолжаться, так как Параметр ContinueOnError имеет значение true.

Скрипт postprovision.ps1 выполняется для задания секретов пользователей .NET, используемых в приложении. Чтобы избежать этой ошибки, вручную запустите скрипт с помощью следующей команды PowerShell:

.\infra\post-script\postprovision.ps1

Теперь приложения .NET AI настроены для пользовательских секретов и их можно протестировать.

Пример сводки по преимуществам для походов

  1. В терминале или командной строке перейдите semantic-kernel\01-HikeBenefitsSummary в каталог.
  1. В терминале или командной строке перейдите azure-openai-sdk\01-HikeBenefitsSummary в каталог.
  1. Теперь пора попробовать консольное приложение. Введите следующее, чтобы запустить приложение:

    dotnet run
    

    Если появится сообщение об ошибке, возможно, не завершено развертывание ресурсов Azure OpenAI. Подождите пару минут и повторите попытку.

Основные сведения о коде

В нашем приложении используется Microsoft.SemanticKernel пакет, который доступен в NuGet, для отправки и получения запросов в службу Azure OpenAI, развернутую в Azure.

Все приложение содержится в файле Program.cs . Первые несколько строк кода загружают секреты и значения конфигурации, заданные для dotnet user-secrets вас во время подготовки приложения.

// == Retrieve the local secrets saved during the Azure deployment ==========
var config = new ConfigurationBuilder()
    .AddUserSecrets<Program>()
    .Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
string key = config["AZURE_OPENAI_KEY"];

// Create a Kernel containing the Azure OpenAI Chat Completion Service
Kernel kernel = Kernel.CreateBuilder()
    .AddAzureOpenAIChatCompletion(deployment, endpoint, key)
    .Build();

Класс Kernel упрощает запросы и ответы с помощью AddAzureOpenAIChatCompletion службы.

Kernel kernel = Kernel.CreateBuilder()
    .AddAzureOpenAIChatCompletion(deployment, endpoint, key)
    .Build();

Kernel После создания мы считываем содержимое файла benefits.md и создадим модель, чтобы сводные prompt данные об этом тексте отображались.

// Create and print out the prompt
string prompt = $"""
    Please summarize the the following text in 20 words or less:
    {File.ReadAllText("benefits.md")}
    """;
Console.WriteLine($"user >>> {prompt}");

Чтобы модель создавала ответ на основе prompt, используйте функцию InvokePromptAsync .

// Submit the prompt and print out the response
string response = await kernel.InvokePromptAsync<string>(prompt, new(new OpenAIPromptExecutionSettings() { MaxTokens = 400 }));
Console.WriteLine($"assistant >>> {response}");

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

Основные сведения о коде

В нашем приложении используется клиентский Azure.AI.OpenAI пакет SDK, доступный в NuGet, для отправки и получения запросов в службу Azure OpenAI, развернутую в Azure.

Все приложение содержится в файле Program.cs . Первые несколько строк кода загружают секреты и значения конфигурации, заданные для dotnet user-secrets вас во время подготовки приложения.

// == Retrieve the local secrets saved during the Azure deployment ==========
var config = new ConfigurationBuilder()
    .AddUserSecrets<Program>()
    .Build();

string openAIEndpoint = config["AZURE_OPENAI_ENDPOINT"];
string openAIDeploymentName = config["AZURE_OPENAI_GPT_NAME"];
string openAiKey = config["AZURE_OPENAI_KEY"];

// == Creating the AIClient ==========
var endpoint = new Uri(openAIEndpoint);
var credentials = new AzureKeyCredential(openAiKey);

Класс OpenAIClient упрощает запросы и ответы. ChatCompletionOptions указывает параметры реагирования модели.

var openAIClient = new OpenAIClient(endpoint, credentials);

var completionOptions = new ChatCompletionsOptions
{
    MaxTokens = 400,
    Temperature = 1f,
    FrequencyPenalty = 0.0f,
    PresencePenalty = 0.0f,
    NucleusSamplingFactor = 0.95f, // Top P
    DeploymentName = openAIDeploymentName
};

OpenAIClient После создания клиента мы считываем содержимое файлаbenefits.md. Затем с помощью ChatRequestUserMessage класса можно добавить в модель запрос, чтобы суммировать этот текст.

string userRequest = """
Please summarize the the following text in 20 words or less:
""" + markdown;

completionOptions.Messages.Add(new ChatRequestUserMessage(userRequest));
Console.WriteLine($"\n\nUser >>> {userRequest}");

Чтобы модель создавала ответ на основе запроса пользователя, используйте функцию GetChatCompletionsAsync .

ChatCompletions response = await openAIClient.GetChatCompletionsAsync(completionOptions);
ChatResponseMessage assistantResponse = response.Choices[0].Message;
Console.WriteLine($"\n\nAssistant >>> {assistantResponse.Content}");

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

Очистка ресурсов

Если вам больше не нужен пример приложения или ресурсов, удалите соответствующее развертывание и все ресурсы.

azd down

Следующие шаги