在人工智能和大语言模型(LLM)快速发展的今天,如何确保基于LLM的应用程序的质量、安全性和可靠性成为了开发者面临的一大挑战。promptfoo应运而生,它是一款功能强大的开源工具,专门用于测试、评估和红队测试LLM应用,帮助开发者构建更加可靠、安全的AI系统。
promptfoo提供了一系列强大的功能,使LLM应用的测试和评估变得简单高效:
多模型支持:支持OpenAI、Anthropic、Azure、Google等主流LLM提供商,以及Llama等开源模型。
自动化评分:通过定义各种断言类型,实现对LLM输出的自动化评分。
红队测试:内置红队测试功能,帮助发现潜在的安全漏洞。
详细报告:生成矩阵视图和风险报告,直观展示评估结果。
CI/CD集成:支持命令行和CI/CD集成,实现持续测试。
高度可定制:提供灵活的配置选项,满足不同场景的需求。
promptfoo的典型工作流程如下:
promptfoo eval
评估所有输出。promptfoo相比其他评估工具有以下优势:
要开始使用promptfoo,只需运行以下命令:
npx promptfoo@latest init
这将在当前目录创建一个promptfooconfig.yaml
占位文件。编辑提示词和变量后, 运行以下命令启动评估:
npx promptfoo@latest eval
运行以下命令开始红队测试:
npx promptfoo@latest redteam init
这将引导您完成设置过程,包括选择要查找的漏洞类型等。
promptfoo使用YAML配置格式,将每个提示词应用于一系列示例输入(即"测试用例"),并检查它们是否满足要求(即"断言")。
以下是一个简单的配置示例:
prompts: [prompt1.txt, prompt2.txt] providers: [openai:gpt-4o-mini, ollama:llama2:70b] tests: - description: '测试翻译为法语' vars: language: French input: Hello world assert: - type: contains-json - type: javascript value: output.length < 100 - description: '测试翻译为德语' vars: language: German input: How's it going? assert: - type: llm-rubric value: does not describe self as an AI, model, or chatbot - type: similar value: was geht threshold: 0.6 # 余弦相似度
promptfoo支持多种断言类型,包括确定性评估指标和模型辅助评估指标。以下是部分支持的断言类型:
确定性评估指标:
equals
:输出完全匹配contains
:输出包含子字符串regex
:输出匹配正则表达式is-json
:输出是有效的JSONjavascript
:提供的JavaScript函数验证输出python
:提供的Python函数验证输出模型辅助评估指标:
similar
:使用嵌入和余弦相似度进行评估classifier
:通过分类器运行LLM输出llm-rubric
:使用语言模型根据给定标准评分LLM输出factuality
:确保LLM输出符合给定事实moderation
:确保输出安全每种断言类型都可以通过添加not-
前缀来取反,例如not-equals
或not-regex