Оценки — это форма тестирования, которая помогает вам проверить ответы вашего LLM и убедиться, что они соответствуют вашей планке качества.
Firebase Genkit поддерживает сторонние инструменты оценки через плагины в сочетании с мощными функциями наблюдения, которые дают представление о состоянии выполнения ваших приложений на базе LLM. Инструменты Genkit помогают автоматически извлекать данные, включая входные, выходные данные и информацию из промежуточных шагов, для оценки сквозного качества ответов LLM, а также для понимания производительности строительных блоков вашей системы.
Например, если у вас есть поток RAG, Genkit извлечет набор документов, возвращенный средством извлечения, чтобы вы могли оценить качество вашего средства извлечения, пока оно работает в контексте потока, как показано ниже, с точностью Genkit и Показатели релевантности ответа:
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
Начните с определения набора входных данных, которые вы хотите использовать в качестве входного набора данных, называемого 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
Поддерживаемые оценщики
Оценщики Генкита
Genkit включает в себя небольшое количество встроенных оценщиков, вдохновленных RAGAS, которые помогут вам начать работу:
- Верность
- Релевантность ответа
- злонамеренность
Плагины оценщика
Genkit поддерживает дополнительные оценщики через плагины:
- Быстрые оценщики VertexAI через плагин VertexAI .
- Оценка критериев LangChain через плагин LangChain .
Расширенное использование
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: [
{
flowName: '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.
-
Работа с существующими наборами данных
Чтобы выполнить оценку уже извлеченного набора данных:
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-файл используется для генерации возможных вопросов, которые пользователи могут задать по этому поводу.
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;
}
);
Затем вы можете использовать эту команду для экспорта данных в файл и использования для оценки.
genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json