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:
- VertexAI Plugin aracılığıyla VertexAI Hızlı Değerlendirme Araçları.
- LangChain eklentisi aracılığıyla LangChain Ölçüt Değerlendirmesi.
İ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 ederextractors
, ayıklayıcı geçersiz kılmalarını belirten bir nesnedir. Şu andaextractors
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çinfoo-step
. adımın girişini çıkarır.(trace) => string;
- Daha fazla esneklik için Genkit izlemeyi kabul eden vestring
döndüren bir işlev sağlayabilir ve bu işlevin içinde ayıklama mantığını belirtebilirsiniz. Tam TraceData şeması içingenkit/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