Compartilhar via


Introdução à avaliação de respostas em um aplicativo de chat em Python

Este artigo mostra como avaliar as respostas de um aplicativo de chat em relação a um conjunto de respostas corretas ou ideais (conhecidas como verdade fundamental). Sempre que você alterar seu aplicativo de chat de uma forma que afete as respostas, execute uma avaliação para comparar as alterações. Este aplicativo de demonstração oferece ferramentas que você pode usar hoje para facilitar a execução de avaliações.

Seguindo as instruções neste artigo, você:

  • Use prompts de exemplo fornecidos adaptados ao domínio do assunto. Esses prompts já estão no repositório.
  • Gere exemplos de perguntas do usuário e respostas verdadeiras de seus próprios documentos.
  • Execute avaliações usando um prompt de exemplo com as perguntas do usuário geradas.
  • Revise a análise das respostas.

Observação

Este artigo usa um ou mais modelos de aplicativo de IA como base para os exemplos e as diretrizes no artigo. Os modelos de aplicativo de IA fornecem implementações de referência bem mantidas que são fáceis de implantar. Eles ajudam a garantir um ponto de partida de alta qualidade para seus aplicativos de IA.

Visão geral da arquitetura

Os principais componentes da arquitetura incluem:

  • Aplicativo de chat hospedado no Azure: o aplicativo de chat é executado no Serviço de Aplicativos do Azure.
  • Protocolo de Chat de IA da Microsoft: o protocolo fornece contratos de API padronizados em soluções e idiomas de IA. O aplicativo de chat está em conformidade com o Protocolo de Chat de IA da Microsoft, que permite que o aplicativo de avaliações seja executado em qualquer aplicativo de chat que esteja em conformidade com o protocolo.
  • Pesquisa de IA do Azure: o aplicativo de chat usa a Pesquisa de IA do Azure para armazenar os dados de seus próprios documentos.
  • Gerador de perguntas de amostra: a ferramenta pode gerar muitas perguntas para cada documento, juntamente com a resposta da verdade. Quanto mais perguntas houver, mais longas serão as avaliações.
  • Avaliador: a ferramenta executa perguntas de exemplo e solicitações no aplicativo de chat e retorna os resultados.
  • Ferramenta de revisão: a ferramenta analisa os resultados das avaliações.
  • Ferramenta de diferenciação: a ferramenta compara as respostas entre as avaliações.

Quando você implanta essa avaliação no Azure, o ponto de extremidade do Serviço OpenAI do Azure é criado para o modelo GPT-4 com sua própria capacidade. Quando você avalia aplicativos de chat, é importante que o avaliador tenha seu próprio recurso do Azure OpenAI usando GPT-4 com sua própria capacidade.

Pré-requisitos

  • Uma assinatura do Azure. Crie um gratuitamente.

  • Conclua o procedimento anterior do aplicativo de chat para implantar o aplicativo de chat no Azure. Esse recurso é necessário para que o aplicativo de avaliações funcione. Não conclua a seção "Limpar recursos" do procedimento anterior.

    Você precisa das seguintes informações de recursos do Azure dessa implantação, que é conhecida como o aplicativo de chat neste artigo:

    • URI da API de chat. O ponto de extremidade de back-end do serviço mostrado no final do processo azd up.
    • IA do Azure Search. Os valores a seguir são necessários:
      • Nome do recurso: o nome do recurso do Azure AI Search, relatado como Search service durante o azd up processo.
      • Nome do índice: o nome do índice do Azure AI Search em que seus documentos são armazenados. Você pode encontrá-lo no portal do Azure para o serviço de Pesquisa.

    A URL da API do Chat permite que as avaliações façam solicitações por meio do aplicativo de back-end. As informações da Pesquisa de IA do Azure permitem que os scripts de avaliação usem a mesma implantação que o back-end, carregados com os documentos.

    Depois que essas informações forem coletadas, você não precisará usar o ambiente de desenvolvimento do aplicativo de chat novamente. Este artigo refere-se a ele posteriormente, várias vezes, para indicar como o aplicativo de avaliações usa o aplicativo de chat. Não exclua os recursos do aplicativo de chat até concluir todo o procedimento neste artigo.

  • Um ambiente de contêiner de desenvolvimento está disponível com todas as dependências necessárias para concluir este artigo. Você pode executar o contêiner de desenvolvimento em Codespaces do GitHub (em um navegador) ou localmente usando o Visual Studio Code.

Abrir um ambiente de desenvolvimento

