Değerlendirme

Değerlendirmeler, LLM'nizin yanıtlarını doğrulamanıza ve bunların kalite kriterlerinize uygun olduğundan emin olmanıza yardımcı olan bir test biçimidir.

Firebase Genkit, eklentiler aracılığıyla üçüncü taraf değerlendirme araçlarını destekler. Ayrıca, LLM destekli uygulamalarınızın çalışma zamanı durumu hakkında analizler sağlayan güçlü gözlemlenebilirlik özellikleriyle birlikte sunulur. Genkit araçları, LLM yanıtlarının uçtan uca kalitesini değerlendirmek için ara adımlardaki girişler, çıkışlar ve bilgiler dahil olmak üzere verileri otomatik olarak ayıklamanıza ve sisteminizin yapı taşlarının performansını anlamanıza yardımcı olur.

Örneğin, RAG akışınız varsa Genkit, retriever tarafından döndürülen bir dizi belgeyi ayıklar. Böylece, retriever'ınızın kalitesini aşağıdaki Genkit güvenilirlik ve yanıt alaka düzeyi metriklerinde gösterildiği gibi akış bağlamında değerlendirebilirsiniz.

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 adlı bir giriş veri kümesi olarak kullanmak istediğiniz bir dizi giriş tanımlayarak başlayın. Bu giriş veri kümesi, değerlendirme için çıktı oluşturmak üzere kullanacağınız test durumlarını temsil eder.

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

Ardından, akışınızı testInputs.json ürününde sağlanan test durumlarıyla karşılaştırmak için eval:flow komutunu kullanabilirsiniz.

genkit eval:flow menuSuggestionFlow --input testInputs.json

Ardından, şu komutu çalıştırarak Geliştirici Arayüzünde değerlendirme sonuçlarını görebilirsiniz:

genkit start

Ardından localhost:4000/evaluate konumuna gidin.

Alternatif olarak, çıkışı bir json dosyasında incelemek için çıkış dosyası sağlayabilirsiniz.

genkit eval:flow menuSuggestionFlow --input testInputs.json --output eval-result.json

Desteklenen değerlendirmeciler

Genkit değerlendirenler

Genkit, başlamanıza yardımcı olmak için RAGAS'tan esinlenen az sayıda yerel değerlendirmeci içerir:

  • Sadakat
  • Yanıt Alaka Düzeyi
  • Kötü amaçlılık

Değerlendirme eklentileri

Genkit, eklentiler aracılığıyla ek değerlendiricileri destekler:

İleri düzey kullanım

eval:flow, akışı hızlı bir şekilde değerlendirmenin kullanışlı bir yoludur ancak bazen değerlendirme adımları üzerinde daha fazla kontrole ihtiyacınız olabilir. Bu durum, farklı bir çerçeve kullanıyorsanız ve değerlendirmek istediğiniz bir çıktınız varsa ortaya çıkabilir. eval:flow tarafından gerçekleştirilen tüm adımları yarı manuel olarak gerçekleştirebilirsiniz.

Genkit akışınızı toplu olarak çalıştırabilir ve çalıştırmaya benzersiz bir etiket ekleyebilirsiniz. Bu etiket daha sonra bir değerlendirme veri kümesi (giriş, çıkış ve bağlam) ayıklamak için kullanılır.

Akışı test girişleriniz üzerinde çalıştırın:

genkit flow:batchRun myRagFlow test_inputs.json --output flow_outputs.json --label customLabel

Değerlendirme verilerini çıkarın:

genkit eval:extractData myRagFlow --label customLabel --output customLabel_dataset.json

Dışa aktarılan veriler, her testCase ile birlikte aşağıdaki biçimde bir json dosyası olarak çıkar:

[
  {
    "testCaseId": string,
    "input": string,
    "output": string,
    "context": array of strings,
    "traceIds": array of strings,
  }
]

Veri ayıklayıcı, alıcıları otomatik olarak bulur ve oluşturulan dokümanları bağlam dizisine ekler. Varsayılan olarak eval:run, yapılandırılmış tüm değerlendiricilere karşı çalışır. eval:flow gibi eval:run sonuçları da geliştirici arayüzünün localhost:4000/evaluate adresindeki değerlendirme sayfasında gösterilir.

Özel ayıklayıcılar

eval:extractData ve eval:flow komutlarında kullanılacak özel ayıklayıcılar da sağlayabilirsiniz. Özel ayıklayıcılar, varsayılan ayıklama mantığını geçersiz kılmanıza olanak tanıyarak veri kümelerini oluşturma ve değerlendirme konusunda size daha fazla güç sağlar.

Özel ayıklayıcıları yapılandırmak için henüz yoksa proje kökünüze genkit-tools.conf.js adlı bir araç yapılandırma dosyası ekleyin.

cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js

Araçların yapılandırma dosyasına aşağıdaki kodu ekleyin:

module.exports = {
  evaluators: [
    {
      flowName: 'myFlow',
      extractors: {
        context: { outputOf: 'foo-step' },
        output: 'bar-step',
      },
    },
  ],
};

Bu örnekte, myFlow akışı için bir ayıklayıcı yapılandıracaksınız. Yapılandırma, context ve output alanları için ayıklayıcıları geçersiz kılar ve input alanı için varsayılan mantığı kullanır.

Değerlendirme ayıklayıcılarının spesifikasyonu aşağıdaki gibidir:

  • evaluators alanı, flowName kapsamındaki bir dizi EvaluatorConfig nesnesini kabul eder
  • extractors, ayıklayıcı geçersiz kılmalarını belirten bir nesnedir. extractors ürününde şu anda [input, output, context] desteklenir. Kabul edilen değer türleri şunlardır:
    • string - Bu, karıştırma olarak belirtilen bir adım adı olmalıdır. Bu adımın çıktısı bu anahtar için çıkarılır.
    • { inputOf: string } veya { outputOf: string }: Bu nesneler, bir adımın belirli kanallarını (giriş veya çıkış) temsil eder. Örneğin, { inputOf: 'foo-step' } bu anahtar için foo-step. adımın girişini ayıklar.
    • (trace) => string;: Daha fazla esneklik için Genkit izlemeyi kabul eden ve string döndüren bir işlev sağlayıp bu işlevin içinde ayıklama mantığını belirtebilirsiniz. Tam TraceData şeması için genkit/genkit-tools/common/src/types/trace.ts sayfasına bakın.

Mevcut veri kümelerinde çalışma

Ayıklanmış bir veri kümesi üzerinde değerlendirme çalıştırmak için:

genkit eval:run customLabel_dataset.json

Çıkışı farklı bir konuma getirmek için --output işaretini kullanın.

genkit eval:flow menuSuggestionFlow --input testInputs.json --output customLabel_evalresult.json

Yapılandırılmış değerlendiricilerin bir alt kümesinde çalıştırmak için --evaluators işaretini kullanın ve ada göre değerlendirenlerin virgülle ayrılmış bir listesini sağlayın:

genkit eval:run customLabel_dataset.json --evaluators=genkit/faithfulness,genkit/answer_relevancy

LLM kullanarak test verilerini sentezleme

Aşağıda, kullanıcıların sorabileceği olası soruları oluşturmak için PDF dosyasının kullanıldığı bir örnek akış verilmiştir.

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

Ardından bu komutu kullanarak verileri bir dosyaya aktarabilir ve değerlendirme için kullanabilirsiniz.

genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json