为LLM评估设置CI/CD
在 扩展LLM应用时,能够衡量任何提示或模型更改的影响至关重要。本指南展示了如何将promptfoo与CI/CD工作流集成,以自动评估测试用例并确保质量。
这种方法适用于任何CI系统。如果你使用的是Github,可以直接跳转到Github Actions教程或查看Github Marketplace上的操作。
前提条件
- 支持自定义脚本或操作的CI/CD平台(例如,GitHub Actions、GitLab CI、Jenkins)。
- 在CI/CD环境中安装了promptfoo CLI。
- 如果需要,你的LLM提供商的API密钥。
将promptfoo集成到CI/CD的步骤
-
监控更改:配置你的CI/CD管道以在提示文件发生更改时触发。这可以通过为拉取请求或合并请求设置路径过滤器来实现。
-
安装promptfoo:确保在CI/CD环境中安装了
promptfoo
CLI。你可以使用npm等包管理器进行安装:npm install -g promptfoo
更多信息请参见入门指南。
-
设置API密钥:在你的CI/CD配置中将必要的API密钥设置为环境变量。这可能包括OpenAI、Azure或其他LLM提供商的密钥。
-
运行评估:在你的管道中创建一个步骤来执行promptfoo评估。使用
promptfoo eval
命令,指定配置文件和要评估的提示。promptfoo eval -c path/to/config.yaml --prompts path/to/prompts/**/*.json --share -o output.json
如果你不想自动创建可访问的评估视图,请移除
--share
选项。 -
处理结果:运行评估后,你可以解析结果并采取行动,例如在拉取请求上评论、如果有问题则使构建失败,或将结果发布到仪表板。
output.json
文件的模式定义在这里,并遵循以下格式:interface OutputFile {
evalId?: string;
results: EvaluateSummary;
config: Partial<UnifiedConfig>;
shareableUrl: string | null;
}请参见EvaluateSummary和UnifiedConfig的定义。
以下是如何使用输出的示例:
// 解析输出文件以获取评估结果
const output: OutputFile = JSON.parse(fs.readFileSync('output.json', 'utf8'));
// 记录成功和失败的评估数量
console.log(`成功: ${output.results.stats.successes}`);
console.log(`失败: ${output.results.stats.failures}`);
console.log(`查看评估结果: ${output.shareableUrl}`);有关实际示例,请参见Github Action源代码。
-
缓存结果:为了提高效率并减少API调用,你可以在CI/CD管道中启用缓存。这将重用先前的LLM请求和输出的结果以进行后续评估。
通过将
PROMPTFOO_CACHE_PATH
环境变量设置为CI环境中的持久目录来配置缓存。你还可以使用其他环境变量(如PROMPTFOO_CACHE_TYPE
、PROMPTFOO_CACHE_MAX_FILE_COUNT
和PROMPTFOO_CACHE_TTL
)来控制缓存行为。有关缓存配置的更多详细信息,请参阅缓存文档。以下是如何在GitHub Actions工作流中设置缓存的示例:
jobs:
evaluate:
runs-on: ubuntu-latest
steps:
- name: 为promptfoo设置缓存
uses: actions/cache@v2
with:
path: ~/.promptfoo/cache
key: ${{ runner.os }}-promptfoo-${{ hashFiles('**/prompts/**') }}
restore-keys: |
${{ runner.os }}-promptfoo-确保在
promptfoo eval
命令中设置的PROMPTFOO_CACHE_PATH
环境变量与缓存操作中指定的路径匹配。