ارزیابیها نوعی آزمایش هستند که به شما کمک میکنند پاسخهای 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 از ارزیاب های اضافی از طریق افزونه ها پشتیبانی می کند:
- ارزیاب های سریع 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 با هر 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' }
ورودی stepfoo-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