Руководство. Часть 3. Оценка пользовательского приложения чата с помощью пакета SDK для Майкрософт Foundry (классическая версия)

Применяется только к:Портал Foundry (классический). Эта статья недоступна для нового портала Foundry. Дополнительные сведения о новом портале.

Замечание

Ссылки в этой статье могут открывать содержимое в новой документации Майкрософт Foundry вместо классической документации Foundry, которую вы просматриваете в данный момент.

В этом руководстве вы оцениваете приложение чата, созданное в части 2 серии учебников. Вы оцениваете качество приложения по нескольким метрикам, а затем выполняете итерацию по улучшениям. В этой части вы:

  • Создание набора данных оценки
  • Оценка приложения чата с помощью оценки Azure ИИ
  • Повторяйте и улучшайте ваше приложение

В этом руководстве описывается Part 2. Создание пользовательского приложения чата с помощью пакета SDK для Майкрософт Foundry.

Предпосылки

Это важно

Эта статья предоставляет устаревшую поддержку для проектов на основе концентраторов. Он не будет работать для проектов Foundry. См. Как мне узнать, какой тип проекта у меня есть?

примечание о совместимости SDK. Для примеров кода требуется определенная версия пакета SDK для Foundry Майкрософт. Если возникают проблемы совместимости, рассмотрите возможность перехода с проекта на базе концентратора на проект Foundry.

  • Выполните часть 2 серии учебников , чтобы создать приложение чата.
  • Используйте тот же проект на основе хаба, созданный в части 1.
  • Разрешения Azure ИИ: роль владельца или контрибутора для изменения ограничений скорости на конечной точке модели и выполнения заданий оценки.
  • Убедитесь, что вы выполните действия по добавлению ведения журнала телеметрии из части 2.

Создание набора данных оценки

Используйте следующий набор данных оценки, содержащий примеры вопросов и ожидаемых ответов. Используйте этот набор данных с оценщиком и get_chat_response() целевой функцией для оценки производительности чата-приложения по метрикам релевантности, грунтованности и согласованности.

  1. Создайте файл с именем chat_eval_data.jsonl в папке ресурсов .

  2. Вставьте этот набор данных в файл:

    {"query": "Which tent is the most waterproof?", "truth": "The Alpine Explorer Tent has the highest rainfly waterproof rating at 3000m"}
    {"query": "Which camping table holds the most weight?", "truth": "The Adventure Dining Table has a higher weight capacity than all of the other camping tables mentioned"}
    {"query": "How much do the TrailWalker Hiking Shoes cost? ", "truth": "The Trailewalker Hiking Shoes are priced at $110"}
    {"query": "What is the proper care for trailwalker hiking shoes? ", "truth": "After each use, remove any dirt or debris by brushing or wiping the shoes with a damp cloth."}
    {"query": "What brand is TrailMaster tent? ", "truth": "OutdoorLiving"}
    {"query": "How do I carry the TrailMaster tent around? ", "truth": " Carry bag included for convenient storage and transportation"}
    {"query": "What is the floor area for Floor Area? ", "truth": "80 square feet"}
    {"query": "What is the material for TrailBlaze Hiking Pants?", "truth": "Made of high-quality nylon fabric"}
    {"query": "What color does TrailBlaze Hiking Pants come in?", "truth": "Khaki"}
    {"query": "Can the warrenty for TrailBlaze pants be transfered? ", "truth": "The warranty is non-transferable and applies only to the original purchaser of the TrailBlaze Hiking Pants. It is valid only when the product is purchased from an authorized retailer."}
    {"query": "How long are the TrailBlaze pants under warranty for? ", "truth": " The TrailBlaze Hiking Pants are backed by a 1-year limited warranty from the date of purchase."}
    {"query": "What is the material for PowerBurner Camping Stove? ", "truth": "Stainless Steel"}
    {"query": "Is France in Europe?", "truth": "Sorry, I can only queries related to outdoor/camping gear and equipment"}
    

    Ссылки: формат JSONL для оценочных наборов данных.

Оценка с помощью Azure оценщиков ИИ

