Поделиться через


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

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

Предпосылки

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

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

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

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

  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 --prerelease
    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_OPENAI_GPT_NAME gpt-4o
    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 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.

  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);
    

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

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

См. также