评估是一种测试形式,可帮助您验证 LLM 的回答并确保其符合质量标准。
Genkit 通过插件支持第三方评估工具,并搭配强大的可观测性功能,可深入了解采用 LLM 的应用的运行时状态。Genkit 工具可帮助您自动从中间步骤中提取数据(包括输入、输出和信息),以评估 LLM 回答的端到端质量,以及了解系统构建块的性能。
评估类型
Genkit 支持两种类型的评估:
基于推理的评估:此类评估会针对一组预先确定的输入运行,评估相应输出的质量。
这是最常见的评估类型,适用于大多数用例。此方法会针对每次运行的评估测试系统的实际输出。
您可以通过直观地检查结果来手动执行质量评估。或者,您也可以使用评估指标自动执行评估。
原始评估:此类评估会直接评估输入的质量,而无需进行任何推理。此方法通常与使用指标的自动评估方法搭配使用。评估所需的所有必填字段(例如
input
、context
、output
和reference
)必须存在于输入数据集中。如果您有来自外部来源(例如从生产轨迹收集的数据)的数据,并且希望客观衡量收集数据的质量,此方法非常有用。如需了解详情,请参阅本页的高级使用部分。
本部分介绍了如何使用 Genkit 执行基于推理的评估。
快速入门
请按以下步骤快速开始使用 Genkit。
设置
- 使用现有的 Genkit 应用,或按照我们的入门指南创建新的 Genkit 应用。
-
添加以下代码以定义要评估的简单 RAG 应用。在本指南中,我们使用始终返回相同文档的虚构检索器。
import ( "context" "fmt" "log" "github.com/firebase/genkit/go/ai" "github.com/firebase/genkit/go/genkit" "github.com/firebase/genkit/go/plugins/googlegenai" ) func main() { ctx := context.Background() // Initialize Genkit g, err := genkit.Init(ctx, genkit.WithPlugins(&googlegenai.GoogleAI{}), genkit.WithDefaultModel("googleai/gemini-2.0-flash"), ) if err != nil { log.Fatalf("Genkit initialization error: %v", err) } // Dummy retriever that always returns the same facts dummyRetrieverFunc := func(ctx context.Context, req *ai.RetrieverRequest) (*ai.RetrieverResponse, error) { facts := []string{ "Dog is man's best friend", "Dogs have evolved and were domesticated from wolves", } // Just return facts as documents. var docs []*ai.Document for _, fact := range facts { docs = append(docs, ai.DocumentFromText(fact, nil)) } return &ai.RetrieverResponse{Documents: docs}, nil } factsRetriever := genkit.DefineRetriever(g, "local", "dogFacts", dummyRetrieverFunc) m := googlegenai.GoogleAIModel(g, "gemini-2.0-flash") if m == nil { log.Fatal("failed to find model") } // A simple question-answering flow genkit.DefineFlow(g, "qaFlow", func(ctx context.Context, query string) (string, error) { factDocs, err := ai.Retrieve(ctx, factsRetriever, ai.WithTextDocs(query)) if err != nil { return "", fmt.Errorf("retrieval failed: %w", err) } llmResponse, err := genkit.Generate(ctx, g, ai.WithModelName("googleai/gemini-2.0-flash"), ai.WithPrompt("Answer this question with the given context: %s", query), ai.WithDocs(factDocs.Documents...) ) if err != nil { return "", fmt.Errorf("generation failed: %w", err) } return llmResponse.Text(), nil }) }
-
您可以选择向应用添加评估指标,以便在评估时使用。本指南使用
evaluators
软件包中的EvaluatorRegex
指标。 注意:确保import ( "github.com/firebase/genkit/go/plugins/evaluators" ) func main() { // ... metrics := []evaluators.MetricConfig{ { MetricType: evaluators.EvaluatorRegex, }, } // Initialize Genkit g, err := genkit.Init(ctx, genkit.WithPlugins( &googlegenai.GoogleAI{}, &evaluators.GenkitEval{Metrics: metrics} // Add this plugin ), genkit.WithDefaultModel("googleai/gemini-2.0-flash"), ) }
evaluators
软件包已安装到您的 Go 项目中:go get github.com/firebase/genkit/go/plugins/evaluators
-
启动 Genkit 应用。
genkit start -- go run main.go
创建数据集
创建一个数据集,以定义我们要用于评估流程的示例。
前往
http://localhost:4000
中的开发者界面,然后点击 Datasets 按钮以打开“Datasets”(数据集)页面。点击创建数据集按钮,打开创建数据集对话框。
a. 为新数据集提供
datasetId
。本指南使用myFactsQaDataset
。b. 选择
Flow
数据集类型。c. 将验证目标字段留空,然后点击保存
系统随即会显示新数据集页面,其中显示了一个空数据集。请按照以下步骤为其添加示例:
a. 点击添加示例按钮,打开示例编辑器面板。
b. 只有
Input
字段是必填字段。在Input
字段中输入"Who is man's best friend?"
,然后点击保存,将示例 has 添加到数据集中。如果您已配置
EvaluatorRegex
指标并希望试用该指标,则需要指定一个包含要与输出进行匹配的模式的“Reference”字符串。对于上述输入,请将Reference output
文本设置为"(?i)dog"
,这是一个不区分大小写的正则表达式模式,用于匹配流程输出中的“dog”一词。c. 重复步骤 (a) 和 (b) 几次,以添加更多示例。 本指南将以下示例输入添加到数据集中:
"Can I give milk to my cats?" "From which animals did dogs evolve?"
如果您使用的是正则表达式评估器,请使用相应的参考字符串:
"(?i)don't know" "(?i)wolf|wolves"
请注意,这是一个人为构造的示例,正则表达式评估器可能不是评估
qaFlow
响应的正确选择。不过,本指南可应用于您选择的任何 Genkit Go 评估器。完成此步骤后,您的数据集应包含 3 个示例,其中包含上述值。
运行评估并查看结果
如需开始评估流程,请点击数据集页面上的运行新评估按钮。您还可以通过评估标签页启动新的评估。
选择
Flow
单选按钮以评估流程。选择
qaFlow
作为要评估的目标流程。选择
myFactsQaDataset
作为要用于评估的目标数据集。如果您使用 Genkit 插件安装了评估器指标,则可以在本页面中看到这些指标。选择要在此评估运行中使用的指标。这完全是可选的:如果省略此步骤,系统仍会返回评估运行中的结果,但不会返回任何关联的指标。
如果您未提供任何参考值,并且使用的是
EvaluatorRegex
指标,则评估将失败,因为此指标需要设置参考值。点击运行评估以开始评估。这可能需要一段时间,具体取决于您要测试的流程。评估完成后,系统会显示一条成功消息,其中包含用于查看结果的链接。点击该链接可前往评估详情页面。
您可以在此页面上查看评估的详细信息,包括原始输入、提取的上下文和指标(如果有)。
核心概念
术语
了解以下术语有助于确保您正确理解本页面上提供的信息:
评估:评估是评估系统性能的过程。在 Genkit 中,此类系统通常是 Genkit 基元,例如流或模型。评估可以是自动评估,也可以是人工评估。
批量推理:推理是指在流程或模型上运行输入以获取相应输出的过程。批量推理涉及同时对多个输入执行推理。
指标:评估指标是用于为推理结果评分的标准。例如准确性、忠实性、恶意性、输出是否为英语等。
数据集:数据集是用于基于推理的评估的示例集合。数据集通常由
Input
和可选的Reference
字段组成。Reference
字段不会影响评估的推理步骤,但会原样传递给任何评估指标。在 Genkit 中,您可以通过开发者界面创建数据集。Genkit 中有两种类型的数据集:流程数据集和模型数据集。
支持的评估器
Genkit 支持多个评估器,其中一些是内置的,另一些则由外部提供。
Genkit 评估程序
Genkit 包含少量从 JS 评估器插件移植的内置评估器,可帮助您轻松上手:
- EvaluatorDeepEqual - 检查生成的输出是否与提供的参考输出深度相等。
- EvaluatorRegex - 检查生成的输出是否与参考字段中提供的正则表达式匹配。
- EvaluatorJsonata - 检查生成的输出是否与参考字段中提供的 JSONATA 表达式匹配。
高级用法
除了基本功能之外,Genkit 还针对某些评估用例提供高级支持。
使用 CLI 进行评估
Genkit CLI 提供了丰富的 API 来执行评估。在开发者界面不可用(例如在 CI/CD 工作流中)的环境中,此功能尤为有用。
Genkit CLI 提供了 3 个主要的评估命令:eval:flow
、eval:extractData
和 eval:run
。
评估 eval:flow
命令
eval:flow
命令会对输入数据集运行基于推理的评估。此数据集可以以 JSON 文件的形式提供,也可以通过引用 Genkit 运行时中的现有数据集来提供。
# Referencing an existing dataset genkit eval:flow qaFlow --input myFactsQaDataset
# or, using a dataset from a file genkit eval:flow qaFlow --input testInputs.json
注意:请务必先启动 genkit 应用,然后再运行这些 CLI 命令。
genkit start -- go run main.go
其中,testInputs.json
应为包含 input
字段和可选 reference
字段的对象数组,如下所示:
[
{
"input": "What is the French word for Cheese?"
},
{
"input": "What green vegetable looks like cauliflower?",
"reference": "Broccoli"
}
]
如果您的流程需要身份验证,您可以使用 --context
参数指定它:
genkit eval:flow qaFlow --input testInputs.json --context '{"auth": {"email_verified": true}}'
默认情况下,eval:flow
和 eval:run
命令会使用所有可用指标进行评估。如需在部分配置的评估器上运行,请使用 --evaluators
标志,并按名称提供以英文逗号分隔的评估器列表:
genkit eval:flow qaFlow --input testInputs.json --evaluators=genkitEval/regex,genkitEval/jsonata
您可以在开发者界面 (localhost:4000/evaluate
) 中查看运行评估的结果。
eval:extractData
和 eval:run
命令
为了支持原始评估,Genkit 提供了用于从轨迹中提取数据并对提取的数据运行评估指标的工具。例如,如果您使用的是其他框架进行评估,或者从其他环境收集推理结果以在本地进行测试以确保输出质量,这会非常有用。
您可以批量运行 Genkit 流程,并从生成的轨迹中提取评估数据集。原始评估数据集是评估指标的输入集合,无需运行任何先前的推理。
针对测试输入运行流程:
genkit flow:batchRun qaFlow testInputs.json
提取评估数据:
genkit eval:extractData qaFlow --maxRows 2 --output factsEvalDataset.json
导出的数据的格式与之前介绍的数据集格式不同。这是因为此类数据旨在直接与评估指标搭配使用,而无需任何推理步骤。以下是提取数据的语法。
Array<{
"testCaseId": string,
"input": any,
"output": any,
"context": any[],
"traceIds": string[],
}>;
数据提取器会自动定位检索器,并将生成的文档添加到上下文数组。您可以使用 eval:run
命令对此提取的数据集运行评估指标。
genkit eval:run factsEvalDataset.json
默认情况下,eval:run
会针对所有已配置的评估器运行,并且与 eval:flow
一样,eval:run
的结果会显示在位于 localhost:4000/evaluate
的开发者界面的评估页面中。