Udostępnij przez


Samouczek: część 3 — ocena niestandardowej aplikacji do czatów przy użyciu zestawu Microsoft Foundry SDK

W tym samouczku ocenisz aplikację czatu utworzoną w części 2 serii samouczków. Oceniasz jakość aplikacji w wielu metrykach, a następnie iterujesz ulepszenia. W tej części ty:

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

Ten samouczek jest oparty na części 2: Tworzenie niestandardowej aplikacji do czatów przy użyciu zestawu Microsoft Foundry SDK.

Wymagania wstępne

Uwaga / Notatka

W tym samouczku jest używany projekt oparty na centrum. Kroki i kod pokazany tutaj nie działają w przypadku projektu Foundry. Aby uzyskać więcej informacji, zobacz Typy projektów.

  • Ukończ część 2 serii samouczków, aby utworzyć aplikację do czatu.
  • Użyj tego samego projektu Microsoft Foundry utworzonego w części 1.
  • Uprawnienia do sztucznej inteligencji platformy Azure: rola właściciela lub współautora w celu modyfikowania limitów szybkości punktu końcowego modelu i uruchamiania zadań oceny.
  • Upewnij się, że wykonasz kroki niezbędne do dodania rejestrowania telemetrii z części 2.

Tworzenie zestawu danych oceny

Użyj następującego zestawu danych oceny, który zawiera przykładowe pytania i oczekiwane odpowiedzi. Użyj tego zestawu danych z ewaluatorem i get_chat_response() funkcją docelową, aby ocenić wydajność aplikacji czatu na podstawie istotności, uziemienia i spójności.

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

    Dokumentacja: format JSONL dla zestawów danych oceny.

Ocena za pomocą ewaluatorów sztucznej inteligencji platformy Azure

Utwórz skrypt oceny, który generuje otoczkę funkcji, ładuje zestaw danych, uruchamia ocenę i rejestruje wyniki w projekcie Foundry.

  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)
    

    Odwołania: AIProjectClient, DefaultAzureCredential, azure-ai-evaluation.

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

    Odwołania: azure-ai-evaluation, docelowe funkcje oceny.

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

    Dokumentacja: azure-ai-evaluation, AIProjectClient.

Konfigurowanie modelu oceny

Skrypt oceny wywołuje model wiele razy. Rozważ zwiększenie liczby 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 Foundry wybierz pozycję Modele i punkty końcowe.
  2. Wybierz pozycję gpt-4o-mini.
  3. Wybierz Edytuj.
  4. Jeśli masz limit przydziału, zwiększ limit liczby tokenów na minutę do 30 lub więcej.
  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]
    

    Dokumentacja: azure-ai-evaluation SDK, dokumentacja zestawu SDK oceny.

Weryfikowanie konfiguracji oceny

Przed uruchomieniem pełnej oceny (która trwa od 5 do 10 minut), sprawdź, czy zestaw SDK i połączenie projektu działają, uruchamiając ten szybki test:

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

# Verify connection to project
client = AIProjectClient.from_config(credential=DefaultAzureCredential())
print("Evaluation SDK is ready! You can now run evaluate.py")

Jeśli zostanie wyświetlony komunikat "Evaluation SDK is ready!", konfiguracja zostanie ukończona i możesz kontynuować.

Odwołania: AIProjectClient, DefaultAzureCredential.

Rozpocznij ocenę

  • Uruchom skrypt oceny:

    python evaluate.py
    

Ukończenie oceny trwa od 5 do 10 minut. Mogą pojawić się ostrzeżenia dotyczące limitu czasu i błędy limitu szybkości. Skrypt automatycznie obsługuje te błędy i kontynuuje przetwarzanie.

Interpretowanie danych wyjściowych oceny

W danych wyjściowych konsoli zobaczysz odpowiedź dla każdego pytania, a następnie tabelę zawierającą podsumowane metryki przedstawiające istotność, uziemienie i wyniki spójności. Wyniki wahają się od 0 (najgorsze) do 4 (najlepsze) dla metryk wspomaganych przez GPT. Poszukaj niskich wyników ugruntowania, aby zidentyfikować odpowiedzi, które nie są dobrze poparte przez dokumenty referencyjne, oraz niskich wyników istotności, aby zidentyfikować odpowiedzi nie związane z tematem.

Może zostać wyświetlonych wiele WARNING:opentelemetry.attributes: komunikatów i błędów przekroczenia limitu czasu. Te błędy można bezpiecznie zignorować. Nie wpływają one na wyniki oceny. Skrypt oceny jest przeznaczony do obsługi błędów limitu szybkości i kontynuowania przetwarzania.

Dane wyjściowe wyników oceny zawierają również link umożliwiający wyświetlenie szczegółowych wyników w portalu Foundry, w którym można porównać przebiegi oceny obok siebie i śledzić ulepszenia w czasie.

====================================================
'-----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')

Iterowanie i ulepszanie

Wyniki oceny pokazują, że odpowiedzi często nie są dobrze zakorzenione w dokumentach referencyjnych. Aby poprawić odniesienie do źródeł, zmodyfikuj monit systemowy w pliku assets/grounded_chat.prompty, aby zachęcić model do korzystania z dokumentów referencyjnych bardziej bezpośrednio.

Bieżący monit (problematyczny):

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.

Ulepszony monit:

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.

Po zaktualizowaniu monitu:

  1. Zapisz plik.

  2. Uruchom ponownie skrypt oceny:

    python evaluate.py
    
  3. Porównaj nowe wyniki oceny z poprzednim przebiegiem procesu. Powinny być widoczne poprawione oceny wiarygodności.

Wypróbuj dodatkowe modyfikacje, takie jak:

  • Zmiana monitu systemowego w celu skoncentrowania się na dokładności nad kompletnością
  • Testowanie przy użyciu innego modelu (na przykład, gpt-4-turbo jeśli jest dostępny)
  • Dopasowanie mechanizmu pobierania kontekstu w celu zwrócenia bardziej odpowiednich dokumentów

Każda iteracja pomaga zrozumieć, które zmiany poprawiają określone metryki.

Uprzątnij zasoby

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.