Evaluasi adalah bentuk pengujian yang membantu Anda memvalidasi respons LLM dan memastikannya memenuhi standar kualitas Anda.
Firebase Genkit mendukung alat evaluasi pihak ketiga melalui plugin, yang dipasangkan dengan fitur kemampuan observasi canggih yang memberikan insight tentang status runtime aplikasi yang didukung LLM. Alat Genkit membantu Anda mengekstrak data secara otomatis termasuk input, output, dan informasi dari langkah menengah untuk mengevaluasi kualitas respons LLM secara menyeluruh, serta memahami performa elemen penyusun sistem Anda.
Misalnya, jika Anda memiliki alur RAG, Genkit akan mengekstrak kumpulan dokumen yang dikembalikan oleh retriever sehingga Anda dapat mengevaluasi kualitas retriever saat dijalankan dalam konteks flow seperti yang ditunjukkan di bawah dengan metrik loyalitas Genkit dan relevansi jawaban:
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
Mulailah dengan menentukan satu set input yang ingin Anda gunakan sebagai set data input bernama testQuestions.json
. Set data input ini mewakili kasus pengujian yang akan Anda gunakan untuk menghasilkan output yang akan dievaluasi.
[
"What is on the menu?",
"Does the restaurant have clams?",
"What is the special of the day?"
]
Anda kemudian dapat menggunakan perintah eval:flow
untuk mengevaluasi flow terhadap kasus
pengujian yang diberikan di testQuestions.json
.
genkit eval:flow menuQA --input testQuestions.json
Anda kemudian dapat melihat hasil evaluasi di UI Developer dengan menjalankan:
genkit start
Lalu buka localhost:4000/evaluate
.
Atau, Anda dapat memberikan file output untuk memeriksa output dalam file JSON.
genkit eval:flow menuQA --input testQuestions.json --output eval-result.json
Evaluator yang didukung
Evaluator Genkit
Genkit mencakup sejumlah kecil evaluator native, yang terinspirasi oleh RAGAS, untuk membantu Anda memulai:
- Kesetiaan
- Relevansi Jawaban
- Kejahatan
Plugin Evaluator
Genkit mendukung evaluator tambahan melalui plugin:
- Rapid Evaluator VertexAI melalui Plugin VertexAI.
- Evaluasi Kriteria LangChain melalui plugin LangChain.
Penggunaan lanjutan
eval:flow
adalah cara yang mudah untuk mengevaluasi alur dengan cepat, tetapi terkadang Anda
mungkin memerlukan kontrol lebih besar atas langkah-langkah evaluasi. Hal ini dapat terjadi jika Anda menggunakan framework
lain dan sudah memiliki beberapa output yang ingin dievaluasi. Anda dapat melakukan semua
langkah yang dijalankan eval:flow
semi-manual.
Anda dapat menjalankan alur Genkit dalam batch dan menambahkan label unik ke operasi tersebut, yang kemudian akan digunakan untuk mengekstrak set data evaluasi (kumpulan input, output, dan konteks).
Jalankan alur pada input pengujian Anda:
genkit flow:batchRun myRagFlow test_inputs.json --output flow_outputs.json --label customLabel
Ekstrak data evaluasi:
genkit eval:extractData myRagFlow --label customLabel --output customLabel_dataset.json
Data yang diekspor akan dihasilkan sebagai file json dengan setiap testCase dalam format berikut:
[
{
"testCaseId": string,
"input": string,
"output": string,
"context": array of strings,
"traceIds": array of strings,
}
]
Ekstraktor data akan otomatis menemukan retriever dan menambahkan dokumen yang dihasilkan ke array konteks. Secara default, eval:run
akan dijalankan terhadap semua evaluator yang dikonfigurasi, dan seperti eval:flow
, hasil untuk eval:run
akan muncul di halaman evaluasi UI Developer, yang terletak di localhost:4000/evaluate
.
Ekstraktor kustom
Anda juga dapat menyediakan ekstraktor kustom untuk digunakan dalam perintah eval:extractData
dan eval:flow
. Ekstraktor kustom memungkinkan Anda mengganti logika ekstraksi default yang memberi Anda lebih banyak kemampuan dalam membuat set data dan mengevaluasinya.
Untuk mengonfigurasi ekstraktor kustom, tambahkan file konfigurasi alat bernama genkit-tools.conf.js
ke root project Anda, jika Anda belum memilikinya.
cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js
Di file konfigurasi alat, tambahkan kode berikut:
module.exports = {
evaluators: [
{
flowName: 'myFlow',
extractors: {
context: { outputOf: 'foo-step' },
output: 'bar-step',
},
},
],
};
Dalam contoh ini, Anda mengonfigurasi ekstraktor untuk alur myFlow
. Konfigurasi ini mengganti ekstraktor untuk kolom context
dan output
, serta menggunakan logika default untuk kolom input
.
Spesifikasi ekstraktor evaluasi adalah sebagai berikut:
- Kolom
evaluators
menerima array objek EvaluatorConfig, yang dicakup olehflowName
extractors
adalah objek yang menentukan penggantian ekstraktor. Kunci yang saat ini didukung diextractors
adalah[input, output, context]
. Jenis nilai yang dapat diterima adalah:string
- ini harus berupa nama langkah, yang ditetapkan sebagai pengaduk. Output langkah ini diekstrak untuk kunci ini.{ inputOf: string }
atau{ outputOf: string }
- Objek ini mewakili saluran tertentu (input atau output) dari suatu langkah. Misalnya,{ inputOf: 'foo-step' }
akan mengekstrak input langkahfoo-step
untuk kunci ini.(trace) => string;
- Untuk fleksibilitas lebih lanjut, Anda dapat menyediakan fungsi yang menerima rekaman aktivitas Genkit dan menampilkanstring
, serta menentukan logika ekstraksi di dalam fungsi ini. Lihatgenkit/genkit-tools/common/src/types/trace.ts
untuk mengetahui skema TraceData yang tepat.
Menjalankan pada set data yang ada
Untuk menjalankan evaluasi pada set data yang sudah diekstrak:
genkit eval:run customLabel_dataset.json
Untuk menghasilkan output ke lokasi yang berbeda, gunakan flag --output
.
genkit eval:flow menuQA --input testQuestions.json --output customLabel_evalresult.json
Untuk menjalankannya di subset evaluator yang dikonfigurasi, gunakan tanda --evaluators
dan berikan daftar evaluator yang dipisahkan koma berdasarkan nama:
genkit eval:run customLabel_dataset.json --evaluators=genkit/faithfulness,genkit/answer_relevancy
Melakukan sintesis data uji menggunakan LLM
Berikut adalah contoh alur yang menggunakan file PDF untuk menghasilkan kemungkinan pertanyaan yang mungkin akan diajukan pengguna tentangnya.
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;
}
);
Kemudian, Anda dapat menggunakan perintah ini untuk mengekspor data ke dalam file dan menggunakannya untuk evaluasi.
genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json