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
- Ukończ część 2 serii samouczków, aby utworzyć aplikację do czatu.
- Upewnij się, że wykonano kroki dodawania rejestrowania telemetrii z części 2.
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).
Utwórz plik o nazwie chat_eval_data.jsonl w folderze assets .
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.
Utwórz plik o nazwie evaluate.py w folderze głównym.
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)
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"]}
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.
- W projekcie w portalu azure AI Foundry wybierz pozycję Modele i punkty końcowe.
- Wybierz pozycję gpt-4o-mini.
- Zaznacz Edytuj.
- Jeśli masz limit przydziału , aby zwiększyć limit liczby tokenów na minutę, spróbuj zwiększyć go do 30.
- Wybierz pozycję Zapisz i zamknij.
Uruchamianie skryptu oceny
W konsoli zaloguj się do konta platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure:
az login
Zainstaluj wymagany pakiet:
pip install azure-ai-evaluation[remote]
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.
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.
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.