評估是一種測試形式,可協助驗證 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 可透過外掛程式支援其他評估工具:
- 透過 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
:這應該是步驟名稱,並以 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