Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве вы создадите приложение чата, которое запрашивает ответ со структурированными выходными данными. Структурированный ответ в чате представляет собой заданный вами тип ответа вместо простого текста. Чат-приложение, создаваемое в этом кратком вводном руководстве, анализирует тональность различных обзоров продуктов, классифицируя каждый обзор в соответствии со значениями пользовательского перечисления.
Предпосылки
- .NET 8 или более поздняя версия
- Visual Studio Code (необязательно)
Настройка службы ИИ
Чтобы подготовить службу и модель Azure OpenAI с помощью портала Azure, выполните действия, описанные в статье Создание и развертывание ресурса Azure OpenAI Service. На шаге "Развернуть модель" выберите модель gpt-4o
.
Создание приложения чата
Выполните следующие действия, чтобы создать консольное приложение, которое подключается к gpt-4o
модели ИИ.
В окне терминала перейдите в каталог, в котором вы хотите создать приложение, и создайте консольное приложение с
dotnet new
помощью команды:dotnet new console -o SOChat
Перейдите в каталог
SOChat
и добавьте необходимые пакеты в приложение:dotnet add package Azure.AI.OpenAI dotnet add package Azure.Identity dotnet add package Microsoft.Extensions.AI dotnet add package Microsoft.Extensions.AI.OpenAI --prerelease dotnet add package Microsoft.Extensions.Configuration dotnet add package Microsoft.Extensions.Configuration.UserSecrets
Выполните следующие команды, чтобы добавить секреты приложения для конечной точки Azure OpenAI, имени модели и идентификатора арендатора:
dotnet user-secrets init dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-Azure-OpenAI-endpoint> dotnet user-secrets set AZURE_OPENAI_GPT_NAME gpt-4o dotnet user-secrets set AZURE_TENANT_ID <your-tenant-ID>
Замечание
В зависимости от среды идентификатор клиента может быть не нужен. В этом случае удалите его из кода, инициализирующего DefaultAzureCredential.
Откройте новое приложение в выбранном редакторе.
Добавление кода
Определите перечисление, описывающее различные настроения.
public enum Sentiment { Positive, Negative, Neutral }
IChatClient Создайте объект, который будет взаимодействовать с моделью.
IConfigurationRoot config = new ConfigurationBuilder() .AddUserSecrets<Program>() .Build(); string endpoint = config["AZURE_OPENAI_ENDPOINT"]; string model = config["AZURE_OPENAI_GPT_NAME"]; string tenantId = config["AZURE_TENANT_ID"]; // Get a chat client for the Azure OpenAI endpoint. AzureOpenAIClient azureClient = new( new Uri(endpoint), new DefaultAzureCredential(new DefaultAzureCredentialOptions() { TenantId = tenantId })); IChatClient chatClient = azureClient .GetChatClient(deploymentName: model) .AsIChatClient();
Замечание
DefaultAzureCredential ищет учетные данные для аутентификации в вашей среде или в локальных инструментах. Вам потребуется назначить
Azure AI Developer
роль учетной записи, используемой для входа в Visual Studio или Azure CLI. Дополнительные сведения см. в статье Аутентификация в службах ИИ Azure с помощью.NET.Отправьте запрос модели с одним отзывом о продукте, а затем выведите проанализированные настроения на консоль. Вы объявляете запрошенный структурированный выходной тип, передав его в качестве аргумента типа методу ChatClientStructuredOutputExtensions.GetResponseAsync<T>(IChatClient, String, ChatOptions, Nullable<Boolean>, CancellationToken) расширения.
string review = "I'm happy with the product!"; var response = await chatClient.GetResponseAsync<Sentiment>($"What's the sentiment of this review? {review}"); Console.WriteLine($"Sentiment: {response.Result}");
Этот код создает выходные данные, аналогичные следующему:
Sentiment: Positive
Вместо того, чтобы просто анализировать один отзыв, можно проанализировать подборку отзывов.
string[] inputs = [ "Best purchase ever!", "Returned it immediately.", "Hello", "It works as advertised.", "The packaging was damaged but otherwise okay." ]; foreach (var i in inputs) { var response2 = await chatClient.GetResponseAsync<Sentiment>($"What's the sentiment of this review? {i}"); Console.WriteLine($"Review: {i} | Sentiment: {response2.Result}"); }
Этот код создает выходные данные, аналогичные следующему:
Review: Best purchase ever! | Sentiment: Positive Review: Returned it immediately. | Sentiment: Negative Review: Hello | Sentiment: Neutral Review: It works as advertised. | Sentiment: Neutral Review: The packaging was damaged but otherwise okay. | Sentiment: Neutral
Вместо запроса только анализируемого значения перечисления можно запросить текстовый ответ вместе с проанализированным значением.
Определите тип записи, содержащий текстовый ответ и проанализированные тональности:
record SentimentRecord(string ResponseText, Sentiment ReviewSentiment);
Отправьте запрос, используя тип записи в качестве аргумента типа
GetResponseAsync<T>
.var review3 = "This product worked okay."; var response3 = await chatClient.GetResponseAsync<SentimentRecord>($"What's the sentiment of this review? {review3}"); Console.WriteLine($"Response text: {response3.Result.ResponseText}"); Console.WriteLine($"Sentiment: {response3.Result.ReviewSentiment}");
Этот код создает выходные данные, аналогичные следующему:
Response text: Certainly, I have analyzed the sentiment of the review you provided. Sentiment: Neutral
Очистите ресурсы
Если они больше не нужны, удалите ресурс Azure OpenAI и развертывание модели GPT-4.
- На портале Azureперейдите к ресурсу Azure OpenAI.
- Выберите ресурс Azure OpenAI и выберите Удалить.