Sdílet prostřednictvím


Kurz: Část 3 – Vyhodnocení vlastní chatovací aplikace pomocí sady Microsoft Foundry SDK (classic)

Platí jenom pro:Portál Foundry (Classic). Tento článek není k dispozici pro nový portál Foundry. Přečtěte si další informace o novém portálu.

Poznámka:

Odkazy v tomto článku můžou otevírat obsah v nové dokumentaci Microsoft Foundry místo dokumentace Foundry (classic), kterou si právě prohlížíte.

V tomto kurzu vyhodnotíte chatovací aplikaci, kterou jste vytvořili ve 2. části série kurzů. Vyhodnocujete kvalitu vaší aplikace napříč několika metrikami a pak iterujete o vylepšeních. V této části vy:

  • Vytvoření testovací datové sady
  • Vyhodnocení chatovací aplikace pomocí vyhodnocovačů umělé inteligence Azure
  • Iterace a vylepšení aplikace

Tento kurz vychází z Part 2: Vytvoření vlastní chatovací aplikace pomocí sady Microsoft Foundry SDK.

Předpoklady

Důležité

Tento článek obsahuje starší verzi podpory pro projekty založené na centrech. Nebude fungovat u projektů Foundry. Viz Jak zjistím, jaký typ projektu mám?

Poznámky k kompatibilitě sady SDK: Příklady kódu vyžadují konkrétní verzi sady SDK Microsoft Foundry. Pokud narazíte na problémy s kompatibilitou, zvažte migraci z projektu založeného na uzlech na projekt Foundry.

  • Dokončete 2. část série kurzů a sestavte chatovací aplikaci.
  • Použijte stejný projekt založený na hubu, který jste vytvořili v části 1.
  • Oprávnění Azure AI: Role vlastníka nebo přispěvatele pro úpravu limitů rychlosti koncových bodů modelu a provádění hodnotících úloh.
  • Ujistěte se, že jste dokončili kroky pro přidání protokolování telemetrie z části 2.

Vytvoření zkušební datové sady

Použijte následující testovací datovou sadu, která obsahuje ukázkové otázky a očekávané odpovědi. Tuto datovou sadu použijte s vyhodnocovačem a get_chat_response() cílovou funkcí k vyhodnocení výkonu chatovací aplikace napříč metrikami relevance, uzemnění a soudržnosti.

  1. Ve složce assets vytvořte soubor s názvem chat_eval_data.jsonl.

  2. Vložte tuto datovou sadu do souboru:

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

    Odkazy: formát JSONL pro vyhodnocovací datové sady.

Vyhodnocení pomocí vyhodnocovačů umělé inteligence Azure

Vytvořte zkušební skript, který vygeneruje obálku cílové funkce, načte datovou sadu, spustí vyhodnocení a zaprotokoluje výsledky do project Foundry.

  1. V hlavní složce vytvořte soubor s názvem evaluate.py .

  2. Přidejte následující kód pro import požadovaných knihoven, vytvoření klienta project a konfiguraci některých nastavení:

    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)
    

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

  3. Přidejte kód pro vytvoření funkce obálky, která implementuje rozhraní pro vyhodnocení dotazů a odpovědí:

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

    Odkazy: azure-ai-evaluation, cílové funkce vyhodnocení.

  4. Nakonec přidejte kód pro spuštění vyhodnocení, zobrazte výsledky místně a získejte odkaz na výsledky vyhodnocení na portálu 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']}")
    

    Odkazy: azure-ai-evaluation, AIProjectClient.

Konfigurace zkušebního modelu

Hodnotící skript mnohokrát volá model. Zvažte zvýšení počtu tokenů za minutu pro model vyhodnocení.

