Partilhar via


Personalize o fluxo e as métricas de avaliação

Os fluxos de avaliação são tipos especiais de fluxos que avaliam até que ponto os resultados de uma corrida se alinham com critérios e objetivos específicos através do cálculo de métricas.

No fluxo de prompt, você pode personalizar ou criar seu próprio fluxo de avaliação e métricas adaptadas às suas tarefas e objetivos e, em seguida, usá-lo para avaliar outros fluxos. Este documento você aprenderá:

  • Compreender a avaliação em fluxo imediato
    • Entradas
    • Registro de Saídas e Métricas
  • Como desenvolver um fluxo de avaliação
  • Como usar um fluxo de avaliação personalizado na execução em lote

Compreender a avaliação em fluxo imediato

No fluxo de prompt, um fluxo é uma sequência de nós que processam uma entrada e geram uma saída. Os fluxos de avaliação, da mesma forma, podem pegar entradas necessárias e produzir saídas correspondentes, que geralmente são as pontuações ou métricas. Os conceitos de fluxos de avaliação são semelhantes aos dos fluxos padrão, mas existem algumas diferenças na experiência de criação e na forma como são usados.

Algumas características especiais dos fluxos de avaliação são:

  • Eles geralmente são executados após a execução para serem testados, recebendo suas saídas. Ele usa as saídas para calcular as pontuações e métricas. As saídas de um fluxo de avaliação são os resultados que medem o desempenho do fluxo que está sendo testado.
  • Eles podem ter um nó de agregação que calcula o desempenho geral do fluxo que está sendo testado no conjunto de dados de teste.
  • Eles podem registrar métricas usando log_metric() a função.

Apresentaremos como as entradas e saídas devem ser definidas no desenvolvimento de métodos de avaliação.

Entradas

Os fluxos de avaliação calculam métricas ou pontuações para um lote de fluxo executado com base em um conjunto de dados. Para fazer isso, eles precisam absorver as saídas da execução que está sendo testada. Você pode definir as entradas de um fluxo de avaliação da mesma forma que definir as entradas de um fluxo padrão.

Um fluxo de avaliação é executado após outra execução para avaliar até que ponto os resultados dessa execução estão alinhados com critérios e objetivos específicos. Portanto, a avaliação recebe os resultados gerados a partir dessa execução.

Por exemplo, se o fluxo que está sendo testado for um fluxo QnA que gera respostas com base em uma pergunta, você pode nomear uma entrada da sua avaliação como answer. Se o fluxo que está sendo testado for um fluxo de classificação que classifica um texto em uma categoria, você pode nomear uma entrada da sua avaliação como category.

Outros insumos, como ground truth também podem ser necessários. Por exemplo, se você quiser calcular a precisão de um fluxo de classificação, precisará fornecer a coluna no conjunto de dados como a category verdade básica. Se quiser calcular a precisão de um fluxo QnA, você precisa fornecer a coluna no conjunto de dados como a answer verdade básica.

Por padrão, a avaliação usa o mesmo conjunto de dados que o conjunto de dados de teste fornecido para a execução testada. No entanto, se os rótulos correspondentes ou os valores de verdade do terreno de destino estiverem em um conjunto de dados diferente, você poderá alternar facilmente para esse conjunto.

Algumas outras entradas podem ser necessárias para calcular as métricas, como question e context no cenário QnA ou RAG. Você pode definir essas entradas da mesma forma que definir as entradas de um fluxo padrão.

Descrição de entrada

Para lembrar quais entradas são necessárias para calcular métricas, você pode adicionar uma descrição para cada entrada necessária. As descrições são exibidas ao mapear as fontes no envio de execução em lote.

Screenshot of evaluation input mapping with the answers description highlighted.

Para adicionar descrições para cada entrada, selecione Mostrar descrição na seção de entrada ao desenvolver seu método de avaliação. E você pode selecionar "Ocultar descrição" para ocultar a descrição.

Screenshot of Classification Accuracy Evaluation with hide description highlighted.

Em seguida, esta descrição é exibida ao usar esse método de avaliação no envio de execução em lote.

Saídas e métricas

Os outputs de uma avaliação são os resultados que medem o desempenho do fluxo que está a ser testado. A saída geralmente contém métricas, como pontuações, e também pode incluir texto para raciocínio e sugestões.

