Oceny to forma testowania, która pomaga zweryfikować odpowiedzi LLM i upewnić się, że spełniają one Twoje wymagania jakości.
Firebase Genkit obsługuje zewnętrzne narzędzia do oceny za pomocą wtyczek w połączeniu z zaawansowanymi funkcjami dostrzegalności, które zapewniają wgląd w stan środowiska wykonawczego aplikacji opartych na LLM. Narzędzie Genkit pomaga automatycznie wyodrębniać dane, w tym dane wejściowe, wyjściowe i informacje z kroków pośrednich, w celu oceny całościowej jakości odpowiedzi LLM oraz oceny wydajności elementów składowych Twojego systemu.
Jeśli na przykład korzystasz z przepływu RAG, Genkit wyodrębni zestaw dokumentów zwróconych przez retrievera, aby można było ocenić jego jakość podczas działania w kontekście przepływu, jak pokazano poniżej. Dane o wierności i trafności odpowiedzi 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
Zacznij od zdefiniowania zbioru danych wejściowych, których chcesz użyć jako wejściowego zbioru danych o nazwie testInputs.json
. Ten wejściowy zbiór danych reprezentuje przypadki testowe, których będziesz używać do generowania danych wyjściowych na potrzeby oceny.
["Cheese", "Broccoli", "Spinach and Kale"]
Następnie możesz za pomocą polecenia eval:flow
ocenić przepływ w odniesieniu do przypadków testowych podanych w testInputs.json
.
genkit eval:flow menuSuggestionFlow --input testInputs.json
Wyniki oceny możesz sprawdzić w interfejsie dewelopera, uruchamiając polecenie:
genkit start
Następnie przejdź pod adres localhost:4000/evaluate
.
Możesz też udostępnić plik wyjściowy, aby sprawdzić dane wyjściowe w pliku json.
genkit eval:flow menuSuggestionFlow --input testInputs.json --output eval-result.json
Obsługiwani weryfikatorzy
Weryfikatorzy Genkit
W Genkit jest niewielka liczba lokalnych weryfikatorów, którzy są zainspirowani przez RAGAS, aby ułatwić Ci rozpoczęcie pracy:
- Wiarygodność
- Trafność odpowiedzi
- Szkodliwość
Wtyczki służące do oceny
Genkit obsługuje dodatkowych weryfikatorów za pomocą wtyczek:
- VertexAI Rapid Evaluators za pomocą wtyczki VertexAI.
- LangChain Criteria Evaluation z wtyczki LangChain.
Do wymagających zadań
eval:flow
to wygodny sposób na szybką ocenę procesu, ale czasami możesz potrzebować większej kontroli nad etapami oceny. Może się tak zdarzyć, jeśli używasz innej struktury i masz już dane wyjściowe, które chcesz ocenić. Wszystkie czynności wykonywane przez eval:flow
możesz wykonać półręcznie.
Możesz uruchomić wsadowo przepływ Genkit i dodać do niego unikalną etykietę, która zostanie użyta do wyodrębnienia zbioru danych do oceny (zbioru danych wejściowych, danych wyjściowych i kontekstów).
Uruchom przepływ po testowych danych wejściowych:
genkit flow:batchRun myRagFlow test_inputs.json --output flow_outputs.json --label customLabel
Wyodrębnij dane oceny:
genkit eval:extractData myRagFlow --label customLabel --output customLabel_dataset.json
Wyeksportowane dane zostaną wyeksportowane jako plik JSON z każdym przypadkiem testowym w takim formacie:
[
{
"testCaseId": string,
"input": string,
"output": string,
"context": array of strings,
"traceIds": array of strings,
}
]
Ekstraktor danych automatycznie znajdzie moduły do pobierania i doda wygenerowane dokumenty do tablicy kontekstu. Domyślnie test eval:run
będzie uruchamiany względem wszystkich skonfigurowanych weryfikatorów. Podobnie jak w przypadku wersji eval:flow
wyniki testu eval:run
pojawią się na stronie oceny w interfejsie dewelopera dostępnej pod adresem localhost:4000/evaluate
.
Niestandardowe moduły wyodrębniania
Możesz też udostępnić niestandardowe moduły wyodrębniania danych do użycia w poleceniach eval:extractData
i eval:flow
. Niestandardowe moduły wyodrębniania pozwalają zastąpić domyślną logikę wyodrębniania, co daje większe możliwości tworzenia i oceniania zbiorów danych.
Aby skonfigurować niestandardowe moduły wyodrębniania, dodaj plik konfiguracyjny narzędzi o nazwie genkit-tools.conf.js
do katalogu głównego projektu, jeśli jeszcze go nie masz.
cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js
W pliku konfiguracji narzędzi dodaj ten kod:
module.exports = {
evaluators: [
{
flowName: 'myFlow',
extractors: {
context: { outputOf: 'foo-step' },
output: 'bar-step',
},
},
],
};
W tym przykładzie skonfigurujesz wyodrębnianie dla przepływu myFlow
. Konfiguracja zastępuje moduły wyodrębniania pól context
i output
oraz została użyta domyślna logika pola input
.
Specyfikacja modułów wyodrębniania oceny wygląda tak:
- Pole
evaluators
akceptuje tablicę obiektów EvaluatorConfig ograniczonych do zakresuflowName
extractors
to obiekt określający zastąpienia modułu wyodrębniania. Obecnie obsługiwane klucze w tym języku:extractors
to[input, output, context]
. Akceptowane typy wartości:string
– powinna to być nazwa kroku określona jako stirng. Dane wyjściowe tego kroku zostaną wyodrębnione dla tego klucza.{ inputOf: string }
lub{ outputOf: string }
– te obiekty reprezentują poszczególne kanały (wejściowe lub wyjściowe) kroku. Na przykład funkcja{ inputOf: 'foo-step' }
wyodrębniłaby dane wejściowe z krokufoo-step
dla tego klucza.(trace) => string;
– aby uzyskać większą elastyczność, możesz podać funkcję, która akceptuje log czasu Genkit i zwracastring
, oraz określić logikę wyodrębniania w tej funkcji. Dokładny schemat TraceData znajdziesz nagenkit/genkit-tools/common/src/types/trace.ts
.
Działanie na istniejących zbiorach danych
Aby przeprowadzić ocenę na już wyodrębnionym zbiorze danych:
genkit eval:run customLabel_dataset.json
Aby przesłać dane wyjściowe do innej lokalizacji, użyj flagi --output
.
genkit eval:flow menuSuggestionFlow --input testInputs.json --output customLabel_evalresult.json
Aby przeprowadzić pracę na podzbiorze skonfigurowanych weryfikatorów, użyj flagi --evaluators
i podaj listę rozdzielonych przecinkami nazw weryfikatorów:
genkit eval:run customLabel_dataset.json --evaluators=genkit/faithfulness,genkit/answer_relevancy
Synteza danych testowych przy użyciu LLM
Oto przykładowy proces wykorzystujący plik PDF do wygenerowania możliwych pytań, które mogą zadawać użytkownicy.
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;
}
);
Następnie możesz użyć tego polecenia, aby wyeksportować dane do pliku i wykorzystać je do oceny.
genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json