Siga estas instruções para configurar um ambiente de desenvolvimento pré-configurado com todas as dependências necessárias para concluir este artigo. Organize o workspace do monitor para que você possa ver essa documentação e o ambiente de desenvolvimento ao mesmo tempo.

Este artigo foi testado com a região switzerlandnorth para a implantação de avaliação.

GitHub Codespaces executa um contêiner de desenvolvimento gerenciado pelo GitHub com o Visual Studio Code para Web como interface do usuário. Use os Codespaces do GitHub para o ambiente de desenvolvimento mais fácil. Ele vem com as ferramentas e dependências de desenvolvedor corretas pré-instaladas para concluir este artigo.

Importante

Todas as contas do GitHub podem usar o GitHub Codespaces por até 60 horas gratuitas a cada mês, com duas instâncias principais. Para saber mais, confira Armazenamento e horas por núcleo incluídos mensalmente no GitHub Codespaces.

  1. Inicie o processo para criar um novo codespace no GitHub no branch main do repositório Azure-Samples/ai-rag-chat-evaluator no GitHub.

  2. Para exibir o ambiente de desenvolvimento e a documentação disponível ao mesmo tempo, clique com o botão direito do mouse no botão a seguir e selecione Abrir link em uma nova janela.

    Abrir em codespaces do GitHub.

  3. Na página Criar codespace, examine as configurações do codespace e selecione Criar novo codespace.

    Captura de tela que mostra a tela de confirmação antes de criar um novo codespace.

  4. Aguarde até que o codespace seja iniciado. Esse processo de inicialização pode levar alguns minutos.

  5. No terminal na parte inferior da tela, faça login no Azure com o CLI do Azure Developer.

    azd auth login --use-device-code
    
  6. Copie o código do terminal e cole-o em um navegador. Siga as instruções para autenticar com sua conta do Azure.

  7. Provisione o recurso necessário do Azure, o Serviço OpenAI do Azure, para o aplicativo de avaliações:

    azd up
    

    Esse AZD comando não implanta o aplicativo de avaliações, mas cria o recurso do Azure OpenAI com a implantação necessária GPT-4 para executar as avaliações no ambiente de desenvolvimento local.

As tarefas restantes neste artigo ocorrem no contexto desse contêiner de desenvolvimento.

O nome do repositório GitHub aparece na barra de pesquisa. Esse indicador visual ajuda você a distinguir o aplicativo de avaliações do aplicativo de chat. Esse ai-rag-chat-evaluator repositório é conhecido como o aplicativo de avaliações neste artigo.

Preparar valores de ambiente e informações de configuração

Atualize os valores de ambiente e as informações de configuração com as informações coletadas durante os pré-requisitos para o aplicativo de avaliações.

  1. Criar um .env arquivo com base em .env.sample.

    cp .env.sample .env
    
  2. Execute este comando para obter os valores necessários para AZURE_OPENAI_EVAL_DEPLOYMENT e AZURE_OPENAI_SERVICE no grupo de recursos implantado. Cole esses valores no .env arquivo.

    azd env get-value AZURE_OPENAI_EVAL_DEPLOYMENT
    azd env get-value AZURE_OPENAI_SERVICE
    
  3. Adicione os valores a seguir do aplicativo de chat à sua instância da Pesquisa de IA do Azure para o arquivo .env que você coletou na seção Pré-requisitos.

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    

Usar o Protocolo de Chat de IA da Microsoft para obter informações de configuração

O aplicativo de chat e o aplicativo de avaliações implementam a especificação do Protocolo de Chat de IA da Microsoft, um contrato de API de endpoint de IA de código aberto que é independente de nuvem e linguagem, usado para consumo e avaliação. Quando seus endpoints de cliente e de camada intermediária aderem a essa especificação de API, você pode executar avaliações de maneira consistente em seus back-ends de IA.

  1. Crie um arquivo chamado my_config.json e copie este conteúdo para ele:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment<TIMESTAMP>",
        "target_url": "http://localhost:50505/chat",
        "target_parameters": {
            "overrides": {
                "top": 3,
                "temperature": 0.3,
                "retrieval_mode": "hybrid",
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_refined.txt",
                "seed": 1
            }
        }
    }
    

    O script de avaliação cria a pasta my_results.

    O overrides objeto contém as configurações necessárias para o aplicativo. Cada aplicativo define seu próprio conjunto de propriedades de configuração.

  2. Use a tabela a seguir para entender o significado das propriedades de configurações que são enviadas para o aplicativo de chat.

    Propriedade de configurações Descrição
    semantic_ranker Se deve usar classificador semântico, um modelo que reclassifica os resultados da pesquisa com base na semelhança semântica com a consulta do usuário. Nós o desativamos neste tutorial para reduzir custos.
    retrieval_mode O modo de recuperação a ser usado. O padrão é hybrid.
    temperature A configuração de temperatura do modelo. O padrão é 0.3.
    top O número de resultados de pesquisa a ser retornado. O padrão é 3.
    prompt_template Uma substituição do prompt usado para gerar a resposta com base na pergunta e nos resultados da pesquisa.
    seed O valor semente para todas as chamadas para modelos GPT. A definição de uma semente resulta em resultados mais consistentes entre as avaliações.
  3. Altere o target_url valor para o valor de URI do seu aplicativo de chat, que você reuniu na seção Pré-requisitos . O aplicativo de chat deve estar em conformidade com o protocolo de chat. O URI tem o seguinte formato: https://CHAT-APP-URL/chat. Verifique se o protocolo e a rota chat fazem parte do URI.

