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