Introdução à avaliação de respostas em um aplicativo de bate-papo em JavaScript

Este artigo mostra como avaliar as respostas de um aplicativo de bate-papo em relação a um conjunto de respostas corretas ou ideais (conhecidas como verdade básica). Sempre que você alterar seu aplicativo de bate-papo 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ê irá:

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

Descriçã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 Aplicativo do Azure. O aplicativo de bate-papo está em conformidade com o protocolo de bate-papo, que permite que o aplicativo de avaliações seja executado em qualquer aplicativo de bate-papo que esteja em conformidade com o protocolo.
  • Azure AI Search: O aplicativo de bate-papo usa o Azure AI Search para armazenar os dados de seus próprios documentos.
  • Gerador de perguntas de exemplo: Pode gerar um número de perguntas para cada documento, juntamente com a resposta de verdade básica. Quanto mais perguntas, mais longa será a avaliação.
  • O avaliador executa exemplos de perguntas e solicita no aplicativo de bate-papo e retorna os resultados.
  • A ferramenta de revisão permite rever os resultados das avaliações.
  • A ferramenta Diff permite comparar as respostas entre as avaliações.

Pré-requisitos

  • Subscrição do Azure. Crie um gratuitamente

  • Acesso concedido ao Azure OpenAI na subscrição pretendida do Azure.

    Atualmente, o acesso a este serviço é concedido apenas por pedido. Você pode solicitar acesso ao Azure OpenAI preenchendo o formulário em https://aka.ms/oai/access.

  • Conclua o procedimento anterior do aplicativo de chat para implantar o aplicativo de chat no Azure. Este procedimento carrega os dados no recurso Azure AI Search. Este recurso é necessário para que o aplicativo de avaliações funcione. Não conclua a seção Recursos de limpeza do procedimento anterior.

    Você precisará das seguintes informações de recursos do Azure dessa implantação, que são conhecidas como o aplicativo de chat neste artigo:

    • URI da API Web: o URI da API do aplicativo de chat implantado.
    • Azure AI Search. Os seguintes valores são necessários:
      • Nome do recurso: o nome do recurso Azure AI Search.
      • Nome do índice: o nome do índice do Azure AI Search onde seus documentos estão armazenados.
      • Chave de consulta: a chave para consultar o índice de pesquisa.
    • Se você experimentou a autenticação do aplicativo de chat, precisará desabilitar a autenticação do usuário para que o aplicativo de avaliação possa acessar o aplicativo de chat.

    Depois de coletar essas informações, você não precisará usar o ambiente de desenvolvimento de aplicativos de bate-papo novamente. É referido mais adiante neste artigo várias vezes para indicar como o aplicativo de bate-papo é usado pelo aplicativo Avaliações. Não exclua os recursos do aplicativo de bate-papo 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 no GitHub Codespaces (em um navegador) ou localmente usando o Visual Studio Code.

Ambiente de desenvolvimento aberto

Comece agora com um ambiente de desenvolvimento que tenha todas as dependências instaladas para concluir este artigo. Você deve organizar o espaço de trabalho do monitor para que possa ver essa documentação e o ambiente de desenvolvimento ao mesmo tempo.

O GitHub Codespaces executa um contêiner de desenvolvimento gerenciado pelo GitHub com o Visual Studio Code for the Web como interface do usuário. Para o ambiente de desenvolvimento mais simples, use o GitHub Codespaces para que você tenha as ferramentas de desenvolvedor corretas e as dependências pré-instaladas para concluir este artigo.

Importante