Gerar dados de exemplo

Para avaliar novas respostas, elas devem ser comparadas a uma resposta de verdade básica , que é a resposta ideal para uma pergunta específica. Gere perguntas e respostas de documentos armazenados no Azure AI Search para o aplicativo de chat.

  1. Copie a example_input pasta em uma nova pasta chamada my_input.

  2. Em um terminal, execute o seguinte comando para gerar os dados de amostra:

    python -m evaltools generate --output=my_input/qa.jsonl --persource=2 --numquestions=14
    

Os pares de perguntas e respostas são gerados e armazenados em my_input/qa.jsonl (no formato JSONL) como entrada para o avaliador usado na próxima etapa. Para uma avaliação de produção, você geraria mais pares de perguntas e respostas. Mais de 200 são gerados para esse conjunto de dados.

Observação

Apenas algumas perguntas e respostas são geradas por origem para que você possa concluir rapidamente este procedimento. A intenção não é ser uma avaliação de produção, que deveria conter mais perguntas e respostas por fonte.

Execute a primeira avaliação com um prompt refinado

  1. Edite as propriedades do my_config.json arquivo de configuração.

    Propriedade Novo valor
    results_dir my_results/experiment_refined
    prompt_template <READFILE>my_input/prompt_refined.txt

    O prompt refinado é específico sobre o domínio do assunto.

    If there isn't enough information below, say you don't know. Do not generate answers that don't use the sources below. If asking a clarifying question to the user would help, ask the question.
    
    Use clear and concise language and write in a confident yet friendly tone. In your answers, ensure the employee understands how your response connects to the information in the sources and include all citations necessary to help the employee validate the answer provided.
    
    For tabular information, return it as an html table. Do not return markdown format. If the question is not in English, answer in the language used in the question.
    
    Each source has a name followed by a colon and the actual information. Always include the source name for each fact you use in the response. Use square brackets to reference the source, e.g. [info1.txt]. Don't combine sources, list each source separately, e.g. [info1.txt][info2.pdf].
    
  2. Em um terminal, execute o seguinte comando para executar a avaliação:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

    Esse script criou uma pasta de experimento em my_results/ com a avaliação. A pasta contém os resultados da avaliação.

    Nome do arquivo Descrição
    config.json Uma cópia do arquivo de configuração usado para a avaliação.
    evaluate_parameters.json Os parâmetros utilizados para a avaliação. Semelhante a config.json , mas inclui outros metadados, como carimbo de data/hora.
    eval_results.jsonl Cada pergunta e resposta, juntamente com as métricas de GPT para cada par de perguntas e respostas.
    summary.json Os resultados gerais, como as métricas médias do GPT.

Executar a segunda avaliação com um prompt fraco.

  1. Edite as propriedades do my_config.json arquivo de configuração.

    Propriedade Novo valor
    results_dir my_results/experiment_weak
    prompt_template <READFILE>my_input/prompt_weak.txt

    Esse prompt fraco não tem contexto sobre o domínio do assunto.

    You are a helpful assistant.
    
  2. Em um terminal, execute o seguinte comando para executar a avaliação:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

Executar a terceira avaliação com uma temperatura específica

