Skip to main content

为LLM评估设置CI/CD

在扩展LLM应用时,能够衡量任何提示或模型更改的影响至关重要。本指南展示了如何将promptfoo与CI/CD工作流集成,以自动评估测试用例并确保质量。

这种方法适用于任何CI系统。如果你使用的是Github,可以直接跳转到Github Actions教程或查看Github Marketplace上的操作。

CI上的自动LLM评估

前提条件

  • 支持自定义脚本或操作的CI/CD平台(例如,GitHub Actions、GitLab CI、Jenkins)。
  • 在CI/CD环境中安装了promptfoo CLI。
  • 如果需要,你的LLM提供商的API密钥。

将promptfoo集成到CI/CD的步骤

  1. 监控更改:配置你的CI/CD管道以在提示文件发生更改时触发。这可以通过为拉取请求或合并请求设置路径过滤器来实现。

  2. 安装promptfoo:确保在CI/CD环境中安装了promptfoo CLI。你可以使用npm等包管理器进行安装:

    npm install -g promptfoo

    更多信息请参见入门指南

  3. 设置API密钥:在你的CI/CD配置中将必要的API密钥设置为环境变量。这可能包括OpenAI、Azure或其他LLM提供商的密钥。

  4. 运行评估:在你的管道中创建一个步骤来执行promptfoo评估。使用promptfoo eval命令,指定配置文件和要评估的提示。

    promptfoo eval -c path/to/config.yaml --prompts path/to/prompts/**/*.json --share -o output.json

    如果你不想自动创建可访问的评估视图,请移除--share选项。

  5. 处理结果:运行评估后,你可以解析结果并采取行动,例如在拉取请求上评论、如果有问题则使构建失败,或将结果发布到仪表板。

    output.json文件的模式定义在这里,并遵循以下格式:

    interface OutputFile {
    evalId?: string;
    results: EvaluateSummary;
    config: Partial<UnifiedConfig>;
    shareableUrl: string | null;
    }

    请参见EvaluateSummaryUnifiedConfig的定义。

    以下是如何使用输出的示例:

    // 解析输出文件以获取评估结果
    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源代码

  6. 缓存结果:为了提高效率并减少API调用,你可以在CI/CD管道中启用缓存。这将重用先前的LLM请求和输出的结果以进行后续评估。

    通过将PROMPTFOO_CACHE_PATH环境变量设置为CI环境中的持久目录来配置缓存。你还可以使用其他环境变量(如PROMPTFOO_CACHE_TYPEPROMPTFOO_CACHE_MAX_FILE_COUNTPROMPTFOO_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环境变量与缓存操作中指定的路径匹配。

示例:GitHub Actions集成

以下是一个简化的示例,展示了如何在每次拉取请求时设置GitHub Actions工作流来评估提示:

name: 'LLM 提示评估'

on:
pull_request:
paths:
- 'path/to/prompts/**'

jobs:
evaluate:
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v2

- name: 设置 promptfoo
run: npm install -g promptfoo

- name: 运行 promptfoo 评估
run: promptfoo eval -c path/to/config.yaml --prompts path/to/prompts/**/*.json -o output.json
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}

如果你在使用Github,Github Actions教程中有一个完整的解决方案,你也可以在Github Marketplace上查看该操作。