التقييمات هي شكل من أشكال الاختبار الذي يساعدك على التحقّق من صحة ردود النموذج اللغوي الكبير والتأكّد من أنّها تستوفي معايير الجودة.
تتوافق منصّة Firebase Genkit مع أدوات التقييم التابعة لجهات خارجية من خلال المكوّنات الإضافية، إلى جانب ميزات مراقبة فعّالة توفر إحصاءات عن حالة وقت تشغيل التطبيقات المستندة إلى النموذج اللغوي الكبير. تساعدك هذه الأداة في استخراج البيانات تلقائيًا، بما في ذلك المدخلات والمخرجات والمعلومات من الخطوات الوسيطة لتقييم الجودة الشاملة للردود اللغوية الكبيرة، بالإضافة إلى فهم أداء الوحدات الأساسية للنظام.
على سبيل المثال، إذا كان لديك تدفق RAG، فسيقوم Genkit باستخراج مجموعة المستندات التي تم إرجاعها بواسطة المسترد بحيث يمكنك تقييم جودة المسترد الخاص بك أثناء تشغيله في سياق التدفق كما هو موضح أدناه مع مقاييس المصداقية والإجابة عن مدى الصلة في Genkit:
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
. تمثل مجموعة بيانات الإدخال هذه حالات الاختبار التي ستستخدمها لإنشاء مخرجات للتقييم.
[
"What is on the menu?",
"Does the restaurant have clams?",
"What is the special of the day?"
]
يمكنك بعد ذلك استخدام الأمر eval:flow
لتقييم التدفق مقارنةً بحالات الاختبار الواردة في testQuestions.json
.
genkit eval:flow menuQA --input testQuestions.json
يمكنك بعد ذلك الاطّلاع على نتائج التقييم في واجهة مستخدم المطوّر من خلال تشغيل ما يلي:
genkit start
بعد ذلك، انتقِل إلى localhost:4000/evaluate
.
وبدلاً من ذلك، يمكنك توفير ملف إخراج لفحص النتائج في ملف json.
genkit eval:flow menuQA --input testQuestions.json --output eval-result.json
المقيّمون المعتمَدون
مقيّمو Genkit
تضم Genkit عددًا صغيرًا من المقيّمين الأصليين، مستوحى من RAGAS، لمساعدتك في البدء:
- الإيمان
- مدى صلة الإجابة
- الضرر
المكوّنات الإضافية للمقيِّم
توفِّر Genkit المزيد من المقيّمين من خلال المكوّنات الإضافية:
- أدوات تقييم VertexAI السريعة من خلال مكوّن VertexAI الإضافي
- تقييم معايير 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 مع كل حالة اختبارية بالتنسيق التالي:
[
{
"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
- يجب أن يكون هذا اسم خطوة، محددًا باعتباره stirng. ويتم استخراج ناتج هذه الخطوة لهذا المفتاح.{ inputOf: string }
أو{ outputOf: string }
- يمثّل هذان العنصران قنوات محدّدة (إدخال أو إخراج) للخطوة. على سبيل المثال، بإمكان{ inputOf: 'foo-step' }
استخراج إدخال الخطوةfoo-step
لهذا المفتاح.(trace) => string;
- للحصول على مزيد من المرونة، يمكنك توفير دالة تقبل تتبُّع Genkit وتعرضstring
، مع تحديد منطق الاستخراج داخل هذه الدالة. يمكنك الرجوع إلىgenkit/genkit-tools/common/src/types/trace.ts
لمعرفة مخطط TraceData المحدّد.
جارٍ التشغيل على مجموعات البيانات الموجودة
لإجراء تقييم على مجموعة بيانات تم استخراجها من قبل، اتّبِع الخطوات التالية:
genkit eval:run customLabel_dataset.json
ولإخراج المحتوى إلى موقع مختلف، استخدِم علامة --output
.
genkit eval:flow menuQA --input testQuestions.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: geminiPro,
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