การประเมินคือรูปแบบการทดสอบที่ช่วยให้คุณตรวจสอบคำตอบของ 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 Rapid Evaluators ผ่านปลั๊กอิน VertexAI
- การประเมินเกณฑ์ 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
ได้ รวมถึงระบุตรรกะการดึงข้อมูลภายในฟังก์ชันนี้เพื่อให้มีความยืดหยุ่นมากขึ้น โปรดดูgenkit/genkit-tools/common/src/types/trace.ts
สำหรับสคีมา TraceData ทุกประการ
กำลังทำงานบนชุดข้อมูลที่มีอยู่
หากต้องการเรียกใช้การประเมินจากชุดข้อมูลที่แยกออกมาแล้ว ให้ทำดังนี้
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