Đánh giá

Đánh giá là một hình thức thử nghiệm giúp bạn xác thự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.

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ẽ giúp 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 mô hình ngôn ngữ lớn (LLM). Công cụ Genkit giúp bạn tự động trích xuất dữ liệu, bao gồm dữ liệu đầu vào, kết quả đầ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 rõ hiệu suất của các thành phần trong hệ thống của bạn.

Ví dụ: nếu bạn có flow RAG, Genkit sẽ trích xuất tập hợp 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 khi nó chạy trong bối cảnh của luồng như dưới đây với các chỉ số về độ trung thực và mức độ liên quan của câu trả lời của Genkit:

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

export default configureGenkit({
  plugins: [
    genkitEval({
      judge: geminiPro,
      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 các 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à testQuestions.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ẽ dùng để tạo đầu ra cho việc đánh giá.

[
  "What is on the menu?",
  "Does the restaurant have clams?",
  "What is the special of the day?"
]

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 testQuestions.json.

genkit eval:flow menuQA --input testQuestions.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 menuQA --input testQuestions.json --output eval-result.json

Nhân viên đánh giá được hỗ trợ

Nhân viên đánh giá bộ công cụ tạo sinh

Genkit bao gồm một số ít những người đánh giá bản địa, lấy cảm hứng từ RAGAS, để giúp bạn bắt đầu:

  • Trung thực
  • Mức độ liên quan của câu trả lời
  • Độc hại

Trình bổ trợ trình đánh giá

Genkit hỗ trợ thêm nhân viên đánh giá 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 để đánh giá nhanh quy trình, nhưng đôi khi bạn có thể cần kiểm soát nhiều hơn đối với 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ả mà bạn muố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. Sau đó, nhãn này sẽ được dùng để trích xuất tập dữ liệu đánh giá (một tập hợp dữ liệu đầu vào, đầu ra và ngữ cảnh).

Chạy luồng dữ liệu đầu vào kiểm thử:

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 được xuất sẽ được xuất dưới dạng tệp json với mỗi 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 định vị trình truy xuất 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 dựa trên tất cả trình đánh giá đã định cấu hình và giống như eval:flow, kết quả cho eval:run sẽ xuất hiện trên trang đánh giá của 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 dữ liệu tuỳ chỉnh

Bạn cũng có thể cung cấp các công cụ trích xuất tuỳ chỉnh để sử 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á chúng.

Để định cấu hình các 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 trình trích xuất cho quy trình myFlow. Cấu hình này sẽ ghi đè bộ 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à thông số kỹ thuật của các công cụ trích xuất dữ liệu đánh giá:

  • Trường evaluators chấp nhận một mảng các đối tượng EveluatorConfig trong phạm vi của flowName
  • extractors là đối tượng chỉ định các cơ chế ghi đè trình trích xuất. Các khoá hiện được hỗ trợ trong extractors[input, output, context]. Các loại giá trị được chấp nhận là:
    • string – đây phải là tên bước, được chỉ định là yếu tố 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; – Để linh hoạt hơn, 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ó

Cách chạy việc đánh giá trên một tập dữ liệu đã trích xuất:

genkit eval:run customLabel_dataset.json

Để xuất sang một vị trí khác, hãy sử dụng cờ --output.

genkit eval:flow menuQA --input testQuestions.json --output customLabel_evalresult.json

Để chạy trên một tập hợp con gồm những 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 kiểm thử bằng một 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ể thắc mắc.

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: geminiPro,
        prompt: {
          text: `Generate one question about the text below: ${chunks[i]}`,
        },
      });
      questions.push(qResponse.text());
    }
    return questions;
  }
);

Sau đó, bạn có thể sử dụng lệnh này để xuất dữ liệu vào một tệp và sử dụng để đánh giá.

genkit flow:run synthesizeQuestions '"my_input.pdf"' --output synthesizedQuestions.json