Compartilhar via


Tutorial: Parte 3 – Avaliar um aplicativo de chat personalizado com o SDK do Azure AI Foundry

Nesse tutorial, você vai usar o SDK de IA do Azure (e outras bibliotecas) para avaliar o aplicativo de chat que você criou na Parte 2 da série de tutoriais. Nessa terceira parte, você aprenderá como:

  • Crie um conjunto de dados de avaliação
  • Avalie o aplicativo de chat com os avaliadores de IA do Azure
  • Iterar e aprimorar seu aplicativo

Esse tutorial é a terceira parte de um tutorial de três partes.

Pré-requisitos

Avalie a qualidade das respostas do aplicativo de chat

Agora que você sabe que seu aplicativo de chat responde bem às suas consultas, inclusive com o histórico de chat, é hora de avaliar como ele se sai em algumas métricas diferentes e mais dados.

Você usa o avaliador com um conjunto de dados de avaliação e a função de destino get_chat_response() e, em seguida, avalia os resultados da avaliação.

Depois de executar uma avaliação, você pode fazer melhorias na sua lógica, como melhorar o prompt do sistema e observar como as respostas do aplicativo de chat mudam e melhoram.

Criar conjunto de dados de avaliação

Use o seguinte conjunto de dados de avaliação, que contém exemplos de perguntas e respostas esperadas (verdade).

  1. Crie um arquivo chamado chat_eval_data.jsonl na pasta de ativos.

  2. Cole esse 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"}
    

Avaliar com avaliadores de IA do Azure

Agora defina um script de avaliação que irá:

  • Gere um wrapper de função de destino em torno da lógica do nosso aplicativo de chat.
  • Carregue o conjunto de dados de amostra .jsonl.
  • Execute a avaliação, que pega a função de destino e mescla o conjunto de dados de avaliação com as respostas do aplicativo de chat.
  • Gere um conjunto de métricas assistidas pelo GPT (relevância, fundamentação e coerência) para avaliar a qualidade das respostas do aplicativo de chat.
  • Produza os resultados localmente e registre-os no projeto de nuvem.

O script permite revisar os resultados localmente, enviando os resultados na linha de comando e em um arquivo json.

O script também registra os resultados da avaliação no projeto em nuvem para que você possa comparar as execuções de avaliação na interface do usuário.

  1. Crie um arquivo chamado evaluate.py na sua 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)
    
  3. Adicione código para criar uma função wrapper que implementa 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"]}
    
  4. Por fim, adicione código para executar a avaliação, visualizar os resultados localmente e fornecer um link para os resultados da avaliação no portal do Azure AI 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']}")
    

Configurar o modelo de avaliação

Como o script de avaliação chama o modelo muitas vezes, talvez você queira 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 esse modelo se você tiver cota disponível. Se você não tiver cota suficiente para aumentar o valor, não se preocupe. O script foi projetado para lidar com erros de limite.

  1. Em seu projeto no portal do Azure AI Foundry, selecione Modelos + pontos de extremidade.
  2. Selecione gpt-4o-mini.
  3. Selecione Editar.
  4. Se você tiver cota para aumentar o Limite de taxa de tokens por minuto, tente aumentar para 30.
  5. Selecione Salvar e fechar.

Execute o script de avaliação

  1. No console, entre na sua conta do Azure com a CLI do Azure:

    az login
    
  2. Instale o pacote necessário:

    pip install azure-ai-evaluation
    
  3. Agora execute o script de avaliação:

    python evaluate.py
    

Interpretar o resultado da avaliação

Na saída do console, você verá uma resposta para cada pergunta, seguida por uma tabela com métricas resumidas. (Você poderá ver colunas diferentes em sua saída.)

Se você não conseguiu aumentar o limite de tokens por minuto para o modelo, poderá ver alguns erros de tempo limite, que são esperados. O script de avaliação foi projetado para lidar com esses erros e continuar em execução.

Observação

Você também poderá ver muitos WARNING:opentelemetry.attributes: – eles podem ser ignorados com segurança e não afetam os resultados da avaliação.

====================================================
'-----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 Azure AI Foundry portal: '
 'https://xxxxxxxxxxxxxxxxxxxxxxx')

Exibir os resultados da avaliação no portal do Azure AI Foundry

Assim que a execução da avaliação for concluída, siga o link para visualizar os resultados da avaliação na página Avaliação no portal do Azure AI Foundry.

A captura de tela mostra a visão geral da avaliação no portal do Azure AI Foundry.

Você também pode examinar as linhas individuais e ver as pontuações métricas por linha e visualizar o contexto/documentos completos que foram recuperados. Essas métricas podem ser úteis na interpretação e depuração dos resultados da avaliação.

A captura de tela mostra as linhas dos resultados da avaliação no portal do Azure AI Foundry.

Para obter mais informações sobre os resultados da avaliação no portal do Azure AI Foundry, consulte Como visualizar os resultados da avaliação no portal do Azure AI Foundry.

Iterar e melhorar

Observe que as respostas não estão bem fundamentadas. Em muitos casos, o modelo responde com uma pergunta em vez de uma resposta. Isso é um resultado das instruções do modelo de prompt.

  • No seu arquivo assets/grounded_chat.prompty, encontre a frase "Se a pergunta estiver relacionada a equipamentos e roupas para atividades ao ar livre/camping, mas for vaga, faça perguntas de esclarecimento em vez de fazer referência a documentos."
  • Altere a frase para "Se a pergunta estiver relacionada a equipamentos e roupas para atividades ao ar livre/camping, mas for vaga, tente responder com base nos documentos de referência e, em seguida, faça perguntas de esclarecimento."
  • Salve o arquivo e execute novamente o script de avaliação.

Experimente outras modificações no modelo de solicitação, ou experimente diferentes modelos, para ver como as mudanças afetam os resultados da avaliação.

Limpar os recursos

Para evitar incorrer em custos desnecessários do Azure, exclua os recursos criados neste tutorial se eles não forem mais necessários. Para gerenciar os recursos, use o portal do Azure.