評估

評估是一種測試形式,可協助驗證 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

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

genkit start

接著前往 localhost:4000/evaluate

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

genkit eval:flow menuSuggestionFlow --input testInputs.json --output eval-result.json

支援的評估人員

Genkit 評估工具

Genkit 提供幾個靈感來自 RAGAS 的原生評估人員,可幫助你踏出第一步:

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

評估工具外掛程式

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:floweval: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 - 這應是步驟名稱,指定為一個步驟。系統會擷取此金鑰的步驟輸出內容。
    • { 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 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