評估結果

評估是一種測試形式,可協助驗證 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: geminiPro,
      metrics: [GenkitMetric.FAITHFULNESS, GenkitMetric.ANSWER_RELEVANCY],
      embedder: textEmbeddingGecko, // GenkitMetric.ANSWER_RELEVANCY requires an embedder
    }),
  ],
  // ...
});
  npm install @genkit-ai/evaluator @genkit-ai/vertexai

首先,定義要用做 testQuestions.json 的輸入資料集。這個輸入資料集代表您要用來產生評估輸出內容的測試案例。

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

然後,您可以使用 eval:flow 指令,根據 testQuestions.json 提供的測試案例評估資料流。

genkit eval:flow menuQA --input testQuestions.json

接著您可以執行下列指令,在開發人員 UI 中查看評估結果:

genkit start

接著前往 localhost:4000/evaluate

您也可以提供輸出檔案,以檢查 JSON 檔案中的輸出內容。

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

支援的評估工具

Genkit 評估人員

Genkit 內含少數原生評估人員 (靈感來自 RAGAS),可協助您開始使用:

  • 信仰
  • 答案關聯性
  • 惡意行為

Evaluator 外掛程式

Genkit 可透過外掛程式支援其他評估工具:

進階用途

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」的結果會顯示在開發人員 UI 的評估頁面中 (localhost:4000/evaluate)。

自訂擷取工具

您也可以提供要在 eval:extractDataeval:flow 指令中使用的自訂擷取工具。自訂擷取工具可讓您覆寫預設的擷取邏輯,讓您更有效建立和評估資料集。

如要設定自訂擷取工具,請在專案根目錄中新增名為 genkit-tools.conf.js 的工具設定檔 (如果您尚未建立的話)。

cd $GENKIT_PROJECT_HOME
touch genkit-tools.conf.js

在工具設定檔中,新增下列程式碼:

module.exports = {
  evaluators: [
    {
      flowName: 'myFlow',
      extractors: {
        context: { outputOf: 'foo-step' },
        output: 'bar-step',
      },
    },
  ],
};

在此範例中,您將為 myFlow 流程設定擷取器。這項設定會覆寫 contextoutput 欄位的擷取工具,並採用 input 欄位的預設邏輯。

評估擷取工具的規格如下:

  • evaluators 欄位可接受 EvaluatorConfig 物件陣列,且該物件的範圍以 flowName 為範圍
  • extractors 是指定擷取器覆寫值的物件。extractors 目前支援的金鑰為 [input, output, context]。可接受的值類型如下:
    • string:這應該是步驟名稱,並以 Stirng 表示。系統會為這組金鑰擷取這個步驟的輸出內容。
    • { inputOf: string }{ outputOf: string } - 這些物件代表步驟的特定通道 (輸入或輸出內容)。舉例來說,{ inputOf: 'foo-step' } 會擷取這個鍵的步驟 foo-step 的輸入內容。
    • (trace) => string; - 如要享有更多彈性,您可以提供可接受 Genkit 追蹤記錄的函式並傳回 string,然後在這個函式中指定擷取邏輯。如要瞭解確切的 TraceData 結構定義,請參閱 genkit/genkit-tools/common/src/types/trace.ts

在現有資料集上執行

如何對已擷取的資料集執行評估:

genkit eval:run customLabel_dataset.json

如要輸出到其他位置,請使用 --output 標記。

genkit eval:flow menuQA --input testQuestions.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: geminiPro,
        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