V části 1 této série kurzů jste vytvořili soubor .env , který určuje název zkušebního modelu, gpt-4o-mini. Pokud máte dostupnou kvótu, zkuste pro tento model zvýšit limit tokenů za minutu. Pokud nemáte dostatečnou kvótu na zvýšení hodnoty, nemějte obavy. Skript je navržený tak, aby zpracovával chyby limitů.

  1. Na portálu Foundry projektu vyberte Modely + end pointy.
  2. Vyberte gpt-4o-mini.
  3. Vyberte možnost Upravit.
  4. Pokud máte kvótu, zvyšte limit počtu tokenů za minutu na 30 nebo více.
  5. Vyberte Uložit a zavřít.

Spuštění zkušebního skriptu

  1. Z konzoly se přihlaste ke svému účtu Azure pomocí Azure CLI:

    az login
    
  2. Nainstalujte požadované balíčky:

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

    Reference: azure-ai-evaluation SDK, dokumentace k sadě Sdk pro vyhodnocení.

Ověření nastavení vyhodnocení

Před spuštěním úplného vyhodnocení (což trvá 5 až 10 minut), spuštěním tohoto rychlého testu ověřte, že sada SDK a vaše připojení project fungují:

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

Pokud se zobrazí "Evaluation SDK is ready!", nastavení je hotové a můžete pokračovat.

Odkazy: AIProjectClient, DefaultAzureCredential.

Zahájení vyhodnocení

  • Spusťte zkušební skript:

    python evaluate.py
    

Dokončení vyhodnocení trvá 5 až 10 minut. Může se zobrazit upozornění časového limitu a chyby omezení rychlosti. Skript zpracovává tyto chyby automaticky a pokračuje ve zpracování.

Interpretace výstupu vyhodnocení

Ve výstupu konzoly uvidíte odpověď na každou otázku následovanou tabulkou se souhrnnými metrikami zobrazující relevanci, uzemnění a skóre soudržnosti. Skóre se liší od 0 (nejhorší) do 4 (nejlepší) pro metriky s asistencí GPT. Hledejte nízké skóre relevantnosti k identifikaci odpovědí, které nejsou dobře podporovány referenčními dokumenty, a nízké skóre relevance pro odhalení odpovědí mimo téma.

Může se zobrazit mnoho WARNING:opentelemetry.attributes: zpráv a chyby překročení časového limitu. Tyto zprávy můžete klidně ignorovat. Nemají vliv na výsledky vyhodnocení. Zkušební skript je navržený tak, aby zpracovával chyby omezení rychlosti a pokračoval ve zpracování.

Výstup výsledků vyhodnocení obsahuje také odkaz na zobrazení podrobných výsledků na portálu Foundry, kde můžete porovnat zkušební spuštění vedle sebe a sledovat vylepšení v průběhu času.

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

Iterace a vylepšení

Výsledky vyhodnocení ukazují, že odpovědi často nejsou dobře uzemněné v referenčních dokumentech. Pro zlepšení relevance upravte výzvu systému v souboru assets/grounded_chat.prompty, aby model více přímo využíval referenční dokumenty.

Aktuální výzva (problematická)::

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.

Vylepšená výzva:

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 aktualizaci výzvy:

  1. Uložte soubor.

  2. Znovu spusťte zkušební skript:

    python evaluate.py
    
  3. Porovnejte nové výsledky vyhodnocení s předchozím spuštěním. Měli byste vidět lepší skóre spolehlivosti.

Vyzkoušejte další úpravy, například:

  • Změna výzvy systému, aby se zaměřila na přesnost namísto úplnosti
  • Testování s jiným modelem (například gpt-4-turbo pokud je k dispozici)
  • Úprava načítání kontextu tak, aby vracely relevantnější dokumenty

Každá iterace vám pomůže pochopit, které změny zlepšují konkrétní metriky.

Vyčistěte zdroje

Abyste se vyhnuli zbytečným Azure nákladům, odstraňte prostředky, které jste vytvořili v tomto kurzu, pokud už nejsou potřeba. Ke správě prostředků můžete použít portál Azure.