Resultados da avaliação — pontuações ao nível da instância

No fluxo de prompt, o fluxo processa uma linha de dados de cada vez e gera um registro de saída. Da mesma forma, na maioria dos casos de avaliação, há uma pontuação para cada saída, permitindo que você verifique como o fluxo se comporta em cada dado individual.

O fluxo de avaliação pode calcular pontuações para cada dado e você pode registrar as pontuações para cada amostra de dados como saídas de fluxo, definindo-as na seção de saída do fluxo de avaliação. Essa experiência de criação é o mesmo que definir uma saída de fluxo padrão.

Screenshot of the outputs section showing a name and value.

Você pode visualizar as pontuações na guia Visão geral-saída> quando esse método de avaliação é usado para avaliar outro fluxo. Este processo é o mesmo que verificar as saídas de execução em lote de um fluxo padrão. A pontuação de nível de instância é anexada à saída do fluxo que está sendo testado.

Registro de métricas e nó de agregação

Além disso, também é importante fornecer uma avaliação geral para a corrida. Para distinguir da pontuação individual de avaliação de cada saída, chamamos os valores para avaliar o desempenho geral de uma execução como "métricas".

Para calcular o valor geral da avaliação com base em cada pontuação individual, você pode verificar a "Agregação" de um nó Python em um fluxo de avaliação para transformá-lo em um nó "reduzir", permitindo que o nó receba as entradas como uma lista e as processe em lote.

Screenshot of the Python node heading pointing to an unchecked checked box.

Desta forma, você pode calcular e processar todas as pontuações de cada saída de fluxo e calcular um resultado geral para cada saída de pontuação. Por exemplo, se você quiser calcular a precisão de um fluxo de classificação, poderá calcular a precisão de cada saída de pontuação e, em seguida, calcular a precisão média de todas as saídas de pontuação. Em seguida, você pode registrar a precisão média como uma métrica usando promptflow_sdk.log_metrics(). As métricas devem ser numéricas (float/int). Não há suporte para o registro de métricas de tipo de cadeia de caracteres.

O trecho de código a seguir é um exemplo de cálculo da precisão geral pela média da pontuação de precisão (grade) de cada dado. A precisão geral é registrada como uma métrica usando promptflow_sdk.log_metrics().

from typing import List
from promptflow import tool, log_metric

@tool
def calculate_accuracy(grades: List[str]): # Receive a list of grades from a previous node
    # calculate accuracy
    accuracy = round((grades.count("Correct") / len(grades)), 2)
    log_metric("accuracy", accuracy)

    return accuracy

Como você chamou essa função no nó Python, você não precisa atribuí-la em nenhum outro lugar e pode visualizar as métricas mais tarde. Quando esse método de avaliação é usado em uma execução em lote, as métricas que indicam o desempenho geral podem ser visualizadas na guia Visão geral-Métricas>.

Screenshot of the metrics tab that shows the metrics logged by log metric.

Começar a desenvolver um método de avaliação

Existem duas formas de desenvolver os seus próprios métodos de avaliação:

  • Crie um novo fluxo de avaliação a partir do zero: desenvolva um novo método de avaliação a partir do zero. Na página inicial da guia fluxo de prompt, na seção "Criar por tipo", você pode escolher "Fluxo de avaliação" e ver um modelo de fluxo de avaliação.

Screenshot of create a new evaluation flow from scratch.

  • Personalizar um fluxo de avaliação interno: modifique um fluxo de avaliação interno. Encontre o fluxo de avaliação embutido no assistente de criação de fluxo - galeria de fluxo, selecione "Clone" para fazer a personalização. Em seguida, você pode ver e verificar a lógica e o fluxo das avaliações internas e, em seguida, modificar o fluxo. Dessa forma, você não começa desde o início, mas uma amostra para você usar para sua personalização.

Screenshot of cloning a built-in evaluation flow.

Calcular pontuações para cada dado

Como mencionado, a avaliação é executada para calcular pontuações e métricas com base em um fluxo executado em um conjunto de dados. Portanto, o primeiro passo nos fluxos de avaliação é calcular as pontuações para cada produto individual.

