Получение аналитических сведений о данных из приложения чата искусственного интеллекта .NET Azure
Начало работы с семантической ядром и моделью gpt-35-turbo
из простого консольного приложения .NET 8.0. Используйте модель ИИ, чтобы получить аналитические сведения о предыдущих походах. Он состоит из простого консольного приложения, работающего локально, которое считывает файл hikes.md
и отправляет запрос в службу Azure OpenAI, развернутую в подписке Azure, и предоставляет результат в консоли. Выполните следующие действия, чтобы подготовить Azure OpenAI и узнать, как использовать семантические ядра.
Начало работы с .NET Azure OpenAI с gpt-35-turbo
моделью из простого консольного приложения .NET 8.0. Используйте модель ИИ, чтобы получить аналитические сведения о предыдущих походах. Он состоит из простого консольного приложения, работающего локально, которое считывает файл hikes.md
и отправляет запрос в службу Azure OpenAI, развернутую в подписке Azure, и предоставляет результат в консоли. Выполните следующие действия, чтобы подготовить 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\03-ChattingAboutMyHikes
в каталог.
- В терминале или командной строке перейдите
azure-openai-sdk\03-ChattingAboutMyHikes
в каталог.
Теперь пора попробовать консольное приложение. Введите следующее, чтобы запустить приложение:
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"];
AzureOpenAIChatCompletionService
Служба упрощает запросы и ответы.
// == Create the Azure OpenAI Chat Completion Service ==========
AzureOpenAIChatCompletionService service = new(deployment, endpoint, key);
AzureOpenAIChatCompletionService
После создания клиента мы считываем содержимое файла hikes.md
и используем его для предоставления большего контекста модели путем добавления системного запроса. Это указывает модели, как она будет действовать во время беседы.
// Provide context for the AI model
ChatHistory chatHistory = new($"""
You are upbeat and friendly. You introduce yourself when first saying hello.
Provide a short answer only based on the user hiking records below:
{File.ReadAllText("hikes.md")}
""");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Затем можно добавить в модель сообщение пользователя с помощью AddUserMessage
функции.
Чтобы модель создавала ответ на основе системного запроса и запроса пользователя, используйте функцию GetChatMessageContentAsync
.
// Start the conversation
chatHistory.AddUserMessage("Hi!");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
chatHistory.Add(await service.GetChatMessageContentAsync(chatHistory, new OpenAIPromptExecutionSettings() { MaxTokens = 400 }));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Чтобы сохранить журнал чата или контекст, убедитесь, что вы добавите ответ из модели chatHistory
в . Пришло время снова запросить пользователей о наших данных с помощью AddUserMessage
и GetChatMessageContentAsync
функции.
// Continue the conversation with a question.
chatHistory.AddUserMessage("I would like to know the ratio of the hikes I've done in Canada compared to other countries.");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
chatHistory.Add(await service.GetChatMessageContentAsync(chatHistory, new OpenAIPromptExecutionSettings() { MaxTokens = 400 }));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
Настройте системный запрос и измените запрос, задавая различные вопросы (например, сколько раз вы подняли, когда дождь? Сколько раз вы подняли в 2021 году? и т. д.) чтобы узнать, как модель реагирует.
Обзор кода
В нашем приложении используется клиентский 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
После создания клиента мы считываем содержимое файла hikes.md
и используем его для предоставления большего контекста модели путем добавления системного запроса. Это указывает модели, как она будет действовать во время беседы.
var systemPrompt =
"""
You are upbeat and friendly. You introduce yourself when first saying hello.
Provide a short answer only based on the user hiking records below:
""" + markdown;
completionOptions.Messages.Add(new ChatRequestSystemMessage(systemPrompt));
Затем можно добавить в модель сообщение пользователя с помощью ChatRequestUserMessage
класса.
Чтобы модель создавала ответ на основе системного запроса и запроса пользователя, используйте функцию GetChatCompletionsAsync
.
string userGreeting = """
Hi!
""";
completionOptions.Messages.Add(new ChatRequestUserMessage(userGreeting));
Console.WriteLine($"\n\nUser >>> {userGreeting}");
ChatCompletions response = await openAIClient.GetChatCompletionsAsync(completionOptions);
ChatResponseMessage assistantResponse = response.Choices[0].Message;
Console.WriteLine($"\n\nAI >>> {assistantResponse.Content}");
completionOptions.Messages.Add(new ChatRequestAssisstantMessage(assistantResponse.Content));
Чтобы сохранить журнал чата или контекст, убедитесь, что вы добавите ответ из модели в качестве ChatRequestAssistantMessage
. Пришло время снова запросить пользователей о наших данных с помощью ChatRequestUserMessage
и GetChatCompletionsAsync
функции.
var hikeRequest =
"""
I would like to know the ration of hike I did in Canada compare to hikes done in other countries.
""";
Console.WriteLine($"\n\nUser >>> {hikeRequest}");
completionOptions.Messages.Add(new ChatRequestUserMessage(hikeRequest));
response = await openAIClient.GetChatCompletionsAsync(completionOptions);
Настройте системный запрос и измените запрос, задавая различные вопросы (например, сколько раз вы подняли, когда дождь? Сколько раз вы подняли в 2021 году? и т. д.) чтобы узнать, как модель реагирует.
Очистка ресурсов
Если вам больше не нужен пример приложения или ресурсов, удалите соответствующее развертывание и все ресурсы.
azd down
Следующие шаги
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по