Introdução à avaliação de respostas em um aplicativo de chat no JavaScript
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ê vai:
- 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 amostra 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 regulares e fáceis de implantar que ajudam a garantir um ponto de partida de alta qualidade para os 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 Aplicativo do Azure.
- O Protocolo de Chat de IA da Microsoft fornece contratos de API padronizados em soluções e linguagens 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: pode gerar muitas perguntas para cada documento, juntamente com a resposta da verdade. Quanto mais perguntas, mais longa será a avaliação.
- O avaliador executa exemplos de perguntas e prompts no aplicativo de chat e retorna os resultados.
- A ferramenta de revisão permite que você revise os resultados das avaliações.
- a ferramenta de comparação permite comparar as respostas entre as avaliações.
Quando você implanta essa avaliação no Azure, o ponto de extremidade do OpenAI do Azure é criado para o modelo GPT-4
com sua própria capacidade. Ao avaliar aplicativos de chat, é importante que o avaliador tenha seu próprio recurso OpenAI usando GPT-4
com sua própria capacidade.
Pré-requisitos
Assinatura do Azure. Crie um gratuitamente
Implantar um aplicativo de chat.
Esses aplicativos de chat carregam os dados no recurso Pesquisa de IA do 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 nome do recurso Pesquisa de IA do Azure, relatado como
Search service
durante o processoazd up
. - Nome do índice: o nome do índice da Pesquisa de IA do Azure em que seus documentos estão armazenados. Isso pode ser encontrado no portal do Azure para o serviço Pesquisa.
- Nome do recurso: o nome do nome do recurso Pesquisa de IA do Azure, relatado como
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 de coletar essas informações, você não precisará usar o ambiente de desenvolvimento do aplicativo de chat novamente. Ele é mencionado posteriormente neste artigo várias vezes para indicar como o aplicativo de chat é usado pelo aplicativo Avaliações. Não exclua os recursos do aplicativo de chat até concluir todo o procedimento neste artigo.
- URI da API de Chat: o ponto de extremidade de back-end do serviço mostrado no final do processo
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.
- Conta do GitHub
Abrir o ambiente de desenvolvimento
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.
Este artigo foi testado com a região switzerlandnorth
para a implantação de avaliação.
O GitHub Codespaces executa um contêiner de desenvolvimento gerenciado pelo GitHub com o Visual Studio Code para Web como interface do usuário. Para o ambiente de desenvolvimento mais simples, use os Codespaces do GitHub para que você tenha as ferramentas e dependências de desenvolvedor corretas pré-instaladas para concluir este artigo.
Importante
Todas as contas do GitHub podem usar Codespaces por até 60 horas gratuitas por mês com 2 instâncias principais. Para saber mais, confira Armazenamento e horas por núcleo incluídos mensalmente no GitHub Codespaces.
Inicie o processo para criar um GitHub Codespace no branch
main
do repositório GitHubAzure-Samples/ai-rag-chat-evaluator
.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 na nova janela.
Na página Criar codespace, analise as definições de configuração do codespace e selecione Criar codespace.
Aguarde até que o codespace seja iniciado. Esse processo de inicialização pode levar alguns minutos.
No terminal na parte inferior da tela, entre no Azure com o Azure Developer CLI.
azd auth login --use-device-code
Copie o código do terminal e cole-o em um navegador. Siga as instruções para autenticar com sua conta do Azure.
Provisione o recurso do Azure necessário, o OpenAI do Azure, para o aplicativo de avaliações.
azd up
Esse
AZD command
não implanta o aplicativo de avaliações, mas cria o recurso OpenAI do Azure com uma implantação necessáriaGPT-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 é mostrado na barra de pesquisa. Esse indicador visual ajuda a distinguir o aplicativo de avaliações do aplicativo de chat. Esse repositório
ai-rag-chat-evaluator
é chamado de 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 Pré-requisitos para o aplicativo de avaliações.
Crie um
.env
arquivo com base em.env.sample
:cp .env.sample .env
Execute estes comandos para obter os valores necessários de e
AZURE_OPENAI_EVAL_DEPLOYMENT
paraAZURE_OPENAI_SERVICE
o grupo de recursos implantado e cole esses valores no.env
arquivo:azd env get-value AZURE_OPENAI_EVAL_DEPLOYMENT azd env get-value AZURE_OPENAI_SERVICE
Adicione os valores a seguir do aplicativo de chat à sua instância da Pesquisa de IA do Azure para o
.env
, que você coletou na seção de 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 o Microsoft AI Chat Protocol specification
, um contrato de API de endpoint de IA independente de nuvem e de linguagem de software livre usado para consumo e avaliação. Quando o cliente e os pontos de extremidade de camada intermediária aderem a essa especificação de API, você pode consumir e executar avaliações de forma consistente em seus back-ends de IA.
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 objeto
overrides
contém todas as definições de configuração necessárias para o aplicativo. Cada aplicativo define seu próprio conjunto de propriedades de configurações.Use a tabela a seguir para entender o significado das propriedades de configurações enviadas ao aplicativo de chat:
Propriedade Settings Descrição semantic_ranker Se o classificador semântico deve ser usado, 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
.temperatura 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 de semente para todas as chamadas para modelos GPT. A definição de uma semente resulta em resultados mais consistentes entre as avaliações. Altere o
target_url
para o valor de URI do seu aplicativo de chat, que você coletou na seção de pré-requisitos. O aplicativo de chat deve estar em conformidade com o protocolo de chat. O URI tem o formatohttps://CHAT-APP-URL/chat
. Verifique se o protocolo e a rotachat
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 pergunta específica. Gere perguntas e respostas de documentos armazenados na Pesquisa de IA do Azure para o aplicativo de chat.
Copie a pasta
example_input
para uma nova pasta chamadamy_input
.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 pergunta/resposta são gerados e armazenados em 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 controle de qualidade, mais de 200 para esse conjunto de dados.
Observação
O pequeno número de perguntas e respostas por fonte destina-se a permitir que você conclua rapidamente este procedimento. Não é para ser uma avaliação de produção que deve ter mais perguntas e respostas por fonte.
Executar a primeira avaliação com um prompt refinado
Edite as propriedades do arquivo de configuração
my_config.json
: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 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].
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, incluindo: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. Muito semelhante, config.json
mas inclui metadados adicionais, como carimbo de data/hora.eval_results.jsonl
Cada pergunta e resposta, juntamente com as métricas GPT para cada par de controle de qualidade. summary.json
Os resultados gerais, como as métricas médias do GPT.
Executar a segunda avaliação com um prompt fraco
Edite as propriedades do arquivo de configuração
my_config.json
: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.
Em um terminal, execute o seguinte comando para executar a avaliação:
python -m evaltools evaluate --config=my_config.json --numquestions=14
Execute a terceira avaliação com uma temperatura específica
Use um prompt que permita mais criatividade.
Edite as propriedades do arquivo de configuração
my_config.json
:Existente Propriedade Novo valor Existente results_dir my_results/experiment_ignoresources_temp09
Existente prompt_template <READFILE>my_input/prompt_ignoresources.txt
Novo temperatura 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!
O objeto de configuração deve ter a aparência a seguir, mas substitua
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" } } }
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.
Use a ferramenta de revisão para ver os resultados das avaliações:
python -m evaltools summary my_results
Os resultados se parecem com algo assim:
Cada valor é retornado como um número e uma porcentagem.
Use a tabela a seguir para entender o significado dos valores.
Valor Descrição Fundamentação Isso se refere a 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 Isso 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 Isso se refere a quão logicamente consistentes são as 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. Length Isso mede a duração da resposta. Os resultados devem indicar que todas as três avaliações tiveram alta relevância, enquanto
experiment_ignoresources_temp09
tinha a menor relevância.Selecione a pasta para ver a configuração da avaliação.
Insira Ctrl + C para sair do aplicativo e retornar ao terminal.
Compare as respostas
Compare as respostas retornadas das avaliações.
Selecione duas das avaliações para comparar 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
Revise os resultados. Seus resultados podem variar.
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, comotemperature
esemantic_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 verdadeiras para cada documento no índice da Pesquisa de IA do Azure. 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.
.
Limpar recursos e dependências
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 GitHub Codespaces
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.
Entre no painel do GitHub Codespaces (https://github.com/codespaces).
Localize seus Codespaces atualmente em execução, originados do repositório
Azure-Samples/ai-rag-chat-evaluator
do GitHub.Abra o menu de contexto do codespace e selecione Excluir.
Retorne ao artigo sobre o aplicativo de chat para limpar esses recursos.
Próximas etapas
- Repositório de avaliações
- Repositório GitHub do aplicativo de chat empresarial
- Criar um aplicativo de chat com a arquitetura de solução de práticas recomendadas do Azure OpenAI
- Controle de acesso em aplicativos da IA Generativa com a Pesquisa de IA do Azure
- Criar uma solução OpenAI pronta para empresas com o Gerenciamento de API do Azure
- Superando a busca em vetores com recursos de recuperação e classificação híbridas