Đánh giá là một hình thức kiểm tra giúp bạn xác thực các câu trả lời của LLM và đảm bảo chúng đáp ứng tiêu chuẩn chất lượng của bạn.
Firebase Genkit hỗ trợ các công cụ đánh giá của bên thứ ba thông qua các trình bổ trợ, kết hợp với các tính năng quan sát mạnh mẽ, cung cấp thông tin chi tiết về trạng thái thời gian chạy của các ứng dụng dựa trên LLM. Bộ công cụ tạo sinh giúp bạn tự động trích xuất dữ liệu, bao gồm cả dữ liệu đầu vào, đầu ra và thông tin từ các bước trung gian để đánh giá chất lượng toàn diện của phản hồi LLM, cũng như hiểu được hiệu suất của các thành phần của hệ thống.
Ví dụ: nếu bạn có luồng RAG, Genkit sẽ trích xuất bộ tài liệu do trình truy xuất trả về để bạn có thể đánh giá chất lượng của trình truy xuất trong khi luồng này chạy trong bối cảnh luồng như được hiển thị dưới đây với độ trung thực của Genkit và các chỉ số liên quan cho câu trả lời:
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
Bắt đầu bằng cách xác định một tập hợp dữ liệu đầu vào mà bạn muốn sử dụng làm tập dữ liệu đầu vào có tên là testInputs.json
. Tập dữ liệu đầu vào này đại diện cho các trường hợp kiểm thử mà bạn sẽ sử dụng để tạo đầu ra cho việc đánh giá.
["Cheese", "Broccoli", "Spinach and Kale"]
Sau đó, bạn có thể sử dụng lệnh eval:flow
để đánh giá luồng của mình dựa trên các trường hợp kiểm thử được cung cấp trong testInputs.json
.
genkit eval:flow menuSuggestionFlow --input testInputs.json
Sau đó, bạn có thể xem kết quả đánh giá trong Giao diện người dùng dành cho nhà phát triển bằng cách chạy:
genkit start
Sau đó, hãy chuyển đến localhost:4000/evaluate
.
Ngoài ra, bạn có thể cung cấp tệp đầu ra để kiểm tra kết quả trong tệp json.
genkit eval:flow menuSuggestionFlow --input testInputs.json --output eval-result.json
Công cụ đánh giá được hỗ trợ
Người đánh giá Genkit
Genkit bao gồm một số ít người đánh giá gốc, lấy cảm hứng từ RAGAS để giúp bạn bắt đầu:
- Trung thành
- Mức độ liên quan của câu trả lời
- Độc hại
Trình bổ trợ đánh giá
Genkit hỗ trợ các trình đánh giá bổ sung thông qua các trình bổ trợ:
- Các công cụ đánh giá nhanh của VertexAI thông qua trình bổ trợ VertexAI.
- Đánh giá tiêu chí LangChain thông qua trình bổ trợ LangChain.
Cách sử dụng nâng cao
eval:flow
là một cách thuận tiện để nhanh chóng đánh giá luồng, nhưng đôi khi bạn có thể cần kiểm soát nhiều hơn các bước đánh giá. Điều này có thể xảy ra nếu bạn đang sử dụng một khung khác và đã có một số kết quả cần đánh giá. Bạn có thể thực hiện tất cả các bước mà eval:flow
thực hiện bán theo cách thủ công.
Bạn có thể chạy hàng loạt quy trình Genkit và thêm một nhãn duy nhất vào lần chạy, nhãn này sau đó sẽ được dùng để trích xuất tập dữ liệu đánh giá (một tập hợp các dữ liệu đầu vào, đầu ra và ngữ cảnh).
Chạy luồng trên dữ liệu đầu vào thử nghiệm:
genkit flow:batchRun myRagFlow test_inputs.json --output flow_outputs.json --label customLabel
Trích xuất dữ liệu đánh giá:
genkit eval:extractData myRagFlow --label customLabel --output customLabel_dataset.json
Dữ liệu đã xuất sẽ được xuất dưới dạng tệp json, trong đó từng trường hợp kiểm thử (testCase) ở định dạng sau:
[
{
"testCaseId": string,
"input": string,
"output": string,
"context": array of strings,
"traceIds": array of strings,
}
]
Công cụ trích xuất dữ liệu sẽ tự động xác định vị trí người tha mồi và thêm tài liệu được tạo vào mảng ngữ cảnh. Theo mặc định, eval:run
sẽ chạy trên tất cả trình đánh giá đã định cấu hình. Tương tự như eval:flow
, kết quả của eval:run
sẽ xuất hiện trên trang đánh giá trên Giao diện người dùng dành cho nhà phát triển tại localhost:4000/evaluate
.
Công cụ trích xuất tuỳ chỉnh
Bạn cũng có thể cung cấp công cụ trích xuất tuỳ chỉnh để dùng trong các lệnh eval:extractData
và eval:flow
. Công cụ trích xuất tuỳ chỉnh cho phép bạn ghi đè logic trích xuất mặc định, giúp bạn có thêm sức mạnh trong việc tạo tập dữ liệu và đánh giá các tập dữ liệu đó.
Để định cấu hình công cụ trích xuất tuỳ chỉnh, hãy thêm tệp cấu hình công cụ có tên genkit-tools.conf.js
vào thư mục gốc của dự án (nếu bạn chưa có tệp này).
cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js
Trong tệp cấu hình công cụ, hãy thêm mã sau:
module.exports = {
evaluators: [
{
flowName: 'myFlow',
extractors: {
context: { outputOf: 'foo-step' },
output: 'bar-step',
},
},
],
};
Trong mẫu này, bạn định cấu hình một công cụ trích xuất cho luồng myFlow
. Cấu hình này sẽ ghi đè trình trích xuất cho các trường context
và output
, đồng thời sử dụng logic mặc định cho trường input
.
Sau đây là quy cách của trình trích xuất thông tin đánh giá:
- Trường
evaluators
chấp nhận một mảng các đối tượng EveluatorConfig, các đối tượng này nằm trong phạm vi củaflowName
extractors
là một đối tượng chỉ định cơ chế ghi đè của trình trích xuất. Các khoá hiện được hỗ trợ trongextractors
là[input, output, context]
. Sau đây là các loại giá trị được chấp nhận:string
– đây phải là tên bước, được chỉ định dưới dạng một phép khuấy. Kết quả của bước này được trích xuất cho khoá này.{ inputOf: string }
hoặc{ outputOf: string }
– Các đối tượng này đại diện cho các kênh cụ thể (đầu vào hoặc đầu ra) của một bước. Ví dụ:{ inputOf: 'foo-step' }
sẽ trích xuất dữ liệu đầu vào của bướcfoo-step
cho khoá này.(trace) => string;
– Để tăng tính linh hoạt, bạn có thể cung cấp một hàm chấp nhận dấu vết Genkit và trả vềstring
, đồng thời chỉ định logic trích xuất bên trong hàm này. Hãy tham khảogenkit/genkit-tools/common/src/types/trace.ts
để biết giản đồ TraceData chính xác.
Chạy trên các tập dữ liệu hiện có
Để chạy đánh giá trên một tập dữ liệu đã được trích xuất:
genkit eval:run customLabel_dataset.json
Để xuất dữ liệu sang một vị trí khác, hãy sử dụng cờ --output
.
genkit eval:flow menuSuggestionFlow --input testInputs.json --output customLabel_evalresult.json
Để chạy trên một nhóm nhỏ người đánh giá đã định cấu hình, hãy sử dụng cờ --evaluators
và cung cấp danh sách người đánh giá được phân tách bằng dấu phẩy theo tên:
genkit eval:run customLabel_dataset.json --evaluators=genkit/faithfulness,genkit/answer_relevancy
Tổng hợp dữ liệu thử nghiệm bằng mô hình ngôn ngữ lớn (LLM)
Dưới đây là một quy trình mẫu sử dụng tệp PDF để tạo những câu hỏi mà người dùng có thể đặt ra về tệp đó.
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;
}
);
Sau đó, bạn có thể dùng lệnh này để xuất dữ liệu thành một tệp và dùng để đánh giá.
genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json