تقييم

التقييمات هي شكل من أشكال الاختبار الذي يساعدك على التحقّق من صحة ردود النموذج اللغوي الكبير والتأكّد من أنّها تستوفي معايير الجودة.

تتوافق منصّة 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 المزيد من المقيّمين من خلال المكوّنات الإضافية:

الاستخدام المتقدّم

يُعد 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