Создайте скрипт оценки, который создает оболочку целевой функции, загружает набор данных, запускает оценку и записывает результаты в project Foundry.

  1. Создайте файл с именем evaluate.py в главной папке.

  2. Добавьте следующий код для импорта необходимых библиотек, создайте клиент project и настройте некоторые параметры:

    import os
    import pandas as pd
    from azure.ai.projects import AIProjectClient
    from azure.ai.projects.models import ConnectionType
    from azure.ai.evaluation import evaluate, GroundednessEvaluator
    from azure.identity import DefaultAzureCredential
    
    from chat_with_products import chat_with_products
    
    # load environment variables from the .env file at the root of this repo
    from dotenv import load_dotenv
    
    load_dotenv()
    
    # create a project client using environment variables loaded from the .env file
    project = AIProjectClient.from_connection_string(
        conn_str=os.environ["AIPROJECT_CONNECTION_STRING"], credential=DefaultAzureCredential()
    )
    
    connection = project.connections.get_default(connection_type=ConnectionType.AZURE_OPEN_AI, include_credentials=True)
    
    evaluator_model = {
        "azure_endpoint": connection.endpoint_url,
        "azure_deployment": os.environ["EVALUATION_MODEL"],
        "api_version": "2024-06-01",
        "api_key": connection.key,
    }
    
    groundedness = GroundednessEvaluator(evaluator_model)
    

    Ссылки: AIProjectClient, DefaultAzureCredential, azure-ai-evaluation.

  3. Добавьте код для создания функции-оболочки, реализующей интерфейс оценки для оценки запросов и ответа:

    def evaluate_chat_with_products(query):
        response = chat_with_products(messages=[{"role": "user", "content": query}])
        return {"response": response["message"].content, "context": response["context"]["grounding_data"]}
    

    Ссылки: azure-ai-evaluation, целевые функции оценки.

  4. Наконец, добавьте код для выполнения оценки, просмотрите результаты локально и получите ссылку на результаты оценки на портале Foundry:

    # Evaluate must be called inside of __main__, not on import
    if __name__ == "__main__":
        from config import ASSET_PATH
    
        # workaround for multiprocessing issue on linux
        from pprint import pprint
        from pathlib import Path
        import multiprocessing
        import contextlib
    
        with contextlib.suppress(RuntimeError):
            multiprocessing.set_start_method("spawn", force=True)
    
        # run evaluation with a dataset and target function, log to the project
        result = evaluate(
            data=Path(ASSET_PATH) / "chat_eval_data.jsonl",
            target=evaluate_chat_with_products,
            evaluation_name="evaluate_chat_with_products",
            evaluators={
                "groundedness": groundedness,
            },
            evaluator_config={
                "default": {
                    "query": {"${data.query}"},
                    "response": {"${target.response}"},
                    "context": {"${target.context}"},
                }
            },
            azure_ai_project=project.scope,
            output_path="./myevalresults.json",
        )
    
        tabular_result = pd.DataFrame(result.get("rows"))
    
        pprint("-----Summarized Metrics-----")
        pprint(result["metrics"])
        pprint("-----Tabular Result-----")
        pprint(tabular_result)
        pprint(f"View evaluation results in AI Studio: {result['studio_url']}")
    

    Ссылки: azure-ai-evaluation, AIProjectClient.

Настройка модели оценки

Скрипт оценки вызывает модель много раз. Рассмотрите возможность увеличения количества токенов в минуту для модели оценки.

В части 1 этого руководства вы создали env-файл, указывающий имя модели оценки. gpt-4o-mini Попробуйте увеличить лимит токенов в минуту для этой модели, если у вас есть свободная квота. Если у вас нет достаточной квоты, чтобы увеличить значение, не волнуйтесь. Скрипт предназначен для обработки ошибок предельных значений.

  1. В вашем проекте на портале Foundry выберите Models + endpoints.
  2. Выберите gpt-4o-mini.
  3. Выберите Правка.
  4. Если у вас есть квота, увеличьте лимит скорости токенов в минуту до 30 или более.
  5. Выберите Сохранить и закрыть.

Запуск скрипта оценки

  1. В консоли войдите в учетную запись Azure с помощью Azure CLI:

    az login
    
  2. Установите необходимые пакеты:

    pip install openai
    pip install azure-ai-evaluation[remote]
    

    Ссылки: azure-ai-evaluation SDK, документация по пакету SDK для оценки.

Проверка настройки оценки

Перед выполнением полной оценки (занимает 5–10 минут), убедитесь, что пакет SDK и подключение project работают, выполнив этот краткий тест:

