Ocena agentów sztucznej inteligencji

Ocena jest niezbędna do zapewnienia, że agent spełnia standardy jakości i bezpieczeństwa przed wdrożeniem. Uruchamiając oceny podczas rozwoju, ustanawiasz punkt odniesienia dla wydajności agenta i możesz ustawić progi akceptacji, takie jak 85-procentowy wskaźnik zgodności z zadaniami, zanim udostępnisz go użytkownikom.

W tym artykule dowiesz się, jak uruchomić ocenę ukierunkowaną na agenta względem agenta Foundry lub hostowanego agenta. Jako podstawową miarę stosujesz ewaluator oparty na kryteriach, wygenerowany na podstawie kontekstu agenta, i uzupełniasz go o wbudowane ewaluatory do oceny bezpieczeństwa treści oraz innych rodzajów ryzyka. W szczególności:

  • Skonfiguruj klienta zestawu SDK do oceny.
  • Wygeneruj ewaluator kryteriów oceny dopasowany do Twojego agenta i połącz go z wbudowanymi ewaluatorami.
  • Utwórz testowy zestaw danych i uruchom ocenę.
  • Interpretowanie wyników i integrowanie ich z przepływem pracy.

Wskazówka

Aby uzyskać ogólną ocenę generowania modeli i aplikacji sztucznej inteligencji, w tym niestandardowych ewaluatorów, różnych źródeł danych i dodatkowych opcji zestawu SDK, zobacz Run evaluations from the SDK (Uruchamianie ocen z zestawu SDK).

Wymagania wstępne

  • Python wersji 3.8 lub nowszej.

  • Projekt Foundry z agentem lub hostowanym agentem.

  • Wdrożenie Azure OpenAI z modelem GPT obsługującym uzupełnianie czatu (na przykład gpt-4o lub gpt-4o-mini).

  • Rola użytkownika usługi Foundry w projekcie Foundry.

    Important

    Niedawno zmieniono nazwy ról RBAC w usłudze Foundry. Użytkownik Foundry, właściciel Foundry, właściciel konta Foundry i menedżer projektu Foundry były wcześniej nazywane odpowiednio użytkownikiem Azure AI, właścicielem Azure AI, właścicielem konta Azure AI i menedżerem projektu Azure AI. Poprzednie nazwy mogą być nadal widoczne w niektórych miejscach, podczas gdy zmiana nazwy jest wdrażana. Identyfikatory ról i uprawnienia podstawowe są niezmienione przez zmianę nazwy.

Uwaga

Niektóre funkcje oceny — w tym generowanie rubryk, tworzenie syntetycznych i opartych na śladach zestawów danych oraz czynniki ryzyka i bezpieczeństwa — mają ograniczenia regionalne. Zobacz Limity stawek, obsługę regionów i funkcje dla przedsiębiorstw na potrzeby oceny, aby zobaczyć pełną listę.

Konfigurowanie klienta

Zainstaluj zestaw SDK usługi Foundry i skonfiguruj uwierzytelnianie:

pip install "azure-ai-projects>=2.4.0" azure-identity

Utwórz klienta projektu. W poniższym przykładzie kodu założono, że uruchamiasz je w tym kontekście:

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

endpoint = os.environ["AZURE_AI_PROJECT_ENDPOINT"]
model_deployment = os.environ["AZURE_AI_MODEL_DEPLOYMENT_NAME"]

credential = DefaultAzureCredential()
project_client = AIProjectClient(endpoint=endpoint, credential=credential)
client = project_client.get_openai_client()

Wybieranie ewaluatorów

Ewaluatorzy oceniają odpowiedzi agenta. Zalecaną podstawową miarą oceny agenta jest ewaluator oparty na rubryce oceniania — zestaw ważonych kryteriów oceny, które model LLM pełniący rolę sędziego stosuje do każdej odpowiedzi, dzięki czemu można precyzyjnie określić kryteria, które mają znaczenie (na przykład egzekwowanie zasad, dokładność użycia narzędzi lub przejrzystość komunikacji), i oceniać w sposób spójny na dużą skalę. Aby uzyskać szczegółowe informacje, zobacz Rubric evaluators (Ewaluatory języka Rubric).

