Değerlendirme

Değerlendirmeler, LLM'ye verdiğiniz yanıtları doğrulamanıza ve kalite çıtanızı karşıladıklarından emin olmanıza yardımcı olan bir test biçimidir.

Firebase Genkit, eklentiler aracılığıyla üçüncü taraf değerlendirme araçlarını destekler ve LLM destekli uygulamalarınızın çalışma zamanı hakkında bilgiler sağlayan güçlü gözlemlenebilirlik özellikleriyle birlikte desteklenir. Genkit araçları sayesinde LLM yanıtlarının uçtan uca kalitesini değerlendirmenin yanı sıra sisteminizin yapı taşlarının performansını anlamak için ara adımlardaki giriş, çıkış ve bilgiler de dahil olmak üzere verileri otomatik olarak ayıklayabilirsiniz.

Örneğin, bir RAG akışınız varsa Genkit, retriever tarafından döndürülen belge grubunu ayıklar. Böylece, geri getirme aracının çalıştırıldığı sırada alıcınızın kalitesini Genkit bağlılık ve yanıt alaka düzeyi metrikleriyle aşağıda 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: geminiPro,
      metrics: [GenkitMetric.FAITHFULNESS, GenkitMetric.ANSWER_RELEVANCY],
      embedder: textEmbeddingGecko, // GenkitMetric.ANSWER_RELEVANCY requires an embedder
    }),
  ],
  // ...
});
  npm install @genkit-ai/evaluator @genkit-ai/vertexai

testQuestions.json adında, giriş veri kümesi olarak kullanmak istediğiniz bir giriş kümesi tanımlayarak başlayın. Bu giriş veri kümesi, değerlendirme için çıkış oluşturmak üzere kullanacağınız test durumlarını temsil eder.

[
  "What is on the menu?",
  "Does the restaurant have clams?",
  "What is the special of the day?"
]

Ardından, testQuestions.json içinde sağlanan test durumlarına göre akışınızı değerlendirmek için eval:flow komutunu kullanabilirsiniz.

genkit eval:flow menuQA --input testQuestions.json

Ardından, aşağıdaki komutu çalıştırarak geliştirici kullanıcı arayüzünde değerlendirme sonuçlarını görebilirsiniz:

genkit start

Ardından localhost:4000/evaluate adresine gidin.

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

genkit eval:flow menuQA --input testQuestions.json --output eval-result.json

Desteklenen değerlendiriciler

Genkit değerlendiricileri

Genkit, başlangıçta size yardımcı olmak için RAGAS'dan esinlenerek oluşturulmuş az sayıda yerel değerlendirmeci içerir:

  • Bağlılık
  • Yanıt Alaka Düzeyi
  • Kötü Niyet

Değerlendirme Aracı 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 ihtiyaç duyabilirsiniz. Bu durum, farklı bir çerçeve kullanıyorsanız ve halihazırda değerlendirmek istediğiniz çıktılar varsa ortaya çıkabilir. eval:flow uygulamasının yarı manuel olarak gerçekleştirdiği tüm adımları uygulayabilirsiniz.

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

Akışı test girişlerinizin ü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 için aşağıdaki biçimdeki bir json dosyası olarak oluşturulur:

[
  {
    "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ı içerik dizisine ekler. Varsayılan olarak eval:run, yapılandırılmış tüm değerlendirmecilerde çalışır. eval:flow gibi eval:run sonuçları da Geliştirici kullanıcı 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ümeleri oluşturma ve değerlendirmede size daha fazla güç sağlar.

Özel ayıklayıcılarınızı yapılandırmak için, yoksa proje kök dosyanıza 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ığı kullandı.

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

  • evaluators alanı, flowName kapsamına alınan EvaluatorConfig nesneleri dizisini kabul eder
  • extractors, ayıklayıcı geçersiz kılmalarını belirten bir nesnedir. Şu anda extractors oyununda desteklenen anahtarlar [input, output, context]. Kabul edilebilir değer türleri şunlardır:
    • string: Bu, stirng olarak belirtilmiş 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 çıkarır.
    • (trace) => string; - Daha fazla esneklik için Genkit izlemeyi kabul eden ve string döndüren bir işlev sağlayabilir ve 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ıştırma

Değerlendirmeyi, ayıklanmış bir veri kümesi üzerinde çalıştırmak için:

genkit eval:run customLabel_dataset.json

Farklı bir konuma çıkış yapmak için --output işaretini kullanın.

genkit eval:flow menuQA --input testQuestions.json --output customLabel_evalresult.json

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

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

LLM kullanarak test verilerini sentezleme

Burada, kullanıcıların dosya hakkında sorabileceği olası soruları oluşturmak için PDF dosyasının kullanıldığı bir örnek akışa bakalım.

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

Daha sonra bu komutu kullanarak verileri bir dosyaya dışa aktarabilir ve değerlendirme amacıyla kullanabilirsiniz.

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