TL;DR
Promptfooは、開発者がAIアプリケーションを体系的にテストするのに役立つ、オープンソースのLLM評価およびレッドチームフレームワークです。90以上のモデルプロバイダーをサポートし、67以上のセキュリティ攻撃プラグインを提供し、プライバシーのために100%ローカルで動作します。160万回のnpmダウンロードと、1,000万人以上のユーザーにサービスを提供する企業での本番環境での使用により、LLMテストの標準となっています。npm install -g promptfoo および promptfoo init --example getting-started で始めましょう。
はじめに
AI搭載の顧客サポートチャットボットを構築するのに数週間を費やしました。開発中は完璧に質問に答えていました。しかし、ユーザーは機密データを漏洩させたり、安全ガードレールを回避したり、一貫性のない応答をさせたりする方法を見つけ始めました。
このシナリオは毎日繰り返されています。チームは直感と手動テストに基づいてLLMアプリケーションを出荷しますが、本番環境で脆弱性や品質問題を発見するだけです。これらの問題をリリース後に修正するコストは、開発中に検出するよりも100倍高くなります。
Promptfooは、LLMアプリケーションに体系的で自動化されたテストをもたらすことで、この問題を解決します。複数のモデルでプロンプトを評価し、セキュリティレッドチーム評価を実行し、ユーザーに到達する前にリグレッションを検出することができます。
私はpromptfooのコードベース(バージョン0.121.2)を分析し、そのコア機能をテストして、この包括的なガイドを作成しました。評価の設定方法、セキュリティスキャンの実行方法、CI/CDとの統合方法、および一般的な落とし穴の回避方法を学びます。
最終的には、LLMアプリケーション用の機能するテストスイートを手に入れ、自信を持って出荷する方法を知るでしょう。
Promptfooとは何か、なぜそれが必要なのか
Promptfooは、LLMアプリケーションを評価し、レッドチームテストを行うためのコマンドラインツールおよびNode.jsライブラリです。AI開発の特異性のために特別に構築されたテストフレームワークと考えてください。