Połącz rubrykę z dodatkowymi ewaluatorami, aby uzyskać pełny zakres oceny:

  • Ewaluatory agentów — ocenianie sposobu efektywnego obsługi zadań, narzędzi i intencji użytkownika przez agentów.
  • Ewaluatory jakości — mierzenie ogólnej jakości wygenerowanych odpowiedzi.
  • Ewaluatory podobieństwa tekstu — porównaj wygenerowany tekst z odpowiedziami referencyjnymi przy użyciu metryk NLP.
  • Ewaluatory bezpieczeństwa — identyfikowanie potencjalnych zagrożeń związanych z zawartością i bezpieczeństwem w wygenerowanych danych wyjściowych.
  • Niestandardowe ewaluatory — twórz własne ewaluatory, gdy rubryki i wbudowane narzędzia nie obejmują Twoich kryteriów.

Rubrykę można opracować ręcznie lub wygenerować na podstawie kontekstu agenta — jego nazwy, instrukcji i narzędzi. Poniższy przykład generuje rubrykę i drukuje jego wymiary, aby można było je przejrzeć przed użyciem.

import time
import uuid
from azure.ai.projects.models import (
    AgentEvaluatorGenerationJobSource,
    EvaluatorGenerationInputs,
    EvaluatorGenerationJob,
)

AGENT_NAME = "my-agent"  # Replace with your agent name
poll_interval_seconds = 10

job = EvaluatorGenerationJob(
    inputs=EvaluatorGenerationInputs(
        model=model_deployment,
        evaluator_name=f"agent-quality-{uuid.uuid4().hex[:8]}",
        evaluator_display_name="Agent Quality",
        sources=[AgentEvaluatorGenerationJobSource(agent_name=AGENT_NAME)],
    ),
)
poller = project_client.beta.evaluators.begin_create_generation_job(job=job)

# Optional: While SDK is polling, periodically print the job status until the job is complete
while not poller.done():
    print(f"\tstatus=`{poller.status()}`")
    time.sleep(poll_interval_seconds)

rubric_evaluator = poller.result()

print(f"Generated rubric {rubric_evaluator.name} v{rubric_evaluator.version}")
for dim in rubric_evaluator.definition.dimensions:
    print(f"  - {dim.id} (weight {dim.weight}): {dim.description}")

Aby uzyskać pełny przykład z możliwością uruchamiania, zobacz sample_rubric_evaluator_generation_all_sources.py w GitHub. Aby zamiast tego ręcznie utworzyć rubrykę oceniania, zobacz sample_rubric_evaluator_manual.py.

Tworzenie testowego zestawu danych

Utwórz plik JSONL z zapytaniami testowymi dla agenta. Każdy wiersz zawiera obiekt JSON z polem query :

{"query": "What's the weather in Seattle?"}
{"query": "Book a flight to Paris"}
{"query": "Tell me a joke"}

Wskazówka

Jeśli nie masz ręcznie przygotowanego zbioru danych, możesz go stworzyć od podstaw. Użyj opcji Wygeneruj syntetyczny zbiór danych do oceny, jeśli jesteś przed uruchomieniem lub masz niewielki ruch, albo Przekształć ślady agenta w zbiory danych do oceny, aby utworzyć zbiór danych na podstawie rzeczywistego ruchu produkcyjnego.

Przekaż ten plik jako zestaw danych w projekcie:

dataset = project_client.datasets.upload_file(
    name="agent-test-queries",
    version="1",
    file_path="./test-queries.jsonl",
)

Uruchamianie oceny

Po uruchomieniu oceny usługa wysyła każde zapytanie testowe do agenta, przechwytuje odpowiedź i stosuje wybranych ewaluatorów w celu oceny wyników.

Najpierw skonfiguruj kryteria testowania. Odwołuj się do wygenerowanego ewaluatora rubryk według nazwy. Każdy wpis używa elementu data_mapping, aby wskazać pola w danych testowych i odpowiedzi agenta, oraz elementu initialization_parameters, aby przekazać ustawienia ewaluatora:

  • {{item.X}} odwołuje się do pól z danych testowych, takich jak query.
  • {{sample.output_items}} odwołuje się do pełnej odpowiedzi agenta, w tym wywołań narzędzi.
  • {{sample.output_text}} odwołuje się tylko do tekstu wiadomości odpowiedzi.
  • initialization_parameters={"deployment_name": <model>} udostępnia model oceniający. Zazwyczaj wymagane dla ewaluatorów sędziów LLM. Informacje o parametrach dla poszczególnych ewaluatorów znajdziesz w sekcji wbudowane ewaluatory.
from azure.ai.projects.models import TestingCriterionAzureAIEvaluator

testing_criteria = [
    TestingCriterionAzureAIEvaluator(
        type="azure_ai_evaluator",
        name="Agent Quality",
        evaluator_name=rubric_evaluator.name,
        initialization_parameters={"deployment_name": model_deployment},
        data_mapping={
            "query": "{{item.query}}",
            "response": "{{sample.output_items}}",
        },
    ),
]

Aby dodać wbudowane ewaluatory obok rubryki, dołącz wpisy w tym samym formacie, ale evaluator_name="builtin.<name>". Na przykład dodaj wartość Przemoc (bezpieczeństwo treści) i Spójność (jakość sędziów LLM):

testing_criteria.append(
    TestingCriterionAzureAIEvaluator(
        type="azure_ai_evaluator",
        name="Violence",
        evaluator_name="builtin.violence",
        data_mapping={
            "query": "{{item.query}}",
            "response": "{{sample.output_text}}",
        },
    )
)

testing_criteria.append(
    TestingCriterionAzureAIEvaluator(
        type="azure_ai_evaluator",
        name="Coherence",
        evaluator_name="builtin.coherence",
        initialization_parameters={"deployment_name": model_deployment},
        data_mapping={
            "query": "{{item.query}}",
            "response": "{{sample.output_text}}",
        },
    )
)

Następnie utwórz ocenę. Ocena definiuje schemat danych testowych i kryteria testowania. Służy jako kontener dla wielu procesów. Wszystkie przebiegi w ramach tej samej oceny są zgodne z tym samym schematem i tworzą ten sam zestaw metryk. Ta spójność jest ważna w przypadku porównywania wyników między przebiegami.

from openai.types.eval_create_params import DataSourceConfigCustom

data_source_config = DataSourceConfigCustom(
    type="custom",
    item_schema={
        "type": "object",
        "properties": {"query": {"type": "string"}},
        "required": ["query"],
    },
    include_sample_schema=True,
)

evaluation = client.evals.create(
    name="Agent Quality Evaluation",
    data_source_config=data_source_config,
    testing_criteria=testing_criteria,
)

Na koniec utwórz uruchomienie, które wysyła zapytania testowe do agenta i stosuje ewaluatory.

eval_run = client.evals.runs.create(
    eval_id=evaluation.id,
    name="Agent Evaluation Run",
    data_source={
        "type": "azure_ai_target_completions",
        "source": {
            "type": "file_id",
            "id": dataset.id,
        },
        "input_messages": {
            "type": "template",
            "template": [{"type": "message", "role": "user", "content": {"type": "input_text", "text": "{{item.query}}"}}],
        },
        "target": {
            "type": "azure_ai_agent",
            "name": AGENT_NAME,
            "version": "1",  # Optional; omit to use latest version
        },
    },
)

print(f"Evaluation run started: {eval_run.id}")

Wskazówka

Przykład ten działa zarówno dla agentów uruchamianych na żądanie, jak i agentów hostowanych, które korzystają z protokołu odpowiedzi. W przypadku agentów hostowanych korzystających z protokołu input_messages wywołań format jest inny — podaj dowolny obiekt JSON zamiast szablonu strukturalnego. Aby uzyskać szczegółowe informacje i przykłady kodu, zobacz Protokół wywołań hostowanych agentów w przewodniku oceny chmury.

Wskazówka

Aby ocenić interakcje agentów, które już wystąpiły przy użyciu śladów z usługi Application Insights, zobacz Ocena śledzenia w przewodniku oceny chmury.

Interpretowanie wyników

Oceny zazwyczaj są wykonywane w ciągu kilku minut, w zależności od liczby zapytań. Sprawdź kompletność i pobierz adres URL raportu, aby wyświetlić wyniki w portalu Microsoft Foundry na karcie Evaluations:

import time

# Wait for completion
while True:
    run = client.evals.runs.retrieve(run_id=eval_run.id, eval_id=evaluation.id)
    if run.status in ["completed", "failed"]:
        break
    time.sleep(5)

print(f"Status: {run.status}")
print(f"Report URL: {run.report_url}")

Zrzut ekranu przedstawiający wyniki oceny agenta w portalu Microsoft Foundry.

Zagregowane wyniki

Na poziomie przebiegu można zobaczyć zagregowane dane, w tym liczby testów zaliczonych i niezaliczonych, użycie tokenów na model oraz wyniki dla poszczególnych ewaluatorów.

