ارزیابی

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

Firebase Genkit از ابزارهای ارزیابی شخص ثالث از طریق افزونه‌ها، همراه با ویژگی‌های قدرتمند مشاهده‌پذیری که بینشی از وضعیت زمان اجرا برنامه‌های کاربردی LLM شما ارائه می‌دهد، پشتیبانی می‌کند. ابزار Genkit به شما کمک می کند تا به طور خودکار داده ها شامل ورودی ها، خروجی ها و اطلاعات را از مراحل میانی استخراج کنید تا کیفیت سرتاسر پاسخ های LLM را ارزیابی کنید و همچنین عملکرد بلوک های سازنده سیستم خود را درک کنید.

به عنوان مثال، اگر یک جریان RAG دارید، Genkit مجموعه اسنادی را که توسط بازیابی بازگردانده شده است استخراج می کند تا بتوانید کیفیت رتریور خود را در حالی که در متن جریان اجرا می شود، همانطور که در زیر نشان داده شده است با وفاداری Genkit و معیارهای مربوط به پاسخ:

import { genkit } from 'genkit';
import { genkitEval, GenkitMetric } from '@genkit-ai/evaluator';
import { vertexAI, textEmbedding004, gemini15Flash } from '@genkit-ai/vertexai';

const ai = genkit({
  plugins: [
    vertexAI(),
    genkitEval({
      judge: gemini15Flash,
      metrics: [GenkitMetric.FAITHFULNESS, GenkitMetric.ANSWER_RELEVANCY],
      embedder: textEmbedding004, // GenkitMetric.ANSWER_RELEVANCY requires an embedder
    }),
  ],
  // ...
});

توجه: پیکربندی بالا مستلزم نصب بسته‌های genkit ، @genkit-ai/google-ai ، @genkit-ai/evaluator و @genkit-ai/vertexai است.

  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

توجه: در زیر می‌توانید نمونه‌ای از اینکه چگونه یک LLM می‌تواند به شما در ایجاد موارد آزمایشی کمک کند را ببینید.

ارزیاب های پشتیبانی شده

ارزیابان 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 ارائه دهید. استخراج‌کننده‌های سفارشی به شما این امکان را می‌دهند که منطق استخراج پیش‌فرض را نادیده بگیرید و قدرت بیشتری در ایجاد مجموعه‌های داده و ارزیابی آنها به شما می‌دهد.

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

cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js

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

module.exports = {
  evaluators: [
    {
      actionRef: '/flow/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 مراجعه کنید.

توجه: داده های استخراج شده برای همه این مراحل یک رشته JSON خواهد بود. ابزار این رشته JSON را در زمان ارزیابی بطور خودکار تجزیه می کند. در صورت ارائه یک استخراج کننده تابع، مطمئن شوید که خروجی یک رشته JSON معتبر است. به عنوان مثال: "Hello, world!" JSON معتبر نیست. "\"Hello, world!\"" معتبر است.

در حال اجرا بر روی مجموعه داده های موجود

برای اجرای ارزیابی روی یک مجموعه داده از قبل استخراج شده:

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 برای ایجاد سؤالات احتمالی کاربران در مورد آن استفاده می کند.

import { genkit, run, z } from "genkit";
import { googleAI, gemini15Flash } from "@genkit-ai/googleai";
import { chunk } from "llm-chunk";

const ai = genkit({ plugins: [googleAI()] });

export const synthesizeQuestions = ai.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 ai.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