評估是一種測試形式,可協助驗證 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 會透過外掛程式支援其他評估人員:
- 透過 VertexAI 外掛程式使用 VertexAI Rapid Evaluators。
- 透過 LangChain 外掛程式的 LangChain 條件評估。
進階用途
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:extractData
和 eval: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
資料流設定擷取器。此設定會覆寫 context
和 output
欄位的擷取工具,並使用 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