Đánh giá

Đá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á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:extractDataeval: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 contextoutput, đồ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ủa flowName
  • 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ợ trong extractors[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ước foo-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ảo genkit/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