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:
- VertexAI Eklentisi aracılığıyla VertexAI Hızlı Değerlendirme Aracı.
- 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 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 ederextractors
, 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çinfoo-step
. adımın girişini ayıklar.(trace) => string;
: Daha fazla esneklik için Genkit izlemeyi kabul eden vestring
döndüren bir işlev sağlayıp 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ış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