Сводка текста с помощью приложения чата ИИ 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.
Необходимые компоненты
- Пакет SDK для .NET 8.0. Установка пакета SDK для .NET 8.0
- подписка Azure — создайте бесплатную учетную запись.
- Интерфейс командной строки разработчика Azure. Установка или обновление интерфейса командной строки разработчика Azure
- Доступ к службе Azure OpenAI.
- В Windows требуется PowerShell
v7+
. Чтобы проверить версию, запуститеpwsh
в терминале. Он должен возвращать текущую версию. Если он возвращает ошибку, выполните следующую команду:dotnet tool update --global PowerShell
Развертывание ресурсов Azure
Убедитесь, что вы следуйте предварительным требованиям, чтобы иметь доступ к Службе Azure OpenAI, а также интерфейс командной строки разработчика Azure, а затем следуйте приведенному ниже руководству, чтобы настроить начало работы с примером приложения.
Клонирование репозитория: dotnet/ai-samples
В терминале или командной строке перейдите в каталог кратких руководств.
Это подготавливает ресурсы 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 настроены для пользовательских секретов и их можно протестировать.
Пример сводки по преимуществам для походов
- В терминале или командной строке перейдите
semantic-kernel\01-HikeBenefitsSummary
в каталог.
- В терминале или командной строке перейдите
azure-openai-sdk\01-HikeBenefitsSummary
в каталог.
Теперь пора попробовать консольное приложение. Введите следующее, чтобы запустить приложение:
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
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по