Delen via


Zelfstudie: Deel 3: Een aangepaste chattoepassing evalueren met de Microsoft Foundry SDK (klassiek)

Opmerking

Dit document verwijst naar de Microsoft Foundry-portal (klassiek).

🔍 Bekijk de documentatie van Microsoft Foundry (nieuw) voor meer informatie over de nieuwe portal.

In deze zelfstudie evalueert u de chat-app die u in deel 2 van de reeks zelfstudies hebt gemaakt. U beoordeelt de kwaliteit van uw app in meerdere metrische gegevens en herhaalt vervolgens verbeteringen. In dit gedeelte gaat u het volgende doen:

  • Een evaluatiegegevensset maken
  • De chat-app evalueren met Azure AI-evaluators
  • Uw app herhalen en verbeteren

Deze zelfstudie bouwt voort op deel 2: Een aangepaste chat-app bouwen met de Microsoft Foundry SDK.

Vereiste voorwaarden

Belangrijk

Dit artikel biedt ondersteuning voor oudere systemen voor hub-gebaseerde projecten. Het werkt niet voor Foundry-projecten. Zie Hoe weet ik welk type project ik heb?

Opmerking over SDK-compatibiliteit: voor codevoorbeelden is een specifieke Versie van de Microsoft Foundry SDK vereist. Als u compatibiliteitsproblemen ondervindt, kunt u overwegen om te migreren van een hub naar een Foundry-project.

  • Voltooi deel 2 van de reeks zelfstudies om de chattoepassing te bouwen.
  • Gebruik hetzelfde hubproject dat u in deel 1 hebt gemaakt.
  • Azure AI-machtigingen: de rol Eigenaar of Inzender voor het wijzigen van limieten voor de frequentie van het modeleindpunt en het uitvoeren van evaluatietaken.
  • Zorg ervoor dat u de stappen uitvoert om telemetrielogboekregistratie toe te voegen vanuit deel 2.

Evaluatiegegevensset maken

Gebruik de volgende evaluatiegegevensset, die voorbeeldvragen en verwachte antwoorden bevat. Gebruik deze gegevensset met een evaluator en de doelfunctie om de get_chat_response() prestaties van uw chat-app te beoordelen op relevantie, grondheid en metrische gegevens over samenhang.

  1. Maak een bestand met de naam chat_eval_data.jsonl in de map assets .

  2. Plak deze gegevensset in het bestand:

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

    Verwijzingen: JSONL-indeling voor evaluatiedatasets.

Evalueren met Azure AI-evaluators

Maak een evaluatiescript waarmee een doelfunctie-wrapper wordt gegenereerd, uw gegevensset wordt geladen, de evaluatie wordt uitgevoerd en de resultaten in uw Foundry-project worden opgeslagen.

  1. Maak een bestand met de naam evaluate.py in de hoofdmap.

  2. Voeg de volgende code toe om de vereiste bibliotheken te importeren, een projectclient te maken en enkele instellingen te configureren:

    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)
    

    Verwijzingen: AIProjectClient, DefaultAzureCredential, azure-ai-evaluation.

  3. Voeg code toe om een wrapper-functie te maken waarmee de evaluatie-interface voor de evaluatie van query's en antwoorden wordt geïmplementeerd:

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

    Verwijzingen: azure-ai-evaluation, evaluatiedoelfuncties.

  4. Voeg ten slotte code toe om de evaluatie uit te voeren, bekijk de resultaten lokaal en haal een koppeling naar de evaluatieresultaten op in de Foundry-portal:

    # 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']}")
    

    Verwijzingen: azure-ai-evaluation, AIProjectClient.

Het evaluatiemodel configureren

Het evaluatiescript roept het model vaak aan. Overweeg het aantal tokens per minuut voor het evaluatiemodel te verhogen.

