Udostępnij za pośrednictwem


Samouczek: część 3 — Ocena niestandardowej aplikacji do czatów przy użyciu zestawu SDK usługi Azure AI Foundry

W tym samouczku użyjesz zestawu Azure AI SDK (i innych bibliotek), aby ocenić aplikację do czatu utworzoną w części 2 serii samouczków. Z tej części trzeciej dowiesz się, jak wykonywać następujące działania:

  • Tworzenie zestawu danych oceny
  • Ocena aplikacji czatu za pomocą ewaluatorów sztucznej inteligencji platformy Azure
  • Iterowanie i ulepszanie aplikacji

Ten samouczek jest trzecią częścią trzyczęściowego samouczka.

Wymagania wstępne

Ocena jakości odpowiedzi aplikacji czatu

Teraz, gdy wiesz, że aplikacja do czatu dobrze odpowiada na zapytania, w tym z historią czatu, nadszedł czas, aby ocenić, jak działa w kilku różnych metrykach i innych danych.

Używasz ewaluatora z zestawem danych oceny i get_chat_response() funkcją docelową, a następnie oceniasz wyniki oceny.

Po uruchomieniu oceny możesz wprowadzić ulepszenia logiki, takie jak ulepszanie monitu systemowego i obserwowanie, jak odpowiedzi aplikacji czatu zmieniają się i ulepszają.

Tworzenie zestawu danych oceny

Użyj następującego zestawu danych oceny, który zawiera przykładowe pytania i oczekiwane odpowiedzi (prawda).

  1. Utwórz plik o nazwie chat_eval_data.jsonl w folderze assets .

  2. Wklej ten zestaw danych do pliku:

    {"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"}
    

Ocena za pomocą ewaluatorów sztucznej inteligencji platformy Azure

Teraz zdefiniuj skrypt oceny, który będzie:

  • Wygeneruj otokę funkcji docelowej wokół logiki aplikacji czatu.
  • Załaduj przykładowy .jsonl zestaw danych.
  • Uruchom ocenę, która pobiera funkcję docelową, i scala zestaw danych oceny z odpowiedziami z aplikacji do czatu.
  • Wygeneruj zestaw metryk wspomaganych przez GPT (istotność, uziemienie i spójność), aby ocenić jakość odpowiedzi aplikacji czatu.
  • Wyprowadź wyniki lokalnie i rejestruje wyniki w projekcie w chmurze.

Skrypt umożliwia lokalne przeglądanie wyników, wyprowadzając wyniki w wierszu polecenia i do pliku json.

Skrypt rejestruje również wyniki oceny w projekcie chmury, aby można było porównać przebiegi oceny w interfejsie użytkownika.

  1. Utwórz plik o nazwie evaluate.py w folderze głównym.

  2. Dodaj następujący kod, aby zaimportować wymagane biblioteki, utworzyć klienta projektu i skonfigurować niektóre ustawienia:

    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)
    
  3. Dodaj kod, aby utworzyć funkcję otoki, która implementuje interfejs oceny na potrzeby oceny zapytań i odpowiedzi:

    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"]}
    
  4. Na koniec dodaj kod, aby uruchomić ocenę, wyświetlić wyniki lokalnie i utworzyć link do wyników oceny w portalu usługi Azure AI 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']}")
    

Konfigurowanie modelu oceny

Ponieważ skrypt oceny wywołuje model wiele razy, możesz zwiększyć liczbę tokenów na minutę dla modelu oceny.

W części 1 tej serii samouczków utworzono plik env, który określa nazwę modelu oceny. gpt-4o-mini Spróbuj zwiększyć limit tokenów na minutę dla tego modelu, jeśli masz dostępny limit przydziału. Jeśli nie masz wystarczającego limitu przydziału, aby zwiększyć wartość, nie martw się. Skrypt został zaprojektowany tak, aby obsługiwał błędy limitu.

  1. W projekcie w portalu azure AI Foundry wybierz pozycję Modele i punkty końcowe.
  2. Wybierz pozycję gpt-4o-mini.
  3. Zaznacz Edytuj.
  4. Jeśli masz limit przydziału , aby zwiększyć limit liczby tokenów na minutę, spróbuj zwiększyć go do 30.
  5. Wybierz pozycję Zapisz i zamknij.

Uruchamianie skryptu oceny

  1. W konsoli zaloguj się do konta platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure:

    az login
    
  2. Zainstaluj wymagany pakiet:

    pip install azure-ai-evaluation[remote]
    
  3. Teraz uruchom skrypt oceny:

    python evaluate.py
    

Interpretowanie danych wyjściowych oceny

W danych wyjściowych konsoli zobaczysz odpowiedź na każde pytanie, a następnie tabelę z podsumowanymi metrykami. (W danych wyjściowych mogą być widoczne różne kolumny).

Jeśli nie możesz zwiększyć limitu tokenów na minutę dla modelu, mogą wystąpić błędy przekroczenia limitu czasu, które są oczekiwane. Skrypt oceny jest przeznaczony do obsługi tych błędów i kontynuowania działania.

Uwaga

Można również zobaczyć wiele WARNING:opentelemetry.attributes: — można je bezpiecznie zignorować i nie wpływać na wyniki oceny.

====================================================
'-----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 Azure AI Foundry portal: '
 'https://xxxxxxxxxxxxxxxxxxxxxxx')

Wyświetlanie wyników oceny w portalu usługi Azure AI Foundry

Po zakończeniu przebiegu oceny postępuj zgodnie z linkiem, aby wyświetlić wyniki oceny na stronie Ocena w portalu usługi Azure AI Foundry.

Zrzut ekranu przedstawiający przegląd oceny w portalu usługi Azure AI Foundry.

Możesz również przyjrzeć się poszczególnym wierszom i wyświetlić wyniki metryk na wiersz oraz wyświetlić pełny kontekst/pobrane dokumenty. Te metryki mogą być przydatne podczas interpretowania i debugowania wyników oceny.

Zrzut ekranu przedstawiający wiersze wyników oceny w portalu usługi Azure AI Foundry.

Aby uzyskać więcej informacji na temat wyników oceny w portalu usługi Azure AI Foundry, zobacz Jak wyświetlić wyniki oceny w portalu usługi Azure AI Foundry.

Iterowanie i ulepszanie

Zwróć uwagę, że odpowiedzi nie są dobrze uziemione. W wielu przypadkach model odpowiada na pytanie, a nie odpowiedź. Jest to wynik instrukcji szablonu monitu.

  • W plikuassets /grounded_chat.prompty znajdź zdanie "Jeśli pytanie jest związane z sprzętem na świeżym powietrzu/kempingiem i odzieżą, ale niejasne, zadawaj wyjaśnienie pytań zamiast odwoływać się do dokumentów.
  • Zmień zdanie na "Jeśli pytanie jest związane z sprzętem na świeżym powietrzu/kempingiem i odzieżą, ale niejasne, spróbuj odpowiedzieć na podstawie dokumentów referencyjnych, a następnie zadać wyjaśnienie pytań."
  • Zapisz plik i uruchom ponownie skrypt oceny.

Wypróbuj inne modyfikacje szablonu monitu lub wypróbuj różne modele, aby zobaczyć, jak zmiany wpływają na wyniki oceny.

Czyszczenie zasobów

Aby uniknąć niepotrzebnych kosztów platformy Azure, usuń zasoby utworzone w tym samouczku, jeśli nie są już potrzebne. Aby zarządzać zasobami, możesz użyć witryny Azure Portal.