Tutorial: Parte 3 - Avaliar uma aplicação de chat personalizada com o Microsoft Foundry SDK (clássico)

Aplica-se apenas a:Portal Foundry (clássico). Este artigo não está disponível para o novo portal da Foundry. Saiba mais sobre o novo portal.

Nota

Os links neste artigo podem abrir conteúdo na nova documentação do Microsoft Foundry em vez da documentação do Foundry (clássico) que está a ver agora.

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, tu:

  • Criar um conjunto de dados de avaliação
  • Avalie a aplicação de chat com avaliadores de IA do Azure
  • Itere e melhore a sua aplicação

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

Pré-requisitos

Importante

Este artigo fornece suporte legado para projetos baseados em hubs. Não funciona para projetos da Foundry. Veja : Como sei que tipo de projeto tenho?

Nota de compatibilidade SDK: Exemplos de código requerem uma versão específica do Microsoft Foundry SDK. Se encontrar problemas de compatibilidade, considere migrar de um projeto baseado em hub para um projeto Foundry.

  • Complete a Parte 2 da série de tutoriais para construir a aplicação de chat.
  • Usa o mesmo projeto baseado no hub que criaste na Parte 1.
  • Permissões do Azure AI: Função de Administrador ou Contribuinte para modificar os limites de taxa dos pontos finais do modelo e executar tarefas 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 ficheiro:

    {"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 configurar algumas definiçõ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. Adicionar código para criar uma função wrapper que implemente a interface de avaliação para avaliação de consultas e respostas:

    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-alvo 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, criaste um ficheiro .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 tiver uma quota disponível. Se não tiver quota suficiente para aumentar o valor, não se preocupe. O script foi concebido para lidar com erros de limite.

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

Execute o script de avaliação

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

    az login
    
  2. Instale os pacotes necessários:

    pip install openai
    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

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

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. Poderá ver avisos de tempo limite excedido e erros de limitação de taxa. O script trata estes erros automaticamente e continua a processar.

Interpretar o resultado 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. Podes ignorar estas mensagens em 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 que o modelo utilize mais diretamente os documentos de referência.

Prompt 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. Guarda o ficheiro.

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

    python evaluate.py
    
  3. Compare os novos resultados da avaliação com o teste anterior. Deverá ver melhores pontuações de fundamentação.

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.

Liberar recursos

Para evitar custos desnecessários com o Azure, elimine os recursos que criou neste tutorial se já não forem necessários. Para gerir recursos, pode usar o portal Azure .