In deel 1 van deze reeks zelfstudies hebt u een .env-bestand gemaakt waarmee de naam van het evaluatiemodel wordt opgegeven. gpt-4o-mini Probeer de limiet voor tokens per minuut voor dit model te verhogen als u een beschikbaar quotum hebt. Als u onvoldoende quotum hebt om de waarde te verhogen, hoeft u zich geen zorgen te maken. Het script is ontworpen voor het afhandelen van limietfouten.

  1. Selecteer modellen en eindpunten in uw project in foundry-portal.
  2. Selecteer gpt-4o-mini.
  3. Kies Bewerken.
  4. Als u een quotum hebt, verhoogt u de limiet voor tokens per minuut tot 30 of meer.
  5. Selecteer Opslaan en sluiten.

Het evaluatiescript uitvoeren

  1. Meld u vanuit uw console aan bij uw Azure-account met behulp van de Azure CLI:

    az login
    
  2. Installeer de vereiste pakketten:

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

    Verwijzingen: azure-ai-evaluation SDK, Evaluation SDK-documentatie.

Uw evaluatie-instelling controleren

Voordat u de volledige evaluatie uitvoert (die 5-10 minuten duurt), controleert u of de SDK en de projectverbinding werken door deze snelle test uit te voeren:

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

Als u ziet "Evaluation SDK is ready!", is uw installatie voltooid en kunt u doorgaan.

Verwijzingen: AIProjectClient, DefaultAzureCredential.

De evaluatie starten

  • Voer het evaluatiescript uit:

    python evaluate.py
    

De evaluatie duurt 5-10 minuten. Mogelijk ziet u time-outwaarschuwingen en frequentielimietfouten. Het script verwerkt deze fouten automatisch en blijft verwerken.

De evaluatie-uitvoer interpreteren

In de console-uitvoer ziet u een antwoord voor elke vraag, gevolgd door een tabel met samengevatte metrische gegevens met relevantie, grondheid en coherentiescores. Scores variëren van 0 (slechtste) tot 4 (beste) voor metrische gegevens die door GPT worden ondersteund. Zoek naar scores met lage grondheid om antwoorden te identificeren die niet goed worden ondersteund door de referentiedocumenten en scores met een lage relevantie om reacties buiten onderwerpen te identificeren.

Mogelijk worden er veel WARNING:opentelemetry.attributes: berichten en time-outfouten weergegeven. U kunt deze berichten negeren. Ze hebben geen invloed op de evaluatieresultaten. Het evaluatiescript is ontworpen om rate-limitfouten af te handelen en de verwerking voort te zetten.

De uitvoer van de evaluatieresultaten bevat ook een koppeling om gedetailleerde resultaten weer te geven in de Foundry-portal, waar u evaluatieuitvoeringen naast elkaar kunt vergelijken en verbeteringen in de loop van de tijd kunt bijhouden.

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

Herhalen en verbeteren

Uit de evaluatieresultaten blijkt dat reacties vaak niet goed in de referentiedocumenten worden verwerkt. Als u de grondheid wilt verbeteren, wijzigt u de systeemprompt in het bestand assets/grounded_chat.prompty om het model aan te moedigen de referentiedocumenten rechtstreeks te gebruiken.

Huidige prompt (problematisch):

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.

Verbeterde prompt:

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.

Na het bijwerken van de prompt:

  1. Sla het bestand op.

  2. Voer het evaluatiescript opnieuw uit:

    python evaluate.py
    
  3. Vergelijk de nieuwe evaluatieresultaten met de vorige uitvoering. Als het goed is, ziet u verbeterde groundedness-scores.

Probeer aanvullende wijzigingen, zoals:

  • De systeemprompt wijzigen om te focussen op nauwkeurigheid over volledigheid
  • Testen met een ander model (bijvoorbeeld indien gpt-4-turbo beschikbaar)
  • Het ophalen van de context aanpassen om relevantere documenten te retourneren

Elke iteratie helpt u te begrijpen welke wijzigingen specifieke metrische gegevens verbeteren.

De hulpbronnen opschonen

Als u onnodige Azure-kosten wilt voorkomen, verwijdert u de resources die u in deze zelfstudie hebt gemaakt als ze niet meer nodig zijn. Als u resources wilt beheren, kunt u Azure Portal gebruiken.