ارزیابی

ارزیابی‌ها نوعی آزمایش هستند که به شما کمک می‌کنند تا پاسخ‌های LLM خود را تأیید کنید و اطمینان حاصل کنید که با نوار کیفیت شما مطابقت دارند.

Firebase Genkit از ابزارهای ارزیابی شخص ثالث از طریق پلاگین‌ها، همراه با ویژگی‌های قدرتمند مشاهده‌پذیری که بینشی در مورد وضعیت زمان اجرا برنامه‌های مبتنی بر LLM شما ارائه می‌دهد، پشتیبانی می‌کند. ابزار 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

سپس می‌توانید نتایج ارزیابی را در Developer UI با اجرای:

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 در صفحه ارزیابی Developer UI، واقع در localhost:4000/evaluate ظاهر می‌شود.

استخراج کننده های سفارشی

همچنین می توانید استخراج کننده های سفارشی را برای استفاده در دستورات eval:extractData و eval:flow ارائه دهید. استخراج کننده های سفارشی به شما این امکان را می دهند که منطق استخراج پیش فرض را نادیده بگیرید و قدرت بیشتری در ایجاد مجموعه داده ها و ارزیابی آنها به شما می دهد.

برای پیکربندی استخراج‌کننده‌های سفارشی، یک فایل پیکربندی tools به نام genkit-tools.conf.js را به ریشه پروژه خود اضافه کنید، اگر قبلاً آن را ندارید.

cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js

در فایل کانفیگ tools کد زیر را اضافه کنید:

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 } or { outputOf: string } - این اشیاء کانال های خاصی (ورودی یا خروجی) یک مرحله را نشان می دهند. برای مثال، { inputOf: 'foo-step' } ورودی 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

سنتز داده های آزمون با استفاده از 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