openai/evals
GitHub: openai/evals
OpenAI 推出的开源 LLM 评估框架,提供基准注册表和自定义评估能力,帮助开发者系统化衡量模型及基于 LLM 构建系统的表现。
Stars: 18699 | Forks: 2990
# OpenAI Evals
Evals 提供了一个用于评估大型语言模型(LLMs)或基于 LLMs 构建的系统的框架。我们提供了现有的 evals 注册表,用于测试 OpenAI 模型的不同维度,并且能够为您关注的用例编写自定义的 evals。您还可以使用您的数据来构建私有 evals,以代表您工作流程中常见的 LLMs 模式,而无需公开暴露任何数据。
如果您正在使用 LLMs 进行构建,创建高质量的 evals 是您能做的最具影响力的事情之一。如果没有 evals,要了解不同的模型版本可能会如何影响您的用例,可能会非常困难且耗时。用 [OpenAI 总裁 Greg Brockman](https://twitter.com/gdb/status/1733553161884127435) 的话来说:
## 设置
要运行 evals,您需要设置并指定您的 [OpenAI API key](https://platform.openai.com/account/api-keys)。获取 API key 后,请使用 [`OPENAI_API_KEY` 环境变量](https://platform.openai.com/docs/quickstart/step-2-setup-your-api-key)进行指定。请注意,在运行 evals 时使用 API 相关联的[成本](https://openai.com/pricing)。您也可以使用 [Weights & Biases](https://wandb.ai/wandb_fc/openai-evals/reports/OpenAI-Evals-Demo-Using-W-B-Prompts-to-Run-Evaluations--Vmlldzo0MTI4ODA3) 来运行和创建 evals。
**最低要求版本:Python 3.9**
### 下载 evals
我们的 evals 注册表是使用 [Git-LFS](https://git-lfs.com/) 存储的。下载并安装 LFS 后,您可以使用以下命令获取 evals(在您的 evals 仓库的本地副本中):
```
cd evals
git lfs fetch --all
git lfs pull
```
这将会填充 `evals/registry/data` 下的所有指针文件。
您可能只想获取特定 eval 的数据。您可以通过以下方式实现:
```
git lfs fetch --include=evals/registry/data/${your eval}
git lfs pull
```
### 制作 evals
如果您打算创建 evals,我们建议直接从 GitHub 克隆此仓库,并使用以下命令安装依赖项:
```
pip install -e .
```
使用 `-e`,您对 eval 所做的更改将立即生效,无需重新安装。
(可选)您可以使用以下命令安装用于 pre-commit 的格式化工具:
```
pip install -e .[formatters]
```
然后运行 `pre-commit install` 将 pre-commit 安装到您的 git hooks 中。现在 pre-commit 将在每次提交时运行。
如果您想手动在仓库中运行所有的 pre-commit hooks,请运行 `pre-commit run --all-files`。要运行单个 hooks,请使用 `pre-commit run `。
## 运行 evals
如果您不想贡献新的 evals,而只想在本地运行它们,您可以通过 pip 安装 evals 包:
```
pip install evals
```
您可以在 [`run-evals.md`](docs/run-evals.md) 中找到运行现有 evals 的完整说明,并在 [`eval-templates.md`](docs/eval-templates.md) 中查看我们现有的 eval 模板。对于更高级的用例(例如 prompt 链或使用工具的 agents),您可以使用我们的 [Completion Function Protocol](docs/completion-fns.md)。
我们为您提供了将 eval 结果记录到 Snowflake 数据库的选项,如果您拥有该数据库或希望设置一个的话。要使用此选项,您需要进一步指定 `SNOWFLAKE_ACCOUNT`、`SNOWFLAKE_DATABASE`、`SNOWFLAKE_USERNAME` 和 `SNOWFLAKE_PASSWORD` 环境变量。
## 编写 evals
我们建议您从以下方面开始:
- 了解构建 eval 的过程:[`build-eval.md`](docs/build-eval.md)
- 探索实现自定义 eval 逻辑的示例:[`custom-eval.md`](docs/custom-eval.md)
- 编写您自己的 completion functions:[`completion-fns.md`](docs/completion-fns.md)
- 查看我们关于编写 evals 的入门指南:[OpenAI Evals 入门](https://cookbook.openai.com/examples/evaluation/getting_started_with_openai_evals)
请注意,我们目前不接受带有自定义代码的 evals!虽然我们目前要求您不要提交此类 evals,但您仍然可以提交带有自定义模型评分 YAML 文件的模型评分 evals。
如果您认为自己有一个有趣的 eval,请提交包含您贡献的 pull request。OpenAI 员工在考虑改进即将推出的模型时会积极审查这些 evals。
## 常见问题
你们有关于如何从头到尾构建一个 eval 的示例吗?
- 有的!这些都在 `examples` 文件夹中。我们建议您也阅读 [`build-eval.md`](docs/build-eval.md),以便更深入地了解这些示例中发生的事情。
你们有以多种不同方式实现的 evals 示例吗?
- 有的!具体请参见 `evals/registry/evals/coqa.yaml`。我们为各种 eval 模板实现了 [CoQA](https://stanfordnlp.github.io/coqa/) 数据集的一小部分,以帮助说明它们之间的区别。
当我运行一个 eval 时,它有时会在最后(在最终报告之后)卡住。这是怎么回事?
- 这是一个已知问题,但您应该能够安全地中断它,并且 eval 应该会随后立即完成。
代码太多了,我只想快速启动一个 eval。求帮助?或者,
我是一名世界级的 prompt 工程师。我选择不写代码。我该如何贡献我的智慧?
- 如果您按照现有的 [eval 模板](docs/eval-templates.md) 来构建一个基础的或模型评分的 eval,您根本不需要编写任何评估代码!只需以 JSON 格式提供您的数据,并在 YAML 中指定您的 eval 参数即可。[build-eval.md](docs/build-eval.md) 会引导您完成这些步骤,您还可以结合 `examples` 文件夹中的 Jupyter notebooks 来帮助您快速入门。但请记住,一个好的 eval 必然需要仔细的思考和严谨的实验!
## 免责声明
通过贡献 evals,即表示您同意将您的评估逻辑和数据置于与本仓库相同的 MIT 许可协议之下。您必须拥有足够的权利才能上传 eval 中使用的任何数据。OpenAI 保留在我们的产品未来的服务改进中使用这些数据的权利。对 OpenAI evals 的贡献将受我们常规的《使用政策》约束:https://platform.openai.com/docs/usage-policies。
## 设置
要运行 evals,您需要设置并指定您的 [OpenAI API key](https://platform.openai.com/account/api-keys)。获取 API key 后,请使用 [`OPENAI_API_KEY` 环境变量](https://platform.openai.com/docs/quickstart/step-2-setup-your-api-key)进行指定。请注意,在运行 evals 时使用 API 相关联的[成本](https://openai.com/pricing)。您也可以使用 [Weights & Biases](https://wandb.ai/wandb_fc/openai-evals/reports/OpenAI-Evals-Demo-Using-W-B-Prompts-to-Run-Evaluations--Vmlldzo0MTI4ODA3) 来运行和创建 evals。
**最低要求版本:Python 3.9**
### 下载 evals
我们的 evals 注册表是使用 [Git-LFS](https://git-lfs.com/) 存储的。下载并安装 LFS 后,您可以使用以下命令获取 evals(在您的 evals 仓库的本地副本中):
```
cd evals
git lfs fetch --all
git lfs pull
```
这将会填充 `evals/registry/data` 下的所有指针文件。
您可能只想获取特定 eval 的数据。您可以通过以下方式实现:
```
git lfs fetch --include=evals/registry/data/${your eval}
git lfs pull
```
### 制作 evals
如果您打算创建 evals,我们建议直接从 GitHub 克隆此仓库,并使用以下命令安装依赖项:
```
pip install -e .
```
使用 `-e`,您对 eval 所做的更改将立即生效,无需重新安装。
(可选)您可以使用以下命令安装用于 pre-commit 的格式化工具:
```
pip install -e .[formatters]
```
然后运行 `pre-commit install` 将 pre-commit 安装到您的 git hooks 中。现在 pre-commit 将在每次提交时运行。
如果您想手动在仓库中运行所有的 pre-commit hooks,请运行 `pre-commit run --all-files`。要运行单个 hooks,请使用 `pre-commit run 标签:DLL 劫持, Petitpotam, Python, 人工智能, 大语言模型, 开发框架, 无后门, 模型评估, 用户模式Hook绕过, 逆向工具