出力が非決定論的であるため、従来のテストツールはLLMでは機能しません。同じプロンプトが毎回異なる応答を生成する場合、厳密な文字列の一致をアサートすることはできません。Promptfooはこれを以下の方法で解決します。
- セマンティックなアサーション:厳密なテキストではなく意味をチェックします
- LLMによる評価(LLM-graded evals):あるモデルが別のモデルの出力を評価します
- マルチモデル比較:GPT-4、Claudeなど、同じプロンプトを複数のモデルでテストします
- セキュリティプラグイン:脆弱性を自動的に調査します
このツールはあなたのマシン上でローカルに動作します。クラウド機能をオプトインしない限り、あなたのプロンプトとテストデータがあなたの環境を離れることはありません。このプライバシーファーストな設計は、機密データを使用したテストに適しています。
Promptfooが解決する問題
ほとんどのチームはLLMアプリケーションを手動でテストします。いくつかのプロンプトを送信し、出力を読んで、問題ないかどうかを判断します。このアプローチには3つの致命的な欠陥があります。
- リグレッション検出がない:モデルのアップデートが既存の機能を壊したかどうかを判断できません
- カバレッジのギャップ:手動テストでは、エッジケースや敵対的入力を見落とします
- メトリクスがない:改善を追跡したり、モデルを客観的に比較したりできません
Promptfooは、これを変更があるたびに実行される自動評価に置き換えます。テストケースを一度定義すれば、任意のモデルに対して実行できます。結果には、合格/不合格率、コスト比較、レイテンシメトリクスが含まれます。
Promptfooの利用者
このプロジェクトは160万回のnpmダウンロードを記録し、1,000万人以上のエンドユーザーにサービスを提供するLLMアプリケーションを支えています。企業はこれを以下の目的で使用しています。
- 一貫性のある正確な応答が必要な顧客サポートチャットボット
- ブランドの声を維持する必要があるコンテンツ生成パイプライン
- 厳格なコンプライアンス要件を持つヘルスケアおよびフィンテックアプリケーション
- データを漏洩させたり、有害な入力を受け入れたりしてはならないセキュリティ上機密性の高いシステム
2026年3月、PromptfooはOpenAIに加わりました。このプロジェクトは引き続きオープンソースであり、MITライセンスの下で、新しい所有者のもとで開発が継続されます。
開始:最初の評価のインストールと実行
promptfooはグローバルにインストールすることも、npxを使用してインストールせずに実行することもできます。
インストール
# グローバルインストール(推奨)
npm install -g promptfoo
# またはインストールせずに実行
npx promptfoo@latest
# macOSユーザーはHomebrewも利用可能
brew install promptfoo
# Pythonユーザーはpipも利用可能
pip install promptfoo
APIキーを環境変数として設定します。
export OPENAI_API_KEY=sk-abc123
export ANTHROPIC_API_KEY=sk-ant-xxx
最初の評価を作成する
例のプロジェクトを初期化します。
promptfoo init --example getting-started
cd getting-started
これにより、サンプルプロンプト、プロバイダー、テストケースを含む promptfooconfig.yaml ファイルが作成されます。
評価を実行します。
promptfoo eval
Web UIで結果を表示します。
promptfoo view
UIは localhost:3000 で開き、各モデルからの出力のサイドバイサイド比較と、各アサーションの合格/不合格ステータスが表示されます。
設定ファイルの理解
promptfooconfig.yaml ファイルはあなたの評価スイートを定義します。
description: "My First Eval Suite"
prompts:
- prompts/greeting.txt
- prompts/farewell.txt
providers:
- openai:gpt-4o
- anthropic:claude-sonnet-4-5
tests:
- vars:
input: "Hello"
assert:
- type: contains
value: "Hi"
- type: latency
threshold: 3000
- prompts: テストするファイルまたはインラインテキスト
- providers: 評価するモデル(90以上のプロバイダーをサポート)
- tests: 変数とアサーションを含むテストケース
これを何百ものテストケースに拡張できます。多くのチームは評価設定をバージョン管理下に置き、すべてのプルリクエストでCIで実行しています。
コア機能:Promptfooでできること
1. 自動評価
自動評価はpromptfooの基盤です。期待される結果を持つテストケースを定義し、ツールがそれらをあなたが選んだモデルに対して実行します。
アサーションタイプ
Promptfooには30以上の組み込みアサーションタイプが含まれています。
| アサーション | 目的 |
|---|---|
contains |
出力に部分文字列が含まれる |
equals |
厳密な文字列一致 |
regex |
正規表現パターンとの一致 |
json-schema |
JSON構造の検証 |
javascript |
カスタムJS関数が合格/不合格を返す |
python |
カスタムPython関数 |
llm-rubric |
LLMを使用して出力を評価する |
similar |
セマンティック類似度スコア |
latency |
閾値以下の応答時間 |
cost |
閾値以下のリクエストあたりのコスト |
複数のアサーションの例:
tests:
- vars:
question: "What is the capital of France?"
assert:
- type: contains
value: "Paris"
- type: javascript
value: output.length < 100
- type: latency
threshold: 2000
- type: cost
threshold: 0.001
このテストは、回答にパリが含まれていること、100文字以内であること、2秒以内に応答すること、およびコストが0.001ドル未満であることをチェックします。
LLMによる評価
llm-rubric アサーションは、あるLLMを使用して別のLLMの出力を評価します。これは、トーンや有用性などの主観的な基準に強力です。
assert:
- type: llm-rubric
value: "Response should be helpful, harmless, and honest"
グレーダーLLMが出力を読み取り、あなたのルーブリックに対して採点します。コスト削減のためにより安価なモデルを評価に使用することができます。
2. レッドチームテストとセキュリティテスト
Promptfooには、レッドチームモジュールを介した包括的なセキュリティテストが含まれています。脆弱性を調査するために敵対的入力を自動的に生成します。

