LLMアプリケーション テスト完全ガイド:Promptfoo徹底解説(2026年)

Ashley Innocent

Ashley Innocent

19 3月 2026

LLMアプリケーション テスト完全ガイド:Promptfoo徹底解説(2026年)

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アプリケーション用の機能するテストスイートを手に入れ、自信を持って出荷する方法を知るでしょう。

💡
APIテストを行ったり、LLMテストと並行してAPIの動作を検証する必要がある場合は、ApidogがAPI設計、テスト、ドキュメント化のための統合プラットフォームを提供します。両方のツールを併用できます。LLM評価にはpromptfooを、APIレイヤー検証にはApidogを使用します。
ボタン

Promptfooとは何か、なぜそれが必要なのか

Promptfooは、LLMアプリケーションを評価し、レッドチームテストを行うためのコマンドラインツールおよびNode.jsライブラリです。AI開発の特異性のために特別に構築されたテストフレームワークと考えてください。

LLMを評価するためにPromptfooを使用する

出力が非決定論的であるため、従来のテストツールはLLMでは機能しません。同じプロンプトが毎回異なる応答を生成する場合、厳密な文字列の一致をアサートすることはできません。Promptfooはこれを以下の方法で解決します。

このツールはあなたのマシン上でローカルに動作します。クラウド機能をオプトインしない限り、あなたのプロンプトとテストデータがあなたの環境を離れることはありません。このプライバシーファーストな設計は、機密データを使用したテストに適しています。

Promptfooが解決する問題

ほとんどのチームはLLMアプリケーションを手動でテストします。いくつかのプロンプトを送信し、出力を読んで、問題ないかどうかを判断します。このアプローチには3つの致命的な欠陥があります。

  1. リグレッション検出がない:モデルのアップデートが既存の機能を壊したかどうかを判断できません
  2. カバレッジのギャップ:手動テストでは、エッジケースや敵対的入力を見落とします
  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

これを何百ものテストケースに拡張できます。多くのチームは評価設定をバージョン管理下に置き、すべてのプルリクエストで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には、レッドチームモジュールを介した包括的なセキュリティテストが含まれています。脆弱性を調査するために敵対的入力を自動的に生成します。

プロンプトのレッドチームテストにPromptfooを使用する

サポートされている攻撃ベクトル

レッドチームシステムには、カテゴリ別に整理された67以上のプラグインが含まれています。

カテゴリ テスト内容
プロンプトインジェクション 直接、間接、およびコンテキストインジェクション攻撃
ジェイルブレイク DAN、ペルソナ切り替え、ロールプレイバイパス
データ流出 SSRF、システムプロンプト抽出、プロンプト漏洩
有害なコンテンツ ヘイトスピーチ、危険な活動、自傷行為の要求
コンプライアンス PII漏洩、HIPAA違反、金融データ露出
オーディオ/ビジュアル オーディオインジェクションおよび画像ベースの攻撃

レッドチームスキャンの実行

レッドチーム設定を初期化します。

promptfoo redteam init

セキュリティスキャンを実行します。

promptfoo redteam run

レポートを表示します。

promptfoo redteam report [directory]

redteam run コマンドは2つのステップを実行します。

  1. アプリケーションに合わせた動的な攻撃プローブを生成します
  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 }}

これにより、以下が検出されます。

4. モデル比較

複数のモデルからの出力をサイドバイサイドで比較し、あなたのユースケースに最適なものを選択します。

# 複数のプロバイダーで評価を実行
promptfoo eval

# Web UIで比較を表示
promptfoo view

Web UIには以下が表示されます。

このデータ駆動型アプローチは、馴染みのあるモデルへの偏見を防ぎます。特定の評価では、より安価なモデルが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
Google 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 コマンドを使用して結果をクラウドにアップロードするか、認証付きでセルフホストしてください。

データベースとキャッシュ

キャッシュの場所

キャッシュは、繰り返しの実行を高速化するために評価結果を保存します。開発中は --no-cache を使用して、常に最新の結果が得られるようにしてください。

データベースの場所

データベースは、比較および傾向分析のために過去の評価実行を保存します。履歴データを失いたくない限り、このファイルを削除しないでください。

セキュリティモデル:信頼できるもの

Promptfooは「設定による信頼」モデルで動作します。これを理解することで、セキュリティ上の予期せぬ事態を防ぐことができます。

信頼された入力(コードとして扱われる)

これらの入力はコードとして実行され、信頼できるソースからのみであるべきです。

信頼できない入力(データのみ)

これらの入力はデータとして扱われ、コード実行をトリガーすべきではありません。

強化の推奨事項

高セキュリティ環境の場合:

  1. 最小限の権限を持つコンテナまたはVM内で実行する
  2. 専用の、最小限の権限を持つAPIキーを使用する
  3. プロンプトや設定ファイルにシークレットを置かない
  4. サードパーティコードのネットワーク送信を制限する
  5. ローカルWebサーバーを信頼できないネットワークに公開しない

パフォーマンス:評価を最適化する

最適化のヒント

  1. キャッシュを使用する:デフォルトの動作は繰り返しの実行を高速化します
  2. 並行性を調整する--max-concurrency は速度とレート制限のバランスをとります
  3. テストをフィルタリングする:開発中に --filter を使用して特定のテストケースを実行します
  4. データセットのサンプリング:完全な実行前のイテレーションのために、サブセットで --repeat を使用します

大規模評価のスケーリング

数千のテストケースを伴う大規模な評価の場合:

拡張性:カスタム機能の構築

カスタムアサーション

ドメイン固有のチェックのためのカスタムアサーションを作成します。

// 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を使用しています。

結果:自動評価の実装後、顧客報告の問題が90%削減されました。

コンテンツ生成パイプライン

あるマーケティングチームは、AI生成コンテンツのブランドボイスを検証しています。

結果:すべてのコンテンツで一貫したブランドボイスを維持し、APIコストを40%削減。

ヘルスケアアプリケーション

あるヘルステックスタートアップは、厳格なテストによりコンプライアンスを確保しています。

結果:promptfoo評価を証拠としてSOC 2監査に合格しました。

結論

Promptfooは、LLMアプリケーションに体系的なテストをもたらします。これは、手動でエラーが発生しやすいプロセスを、デプロイ前にリグレッション、セキュリティ問題、品質問題を検出する自動評価に置き換えます。

主なポイント:

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で比較を表示すると、各モデルの合格/不合格率、コスト、レイテンシが表示されます。

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる