évaluation Microsoft Foundry

FoundryEvalsconnecte les API d'évaluation agent Framework à Microsoft service d'évaluation managé de Foundry. Il fournit des évaluateurs de qualité, de sécurité, d’utilisation d’outils, de comportement d’agent et de rubric, avec des rapports stockés disponibles dans le portail Foundry.

Pour EvalItemles vérifications locales, les évaluateurs personnalisés et les stratégies de fractionnement de conversation, consultez l’évaluation de l’agent.

Prerequisites

  • Un projet Microsoft Foundry et un déploiement de modèle.
  • Point de terminaison Foundry dans l’étendue du projet.
  • Autorisation d’envoyer des évaluations et de lire des rapports.

Évaluer les réponses ou les requêtes de test

Configurez , puis évaluez FoundryEvalsles réponses déjà générées ou laissez EvaluateAsync exécuter l’agent pour chaque requête.

string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-4o-mini";

// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
AIProjectClient projectClient = new(new Uri(endpoint), new DefaultAzureCredential());

AIAgent agent = projectClient.AsAIAgent(
    model: deploymentName,
    instructions: "You are a helpful assistant that provides clear, accurate answers.",
    name: "QualityTestAgent");

// Configure Foundry evaluators.
FoundryEvals foundryEvals = new(projectClient, deploymentName, FoundryEvals.Relevance, FoundryEvals.Coherence);

// --- Pattern 1: Run agent, then evaluate pre-existing responses ---
string[] queries = ["What is photosynthesis?", "Explain gravity in simple terms."];

AgentResponse[] responses = new AgentResponse[queries.Length];
for (int i = 0; i < queries.Length; i++)
{
    responses[i] = await agent.RunAsync(queries[i]);
}

AgentEvaluationResults results1 = await agent.EvaluateAsync(responses, queries, foundryEvals);

Console.WriteLine("=== Pattern 1: Evaluate pre-existing responses ===");
PrintResults(results1, queries);

// --- Pattern 2: Run + evaluate in one call ---
string[] queries2 = ["What causes rain?", "Why is the sky blue?"];
AgentEvaluationResults results2 = await agent.EvaluateAsync(queries2, foundryEvals);

Console.WriteLine("=== Pattern 2: Run + evaluate in one call ===");
PrintResults(results2, queries2);

Les exemples .NET illustrent également les évaluateurs de rubriques de découverte et les portes de qualité par dimension.

Évaluer un agent

Transmettez des réponses existantes ou des requêtes de test à evaluate_agent(). Les résultats incluent le nombre de transmissions/échecs et l’URL du rapport Foundry.

async def main() -> None:
    # 1. Set up the FoundryChatClient
    chat_client = FoundryChatClient(
        project_endpoint=os.environ["FOUNDRY_PROJECT_ENDPOINT"],
        model=os.environ.get("FOUNDRY_MODEL", "gpt-4o"),
        credential=AzureCliCredential(),
    )

    # 2. Create an agent with tools
    agent = Agent(
        client=chat_client,
        name="travel-assistant",
        instructions=(
            "You are a helpful travel assistant. Use your tools to answer questions about weather and flights."
        ),
        tools=[get_weather, get_flight_price],
    )

    # 3. Create the evaluator — provider config goes here, once
    evals = FoundryEvals(client=chat_client)

    # =========================================================================
    # Pattern 1: evaluate_agent(responses=...) — evaluate a response you already have
    # =========================================================================
    print("=" * 60)
    print("Pattern 1: evaluate_agent(responses=...) — evaluate existing response")
    print("=" * 60)

    query = "How much does a flight from Seattle to Paris cost?"
    response = await agent.run(query)
    print(f"Agent said: {response.text[:100]}...")

    # Pass agent= so tool definitions are extracted, queries= for the eval item context
    results = await evaluate_agent(
        agent=agent,
        responses=response,
        queries=[query],
        evaluators=FoundryEvals(
            client=chat_client,
            evaluators=[FoundryEvals.RELEVANCE, FoundryEvals.TOOL_CALL_ACCURACY],
        ),
    )

    for r in results:
        print(f"Status: {r.status}")
        print(f"Results: {r.passed}/{r.total} passed")
        print(f"Portal: {r.report_url}")
        if r.all_passed:
            print("[PASS] All passed")
        else:
            print(f"[FAIL] {r.failed} failed")

D’autres exemples couvrent l’évaluation des traces, l’évaluation des appels d’outils, l’évaluation multitour, l’évaluation de flux de travail, les fournisseurs mixtes et les rubriques personnalisées foundry.

Note

Microsoft l'intégration de l'évaluation Foundry n'est actuellement pas disponible pour Agent Framework Go. Consultez le référentiel Agent Framework Go pour connaître l’état le plus récent.

Portes de qualité

Épingler des jeux de données, des déploiements de modèles, des versions évaluateurs et des versions de rubrique lorsque les résultats doivent être comparables entre les exécutions. Utilisez les helpers d’assertion de résultat pour échouer ci lorsque les métriques requises régressent.

Étapes suivantes