Todas as contas do GitHub podem usar o Codespaces por até 60 horas gratuitas por mês com 2 instâncias principais. Para obter mais informações, consulte GitHub Codespaces mensalmente incluído armazenamento e horas principais.

  1. Inicie o processo para criar um novo espaço de código GitHub na main ramificação do Azure-Samples/ai-rag-chat-evaluator repositório GitHub.

  2. Clique com o botão direito do mouse no botão a seguir e selecione Abrir link na nova janela para ter o ambiente de desenvolvimento e a documentação disponíveis ao mesmo tempo.

  3. Na página Criar espaço de código, revise as definições de configuração do espaço de código e selecione Criar novo espaço de código

    Captura de tela da tela de confirmação antes de criar um novo espaço de código.

  4. Aguarde até que o espaço de código inicie. Este processo de arranque pode demorar alguns minutos.

  5. No terminal na parte inferior da tela, entre no Azure com a 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, Azure OpenAI, para o aplicativo de avaliações.

    azd up
    

    Isso não implanta o aplicativo de avaliações, mas cria o recurso OpenAI do Azure com uma implantação GPT-4 necessária para executar as avaliações localmente no ambiente de desenvolvimento.

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

  9. O nome do repositório GitHub é mostrado na barra de pesquisa. Isso ajuda você a distinguir entre este aplicativo de avaliações do aplicativo de bate-papo. Este ai-rag-chat-evaluator repositório é conhecido como o aplicativo Avaliações neste artigo.

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

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

  1. Use o seguinte comando para obter as informações de recurso do aplicativo Avaliações em um .env arquivo:

    azd env get-values > .env
    
  2. Adicione os seguintes valores do aplicativo de chat para sua instância do Azure AI Search ao .env, que você reuniu na seção de pré-requisitos:

    AZURE_SEARCH_SERVICE="<service-name>"
    AZURE_SEARCH_INDEX="<index-name>"
    AZURE_SEARCH_KEY="<query-key>"
    

    O AZURE_SEARCH_KEY valor é a chave de consulta para a instância do Azure AI Search.

  3. Copie o example_config.json arquivo na raiz da pasta do aplicativo Avaliações para um novo arquivo my_config.json.

  4. Substitua o conteúdo existente do my_config.json pelo seguinte conteúdo:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment<TIMESTAMP>",
        "target_url": "http://localhost:50505/chat",
        "target_parameters": {
            "overrides": {
                "semantic_ranker": false,
                "prompt_template": "<READFILE>my_input/prompt_refined.txt"
            }
        }
    }
    
  5. Altere o target_url para o valor de URI do seu aplicativo de chat, que você reuniu na seção de pré-requisitos. O aplicativo de bate-papo deve estar em conformidade com o protocolo de bate-papo. O URI tem o seguinte formato https://CHAT-APP-URL/chat. Verifique se o protocolo e a chat rota fazem parte do URI.

Gerar dados de exemplo

Para avaliar novas respostas, elas devem ser comparadas a uma resposta de "verdade fundamental", que é a resposta ideal para uma determinada pergunta. Gere perguntas e respostas a partir de documentos armazenados na Pesquisa de IA do Azure para a aplicação de chat.

  1. Copie a example_input pasta para uma nova pasta com omy_input nome.

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

    python3 -m scripts generate --output=my_input/qa.jsonl --numquestions=14 --persource=2
    

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

Nota

O pequeno número de perguntas e respostas por fonte destina-se a permitir que você conclua rapidamente este procedimento. Não pretende ser uma avaliação de produção que deve ter 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:

    • Altere results_dir para incluir o nome do prompt: my_results/experiment_refined.
    • Mude prompt_template para: <READFILE>my_input/experiment_refined.txt para usar o modelo de prompt refinado na avaliação.

    O prompt refinado é muito 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 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:

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

    Isso criou uma nova pasta de experimento com my_results a avaliação. A pasta contém os resultados da avaliação, incluindo:

    • eval_results.jsonl: Cada pergunta e resposta, juntamente com as métricas GPT para cada par de QA.
    • summary.json: Os resultados gerais, como as métricas médias de GPT.

