Oceny to forma testowania, która pomaga zweryfikować odpowiedzi LLM i upewnić się, że są zgodne z Twoim paskiem 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ędzia Genkit pomagają automatycznie wyodrębniać dane, w tym dane wejściowe, wyjściowe i informacje z kroków pośrednich, aby ocenić kompleksową jakość odpowiedzi LLM oraz zrozumieć wydajność elementów składowych systemu.
Jeśli na przykład korzystasz z procesu RAG, Genkit wyodrębni zestaw dokumentów zwróconych przez moduł pobierania, aby umożliwić Ci ocenę jakości modułu odbioru, który działa w kontekście procesu, jak pokazano poniżej z użyciem wskaźników wierności i trafności odpowiedzi w Genkit:
import { GenkitMetric, genkitEval } from '@genkit-ai/evaluator';
import { textEmbeddingGecko } from '@genkit-ai/vertexai';
export default configureGenkit({
plugins: [
genkitEval({
judge: geminiPro,
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órego chcesz używać jako wejściowego zbioru danych o nazwie testQuestions.json
. Ten wejściowy zbiór danych reprezentuje przypadki testowe, których będziesz używać do generowania danych wyjściowych do oceny.
[
"What is on the menu?",
"Does the restaurant have clams?",
"What is the special of the day?"
]
Następnie możesz za pomocą polecenia eval:flow
ocenić przepływ ruchu w odniesieniu do przypadków testowych podanych w testQuestions.json
.
genkit eval:flow menuQA --input testQuestions.json
Aby zobaczyć wyniki oceny w interfejsie dewelopera, uruchom polecenie:
genkit start
Następnie przejdź do: localhost:4000/evaluate
.
Możesz też udostępnić plik wyjściowy, aby sprawdzić dane wyjściowe w pliku JSON.
genkit eval:flow menuQA --input testQuestions.json --output eval-result.json
Obsługiwani weryfikatorzy
Oceniający Genkit
Genkit obejmuje niewielką liczbę rodzimych weryfikatorów, których inspiracją jest RAGAS, którzy pomogą Ci zacząć:
- Wiara
- Trafność odpowiedzi
- Złośliwość
Wtyczki oceny
Genkit obsługuje dodatkowych weryfikatorów za pomocą wtyczek:
- VertexAI Rapid Evaluators przy użyciu wtyczki VertexAI.
- LangChain Criteria Evaluation za pomocą wtyczki LangChain.
Do wymagających zadań
eval:flow
to wygodny sposób na szybką ocenę procesu, ale czasami może być potrzebna większa kontrola nad etapami oceny. Może się tak zdarzyć, jeśli używasz innej platformy i masz już dane wyjściowe, które chcesz ocenić. Wszystkie działania, które usługa eval:flow
wykona, możesz wykonać częściowo ręcznie.
Możesz zbiorczo uruchomić przepływ Genkit i dodać do niego unikalną etykietę, która zostanie użyta do wyodrębnienia zbioru danych oceny (zestawu danych wejściowych, wyjściowych i kontekstów).
Przeprowadź przepływ dla danych wejściowych testowych:
genkit flow:batchRun myRagFlow test_inputs.json --output flow_outputs.json --label customLabel
Pobierz dane oceny:
genkit eval:extractData myRagFlow --label customLabel --output customLabel_dataset.json
Wyeksportowane dane zostaną wyeksportowane do pliku JSON z każdą wartością parametru „TestCase” w takim formacie:
[
{
"testCaseId": string,
"input": string,
"output": string,
"context": array of strings,
"traceIds": array of strings,
}
]
Moduł wyodrębniania danych automatycznie zlokalizuje moduły pobierania i doda wygenerowane dokumenty do tablicy kontekstowego. Domyślnie test eval:run
jest uruchamiany względem wszystkich skonfigurowanych oceniających. Tak jak w przypadku eval:flow
, wyniki dotyczące eval:run
pojawią się na stronie oceny w interfejsie dewelopera pod adresem localhost:4000/evaluate
.
Niestandardowe moduły wyodrębniania
Możesz też udostępnić niestandardowe moduły wyodrębniania, które będą używane w poleceniach eval:extractData
i eval:flow
. Niestandardowe moduły wyodrębniania danych umożliwiają zastąpienie domyślnej logiki wyodrębniania, co daje Ci większą moc przy tworzeniu zbiorów danych i ich ocenie.
Aby skonfigurować niestandardowe moduły wyodrębniania, dodaj do katalogu głównego projektu plik konfiguracyjny narzędzi o nazwie genkit-tools.conf.js
, jeśli jeszcze go nie masz.
cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js
W pliku konfiguracyjnym 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 użyła domyślnej logiki pola input
.
Specyfikacja modułów wyodrębniania oceny jest następująca:
- Pole
evaluators
akceptuje tablicę obiektów EvaluatorConfig, których zakres wynosiflowName
extractors
to obiekt, który określa zastąpienia modułu wyodrębniania. Obecnie obsługiwane klucze wextractors
to[input, output, context]
. Akceptowane typy wartości:string
– powinna to być nazwa kroku podana jako stirng. Dla tego klucza wyodrębniane są dane wyjściowe uzyskane w tym kroku.{ inputOf: string }
lub{ outputOf: string }
– te obiekty reprezentują konkretne kanały (wejściowe lub wyjściowe) kroku. Na przykład{ inputOf: 'foo-step' }
wyodrębni dane wejściowe krokufoo-step
dla tego klucza.(trace) => string;
– aby uzyskać większą elastyczność, możesz podać funkcję, która akceptuje ślad Genkit i zwracastring
, oraz określić w tej funkcji logikę ekstrakcji. Dokładny schemat TraceData znajdziesz wgenkit/genkit-tools/common/src/types/trace.ts
.
Działa na istniejących zbiorach danych
Aby przeprowadzić ocenę na wyodrębnionym już zbiorze danych:
genkit eval:run customLabel_dataset.json
Aby wyświetlić dane wyjściowe w innej lokalizacji, użyj flagi --output
.
genkit eval:flow menuQA --input testQuestions.json --output customLabel_evalresult.json
Aby uruchomić test na podzbiorze skonfigurowanych oceniających, użyj flagi --evaluators
i podaj listę oceniających według nazw rozdzielonych przecinkami:
genkit eval:run customLabel_dataset.json --evaluators=genkit/faithfulness,genkit/answer_relevancy
Synteza danych testowych z użyciem LLM
Oto przykładowy proces, w którym plik PDF generuje potencjalne pytania, które użytkownicy mogą o nie pytać.
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: geminiPro,
prompt: {
text: `Generate one question about the text below: ${chunks[i]}`,
},
});
questions.push(qResponse.text());
}
return questions;
}
);
Następnie za pomocą tego polecenia możesz wyeksportować dane do pliku i użyć ich do oceny.
genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json