Partilhar via


Tutorial: Parte 3 - Avaliar uma aplicação de chat personalizada com o Microsoft Foundry SDK

Neste tutorial, avalia a aplicação de chat que criou na Parte 2 da série de tutoriais. Avalia a qualidade da sua aplicação através de múltiplas métricas e depois itera sobre melhorias. Nesta parte, você:

  • Criar um conjunto de dados de avaliação
  • Avaliar o aplicativo de chat com avaliadores de IA do Azure
  • Itere e melhore seu aplicativo

Este tutorial baseia-se na Parte 2: Constrói uma aplicação de chat personalizada com o Microsoft Foundry SDK.

Pré-requisitos

Observação

Este tutorial usa um projeto baseado em hub. Os passos e o código aqui mostrados não funcionam para um projeto Foundry. Para obter mais informações, consulte Tipos de projetos.

  • Complete a Parte 2 da série de tutoriais para construir a aplicação de chat.
  • Usa o mesmo projeto Microsoft Foundry que criaste na Parte 1.
  • Permissões Azure AI: função de Proprietário ou Colaborador para modificar limites de taxa do ponto de extremidade do modelo e executar trabalhos de avaliação.
  • Certifique-se de que completa os passos para adicionar registo de telemetria da Parte 2.

Criar conjunto de dados de avaliação

Use o seguinte conjunto de dados de avaliação, que contém perguntas de exemplo e respostas esperadas. Use este conjunto de dados com um avaliador e a get_chat_response() função alvo para avaliar o desempenho da sua aplicação de chat em métricas de relevância, fundamento e coerência.

  1. Crie um ficheiro chamado chat_eval_data.jsonl na sua pasta de assets .

  2. Cole este conjunto de dados no arquivo:

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

    Referências: Formato JSONL para conjuntos de dados de avaliação.

Avaliar com avaliadores de IA do Azure

Crie um script de avaliação que gere um wrapper de função alvo, carregue o seu conjunto de dados, execute a avaliação e registre os resultados do seu projeto Foundry.

  1. Cria um ficheiro chamado evaluate.py na tua pasta principal.

  2. Adicione o seguinte código para importar as bibliotecas necessárias, criar um cliente de projeto e definir algumas configurações:

    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)
    

    Referências: AIProjectClient, DefaultAzureCredential, azure-ai-evaluation.

  3. Adicione código para criar uma função wrapper que implemente a interface de avaliação para avaliação de consulta e resposta:

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

    Referências: azure-ai-evaluation, funções de destino de avaliação.

  4. Finalmente, adicione código para executar a avaliação, veja os resultados localmente e obtenha um link para os resultados da avaliação no portal 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']}")
    

    Referências: azure-ai-evaluation, AIProjectClient.

Configurar o modelo de avaliação

O script de avaliação chama o modelo muitas vezes. Considere aumentar o número de tokens por minuto para o modelo de avaliação.

Na Parte 1 desta série de tutoriais, você criou um arquivo .env que especifica o nome do modelo de avaliação, gpt-4o-mini. Tente aumentar o limite de tokens por minuto para este modelo, se você tiver cota disponível. Se você não tem cota suficiente para aumentar o valor, não se preocupe. O script é projetado para lidar com erros de limite.

  1. No seu projeto no portal Foundry, selecione Modelos + endpoints.
  2. Selecione gpt-4o-mini.
  3. Selecione Editar.
  4. Se tiver uma quota, aumente o Limite de Taxa de Tokens por Minuto para 30 ou mais.
  5. Selecione Guardar e fechar.

Executar o script de avaliação

  1. A partir da sua consola, inicie sessão na sua conta Azure usando a CLI Azure:

    az login
    
  2. Instale o pacote necessário:

    pip install azure-ai-evaluation[remote]
    

    Referências: azure-ai-evaluation SDK,documentação do Evaluation SDK.

Verifique a sua configuração de avaliação

Antes de executar a avaliação completa (que demora entre 5 a 10 minutos), verifique se o SDK e a sua ligação ao projeto estão a funcionar executando este teste rápido:

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

# Verify connection to project
client = AIProjectClient.from_config(credential=DefaultAzureCredential())
print("Evaluation SDK is ready! You can now run evaluate.py")

Se vires "Evaluation SDK is ready!", a tua configuração está completa e podes avançar.

Referências: AIProjectClient, DefaultAzureCredential.

Iniciar a avaliação

  • Execute o script de avaliação:

    python evaluate.py
    

A avaliação demora entre 5 a 10 minutos a ser concluída. Pode ver avisos de timeout e erros de limite de taxa. O script trata estes erros automaticamente e continua a processar.

Interpretar os resultados da avaliação

Na saída da consola, vês uma resposta para cada pergunta, seguida de uma tabela com métricas resumidas que mostram pontuações de relevância, fundamento e coerência. As pontuações variam de 0 (pior) a 4 (melhor) para métricas assistidas por GPT. Procure pontuações baixas de fundamento para identificar respostas que não são bem fundamentadas pelos documentos de referência, e pontuações baixas de relevância para identificar respostas fora do tema.

Podes ver muitas WARNING:opentelemetry.attributes: mensagens e erros de timeout. Pode ignorar estas mensagens com segurança. Eles não afetam os resultados da avaliação. O script de avaliação foi concebido para lidar com erros de limite de taxa e continuar o processamento.

Os resultados da avaliação incluem também um link para ver resultados detalhados no portal da Foundry, onde pode comparar execuções de avaliação lado a lado e acompanhar melhorias ao longo do tempo.

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

Iterar e melhorar

Os resultados da avaliação revelam que as respostas muitas vezes não estão bem fundamentadas nos documentos de referência. Para melhorar a fundamentação, modifique o prompt do sistema no ficheiro assets/grounded_chat.prompty para incentivar o modelo a usar os documentos de referência de forma mais direta.

Conteúdo atual (problemático):

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.

Prompt melhorado:

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.

Após atualizar o prompt

  1. Salve o arquivo.

  2. Execute novamente o script de avaliação:

    python evaluate.py
    
  3. Compare os novos resultados da avaliação com a execução anterior. Deve ver pontuações de precisão melhoradas.

Experimente modificações adicionais como:

  • Alterar o prompt do sistema para focar na precisão em vez da completude
  • Testar com um modelo diferente (por exemplo, gpt-4-turbo se disponível)
  • Ajustar a recuperação de contexto para devolver documentos mais relevantes

Cada iteração ajuda-o a perceber quais as mudanças que melhoram métricas específicas.

Limpeza de recursos

Para evitar custos desnecessários do Azure, elimina os recursos que criaste neste tutorial se já não forem necessários. Para gerenciar recursos, você pode usar o portal do Azure.