Бөлісу құралы:


Запрос ответа со структурированными выходными данными

В этом кратком руководстве вы создадите приложение чата, которое запрашивает ответ со структурированными выходными данными. Структурированный ответ в чате представляет собой заданный вами тип ответа вместо простого текста. Чат-приложение, создаваемое в этом кратком вводном руководстве, анализирует тональность различных обзоров продуктов, классифицируя каждый обзор в соответствии со значениями пользовательского перечисления.

Предпосылки

Настройка службы ИИ

Чтобы подготовить службу и модель Azure OpenAI с помощью портала Azure, выполните действия, описанные в статье Создание и развертывание ресурса Azure OpenAI Service. На шаге "Развернуть модель" выберите модель gpt-5.

Создание приложения чата

Выполните следующие действия, чтобы создать консольное приложение, которое подключается к gpt-5 модели ИИ.

  1. В окне терминала перейдите в каталог, в котором вы хотите создать приложение, и создайте консольное приложение с dotnet new помощью команды:

    dotnet new console -o SOChat
    
  2. Перейдите в каталог 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
    
  3. Выполните следующие команды, чтобы добавить секреты приложений для конечной точки и идентификатора клиента 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.

  4. Откройте новое приложение в выбранном редакторе.

Добавление кода

  1. Определите перечисление, описывающее различные настроения.

    public enum Sentiment
    {
        Positive,
        Negative,
        Neutral
    }
    
  2. 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.

  3. Отправьте запрос модели с одним отзывом о продукте, а затем выведите проанализированные настроения на консоль. Вы объявляете запрошенный структурированный выходной тип, передав его в качестве аргумента типа методу 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
    
  4. Вместо того, чтобы просто анализировать один отзыв, можно проанализировать подборку отзывов.

    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
    
  5. Вместо запроса только анализируемого значения перечисления можно запросить текстовый ответ вместе с проанализированным значением.

    Определите тип записи , содержащий текстовый ответ и проанализированные тональности:

    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.

  1. На портале Azure перейдите к ресурсу Azure OpenAI.
  2. Выберите ресурс Azure OpenAI и выберите Удалить.

См. также