تقييم

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

تتوافق أداة Firebase Genkit مع أدوات التقييم التابعة لجهات خارجية من خلال المكوّنات الإضافية، إلى جانب ميزات إمكانية الملاحظة الفعّالة التي توفّر إحصاءات عن حالة بيئة تشغيل التطبيقات المستندة إلى النماذج اللغوية الكبيرة. تساعدك "أدوات Genkit" في استخراج البيانات تلقائيًا، بما في ذلك المدخلات والمخرجات والمعلومات من الخطوات المتوسطة لتقييم الجودة الشاملة لردود "النموذج اللغوي الكبير" (LLM) وكذلك فهم أداء الوحدات الأساسية في نظامك.

على سبيل المثال، إذا كان لديك تدفق RAG، فسيستخرج 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"]

يمكنك بعد ذلك استخدام الأمر eval:flow لتقييم مسارك وفقًا لحالات الاختبار الواردة في testInputs.json.

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

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

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، وتحديد منطق الاستخراج داخل هذه الدالة. ارجع إلى genkit/genkit-tools/common/src/types/trace.ts للاطّلاع على مخطط TraceData الدقيق.

التشغيل على مجموعات البيانات الحالية

لإجراء التقييم على مجموعة بيانات مستخلصة بالفعل:

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

تجميع بيانات الاختبار باستخدام نموذج لغوي كبير (LLM)

فيما يلي مثال على تدفق يستخدم ملف 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