Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
В этом кратком руководстве вы создадите приложение чата, которое запрашивает ответ со структурированными выходными данными. Структурированный ответ в чате представляет собой заданный вами тип ответа вместо простого текста. Чат-приложение, создаваемое в этом кратком вводном руководстве, анализирует тональность различных обзоров продуктов, классифицируя каждый обзор в соответствии со значениями пользовательского перечисления.
Предпосылки
- .NET 8 или более поздняя версия
- Visual Studio Code (необязательно)
Настройка службы ИИ
Чтобы подготовить службу и модель Azure OpenAI с помощью портала Azure, выполните действия, описанные в статье Создание и развертывание ресурса Azure OpenAI Service. На шаге "Развернуть модель" выберите модель gpt-5.
Создание приложения чата
Выполните следующие действия, чтобы создать консольное приложение, которое подключается к gpt-5 модели ИИ.
В окне терминала перейдите в каталог, в котором вы хотите создать приложение, и создайте консольное приложение с
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 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_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 tenantId = config["AZURE_TENANT_ID"]; string model = "gpt-5"; // 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. Дополнительные сведения см. в статье "Проверка подлинности в средствах Foundry" с помощью .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);(Этот тип записи определяется с помощью синтаксиса первичного конструктора . Основные конструкторы объединяют определение типа с параметрами, необходимыми для создания экземпляра любого экземпляра класса. Компилятор C# создает общедоступные свойства для параметров основного конструктора.)
Отправьте запрос, используя тип записи в качестве аргумента типа
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.
- На портале Azure перейдите к ресурсу Azure OpenAI.
- Выберите ресурс Azure OpenAI и выберите Удалить.