As avaliações são uma forma de teste que ajuda a validar as respostas do LLM e garantir que elas atendam ao seu padrão de qualidade.
O Firebase Genkit é compatível com ferramentas de avaliação de terceiros por meio de plug-ins, combinado com recursos avançados de observabilidade que fornecem informações sobre o estado do ambiente de execução dos seus aplicativos com LLM. As ferramentas do Genkit ajudam a extrair automaticamente dados, incluindo entradas, saídas e informações de etapas intermediárias, para avaliar a qualidade de ponta a ponta das respostas do LLM, bem como entender o desempenho dos elementos básicos do seu sistema.
Por exemplo, se você tiver um fluxo RAG, o Genkit vai extrair o conjunto de documentos que foram retornados pelo recuperador para que você possa avaliar o qualidade do seu retriever enquanto ele é executado no contexto do fluxo, conforme mostrado abaixo, com a fidelidade do Genkit e as métricas de relevância de resposta:
import { GenkitMetric, genkitEval } from '@genkit-ai/evaluator';
import { textEmbeddingGecko } from '@genkit-ai/vertexai';
export default configureGenkit({
plugins: [
genkitEval({
judge: gemini15Flash,
metrics: [GenkitMetric.FAITHFULNESS, GenkitMetric.ANSWER_RELEVANCY],
embedder: textEmbeddingGecko, // GenkitMetric.ANSWER_RELEVANCY requires an embedder
}),
],
// ...
});
npm install @genkit-ai/evaluator @genkit-ai/vertexai
Comece definindo um conjunto de entradas que você quer usar como um conjunto de dados de entrada chamado testInputs.json
. Esse conjunto de dados de entrada representa os casos de teste que você vai usar para gerar saídas para avaliação.
["Cheese", "Broccoli", "Spinach and Kale"]
Use o comando eval:flow
para avaliar seu fluxo em relação ao teste.
casos fornecidos em testInputs.json
.
genkit eval:flow menuSuggestionFlow --input testInputs.json
Veja os resultados da avaliação na interface do desenvolvedor executando:
genkit start
Em seguida, navegue até localhost:4000/evaluate
.
Como alternativa, forneça um arquivo de saída para inspecionar a saída em um arquivo json.
genkit eval:flow menuSuggestionFlow --input testInputs.json --output eval-result.json
Avaliadores aceitos
Avaliadores do Genkit
O Genkit tem um pequeno número de avaliadores nativos, inspirados no RAGAS, para ajudar você a começar:
- Lealdade
- Relevância da resposta
- Mal-estar
Plug-ins do Evaluator
O Genkit oferece suporte a avaliadores adicionais por meio de plug-ins:
- Avaliadores do Vertex AI Rapid usando o plug-in da Vertex AI.
- Avaliação de critérios do LangChain pelo plug-in LangChain.
Uso avançado
eval:flow
é uma maneira conveniente de avaliar rapidamente o fluxo, mas, às vezes, você
pode precisar de mais controle sobre as etapas de avaliação. Isso pode ocorrer se você estiver usando uma
e já tem algum resultado que você gostaria de avaliar. Você pode realizar todas
a etapa que eval:flow
executa semimanualmente.
É possível executar em lote seu fluxo do Genkit e adicionar um rótulo exclusivo à execução, o que será usado para extrair um conjunto de dados de avaliação (um conjunto de entradas, saídas e contextos).
Execute o fluxo nas entradas de teste:
genkit flow:batchRun myRagFlow test_inputs.json --output flow_outputs.json --label customLabel
Extraia os dados de avaliação:
genkit eval:extractData myRagFlow --label customLabel --output customLabel_dataset.json
Os dados exportados serão gerados como um arquivo json com cada testCase no seguinte formato:
[
{
"testCaseId": string,
"input": string,
"output": string,
"context": array of strings,
"traceIds": array of strings,
}
]
O extrator de dados localiza automaticamente os recuperadores e adiciona os documentos produzidos à matriz de contexto. Por padrão, eval:run
será executado em todos os avaliadores configurados e, assim como eval:flow
, os resultados de eval:run
serão exibidos na página de avaliação da interface do desenvolvedor, localizada em localhost:4000/evaluate
.
Extratores personalizados
Você também pode fornecer extratores personalizados para uso nos comandos eval:extractData
e eval:flow
. Os extratores personalizados permitem substituir a lógica de extração padrão, oferecendo mais poder para criar e avaliar conjuntos de dados.
Para configurar extratores personalizados, adicione um arquivo de configuração de ferramentas chamado genkit-tools.conf.js
à raiz do projeto, se ainda não tiver um.
cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js
No arquivo de configuração das ferramentas, adicione o seguinte código:
module.exports = {
evaluators: [
{
flowName: 'myFlow',
extractors: {
context: { outputOf: 'foo-step' },
output: 'bar-step',
},
},
],
};
Neste exemplo, você configura um extrator para o fluxo de myFlow
. A configuração substitui os extratores para os campos context
e output
e usou a lógica padrão para o campo input
.
A especificação dos extratores de avaliação é a seguinte:
- O campo
evaluators
aceita uma matriz de objetos EvaluatorConfig, com escopoflowName
extractors
é um objeto que especifica as substituições do extrator. As chaves atualmente aceitas emextractors
são[input, output, context]
. Os tipos de valor aceitáveis são os seguintes:string
: precisa ser o nome da etapa, especificado como um stirng. A saída desta etapa é extraída para essa chave.{ inputOf: string }
ou{ outputOf: string }
: esses objetos representam canais específicos (entrada ou saída) de uma etapa. Por exemplo,{ inputOf: 'foo-step' }
extrairia a entrada da etapafoo-step
para essa chave.(trace) => string;
: para mais flexibilidade, você pode fornecer uma função que aceite um rastro do Genkit e retorne umstring
, além de especificar a lógica de extração dentro dessa função. Consultegenkit/genkit-tools/common/src/types/trace.ts
para saber o esquema exato do TraceData.
Como executar em conjuntos de dados atuais
Para executar uma avaliação em um conjunto de dados já extraído:
genkit eval:run customLabel_dataset.json
Para enviar para um local diferente, use a sinalização --output
.
genkit eval:flow menuSuggestionFlow --input testInputs.json --output customLabel_evalresult.json
Para executar em um subconjunto dos avaliadores configurados, use a flag --evaluators
e forneça uma lista separada por vírgulas de avaliadores por nome:
genkit eval:run customLabel_dataset.json --evaluators=genkit/faithfulness,genkit/answer_relevancy
Sintetizar dados de teste usando um LLM
Veja um exemplo de fluxo que usa um arquivo PDF para gerar possíveis perguntas os usuários podem estar perguntando sobre isso.
export const synthesizeQuestions = defineFlow(
{
name: 'synthesizeQuestions',
inputSchema: z.string().describe('PDF file path'),
outputSchema: z.array(z.string()),
},
async (filePath) => {
filePath = path.resolve(filePath);
const pdfTxt = await run('extract-text', () => extractText(filePath));
const chunks = await run('chunk-it', async () =>
chunk(pdfTxt, chunkingConfig)
);
const questions: string[] = [];
for (var i = 0; i < chunks.length; i++) {
const qResponse = await generate({
model: gemini15Flash,
prompt: {
text: `Generate one question about the text below: ${chunks[i]}`,
},
});
questions.push(qResponse.text());
}
return questions;
}
);
Você pode então usar este comando para exportar os dados para um arquivo e usar para e avaliação de desempenho.
genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json