Упражнение. Установка пакета SDK для .NET для Azure OpenAI и создание первого приложения
Теперь, когда у нас есть понимание завершения текста и чата, давайте создадим базовое приложение, которое использует их.
Вы работаете в организации, которая помогает туристам исследовать на открытом воздухе, рекомендуя тропы. Вы рассматриваете возможность добавления общения искусственного интеллекта в функциональные возможности рекомендаций и хотите создать прототип.
Вы решите, что вам нужно использовать API завершения чата, предоставляемый моделью GPT-35-Turbo.
Создание ресурса Azure OpenAI
Первым шагом является создание ресурса Azure OpenAI и развертывание модели. Давайте будем использовать модель GPT-3 Turbo в этом упражнении. Как отмечается в документации, GPT-3.5 Turbo использует API завершения чата и отлично подходит для нашего варианта использования.
Необходимые компоненты
Подписка Azure
Доступ, предоставленный Azure OpenAI в требуемой подписке
В настоящее время доступ к этой службе предоставляется только приложением. Вы можете подать заявку на доступ к Azure OpenAI, выполнив форму по адресу https://aka.ms/oai/access.
Установленный Azure CLI
Создание ресурса и развертывание модели
Создание ресурса и развертывание модели — это многоэтапный процесс. Используйте Azure CLI, так как это может быть быстрее, чем использование портал Azure. Но обратите внимание, что вы можете использовать портал Azure, если вы хотите.
az login
Выполните команду, чтобы войти, если вы еще не сделали этого.При создании нового ресурса Azure можно создать новую группу ресурсов или использовать существующую. Эта команда показывает, как создать новую группу ресурсов. Используйте имя HikingConversations-RG , но вы можете заменить имя выбранной группы или использовать имя существующей группы.
az group create \ --name HikingConversations-RG \ --location eastus
az group create ` --name HikingConversations-RG ` --location eastus
Выполните следующую команду, чтобы создать ресурс OpenAI в группе ресурсов HikingConversations-RG . Назовите ресурс OpenAI HikingConversationsAI.
az cognitiveservices account create \ -n HikingConversationsAI \ -g HikingConversations-RG \ -l eastus \ --kind OpenAI \ --sku s0
az cognitiveservices account create ` -n HikingConversationsAI ` -g HikingConversations-RG ` -l eastus ` --kind OpenAI ` --sku s0
Затем мы хотим развернуть модель GPT-35-Turbo в созданном ресурсе OpenAI. Вызовите развертывание модели HikingRecommendationTurbo. Обратите внимание, что в качестве имени группы ресурсов используется RG в качестве имени группы ресурсов, в качестве имени ресурса OpenAI, если вы использовали разные значения, убедитесь, что эти значения заменяются.
az cognitiveservices account deployment create \ -g HikingConversations-RG \ -n HikingConversationsAI \ --deployment-name HikingRecommendationTurbo \ --model-name gpt-35-turbo \ --model-version "0301" \ --model-format OpenAI \ --scale-settings-scale-type "Standard"
az cognitiveservices account deployment create ` -g HikingConversations-RG ` -n HikingConversationsAI ` --deployment-name HikingRecommendationTurbo ` --model-name gpt-35-turbo ` --model-version "0301" ` --model-format OpenAI ` --scale-settings-scale-type "Standard"
После создания ресурса и модели необходимо получить базовый URL-адрес и ключи доступа, чтобы пакет SDK для .NET смог получить доступ к ресурсу Azure OpenAI. Используйте эти команды для получения конечных точек и первичных ключей API и запишите их для последующего использования:
Конечная точка
az cognitiveservices account show \ -g HikingConversations-RG \ -n HikingConversationsAI \ --query "properties.endpoint"
az cognitiveservices account show ` -g HikingConversations-RG ` -n HikingConversationsAI ` --query "properties.endpoint"
Первичный ключ API
az cognitiveservices account keys list \ -g HikingConversations-RG \ -n HikingConversationsAI \ --query "key1"
az cognitiveservices account keys list ` -g HikingConversations-RG ` -n HikingConversationsAI ` --query "key1"
Создание консольного приложения и добавление пакета SDK OpenAI
Далее мы хотим создать консольное приложение .NET с открытыми костями и добавить пакет SDK Для Azure OpenAI.
Выполните следующую команду, чтобы создать новое приложение .NET с именем HikingConversationsAI.
dotnet new console -n HikingConversationsAI
Перейдите в только что созданный каталог HikingConversationsAI .
cd HikingConversationsAI
Затем добавьте пакет SDK Azure Open AI.
dotnet add package Azure.AI.OpenAI --prerelease
Откройте проект в VS Code или Visual Studio.
В файле Program.cs удалите весь существующий код.
Добавьте
using Azure.AI.OpenAI;
в начало Program.cs.Добавьте
using Azure;
в начало Program.cs.Добавьте три переменные уровня класса, которые содержат ссылки на конечную точку ресурса Azure OpenAI, первичный ключ API и имя развернутой модели.
string openAIEndpoint = "<YOUR ENDPOINT URL VALUE>"; string openAIAPIKey = "<YOUR PRIMARY API KEY VALUE>"; string openAIDeploymentName = "HikingRecommendationTurbo";
В приведенных выше шагах мы назвали развертывание HikingRecommendationTurbo, если вы использовали другое значение, убедитесь, что вы используете это вместо этого.
Наконец, создайте экземпляр класса, необходимого для взаимодействия с ресурсом Azure OpenAI.
var endpoint = new Uri(openAIEndpoint); var credentials = new AzureKeyCredential(openAIAPIKey); var openAIClient = new AzureOpenAIClient(endpoint, credentials);
Создание системного запроса
Давайте создадим начальную командную роль системы, которая предоставит начальные инструкции модели.
Сначала создайте запрос, который указывает модели, как она будет действовать во время беседы при рекомендациях по походам.
var systemPrompt = """ You are a hiking enthusiast who helps people discover fun hikes. You are upbeat and friendly. You ask people what type of hikes they like to take and then suggest some. """;
Затем создайте для
List<ChatMessage>
хранения всех сообщений, которые будут отправляться в модель и из нее.List<ChatMessage> chatHistory = new();
Затем создайте новый
SystemChatMessage
объект и добавьте его вchatHistory
список. Мы зададимChatMessage
значение, исходя из системной роли.SystemChatMessage systemMessage = ChatMessage.CreateSystemMessage(systemPrompt); chatHistory.Add(systemMessage);
Запуск беседы
Далее мы отправим первое сообщение модели, инициируя беседу.
Создайте запрос пользователя и добавьте его в
chatHistory
качестве сообщения пользователя.string userGreeting = """ Hi there hiking recommendation bot! Can't wait to hear what you have in store for me! """; UserChatMessage userGreetingMessage = ChatMessage.CreateUserMessage(userGreeting); chatHistory.Add(userGreetingMessage); Console.WriteLine($"User >>> {userGreeting}");
Теперь необходимо получить ссылку на
ChatClient
объект. Этот объект отвечает за упрощение бесед чата с моделью. Таким образом, необходимо сообщить объекту клиента Azure OpenAI, какую модель вы развернули.var chatClient = openAIClient.GetChatClient(openAIDeploymentName);
Затем вызовите функцию
CompleteChatAsync
ChatClient
класса, передаваемогоchatHistory
в .var response = await chatClient.CompleteChatAsync(chatHistory);
Наконец, считывает значение, возвращаемое моделью.
Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
Давайте посмотрим, что у нас есть до сих пор, вы можете запустить приложение, введя
dotnet run
в терминал.Поэкспериментируйте, изменив
userGreetingMessage
значение, чтобы узнать, как модель может реагировать по-разному.
В одном примере выполнения мы получили следующее:
Hello! Great to hear from you. What type of hikes are you interested in? Do you enjoy easy scenic walks, challenging trails, or something in between? Do you prefer hikes with waterfalls, mountain views, or unique geological formations?
Вы можете получить что-то другое, так как модель недетерминирована или может вывести разные выходные данные даже с одинаковыми входными данными.
Продолжение беседы
Давайте продолжим, отвечая на беседу, а затем выводим ответ.
Убедитесь, что мы сохраняем контекст беседы, поэтому добавьте ответ, который вернулся непосредственно в
chatHistory
список.var assistantMessage = ChatMessage.CreateAssistantMessage(response.Value.Content.Last().Text); chatHistory.Add(assistantMessage);
Затем создайте другой запрос пользователя и отправьте его в модель.
var hikeRequest = """ I would like a strenuous hike near where I live that ends with a view that is amazing. """; Console.WriteLine($"User >>> {hikeRequest}"); UserChatMessage hikeMessage = ChatMessage.CreateUserMessage(hikeRequest); chatHistory.Add(hikeMessage); response = await chatClient.CompleteChatAsync(chatHistory); Console.WriteLine($"AI >>> {response.Value.Content.Last().Text}");
Вы можете экспериментировать, изменив
hikeRequest
переменную, чтобы запросить различные типы походов. В одном примере выполнения мы получили:Great choice! If you're up for a challenge, I recommend checking out the hike to Poo Poo Point in Issaquah, Washington. The hike is 7.2 miles roundtrip, with an elevation gain of 1,858 feet, so it's definitely a workout. But the stunning views of Mount Rainier and the Cascade Mountains make it all worthwhile. Plus, you'll get to see paragliders taking off from Poo Poo Point. It's a popular hike, so I recommend going early to avoid crowds. Let me know if you need more information!
Итоги
Теперь мы можем использовать пакет SDK Для Azure OpenAI вместе с gpt-35-turbo
моделью для создания бесед, которые помогают предоставлять рекомендации по походам. Далее давайте посмотрим, как мы можем улучшить запросы, которые мы отправим в модель.