Execute a segunda avaliação com um prompt fraco

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

    • Alterar results_dir para: my_results/experiment_weak
    • Mude prompt_template para: <READFILE>my_input/prompt_weak.txt para usar o modelo de prompt fraco na próxima avaliação.

    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:

    python3 -m scripts 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:

    • Alterar results_dir para: my_results/experiment_ignoresources_temp09
    • Alterar prompt_template para: <READFILE>my_input/prompt_ignoresources.txt
    • Adicione uma nova substituição, "temperature": 0.9 - a temperatura padrão é 0,7. Quanto maior a temperatura, mais criativas são as respostas.

    O prompt de ignorar é 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 config deve gostar do seguinte, exceto usar o seu próprio results_dir:

    {
        "testdata_path": "my_input/qa.jsonl",
        "results_dir": "my_results/experiment_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:

    python3 -m scripts evaluate --config=my_config.json --numquestions=14
    

Rever os resultados da avaliação

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

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

    python3 -m review_tools summary my_results
    
  2. Os resultados são parecidos com:

    Captura de tela da 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 Description
    Fundamentação Isto refere-se à forma como as respostas do modelo se baseiam em informações factuais e verificáveis. Uma resposta é considerada fundamentada se for factualmente precisa e refletir a realidade.
    Relevância Isso mede o quanto as respostas do modelo se alinham com o contexto ou o prompt. Uma resposta relevante aborda diretamente a consulta ou instrução do usuário.
    Coerência Isto refere-se à consistência lógica das respostas do modelo. Uma resposta coerente mantém um fluxo lógico e não se contradiz.
    Citação Isso indica se a resposta foi retornada no formato solicitado no prompt.
    Duração Isto mede a duração da resposta.
  4. Os resultados devem indicar que todas as 3 avaliações tiveram alta relevância, enquanto a experiment_ignoresources_temp09 menor relevância.

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

  6. Digite Ctrl + C, saia do aplicativo e retorne ao terminal.

Compare as respostas

Compare as respostas retornadas das avaliações.

  1. Selecione duas das avaliações para comparar e, em seguida, use a mesma ferramenta de revisão para comparar as respostas:

    python3 -m review_tools diff my_results/experiment_refined my_results/experiment_ignoresources_temp09
    
  2. Reveja os resultados.

    Captura de ecrã da comparação das respostas da avaliação entre avaliações.

  3. Digite Ctrl + C, saia do aplicativo e retorne ao terminal.

Sugestões para avaliações posteriores

  • Edite os prompts para my_input personalizar as respostas, como domínio do assunto, comprimento e outros fatores.
  • Edite o my_config.json arquivo para alterar os parâmetros, como temperature, e semantic_ranker execute experimentos novamente.
  • Compare diferentes respostas para entender como o prompt e a pergunta afetam a qualidade da resposta.
  • Gere um conjunto separado de perguntas e fundamente respostas verdadeiras para cada documento no índice 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. Por exemplo, Please answer in about 3 sentences.

Clean up resources (Limpar recursos)

Limpar recursos do Azure

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

Execute o seguinte comando da CLI do Desenvolvedor do Azure para excluir os recursos do Azure e remover o código-fonte:

azd down --purge

Limpar espaços de código do GitHub

Excluir o ambiente do GitHub Codespaces garante que você possa maximizar a quantidade de direitos de horas gratuitas por núcleo que você obtém para sua conta.

Importante

Para obter mais informações sobre os direitos da sua conta do GitHub, consulte Codespaces do GitHub mensalmente incluídos armazenamento e horas principais.

  1. Entre no painel do GitHub Codespaces (https://github.com/codespaces).

  2. Localize seus Codespaces atualmente em execução provenientes do Azure-Samples/ai-rag-chat-evaluator repositório GitHub.

    Captura de tela de todos os Codespaces em execução, incluindo seu status e modelos.

  3. Abra o menu de contexto do espaço de código e selecione Excluir.

    Captura de tela do menu de contexto para um único espaço de código com a opção de exclusão realçada.

Volte ao artigo do aplicativo de bate-papo para limpar esses recursos.

Próximos passos