Evaluasi

Evaluasi adalah bentuk pengujian yang membantu Anda memvalidasi respons LLM dan memastikan respons tersebut memenuhi standar kualitas Anda.

Firebase Genkit mendukung alat evaluasi pihak ketiga melalui plugin, yang dipadukan 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 perantara 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 ditampilkan oleh retriever sehingga Anda dapat mengevaluasi kualitas retriever yang sedang berjalan dalam konteks alur, seperti yang ditunjukkan di bawah ini dengan metrik relevansi dan kesetiaan 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

Mulailah dengan menentukan kumpulan input yang ingin Anda gunakan sebagai set data input bernama testInputs.json. Set data input ini mewakili kasus pengujian yang akan Anda gunakan guna menghasilkan output untuk evaluasi.

["Cheese", "Broccoli", "Spinach and Kale"]

Selanjutnya Anda dapat menggunakan perintah eval:flow untuk mengevaluasi alur terhadap kasus pengujian yang disediakan di testInputs.json.

genkit eval:flow menuSuggestionFlow --input testInputs.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 menuSuggestionFlow --input testInputs.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:

Penggunaan lanjutan

eval:flow adalah cara yang mudah untuk mengevaluasi alur dengan cepat, tetapi terkadang Anda mungkin memerlukan kontrol lebih besar terhadap langkah evaluasi. Hal ini dapat terjadi jika Anda menggunakan framework yang berbeda dan sudah memiliki output yang ingin dievaluasi. Anda dapat melakukan semua langkah yang dilakukan eval:flow secara semi-manual.

Anda dapat menjalankan alur Genkit secara batch dan menambahkan label unik ke proses yang kemudian akan digunakan untuk mengekstrak set data evaluasi (sekumpulan 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 ditampilkan 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 pengambil 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 berada 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 oleh flowName
  • extractors adalah objek yang menentukan penggantian ekstraktor. Kunci yang didukung saat ini di extractors adalah [input, output, context]. Jenis nilai yang dapat diterima adalah:
    • string - ini harus berupa nama langkah, yang ditentukan sebagai stirng. Output dari 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 langkah foo-step untuk kunci ini.
    • (trace) => string; - Untuk fleksibilitas lebih lanjut, Anda dapat menyediakan fungsi yang menerima rekaman aktivitas Genkit dan menampilkan string, serta menentukan logika ekstraksi di dalam fungsi ini. Lihat genkit/genkit-tools/common/src/types/trace.ts untuk skema TraceData yang tepat.

Berjalan pada set data yang sudah 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 menuSuggestionFlow --input testInputs.json --output customLabel_evalresult.json

Untuk menjalankan 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

Menyintesis data pengujian menggunakan LLM

Berikut adalah contoh alur yang menggunakan file PDF untuk menghasilkan kemungkinan pertanyaan yang mungkin diajukan pengguna tentang hal tersebut.

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;
  }
);

Selanjutnya, 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