Use um prompt que permita mais criatividade.

  1. Edite as propriedades do my_config.json arquivo de configuração.

    Existente Propriedade Novo valor
    Existente results_dir my_results/experiment_ignoresources_temp09
    Existente prompt_template <READFILE>my_input/prompt_ignoresources.txt
    Nova temperature 0.9

    O temperature padrão é 0.7. Quanto mais alta a temperatura, mais criativas são as respostas.

    O prompt ignore é curto.

    Your job is to answer questions to the best of your ability. You will be given sources but you should IGNORE them. Be creative!
    
  2. O objeto de configuração deve ser semelhante ao exemplo a seguir, exceto que você substituiu results_dir pelo seu caminho:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/prompt_ignoresources_temp09",
        "target_url": "https://YOUR-CHAT-APP/chat",
        "target_parameters": {
            "overrides": {
                "temperature": 0.9,
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_ignoresources.txt"
            }
        }
    }
    
  3. Em um terminal, execute o seguinte comando para executar a avaliação:

    python -m evaltools evaluate --config=my_config.json --numquestions=14
    

Examinar os resultados da avaliação

Você executou três avaliações com base em diferentes prompts e configurações do aplicativo. Os resultados são armazenados na pasta my_results. Revise como os resultados diferem com base nas configurações.

  1. Use a ferramenta de revisão para ver os resultados das avaliações.

    python -m evaltools summary my_results
    
  2. Os resultados se parecem com algo assim:

    Captura de tela que mostra a ferramenta de revisão de avaliações mostrando as três avaliações.

    Cada valor é retornado como um número e uma porcentagem.

  3. Use a tabela a seguir para entender o significado dos valores.

    Valor Descrição
    Fundamentação Verifica o quão bem as respostas do modelo são baseadas em informações factuais e verificáveis. Uma resposta é considerada fundamentada se for factualmente precisa e refletir a realidade.
    Relevância Mede o quanto as respostas do modelo se alinham com o contexto ou o prompt. Uma resposta relevante aborda diretamente a consulta ou a instrução do usuário.
    Coerência Verifica como as respostas do modelo são logicamente consistentes. Uma resposta coerente mantém um fluxo lógico e não se contradiz.
    Citação Indica se a resposta foi retornada no formato solicitado no prompt.
    Comprimento Mede o comprimento da resposta.
  4. Os resultados devem indicar que todas as três avaliações tiveram alta relevância, enquanto as experiment_ignoresources_temp09 tiveram a menor relevância.

  5. Selecione a pasta para ver a configuração da avaliação.

  6. Insira Ctrl + C para sair do aplicativo e retornar ao terminal.

Compare as respostas

Compare as respostas retornadas das avaliações.

  1. Selecione duas das avaliações a serem comparadas e use a mesma ferramenta de revisão para comparar as respostas.

    python -m evaltools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. Revisar os resultados. Seus resultados podem variar.

    Captura de tela que mostra a comparação de respostas de avaliação entre avaliações.

  3. Insira Ctrl + C para sair do aplicativo e retornar ao terminal.

Sugestões para avaliações adicionais

  • Edite os prompts em my_input para personalizar as respostas, como domínio do assunto, comprimento e outros fatores.
  • Edite o arquivo my_config.json para alterar os parâmetros, como temperature e semantic_ranker e execute novamente os experimentos.
  • Compare respostas diferentes para entender como o prompt e a pergunta afetam a qualidade da resposta.
  • Gere um conjunto separado de perguntas e respostas de verdade básicas para cada documento no índice do Azure AI Search. Em seguida, execute novamente as avaliações para ver como as respostas diferem.
  • Altere os prompts para indicar respostas mais curtas ou mais longas, adicionando o requisito ao final do prompt. Um exemplo é Please answer in about 3 sentences..

Limpar recursos e dependências

As etapas a seguir explicam o processo de limpeza dos recursos usados.

Limpar recursos do Azure

Os recursos do Azure criados neste artigo são cobrados para sua assinatura do Azure. Se você não espera precisar desses recursos no futuro, exclua-os para evitar incorrer em mais encargos.

Para excluir os recursos do Azure e remover o código-fonte, execute o seguinte comando da Azure Developer CLI:

azd down --purge

Limpar os codespaces do GitHub e o Visual Studio Code

A exclusão do ambiente GitHub Codespaces garante que você possa maximizar a quantidade de horas gratuitas por núcleo que você tem direito na sua conta.

Importante

Para saber mais sobre os direitos da sua conta do GitHub, confira O GitHub Codespaces inclui mensalmente armazenamento e horas de núcleo.

  1. Faça login no painel de controle do GitHub Codespaces.

  2. Encontre seus codespaces que estão em execução e são originários do repositório GitHub do Azure-Samples/ai-rag-chat-evaluator.

    captura de tela que mostra todos os codespaces em execução, incluindo seu status e modelos.

  3. Abra o menu de contexto do codespace e selecione Excluir.

    Captura de tela que mostra o menu de contexto de um único codespace com a opção Excluir realçada.

Retorne ao artigo sobre o aplicativo de chat para limpar esses recursos.