Tomemos o fluxo de avaliação embutido como exemplo, a pontuaçãograde, que mede a precisão de cada saída gerada pelo fluxo Classification Accuracy Evaluation até sua verdade de solo correspondente, é calculada em grade nó. Se você criar um fluxo de avaliação e editar do zero ao criar por tipo, essa pontuação será calculada no line_process nó no modelo. Você também pode substituir o nó python por um nó LLM para usar LLM para calcular a pontuação ou usar vários nós para executar o line_process cálculo.

Screenshot of line process node in the template.

Em seguida, você precisa especificar a saída dos nós como as saídas do fluxo de avaliação, o que indica que as saídas são as pontuações calculadas para cada amostra de dados. Você também pode gerar raciocínio como informações adicionais, e é a mesma experiência na definição de saídas no fluxo padrão.

Calcula e registra métricas

A segunda etapa da avaliação é calcular métricas gerais para avaliar a corrida. Como mencionado, as métricas são calculadas em um nó Python definido como Aggregation. Esse nó recebe as pontuações calculadas no nó anterior e organiza a pontuação de cada amostra de dados em uma lista e, em seguida, calcula-as juntas de cada vez.

Se você criar e editar do zero ao criar por tipo, essa pontuação será calculada no aggregate nó. O trecho de código é o modelo de um nó de agregação.


from typing import List
from promptflow import tool

@tool
def aggregate(processed_results: List[str]):
    """
    This tool aggregates the processed result of all lines and log metric.
    :param processed_results: List of the output of line_process node.
    """
    # Add your aggregation logic here
    aggregated_results = {}

    # Log metric
    # from promptflow import log_metric
    # log_metric(key="<my-metric-name>", value=aggregated_results["<my-metric-name>"])

    return aggregated_results

Você pode usar sua própria lógica de agregação, como calcular média, valor médio ou desvio padrão das pontuações.

Em seguida, você precisa registrar as métricas com promptflow.logmetrics() a função. Você pode registrar várias métricas em um único fluxo de avaliação. As métricas devem ser numéricas (float/int).

Use um fluxo de avaliação personalizado

Após a criação de seu próprio fluxo de avaliação e métricas, você pode usar esse fluxo para avaliar o desempenho do seu fluxo padrão.

  1. Primeiro, comece a partir da página de criação de fluxo na qual você deseja avaliar. Por exemplo, um fluxo de QnA que você ainda sabe como ele funciona em um grande conjunto de dados e deseja testar. Clique no Evaluate botão e escolha Custom evaluation.

    Screenshot of evaluation button.

  2. Em seguida, semelhante às etapas de enviar uma execução em lote, conforme mencionado em Enviar execução em lote e avaliar um fluxo no fluxo de prompt, siga as primeiras etapas para preparar o conjunto de dados para executar o fluxo.

  3. Em seguida, na Evaluation settings - Select evaluation etapa, juntamente com as avaliações integradas, as avaliações personalizadas também estão disponíveis para seleção. Isso lista todos os fluxos de avaliação na lista de fluxos que você criou, clonou ou personalizou. Os fluxos de avaliação criados por outras pessoas no mesmo projeto não aparecerão nesta secção.

    Screenshot of selecting customized evaluation.

  4. Em seguida, na Evaluation settings - Configure evaluation etapa, você precisa especificar as fontes dos dados de entrada que são necessários para o método de avaliação. Por exemplo, a coluna verdade básica pode vir de um conjunto de dados.

    Para executar uma avaliação, você pode indicar as fontes dessas entradas necessárias na seção "mapeamento de entrada" ao enviar uma avaliação. Esse processo é o mesmo que a configuração mencionada em Enviar execução em lote e avaliar um fluxo no fluxo de prompt.

    • Se a fonte de dados for da sua saída de execução, a fonte será indicada como ${run.output.[OutputName]}
    • Se a fonte de dados for do seu conjunto de dados de teste, a fonte será indicada como ${data.[ColumnName]}

    Screenshot of evaluation input mapping.

    Nota

    Se sua avaliação não exigir dados do conjunto de dados, você não precisará fazer referência a nenhuma coluna do conjunto de dados na seção de mapeamento de entrada, indicando que a seleção do conjunto de dados é uma configuração opcional. A seleção do conjunto de dados não afetará o resultado da avaliação.

  5. Quando esse método de avaliação é usado para avaliar outro fluxo, a pontuação no nível da instância pode ser visualizada na guia Visão geral ->Saída .

    Screenshot of the output tab with evaluation result appended and highlighted.

Próximos passos