使用 Promptfoo 进行评估
先决条件
要使用 Promptfoo,您需要在系统上安装 node.js 和 npm。有关更多信息,请遵循 此指南
您可以使用 npm 安装 promptfoo,或直接使用 npx 运行它。在本指南中,我们将使用 npx。
注意:对于此示例,您无需运行 npx promptfoo@latest init
,因为此目录中已有一个初始化的 promptfooconfig.yaml
文件
在此处查看官方文档 here
入门
评估由 promptfooconfig...
.yaml
文件进行编排。在我们的应用程序中,我们将评估逻辑分为 promptfooconfig_retrieval.yaml
(用于评估检索系统)和 promptfooconfig_end_to_end.yaml
(用于评估端到端性能)。在这些文件中,我们定义了以下部分
检索评估
- 提示 (Prompts)
- Promptfoo 允许您以多种不同格式导入提示。您可以在此处阅读更多相关信息 here。
- 在我们的案例中,我们跳过了每次都提供新提示,而只是将
{{query}}
传递给每个检索 '提供程序' 进行评估
- 提供程序 (Providers)
- 我们没有使用标准的 LLM 提供程序,而是为
guide.ipynb
中的每种检索方法编写了自定义提供程序
- 我们没有使用标准的 LLM 提供程序,而是为
- 测试 (Tests)
- 我们将使用与
guide.ipynb
中相同的数据。我们将其分为end_to_end_dataset.csv
和retrieval_dataset.csv
,并为每个数据集添加了一个__expected
列,这使我们能够自动为每一行运行断言 - 您可以在
eval_end_to_end.py
中找到我们的检索评估逻辑
- 我们将使用与
端到端评估
- 提示 (Prompts)
- 提供程序 (Providers)
- 使用 Promptfoo,您可以连接到不同平台上的许多不同的 LLM,请在此处查看更多信息 here for more。在
guide.ipynb
中,我们使用了 Haiku,默认温度为 0.0。我们将使用 Promptfoo 来试验不同的模型。
- 使用 Promptfoo,您可以连接到不同平台上的许多不同的 LLM,请在此处查看更多信息 here for more。在
- 测试 (Tests)
- 我们将使用与
guide.ipynb
中相同的数据。我们将其分为end_to_end_dataset.csv
和retrieval_dataset.csv
,并为每个数据集添加了一个__expected
列,这使我们能够自动为每一行运行断言 - Promptfoo 具有广泛的内置测试,您可以在此处找到 here。
- 您可以在
eval_retrieval.py
中找到检索系统的测试逻辑,在eval_end_to_end.py
中找到端到端系统的测试逻辑
- 我们将使用与
- 输出 (Output)
运行评估
要开始使用 Promptfoo,请打开终端并导航到此目录 (./evaluation
)。
在运行评估之前,您必须定义以下环境变量:
export ANTHROPIC_API_KEY=YOUR_API_KEY
export VOYAGE_API_KEY=YOUR_API_KEY
从 evaluation
目录运行以下命令之一。
-
要评估端到端系统性能:
npx promptfoo@latest eval -c promptfooconfig_end_to_end.yaml --output ../data/end_to_end_results.json
-
要单独评估检索系统性能:
npx promptfoo@latest eval -c promptfooconfig_retrieval.yaml --output ../data/retrieval_results.json
评估完成后,终端将打印数据集中每一行的结果。您也可以运行 npx promptfoo@latest view
来在 promptfoo UI 查看器中查看输出。