Avaliação do Microsoft Foundry

FoundryEvalsliga as APIs de avaliação do Agent Framework ao serviço de avaliação gerida da Microsoft Foundry. Fornece avaliadores de qualidade, segurança, utilização de ferramentas, comportamento de agentes e avaliadores de rubricas, com relatórios armazenados disponíveis no portal Foundry.

Para EvalItem, verificações locais, avaliadores personalizados e estratégias de divisão de conversa, veja Avaliação do Agente.

Pré-requisitos

  • Um projeto e implementação de modelos do Microsoft Foundry.
  • Um endpoint Foundry com âmbito de projeto.
  • Permissão para submeter avaliações e ler relatórios.

Avaliar respostas ou perguntas de teste

Configure FoundryEvals, depois avalie as respostas já geradas ou deixe EvaluateAsync executar o agente para cada consulta.

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

As amostras .NET também demonstram avaliadores de rubricas Foundry e portas de qualidade por dimensão.

Avalie um agente

Passe respostas ou consultas de teste existentes para evaluate_agent(). Os resultados incluem contagens de aprovados/reprovados e o URL do relatório 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")

Amostras adicionais abrangem avaliação de traços, avaliação por chamada de ferramenta, avaliação multi-turn, avaliação de workflow, fornecedores mistos e rubricas personalizadas da Foundry.

Observação

A integração de avaliação do Microsoft Foundry não está atualmente disponível para o Agent Framework Go. Consulte o repositório Agent Framework Go para o estado mais recente.

Portões de qualidade

Pin datasets, implementações de modelos, versões dos avaliadores e versões de rubricas quando os resultados devem ser comparáveis entre execuções. Use ajudantes de asserção de resultados para falhar o IC quando as métricas necessárias regredirem.

Passos seguintes