आकलन, ऐसी जांच है जो एलएलएम के जवाबों की पुष्टि करने में आपकी मदद करती है. इससे यह पक्का किया जा सकता है कि वे आपकी क्वालिटी की ज़रूरी शर्तों को पूरा करते हैं.
Firebase Genkit, प्लगिन की मदद से तीसरे पक्ष के आकलन टूल के साथ काम करता है. यह टूल, निगरानी करने की बेहतरीन सुविधाओं के साथ काम करता है. इससे एलएलएम पर काम करने वाले आपके ऐप्लिकेशन के रनटाइम की स्थिति के बारे में अहम जानकारी मिलती है. Genkit टूल की मदद से, इनपुट, आउटपुट, और बीच के चरणों में दी गई जानकारी के साथ-साथ, अपने-आप डेटा एक्सट्रैक्ट किया जा सकता है. इससे एलएलएम के जवाबों की शुरू से आखिर तक की क्वालिटी का आकलन किया जा सकता है. साथ ही, अपने सिस्टम के बिल्डिंग ब्लॉक की परफ़ॉर्मेंस को समझा जा सकता है.
उदाहरण के लिए, अगर आपके पास आरएजी फ़्लो है, तो Genkit उन दस्तावेज़ों के सेट को एक्सट्रैक्ट करेगा जिन्हें रिट्रीवर ने लौटाया है. ऐसा इसलिए किया जाता है, ताकि आप अपने रिट्रीवर की क्वालिटी का आकलन कर सकें. यह आकलन, फ़्लो के हिसाब से किया जा सकता है. इसके लिए, 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
इनपुट का वह सेट तय करके शुरुआत करें जिसे आपको testInputs.json
नाम के इनपुट डेटासेट के तौर पर इस्तेमाल करना है. यह इनपुट डेटासेट ऐसे टेस्ट केस के बारे में बताता है जिनका इस्तेमाल करके, आकलन के लिए आउटपुट जनरेट किया जा सकता है.
["Cheese", "Broccoli", "Spinach and Kale"]
इसके बाद, testInputs.json
में दिए गए टेस्ट केस के हिसाब से फ़्लो का आकलन करने के लिए, eval:flow
कमांड का इस्तेमाल किया जा सकता है.
genkit eval:flow menuSuggestionFlow --input testInputs.json
इसके बाद, डेवलपर यूज़र इंटरफ़ेस (यूआई) में इवैलुएशन के नतीजे देखने के लिए, इसे चलाकर देखें:
genkit start
इसके बाद, localhost:4000/evaluate
पर जाएं.
इसके अलावा, json फ़ाइल में आउटपुट की जांच करने के लिए, एक आउटपुट फ़ाइल उपलब्ध कराई जा सकती है.
genkit eval:flow menuSuggestionFlow --input testInputs.json --output eval-result.json
काम करने वाले समीक्षक
Genkit के समीक्षक
Genkit में कुछ नेटिव समीक्षकों को शामिल किया गया है जो RAGAS से प्रेरित हैं. इनसे आपको इन टूल का इस्तेमाल शुरू करने में मदद मिलती है:
- ईमानदारी
- जवाब कितने काम का है
- नुकसान पहुंचाने वाला कॉन्टेंट
इवैलुएटर प्लगिन
Genkit, प्लगिन की मदद से अन्य समीक्षकों की मदद करता है:
- VertexAI प्लगिन की मदद से VertexAI Rapid Evaluators.
- LangChain प्लगिन की मदद से LangChain मानदंड का मूल्यांकन.
बेहतर इस्तेमाल के लिए
eval:flow
, फ़्लो का तेज़ी से आकलन करने का एक आसान तरीका है. हालांकि, कभी-कभी आपको आकलन करने के चरणों पर ज़्यादा कंट्रोल की ज़रूरत हो सकती है. ऐसा तब हो सकता है, जब किसी दूसरे फ़्रेमवर्क का इस्तेमाल किया जा रहा हो
और आपके पास पहले से ही कोई आउटपुट हो, जिसका आकलन करना हो. आपके पास वह सभी चरण किए जा सकते हैं
जो eval:flow
सेमी-मैन्युअल तरीके से किया जाता है.
आपके पास Genkit फ़्लो को एक साथ चलाने और रन में एक यूनीक लेबल जोड़ने का विकल्प होता है. इसके बाद, इवैलुएशन डेटासेट (इनपुट, आउटपुट, और कॉन्टेक्स्ट का सेट) को एक्सट्रैक्ट करने के लिए इस्तेमाल किया जाएगा.
अपने टेस्ट इनपुट पर फ़्लो चलाएं:
genkit flow:batchRun myRagFlow test_inputs.json --output flow_outputs.json --label customLabel
इवैलुएशन डेटा निकालें:
genkit eval:extractData myRagFlow --label customLabel --output customLabel_dataset.json
एक्सपोर्ट किया गया डेटा, json फ़ाइल के तौर पर दिखेगा. इस फ़ाइल में, नीचे दिए गए फ़ॉर्मैट में हर testCase का इस्तेमाल होगा:
[
{
"testCaseId": string,
"input": string,
"output": string,
"context": array of strings,
"traceIds": array of strings,
}
]
डेटा इकट्ठा करने वाला टूल, रिट्रीवर का पता अपने-आप लगा लेगा और तैयार किए गए दस्तावेज़ों को कॉन्टेक्स्ट कलेक्शन में जोड़ देगा. डिफ़ॉल्ट रूप से, eval:run
को कॉन्फ़िगर किए गए सभी समीक्षकों के लिए लागू किया जाएगा. eval:flow
की तरह, eval:run
के नतीजे, localhost:4000/evaluate
पर मौजूद डेवलपर यूज़र इंटरफ़ेस (यूआई) के आकलन पेज में दिखेंगे.
पसंद के मुताबिक डेटा इकट्ठा करने वाले टूल
eval:extractData
और eval:flow
निर्देशों में इस्तेमाल करने के लिए, डेटा इकट्ठा करने वाले कस्टम टूल भी उपलब्ध कराए जा सकते हैं. कस्टम डेटा इकट्ठा करने वाले टूल की मदद से, डेटा निकालने के डिफ़ॉल्ट लॉजिक को बदला जा सकता है. इससे आपको डेटासेट बनाने और उनका आकलन करने में ज़्यादा मदद मिलती है.
अगर आपके पास पहले से कोई टूल कॉन्फ़िगरेशन फ़ाइल नहीं है, तो कस्टम डेटा इकट्ठा करने वाले टूल को कॉन्फ़िगर करने के लिए, अपने प्रोजेक्ट रूट में genkit-tools.conf.js
नाम की टूल कॉन्फ़िगरेशन फ़ाइल जोड़ें.
cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js
टूल कॉन्फ़िगरेशन फ़ाइल में, यह कोड जोड़ें:
module.exports = {
evaluators: [
{
flowName: 'myFlow',
extractors: {
context: { outputOf: 'foo-step' },
output: 'bar-step',
},
},
],
};
इस सैंपल में, myFlow
फ़्लो के लिए डेटा इकट्ठा करने वाले टूल को कॉन्फ़िगर किया जाता है. कॉन्फ़िगरेशन, context
और output
फ़ील्ड के लिए डेटा इकट्ठा करने वाले टूल को बदल देता है. साथ ही, input
फ़ील्ड के लिए डिफ़ॉल्ट लॉजिक का इस्तेमाल करता है.
इवैलुएशन इकट्ठा करने वाले टूल की खास बातें यहां दी गई हैं:
evaluators
फ़ील्ड में EvaluatorConfig ऑब्जेक्ट का कलेक्शन स्वीकार किया जाता है. ये ऑब्जेक्ट,flowName
के स्कोप वाले होते हैंextractors
एक ऐसा ऑब्जेक्ट है जो डेटा इकट्ठा करने वाले टूल के ओवरराइड की जानकारी देता है.extractors
में फ़िलहाल इस्तेमाल की जा सकने वाली कुंजियां[input, output, context]
हैं. स्वीकार की जाने वाली वैल्यू के टाइप ये हैं:string
- यह चरण का एक नाम होना चाहिए, जो स्टिरिंग के तौर पर बताया गया हो. इस कुंजी के लिए, इस चरण का आउटपुट एक्सट्रैक्ट किया जाता है.{ inputOf: string }
या{ outputOf: string }
- ये ऑब्जेक्ट किसी चरण के खास चैनल (इनपुट या आउटपुट) दिखाते हैं. उदाहरण के लिए,{ inputOf: 'foo-step' }
इस कुंजी के लिएfoo-step
चरण का इनपुट एक्सट्रैक्ट करेगा.(trace) => string;
- ज़्यादा सुविधा के लिए, एक ऐसा फ़ंक्शन दिया जा सकता है जो Genkit ट्रेस स्वीकार करता है औरstring
दिखाता है. साथ ही, इस फ़ंक्शन में एक्सट्रैक्शन लॉजिक भी तय किया जा सकता है. सटीक TraceData स्कीमा के लिएgenkit/genkit-tools/common/src/types/trace.ts
देखें.
मौजूदा डेटासेट पर चल रहा है
पहले से एक्सट्रैक्ट किए गए डेटासेट पर इवैलुएशन चलाने के लिए:
genkit eval:run customLabel_dataset.json
किसी दूसरी जगह पर आउटपुट करने के लिए, --output
फ़्लैग का इस्तेमाल करें.
genkit eval:flow menuSuggestionFlow --input testInputs.json --output customLabel_evalresult.json
कॉन्फ़िगर किए गए समीक्षकों के किसी सबसेट पर काम करने के लिए, --evaluators
फ़्लैग का इस्तेमाल करें और समीक्षकों की कॉमा-सेपरेटेड लिस्ट दें:
genkit eval:run customLabel_dataset.json --evaluators=genkit/faithfulness,genkit/answer_relevancy
एलएलएम का इस्तेमाल करके, टेस्ट डेटा को सिंथेसाइज़ करना
यहां PDF फ़ाइल का इस्तेमाल करके, लोगों के सवाल जनरेट करने के लिए एक उदाहरण दिया गया है.
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;
}
);
इसके बाद, इस निर्देश का इस्तेमाल करके, डेटा को फ़ाइल में एक्सपोर्ट किया जा सकता है और आकलन के लिए इस्तेमाल किया जा सकता है.
genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json