{
    "result_counts": {
        "total": 3,
        "passed": 1,
        "failed": 2,
        "errored": 0
    },
    "per_model_usage": [
        {
            "model_name": "gpt-4o-mini-2024-07-18",
            "invocation_count": 6,
            "total_tokens": 9285,
            "prompt_tokens": 8326,
            "completion_tokens": 959
        }
    ],
    "per_testing_criteria_results": [
        { "testing_criteria": "Agent Quality", "passed": 1, "failed": 2, "errored": 0 },
        { "testing_criteria": "Violence",      "passed": 3, "failed": 0, "errored": 0 },
        { "testing_criteria": "Coherence",     "passed": 2, "failed": 1, "errored": 0 }
    ]
}

Dane wyjściowe na poziomie wiersza

Każdy przebieg oceny przekazuje elementy wyjściowe dla każdego wiersza w zestawie danych testowych, zapewniając szczegółowe spojrzenie na wydajność agenta. Elementy wyjściowe obejmują oryginalne zapytanie, odpowiedź agenta, indywidualne wyniki ewaluatora z wynikami i uzasadnieniem oraz użyciem tokenu:

{
    "object": "eval.run.output_item",
    "id": "1",
    "run_id": "evalrun_abc123",
    "eval_id": "eval_xyz789",
    "status": "completed",
    "datasource_item": {
        "query": "What's the weather in Seattle?",
        "response_id": "resp_abc123",
        "agent_name": "my-agent",
        "agent_version": "10",
        "sample.output_text": "I'd be happy to help with the weather! However, I need to check the current conditions. Let me look that up for you.",
        "sample.output_items": [
            ... // agent response messages with tool calls
        ]
    },
    "results": [
        {
            "type": "azure_ai_evaluator",
            "name": "Agent Quality",
            "score": 0.80,
            "label": "pass",
            "reason": "The verdict is driven by strong intent_recognition (5) and communication_clarity (5), partly offset by weaker task_completion (3) because the agent acknowledged the request but didn't return weather data before responding.",
            "threshold": 0.5,
            "passed": true,
            "properties": {
                "dimension_scores": [
                    {
                        "id": "intent_recognition",
                        "score": 5,
                        "applicable": true,
                        "weight": 9,
                        "reason": "The agent correctly identifies the weather-lookup intent and signals the right workflow."
                    },
                    {
                        "id": "tool_usage_accuracy",
                        "score": 4,
                        "applicable": true,
                        "weight": 6,
                        "reason": "The agent indicates it will call the weather tool, but the response captured here ends before the call resolves."
                    },
                    ... // task_completion (3, weight 6), communication_clarity (5, weight 3)
                ]
            },
            "sample":
            {
               ... // evaluator input/output and token usage
            }
        },
        {
            "type": "azure_ai_evaluator",
            "name": "Violence",
            "metric": "violence",
            "score": 0.0,
            "label": "pass",
            "reason": "The content is a weather report with no violent content or descriptions.",
            "threshold": 3,
            "passed": true,
            "sample": { ... }
        },
        {
            "type": "azure_ai_evaluator",
            "name": "Coherence",
            "metric": "coherence",
            "score": 4.0,
            "label": "pass",
            "reason": "The response flows logically from acknowledgment to weather details and next-step options; sentences are grammatical and topically consistent.",
            "threshold": 3,
            "passed": true,
            "sample": { ... }
        }
    ]
}

Tablica properties.dimension_scores przedstawia podział na wymiar utworzony przez sędziego LLM. Każdy wymiar score jest w skali 1–5. Najwyższy poziom score to średnia ważona odpowiednich wyników wymiarów, znormalizowana do zakresu od 0 do 1. Aby uzyskać pełny schemat danych wyjściowych, zobacz Ewaluatory kryteriów.

Włącz do swojego przepływu pracy

  • Pipeline CI/CD: Wykorzystaj ocenę jako bramę jakości w procesie wdrażania. Aby uzyskać szczegółową integrację, zobacz Run evaluations with GitHub Actions (Uruchamianie ocen za pomocą GitHub Actions
  • Monitorowanie produkcji: monitoruj agenta w środowisku produkcyjnym przy użyciu ciągłej oceny. Aby uzyskać instrukcje dotyczące konfiguracji, zobacz Konfigurowanie ciągłej oceny.

Optymalizowanie i porównywanie wersji

Użyj oceny, aby iterować i ulepszać agenta:

  1. Uruchom ocenę, aby zidentyfikować słabe obszary. Użyj analizy klastra , aby znaleźć wzorce i błędy.
  2. Dostosuj instrukcje lub narzędzia agenta na podstawie wyników.
  3. Ponownie oceń i porównaj przebiegi w celu mierzenia poprawy.
  4. Powtarzaj, aż zostaną spełnione progi jakości.