Оценки — это форма тестирования, которая помогает вам проверить ответы вашего LLM и убедиться, что они соответствуют вашей планке качества.
Firebase Genkit поддерживает сторонние инструменты оценки через плагины в сочетании с мощными функциями наблюдения, которые дают представление о состоянии выполнения ваших приложений на базе LLM. Инструменты Genkit помогают автоматически извлекать данные, включая входные, выходные данные и информацию из промежуточных шагов, для оценки сквозного качества ответов LLM, а также для понимания производительности строительных блоков вашей системы.
Например, если у вас есть поток RAG, Genkit извлечет набор документов, возвращенный средством извлечения, чтобы вы могли оценить качество вашего средства извлечения, пока оно работает в контексте потока, как показано ниже, с точностью Genkit и Показатели релевантности ответа:
import { genkit } from 'genkit';
import { genkitEval, GenkitMetric } from '@genkit-ai/evaluator';
import { vertexAI, textEmbedding004, gemini15Flash } from '@genkit-ai/vertexai';
const ai = genkit({
plugins: [
vertexAI(),
genkitEval({
judge: gemini15Flash,
metrics: [GenkitMetric.FAITHFULNESS, GenkitMetric.ANSWER_RELEVANCY],
embedder: textEmbedding004, // GenkitMetric.ANSWER_RELEVANCY requires an embedder
}),
],
// ...
});
Примечание. Для приведенной выше конфигурации требуется установка пакетов genkit
, @genkit-ai/google-ai
, @genkit-ai/evaluator
и @genkit-ai/vertexai
.
npm install @genkit-ai/evaluator @genkit-ai/vertexai
Начните с определения набора входных данных, которые вы хотите использовать в качестве входного набора данных, называемого testInputs.json
. Этот набор входных данных представляет собой тестовые примеры, которые вы будете использовать для генерации выходных данных для оценки.
["Cheese", "Broccoli", "Spinach and Kale"]
Затем вы можете использовать команду eval:flow
для оценки вашего потока на основе тестовых примеров, представленных в testInputs.json
.
genkit eval:flow menuSuggestionFlow --input testInputs.json
Затем вы можете просмотреть результаты оценки в пользовательском интерфейсе разработчика, выполнив:
genkit start
Затем перейдите к localhost:4000/evaluate
.
Альтернативно вы можете предоставить выходной файл для проверки вывода в файле JSON.
genkit eval:flow menuSuggestionFlow --input testInputs.json --output eval-result.json
Примечание. Ниже вы можете увидеть пример того, как LLM может помочь вам создать тестовые примеры.
Поддерживаемые оценщики
Оценщики Генкита
Genkit включает в себя небольшое количество встроенных оценщиков, вдохновленных RAGAS, которые помогут вам начать работу:
- Верность
- Релевантность ответа
- злонамеренность
Плагины оценщика
Genkit поддерживает дополнительные оценщики через плагины, такие как VertexAI Rapid Evaluators через плагин VertexAI .
Расширенное использование
eval:flow
— это удобный способ быстро оценить поток, но иногда вам может потребоваться больший контроль над этапами оценки. Это может произойти, если вы используете другую платформу и уже имеете некоторый результат, который хотите оценить. Вы можете выполнить все шаги, которые eval:flow
выполняет полувручную.
Вы можете выполнить пакетный запуск потока Genkit и добавить к нему уникальную метку, которая затем будет использоваться для извлечения набора оценочных данных (набор входных, выходных данных и контекстов).
Запустите поток через тестовые входные данные:
genkit flow:batchRun myRagFlow test_inputs.json --output flow_outputs.json --label customLabel
Извлеките данные оценки:
genkit eval:extractData myRagFlow --label customLabel --output customLabel_dataset.json
Экспортированные данные будут выводиться в виде файла JSON для каждого testCase в следующем формате:
[
{
"testCaseId": string,
"input": string,
"output": string,
"context": array of strings,
"traceIds": array of strings,
}
]
Средство извлечения данных автоматически найдет средства извлечения и добавит созданные документы в массив контекстов. По умолчанию eval:run
будет выполняться для всех настроенных оценщиков, и, как и eval:flow
, результаты для eval:run
появятся на странице оценки пользовательского интерфейса разработчика, расположенной по адресу localhost:4000/evaluate
.
Пользовательские экстракторы
Вы также можете предоставить собственные экстракторы для использования в командах eval:extractData
и eval:flow
. Пользовательские экстракторы позволяют переопределить логику извлечения по умолчанию, что дает вам больше возможностей при создании наборов данных и их оценке.
Чтобы настроить пользовательские экстракторы, добавьте файл конфигурации инструментов с именем genkit-tools.conf.js
в корень вашего проекта, если у вас его еще нет.
cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js
В файле конфигурации инструментов добавьте следующий код:
module.exports = {
evaluators: [
{
actionRef: '/flow/myFlow',
extractors: {
context: { outputOf: 'foo-step' },
output: 'bar-step',
},
},
],
};
В этом примере вы настраиваете экстрактор для потока myFlow
. Конфигурация переопределяет экстракторы для полей context
и output
и использует логику по умолчанию для поля input
.
Спецификация экстракторов оценки следующая:
- Поле
evaluators
принимает массив объектов EvaluatorConfig, область действия которых ограниченаflowName
-
extractors
— это объект, который определяет переопределения экстрактора. Текущие поддерживаемые ключи вextractors
:[input, output, context]
. Допустимые типы значений:-
string
— это должно быть имя шага, указанное в виде строки. Выходные данные этого шага извлекаются для этого ключа. -
{ inputOf: string }
или{ outputOf: string }
— эти объекты представляют определенные каналы (входные или выходные) шага. Например,{ inputOf: 'foo-step' }
извлечет ввод шагаfoo-step
для этого ключа. -
(trace) => string;
— Для большей гибкости вы можете предоставить функцию, которая принимает трассировку Genkit и возвращаетstring
, и указать логику извлечения внутри этой функции. Обратитесь кgenkit/genkit-tools/common/src/types/trace.ts
для получения точной схемы TraceData.
-
Примечание. Извлеченные данные для всех этих шагов будут представлять собой строку JSON. Инструмент автоматически анализирует эту строку JSON во время оценки. Если вы предоставляете экстрактор функций, убедитесь, что выходные данные представляют собой действительную строку JSON. Например: "Hello, world!"
недействителен JSON; "\"Hello, world!\""
допустимо.
Работа с существующими наборами данных
Чтобы выполнить оценку уже извлеченного набора данных:
genkit eval:run customLabel_dataset.json
Для вывода в другое место используйте флаг --output
.
genkit eval:flow menuSuggestionFlow --input testInputs.json --output customLabel_evalresult.json
Чтобы запустить подмножество настроенных оценщиков, используйте флаг --evaluators
и укажите список оценщиков, разделенных запятыми, по именам:
genkit eval:run customLabel_dataset.json --evaluators=genkit/faithfulness,genkit/answer_relevancy
Синтез тестовых данных с использованием LLM
Вот пример процесса, в котором PDF-файл используется для генерации возможных вопросов, которые пользователи могут задать по этому поводу.
import { genkit, run, z } from "genkit";
import { googleAI, gemini15Flash } from "@genkit-ai/googleai";
import { chunk } from "llm-chunk";
const ai = genkit({ plugins: [googleAI()] });
export const synthesizeQuestions = ai.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 ai.generate({
model: gemini15Flash,
prompt: {
text: `Generate one question about the text below: ${chunks[i]}`,
},
});
questions.push(qResponse.text);
}
return questions;
}
);
Затем вы можете использовать эту команду для экспорта данных в файл и использования для оценки.
genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json