Dela via


Självstudie: Del 3 – Utvärdera ett anpassat chattprogram med Microsoft Foundry SDK

Anmärkning

Det här dokumentet refererar till Microsoft Foundry-portalen (klassisk).

🔍 Visa dokumentationen för Microsoft Foundry (ny) för att lära dig mer om den nya portalen.

I den här självstudien utvärderar du chattappen som du skapade i del 2 i självstudieserien. Du utvärderar appens kvalitet i flera mått och itererar sedan förbättringar. I den här delen kommer du att:

  • Skapa en utvärderingsdatauppsättning
  • Utvärdera chattappen med Azure AI-utvärderare
  • Iterera och förbättra din app

Den här självstudien bygger på del 2: Skapa en anpassad chattapp med Microsoft Foundry SDK.

Förutsättningar

Viktigt!

Den här artikeln innehåller äldre stöd för hubbbaserade projekt. Det fungerar inte för Foundry-projekt. Se Hur vet jag vilken typ av projekt jag har?

SDK-kompatibilitetsanteckning: Kodexempel kräver en specifik Microsoft Foundry SDK-version. Om du stöter på kompatibilitetsproblem kan du överväga att migrera från en hubbbaserad till ett Foundry-projekt.

  • Slutför del 2 av självstudieserien för att skapa chattprogrammet.
  • Använd samma hubbbaserade projekt som du skapade i del 1.
  • Azure AI-behörigheter: Rollen Ägare eller Deltagare för att kunna ändra hastighetsbegränsningar för modellslutpunkter och utföra utvärderingsjobb.
  • Se till att du slutför stegen för att lägga till telemetriloggning från del 2.

Skapa en utvärderingsdatauppsättning

Använd följande utvärderingsdatauppsättning, som innehåller exempelfrågor och förväntade svar. Använd den här datauppsättningen med get_chat_response() en utvärderare och målfunktionen för att utvärdera chattappens prestanda över relevans, förankring och sammanhang.

  1. Skapa en fil med namnet chat_eval_data.jsonl i mappen tillgångar .

  2. Klistra in den här datamängden i filen:

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

    Referenser: JSONL-format för utvärderingsdatauppsättningar.

Utvärdera med Azure AI-utvärderare

Skapa ett utvärderingsskript som genererar en målfunktionsomslutning, läser in din datauppsättning, kör utvärderingen och loggar resultatet till ditt Foundry-projekt.

  1. Skapa en fil med namnet evaluate.py i huvudmappen.

  2. Lägg till följande kod för att importera de bibliotek som krävs, skapa en projektklient och konfigurera vissa inställningar:

    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)
    

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

  3. Lägg till kod för att skapa en omslutningsfunktion som implementerar utvärderingsgränssnittet för utvärdering av frågor och svar:

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

    Referenser: azure-ai-evaluation, utvärderingsmålfunktioner.

  4. Lägg slutligen till kod för att köra utvärderingen, visa resultatet lokalt och få en länk till utvärderingsresultaten i Foundry-portalen:

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

    Referenser: azure-ai-evaluation, AIProjectClient.

Konfigurera utvärderingsmodellen

Utvärderingsskriptet anropar modellen många gånger. Överväg att öka antalet token per minut för utvärderingsmodellen.

I del 1 av den här självstudieserien skapade du en .env-fil som anger namnet på utvärderingsmodellen, gpt-4o-mini. Försök att öka gränsen för token per minut för den här modellen om du har en tillgänglig kvot. Oroa dig inte om du inte har tillräckligt med kvot för att öka värdet. Skriptet är utformat för att hantera gränsfel.

  1. I projektet i Foundry-portalen väljer du Modeller + slutpunkter.
  2. Välj gpt-4o-mini.
  3. Välj Redigera.
  4. Om du har en kvot ökar du gränsen för token per minut till 30 eller mer.
  5. Välj Spara och stäng.

Kör utvärderingsskriptet

  1. Logga in på ditt Azure-konto från konsolen med hjälp av Azure CLI:

    az login
    
  2. Installera de paket som krävs:

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

    Referenser: azure-ai-evaluation SDK, utvärderings-SDK-dokumentation.

Verifiera utvärderingskonfigurationen

Innan du kör den fullständiga utvärderingen (vilket tar 5–10 minuter) kontrollerar du att SDK:et och projektanslutningen fungerar genom att köra det här snabbtestet:

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

Om du ser "Evaluation SDK is ready!"är konfigurationen klar och du kan fortsätta.

Referenser: AIProjectClient, DefaultAzureCredential.

Starta utvärderingen

  • Kör utvärderingsskriptet:

    python evaluate.py
    

Utvärderingen tar 5–10 minuter att slutföra. Du kan se timeout-varningar och hastighetsbegränsningsfel. Skriptet hanterar dessa fel automatiskt och fortsätter bearbetningen.

Tolka utvärderingsutdata

I konsolens utdata ser du ett svar på varje fråga, följt av en tabell med sammanfattade mått som visar relevans, grund och konsekvenspoäng. Poängen varierar från 0 (sämsta) till 4 (bäst) för GPT-assisterade mått. Leta efter poäng med låg grund för att identifiera svar som inte stöds bra av referensdokumenten och låga relevanspoäng för att identifiera svar utanför ämnet.

Du kan se många WARNING:opentelemetry.attributes: meddelanden och timeout-fel. Du kan ignorera dessa meddelanden utan att oroa dig. De påverkar inte utvärderingsresultaten. Utvärderingsskriptet är utformat för att hantera hastighetsbegränsningsfel och fortsätta bearbetningen.

Resultatet av utvärderingen innehåller också en länk för att visa detaljerade resultat i Foundry-portalen, där du kan jämföra utvärderingskörningar sida vid sida och spåra förbättringar över tid.

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

Iterera och förbättra

Utvärderingsresultaten visar att svaren ofta inte är väl förankrade i referensdokumenten. För att förbättra grunderna ändrar du systemprompten i filen assets/grounded_chat.prompty för att uppmuntra modellen att använda referensdokumenten mer direkt.

Aktuell fråga (problematisk):

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.

Förbättrad fråga:

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.

När du har uppdaterat prompten:

  1. Spara filen.

  2. Kör utvärderingsskriptet igen:

    python evaluate.py
    
  3. Jämför de nya utvärderingsresultaten med föregående körning. Du bör se förbättrade tillförlitlighetspoäng.

Prova ytterligare ändringar som:

  • Ändra systemprompten för att fokusera på noggrannhet över fullständighet
  • Testa med en annan modell (till exempel gpt-4-turbo om det är tillgängligt)
  • Justera kontexthämtningen för att returnera mer relevanta dokument

Varje iteration hjälper dig att förstå vilka ändringar som förbättrar specifika mått.

Rensa resurser

För att undvika onödiga Azure-kostnader tar du bort de resurser som du skapade i den här självstudien om de inte längre behövs. Om du vill hantera resurser kan du använda Azure Portal.