Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом кратком руководстве вы создадите приложение MSTest для оценки качества ответа чата из модели OpenAI. Тестовое приложение использует библиотеки Microsoft.Extensions.AI.Evaluation .
Замечание
В этом кратком руководстве показано самое простое использование API оценки. В частности, он не демонстрирует использование функций кэширования ответов и отчетов , которые важны, если вы создаете модульные тесты, которые выполняются как часть конвейера оценки в автономном режиме. Сценарий, показанный в этом кратком руководстве, подходит для случаев использования, таких как "онлайн" оценка ответов ИИ в производственном коде и сохранение результатов в телеметрии, где кэширование и отчеты не играют роли. Учебник, демонстрирующий функции кэширования и создания отчетов, см. в руководстве. Оценка ответа модели с помощью кэширования ответов и отчетов
Предпосылки
- .NET 8 или более поздняя версия
- Visual Studio Code (необязательно)
Настройка службы ИИ
Чтобы подготовить службу и модель Azure OpenAI с помощью портала Azure, выполните действия, описанные в статье Создание и развертывание ресурса Azure OpenAI Service. На шаге "Развернуть модель" выберите модель gpt-5.
Создание тестового приложения
Выполните следующие действия, чтобы создать проект MSTest, который подключается к модели ИИ.
В окне терминала перейдите в каталог, в котором вы хотите создать приложение, и создайте новое приложение MSTest с
dotnet newпомощью команды:dotnet new mstest -o TestAIПерейдите в каталог
TestAIи добавьте необходимые пакеты в приложение:dotnet add package Azure.AI.OpenAI dotnet add package Azure.Identity dotnet add package Microsoft.Extensions.AI.Abstractions dotnet add package Microsoft.Extensions.AI.Evaluation dotnet add package Microsoft.Extensions.AI.Evaluation.Quality 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_TENANT_ID <your-tenant-ID>(В зависимости от среды идентификатор клиента может быть не нужен. В этом случае удалите его из кода, создающего экземпляр DefaultAzureCredential.)
Откройте новое приложение в выбранном редакторе.
Добавление кода тестового приложения
Переименуйте файл Test1.cs на MyTests.cs, затем откройте этот файл и переименуйте класс, указав его имя в
MyTests.Добавьте частные члены для сообщений и ответов чата в класс ChatConfiguration. Поле
s_messages— это список, содержащий два ChatMessage объекта— один указывает поведение бота чата, а другой — вопрос от пользователя.private static ChatConfiguration? s_chatConfiguration; private static IList<ChatMessage> s_messages = [ new ChatMessage( ChatRole.System, """ You're an AI assistant that can answer questions related to astronomy. Keep your responses concise and try to stay under 100 words. Use the imperial measurement system for all measurements in your response. """), new ChatMessage( ChatRole.User, "How far is the planet Venus from Earth at its closest and furthest points?")]; private static ChatResponse s_response = new();Добавьте метод
InitializeAsyncв классMyTests.[ClassInitialize] public static async Task InitializeAsync(TestContext _) { /// Set up the <see cref="ChatConfiguration"/>, /// which includes the <see cref="IChatClient"/> that the /// evaluator uses to communicate with the model. s_chatConfiguration = GetAzureOpenAIChatConfiguration(); var chatOptions = new ChatOptions { Temperature = 0.0f, ResponseFormat = ChatResponseFormat.Text }; // Fetch the response to be evaluated // and store it in a static variable. s_response = await s_chatConfiguration.ChatClient.GetResponseAsync(s_messages, chatOptions); }Этот метод выполняет следующие задачи:
- Настройка ChatConfiguration.
- Задает ChatOptions, включая Temperature и ResponseFormat.
- Извлекает ответ для вычисления путем вызова GetResponseAsync(IEnumerable<ChatMessage>, ChatOptions, CancellationToken)и сохраняет его в статической переменной.
Добавьте метод
GetAzureOpenAIChatConfiguration, который создает IChatClient инструмент, который оценщик использует для взаимодействия с моделью.private static ChatConfiguration GetAzureOpenAIChatConfiguration() { IConfigurationRoot config = new ConfigurationBuilder().AddUserSecrets<MyTests>().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 client = azureClient.GetChatClient(deploymentName: model).AsIChatClient(); return new ChatConfiguration(client); }Добавьте метод теста для оценки ответа модели.
[TestMethod] public async Task TestCoherence() { IEvaluator coherenceEvaluator = new CoherenceEvaluator(); EvaluationResult result = await coherenceEvaluator.EvaluateAsync( s_messages, s_response, s_chatConfiguration); /// Retrieve the score for coherence from the <see cref="EvaluationResult"/>. NumericMetric coherence = result.Get<NumericMetric>(CoherenceEvaluator.CoherenceMetricName); // Validate the default interpretation // for the returned coherence metric. Assert.IsFalse(coherence.Interpretation!.Failed); Assert.IsTrue(coherence.Interpretation.Rating is EvaluationRating.Good or EvaluationRating.Exceptional); // Validate that no diagnostics are present // on the returned coherence metric. Assert.IsFalse(coherence.ContainsDiagnostics()); }Этот метод выполняет следующие действия:
-
CoherenceEvaluator Вызывается для оценки согласованности ответа. Метод EvaluateAsync(IEnumerable<ChatMessage>, ChatResponse, ChatConfiguration, IEnumerable<EvaluationContext>, CancellationToken) возвращает объект EvaluationResult , содержащий объект NumericMetric.
NumericMetricсодержит числовое значение, которое обычно используется для представления оценок, находящихся в четко определенном диапазоне. - Извлекает оценку согласованности из EvaluationResult.
- Проверяет интерпретацию по умолчанию для возвращаемой метрики согласованности. Оценщики могут включать интерпретацию по умолчанию для возвращаемых метрик. Вы также можете изменить интерпретацию по умолчанию в соответствии с вашими конкретными требованиями при необходимости.
- Проверяет отсутствие диагностики в возвращаемой метрии согласованности. Оценщики могут включать диагностику в возвращаемых ими метриках, чтобы определять ошибки, предупреждения или другие исключительные условия, возникающие в процессе оценки.
-
CoherenceEvaluator Вызывается для оценки согласованности ответа. Метод EvaluateAsync(IEnumerable<ChatMessage>, ChatResponse, ChatConfiguration, IEnumerable<EvaluationContext>, CancellationToken) возвращает объект EvaluationResult , содержащий объект NumericMetric.
Запуск теста или оценки
Запустите тест с помощью предпочтительного рабочего процесса тестирования, например с помощью команды dotnet test CLI или обозревателя тестов.
Очистите ресурсы
Если они больше не нужны, удалите ресурс Azure OpenAI и развертывание модели GPT-4.
- На портале Azure перейдите к ресурсу Azure OpenAI.
- Выберите ресурс Azure OpenAI и выберите Удалить.
Дальнейшие шаги
- Оцените ответы из разных моделей OpenAI.
- Добавьте кэширование ответов и отчеты в код оценки. Дополнительные сведения см. в руководстве. Оценка ответа модели с кэшированием ответов и отчетами.