サポートされている攻撃ベクトル
レッドチームシステムには、カテゴリ別に整理された67以上のプラグインが含まれています。
| カテゴリ | テスト内容 |
|---|---|
| プロンプトインジェクション | 直接、間接、およびコンテキストインジェクション攻撃 |
| ジェイルブレイク | DAN、ペルソナ切り替え、ロールプレイバイパス |
| データ流出 | SSRF、システムプロンプト抽出、プロンプト漏洩 |
| 有害なコンテンツ | ヘイトスピーチ、危険な活動、自傷行為の要求 |
| コンプライアンス | PII漏洩、HIPAA違反、金融データ露出 |
| オーディオ/ビジュアル | オーディオインジェクションおよび画像ベースの攻撃 |
レッドチームスキャンの実行
レッドチーム設定を初期化します。
promptfoo redteam init
セキュリティスキャンを実行します。
promptfoo redteam run
レポートを表示します。
promptfoo redteam report [directory]
redteam run コマンドは2つのステップを実行します。
- アプリケーションに合わせた動的な攻撃プローブを生成します
- ターゲットに対してプローブを評価し、脆弱性をスコアリングします
結果には、深刻度評価(致命的、高、中、低)、悪用可能なテストケース、および修正推奨事項が含まれます。
レッドチーム出力例
脆弱性の概要:
- 致命的: 2 (PII漏洩、プロンプト抽出)
- 高: 5 (ジェイルブレイク、インジェクション攻撃)
- 中: 12 (バイアス、一貫性のない応答)
- 低: 23 (軽微なポリシー違反)
デプロイ前に重大な問題を修正してください。修正を確認するために、変更後にスキャンを再実行してください。
3. プルリクエストのコードスキャン
PromptfooはGitHub Actionsと統合し、プルリクエストのLLM関連のセキュリティ問題をスキャンします。
# .github/workflows/promptfoo-scan.yml
name: Promptfoo Code Scan
on: [pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: promptfoo/promptfoo/code-scan-action@main
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
これにより、以下が検出されます。
- 設定ファイル内のハードコードされたAPIキー
- 安全でないプロンプトパターン
- 入力検証の欠如
- 潜在的なプロンプトインジェクションベクトル
4. モデル比較
複数のモデルからの出力をサイドバイサイドで比較し、あなたのユースケースに最適なものを選択します。
# 複数のプロバイダーで評価を実行
promptfoo eval
# Web UIで比較を表示
promptfoo view
Web UIには以下が表示されます。
- モデルごとの合格/不合格率
- 1000リクエストあたりのコスト
- 平均レイテンシ
- 定性的な出力の違い
このデータ駆動型アプローチは、馴染みのあるモデルへの偏見を防ぎます。特定の評価では、より安価なモデルがGPT-4を上回る可能性があることがわかるかもしれません。
サポートされているプロバイダー:90以上のLLM統合
Promptfooは、すぐに使える状態で90以上のLLMプロバイダーをサポートしています。コードを変更することなく、OpenAI、Anthropic、Google、Amazon、およびローカルモデルで同じプロンプトをテストできます。
主要プロバイダー
| プロバイダー | モデル |
|---|---|
| OpenAI | GPT-4, GPT-4o, GPT-4o-mini, o1, o3 |
| Anthropic | Claude 3.5/3.7/4.5/4.6, Thinking models |
| Gemini 1.5/2.0, Vertex AI | |
| Microsoft | Azure OpenAI, Phi |
| Amazon | Bedrock (Claude, Llama, Titan) |
| Meta | Llama 3, 3.1, 3.2 (複数のプロバイダー経由) |
| Ollama | ローカルモデル (Llama, Mistral, Phi) |
カスタムプロバイダー
モデルがサポートされていない場合は、PythonまたはJavaScriptでカスタムプロバイダーを作成できます。
Pythonの例:
# custom_provider.py
from typing import Any
class CustomProvider:
async def call_api(self, prompt: str, options: dict, context: dict) -> dict:
response = await my_async_api.generate(prompt)
return {
"output": response.text,
"tokenUsage": {
"total": response.usage.total_tokens,
"prompt": response.usage.prompt_tokens,
"completion": response.usage.completion_tokens
}
}
JavaScriptの例:
// customProvider.js
export default class CustomProvider {
async callApi(prompt) {
return {
output: await myApi.generate(prompt),
tokenUsage: { total: 50, prompt: 20, completion: 30 }
};
}
}
設定にカスタムプロバイダーを登録します。
providers:
- id: file://custom_provider.py
config:
api_key: ${MY_API_KEY}
コマンドラインインターフェース:必須コマンド
PromptfooのCLIは、日常のワークフローに必要なすべての機能を提供します。
主要コマンド
# 評価を実行する
promptfoo eval -c promptfooconfig.yaml
# Web UIを開く
promptfoo view
# 結果をオンラインで共有する
promptfoo share
# レッドチームテスト
promptfoo redteam init
promptfoo redteam run
# 設定
promptfoo init
promptfoo validate [config]
# 結果管理
promptfoo list
promptfoo show <id>
promptfoo delete <id>
promptfoo export <id>
# ユーティリティ
promptfoo cache clear
promptfoo retry <id>
便利なフラグ
--no-cache # 新しい結果のためにキャッシュを無効にする
--max-concurrency <n> # 並行API呼び出しを制限する
--output <file> # 結果をJSONファイルに書き込む
--verbose # デバッグログを有効にする
--env-file <path> # ファイルから環境変数を読み込む
--filter <pattern> # 特定のテストケースを実行する
例:カスタム設定で評価を実行する
promptfoo eval \
-c promptfooconfig.yaml \
--no-cache \
--max-concurrency 3 \
--output results.json \
--env-file .env
これは、評価を最新の状態(キャッシュなし)で実行し、同時実行を3つの並行呼び出しに制限し、結果をJSONに保存し、.env からAPIキーをロードします。
CI/CD連携:LLMテストを自動化する
PromptfooをCI/CDパイプラインに統合して、デプロイ前にリグレッションを検出します。
GitHub Actionsの例
name: LLM Tests
on: [push, pull_request]
jobs:
eval:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
- run: npm install -g promptfoo
- run: promptfoo eval -c promptfooconfig.yaml
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
品質ゲート
設定で合格/不合格の閾値を設定します。
commandLineOptions:
threshold: 0.8 # 80%の合格率を要求する
これにより、評価が閾値を満たさない場合にCIが失敗し、リグレッションのマージを防ぎます。
CIでのキャッシュ
CIの実行を高速化するためにキャッシュを有効にします。
- uses: actions/cache@v4
with:
path: ~/.cache/promptfoo
key: ${{ runner.os }}-promptfoo-${{ hashFiles('promptfooconfig.yaml') }}
キャッシュされた結果は、変更されていないテストのAPI呼び出しをスキップし、CI時間とコストを削減します。
Web UI:結果の視覚化と共有
組み込みのWeb UI(promptfoo view)は、評価をレビューするためのインタラクティブなインターフェースを提供します。
機能
- 評価マトリックス:出力をサイドバイサイドで比較します
- フィルタリング:ステータスまたはプロバイダーで特定のテストケースを見つけます
- 差分ビュー:実行間で何が変更されたかを正確に確認します
- 共有:チームレビュー用の共有可能なリンクを生成します
- リアルタイム更新:評価の実行をライブで監視します
アクセスとセキュリティ
UIはデフォルトで localhost:3000 で動作します。これは、信頼できないオリジンからのクロスサイトリクエストをブロックするために、Sec-Fetch-Site および Origin ヘッダーを使用したCSRF保護を含んでいます。
ローカルWebサーバーを信頼できないネットワークに公開しないでください。チームアクセスの場合、promptfoo share コマンドを使用して結果をクラウドにアップロードするか、認証付きでセルフホストしてください。
データベースとキャッシュ
キャッシュの場所
- macOS/Linux:
~/.cache/promptfoo - Windows:
%LOCALAPPDATA%\promptfoo
キャッシュは、繰り返しの実行を高速化するために評価結果を保存します。開発中は --no-cache を使用して、常に最新の結果が得られるようにしてください。
データベースの場所
- すべてのプラットフォーム:
~/.promptfoo/promptfoo.db(SQLite)
データベースは、比較および傾向分析のために過去の評価実行を保存します。履歴データを失いたくない限り、このファイルを削除しないでください。
セキュリティモデル:信頼できるもの
Promptfooは「設定による信頼」モデルで動作します。これを理解することで、セキュリティ上の予期せぬ事態を防ぐことができます。
信頼された入力(コードとして扱われる)
これらの入力はコードとして実行され、信頼できるソースからのみであるべきです。
- 設定ファイル(
promptfooconfig.yaml) - カスタムJavaScript/Python/Rubyアサーション
- プロバイダー設定
- 変換関数
信頼できない入力(データのみ)
これらの入力はデータとして扱われ、コード実行をトリガーすべきではありません。
- プロンプトテキスト
- テストケース変数
- モデル出力
- 評価中にフェッチされるリモートコンテンツ
強化の推奨事項
高セキュリティ環境の場合:
- 最小限の権限を持つコンテナまたはVM内で実行する
- 専用の、最小限の権限を持つAPIキーを使用する
- プロンプトや設定ファイルにシークレットを置かない
- サードパーティコードのネットワーク送信を制限する
- ローカルWebサーバーを信頼できないネットワークに公開しない
パフォーマンス:評価を最適化する
最適化のヒント
- キャッシュを使用する:デフォルトの動作は繰り返しの実行を高速化します
- 並行性を調整する:
--max-concurrencyは速度とレート制限のバランスをとります - テストをフィルタリングする:開発中に
--filterを使用して特定のテストケースを実行します - データセットのサンプリング:完全な実行前のイテレーションのために、サブセットで
--repeatを使用します
大規模評価のスケーリング
数千のテストケースを伴う大規模な評価の場合:
- 分散実行のためにスケジューラー(
src/scheduler/)を使用する - コンピューティングをオフロードするためのリモート生成を活用する
- チームの可視性のために結果をGoogleスプレッドシートにエクスポートする
拡張性:カスタム機能の構築
カスタムアサーション
ドメイン固有のチェックのためのカスタムアサーションを作成します。
// assertions/customCheck.js
export default function customCheck(output, context) {
const pass = output.includes('expected');
return {
pass,
score: pass ? 1 : 0,
reason: pass ? 'Output matched' : 'Missing expected content'
};
}
設定で使用します。
assert:
- type: file://assertions/customCheck.js
MCPサーバー
Promptfooには、Claude CodeのようなAIアシスタントとの統合のためのモデルコンテキストプロトコル(MCP)サーバーが含まれています。
promptfoo mcp
これにより、AIエージェントは以下を行うことができます。
- チャットから直接評価を実行する
- レッドチーム機能にアクセスする
- 保存された結果をクエリする
- 新しいテストケースを生成する
実際の使用例
カスタマーサポートチャットボット
あるSaaS企業は、デプロイ前にサポートチャットボットをテストするためにpromptfooを使用しています。
- 一般的な質問をカバーする500のテストケース
- 品質比較のためにGPT-4とClaudeで評価
- PII漏洩とジェイルブレイクに対するレッドチームスキャン
- 評価失敗によるデプロイのCI統合ブロック
結果:自動評価の実装後、顧客報告の問題が90%削減されました。
コンテンツ生成パイプライン
あるマーケティングチームは、AI生成コンテンツのブランドボイスを検証しています。
- LLMによる評価でトーンとスタイルをチェック
- レイテンシ閾値により高速な生成を保証
- コスト監視により費用を管理
- モデル比較により最適な価値プロバイダーを発見
結果:すべてのコンテンツで一貫したブランドボイスを維持し、APIコストを40%削減。
ヘルスケアアプリケーション
あるヘルステックスタートアップは、厳格なテストによりコンプライアンスを確保しています。
- HIPAA違反に対するレッドチームスキャン
- カスタムアサーションが医療の正確性を検証
- データプライバシーのためにすべての評価をローカルで実行
- 規制要件のための監査証跡
結果:promptfoo評価を証拠としてSOC 2監査に合格しました。
結論
Promptfooは、LLMアプリケーションに体系的なテストをもたらします。これは、手動でエラーが発生しやすいプロセスを、デプロイ前にリグレッション、セキュリティ問題、品質問題を検出する自動評価に置き換えます。
主なポイント:
npm install -g promptfooでインストールし、promptfoo initで開始します- アサーションを使用して、厳密な文字列一致を超えて出力を検証します
- レッドチームスキャンを実行してセキュリティ脆弱性を見つけます
- CI/CDと統合してリグレッションをブロックします
- サイドバイサイド評価でモデルを客観的に比較します
- カスタムプロバイダーとアサーションで機能を拡張します
AI開発の未来はデータ駆動型です。promptfooを使用することで、大規模なLLMアプリケーションを構築、テスト、保護するためのツールを手に入れることができます。
APIも扱う場合は、promptfooと並行してApidogの使用を検討してください。ApidogはAPIの設計、テスト、ドキュメント化を扱い、promptfooはLLM評価に焦点を当てています。両方を合わせることで、最新のアプリケーションテストのフルスタックをカバーできます。
よくある質問
promptfooは何に使われますか?
Promptfooは、LLMアプリケーションのテストと評価に使用されます。プロンプトに対して自動テストを実行し、モデル間の出力を比較し、脆弱性を見つけるためにセキュリティレッドチーム評価を実行します。
promptfooは無料ですか?
はい、promptfooはオープンソースであり、MITライセンスの下で提供されています。個人的なプロジェクトや商用プロジェクトで無料で利用できます。クラウド機能やエンタープライズサポートには、有料プランが必要な場合があります。
promptfooをインストールするにはどうすればよいですか?
グローバルインストールには npm install -g promptfoo を実行します。インストールせずに npx promptfoo@latest を使用することも、macOSで brew install promptfoo またはPythonで pip install promptfoo を介してインストールすることもできます。
promptfooはどのモデルをサポートしていますか?
Promptfooは、OpenAI(GPT-4、GPT-4o、o1)、Anthropic(Claude 3.5/4/4.5)、Google(Gemini)、Microsoft(Azure OpenAI)、Amazon Bedrock、Ollamaを介したローカルモデルを含む90以上のLLMプロバイダーをサポートしています。
レッドチームスキャンを実行するにはどうすればよいですか?
設定を作成するには promptfoo redteam init を実行し、セキュリティスキャンを実行するには promptfoo redteam run を実行します。結果は promptfoo redteam report で表示します。
promptfooをCI/CDで使用できますか?
はい。CIパイプラインにpromptfooをインストールし、設定ファイルとともに promptfoo eval を実行します。threshold オプションで品質ゲートを設定し、評価が合格率を満たさない場合にCIを失敗させることができます。
promptfooは私のデータを外部サーバーに送信しますか?
いいえ。promptfooはデフォルトで100%ローカルで動作します。クラウド機能を明示的にオプトインしない限り、あなたのプロンプトとテストデータがあなたのマシンを離れることはありません。キャッシュファイルとデータベースファイルはローカルに保存されます。
promptfooでモデルを比較するにはどうすればよいですか?
設定ファイルに複数のプロバイダーをリストアップし、promptfoo eval を実行します。promptfoo view でWeb UIで比較を表示すると、各モデルの合格/不合格率、コスト、レイテンシが表示されます。