from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential

# Test that you can connect to your project
project = AIProjectClient.from_connection_string(
    conn_str=os.environ["AIPROJECT_CONNECTION_STRING"], credential=DefaultAzureCredential()
)
print("Evaluation SDK is ready! You can now run evaluate.py")

Если вы видите "Evaluation SDK is ready!", ваша настройка завершена, и вы можете продолжить.

Ссылки: AIProjectClient, DefaultAzureCredential.

Запуск оценки

  • Запустите скрипт оценки:

    python evaluate.py
    

Для завершения оценки требуется 5–10 минут. Вы можете видеть предупреждения времени ожидания и ошибки ограничения скорости. Скрипт обрабатывает эти ошибки автоматически и продолжает обработку.

Интерпретация выходных данных оценки

В выходных данных консоли вы увидите ответ на каждый вопрос, за которым следует таблица с суммированными метриками, показывающими релевантность, обоснованность и оценки согласованности. Оценки варьируются от 0 (худшего) до 4 (лучше всего) для метрик с поддержкой GPT. Ищите низкие оценки обоснованности, чтобы определить ответы, которые не поддерживаются справочными документами, и низкие оценки релевантности, чтобы выявить ответы, которые не по теме.

Может появиться много WARNING:opentelemetry.attributes: сообщений и ошибок времени ожидания. Эти сообщения можно игнорировать. Они не влияют на результаты оценки. Скрипт оценки предназначен для обработки ошибок ограничения скорости и продолжения обработки.

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

====================================================
'-----Summarized Metrics-----'
{'groundedness.gpt_groundedness': 1.6666666666666667,
 'groundedness.groundedness': 1.6666666666666667}
'-----Tabular Result-----'
                                     outputs.response  ... line_number
0   Could you specify which tent you are referring...  ...           0
1   Could you please specify which camping table y...  ...           1
2   Sorry, I only can answer queries related to ou...  ...           2
3   Could you please clarify which aspects of care...  ...           3
4   Sorry, I only can answer queries related to ou...  ...           4
5   The TrailMaster X4 Tent comes with an included...  ...           5
6                                            (Failed)  ...           6
7   The TrailBlaze Hiking Pants are crafted from h...  ...           7
8   Sorry, I only can answer queries related to ou...  ...           8
9   Sorry, I only can answer queries related to ou...  ...           9
10  Sorry, I only can answer queries related to ou...  ...          10
11  The PowerBurner Camping Stove is designed with...  ...          11
12  Sorry, I only can answer queries related to ou...  ...          12

[13 rows x 8 columns]
('View evaluation results in Foundry portal: '
 'https://xxxxxxxxxxxxxxxxxxxxxxx')

Итерация и улучшение

Результаты оценки показывают, что ответы часто не являются хорошо обоснованными в справочных документах. Чтобы повысить обоснованность, измените системный запрос в файле assets/grounded_chat.prompty, чтобы побудить модель более непосредственно использовать эталонные документы.

Текущий запрос (проблематичный):

If the question is not related to outdoor/camping gear and clothing, just say 'Sorry, I only can answer queries related to outdoor/camping gear and clothing. So, how can I help?'
If the question is related to outdoor/camping gear and clothing but vague, ask clarifying questions.

Улучшенный запрос:

If the question is related to outdoor/camping gear and clothing, answer based on the reference documents provided.
If you cannot find information in the reference documents, say: 'I don't have information about that specific topic. Let me help with related products or try a different question.'
For vague questions, ask clarifying questions to better assist.

После обновления запроса:

  1. Сохраните файл.

  2. Запустите скрипт оценки еще раз:

    python evaluate.py
    
  3. Сравните новые результаты оценки с предыдущим запуском. Вы должны увидеть улучшенные показатели обоснованности.

Попробуйте выполнить дополнительные изменения, например:

  • Изменение системного запроса, чтобы сосредоточиться на точности над полнотой
  • Тестирование с другой моделью (например, gpt-4-turbo при наличии)
  • Настройка извлечения контекста для возврата более релевантных документов

Каждая итерация помогает понять, какие изменения улучшают определенные метрики.

Очистите ресурсы

Чтобы избежать ненужных затрат на Azure, удалите ресурсы, созданные в данном руководстве, если в них больше нет необходимости. Для управления ресурсами можно использовать портал Azure.