# n8nでAIエージェントのプロンプトA/Bテストを自動化｜Supabase×OpenAI活用術

> n8n の公式サイトで公開されているテンプレートで、AI エージェントのプロンプトを A/B テストする方法を解説します。テンプレートがすること（会話ごとの振り分け）としないこと、Supabase の準備と設定、効果を測るための記録の足し方と Evaluations の使い方をまとめました。

- URL: https://enhanced.co.jp/articles/n8n-agent-prompt-ab-testing/
- 公開日: 2025-05-20
- 更新日: 2026-10-07
- カテゴリー: [業務自動化](https://enhanced.co.jp/topics/automation/)
- タグ: A/Bテスト, AI自動化, OpenAI, Supabase, n8n, プロンプトエンジニアリング, ワークフロー, 業務効率化
- 発行: エンハンスド株式会社 (https://enhanced.co.jp/)

---

**n8n の公式サイトのテンプレート集で公開されているテンプレート（作成者: Chris Carr）「Split test different agent prompts with Supabase and OpenAI」を使うと、AI エージェントとのチャットを、2 つのプロンプトのどちらかにランダムに振り分けられます。** 振り分けは会話（セッション）ごとで、同じ会話の中では同じプロンプトが使われ続けます。ただし、テンプレートがするのは振り分けまでで、どちらのプロンプトが良いかは測りません。測るには、会話の結果を記録する仕組みを足すか、n8n の Evaluations（評価）の機能を使います。

> この記事は 2026年10月に、n8n の公式サイトで公開されているテンプレートと、n8n の公式ドキュメントをもとに全面的に書き直しました。以前の版にあった、テンプレートに無い構成（2 つのプロンプトを並べて実行し、採点して保存する仕組み）、古いノード名、出典の無い効果の数字は削除しています。

## プロンプトの A/B テストとは

同じ用途に 2 つのプロンプトを用意し、利用者をランダムに 2 つに分けて、どちらが目的に合った結果を出すかを比べる方法です。n8n のテンプレートでは、今のプロンプトを「ベースライン（baseline）」、試したいプロンプトを「代替（alternative）」と呼びます。

AI の返答は、同じ入力でも毎回少しずつ変わります。そのため、数回試して「良さそう」と決めるのではなく、多くの会話で比べるのが A/B テストの考え方です。

## テンプレートの仕組み

テンプレート（n8n.io/workflows/2992）は、次の順に動きます。

| 順 | ノード | すること |
|---|---|---|
| 1 | When chat message received（Chat Trigger） | チャットのメッセージを受け取る。会話ごとにセッション ID が付く |
| 2 | Define Path Values（Set） | ベースラインと代替の 2 つのプロンプトを決めておく |
| 3 | Check If Session Exists（Supabase） | `split_test_sessions` テーブルに、この会話のセッション ID があるかを調べる |
| 4 | If Session Does Exist（If） | あれば 6 へ、無ければ 5 へ進む |
| 5 | Assign Path To Session（Supabase） | セッション ID と、代替を使うかどうか（`show_alternative`）を書き込む。`show_alternative` は `Math.random() < 0.5` で決まるので、半々の確率になる |
| 6 | Get Correct Prompt（Set） | `show_alternative` が true なら代替、false ならベースラインのプロンプトを選ぶ |
| 7 | AI Agent | 選んだプロンプトをシステムメッセージとして使い、返答を作る。言語モデルは OpenAI Chat Model、会話の履歴は Postgres Chat Memory に保存する |

一度割り当てが決まった会話は、2 通目以降も 3 → 4 → 6 と進むので、同じプロンプトが使われ続けます。

### テンプレートがしないこと

- 同じ入力を、2 つのプロンプトの両方で実行して比べる
- 返答を採点する、指標を計算する
- 結果を集計する（保存されるのは、セッションと割り当て、会話の履歴だけです）

テンプレートの説明でも、次のステップとして「2 つのプロンプトの効果を測る方法を足す」「temperature など、ほかの設定を比べるように変える」が挙げられています。

## 使い方

テンプレートの Setup の手順に沿って準備します。

### 1. Supabase にテーブルを作る

Supabase に `split_test_sessions` というテーブルを作り、次の 2 つの列を用意します。

| 列 | 型 | 中身 |
|---|---|---|
| `session_id` | text | チャットのセッション ID |
| `show_alternative` | bool | 代替のプロンプトを使うかどうか |

### 2. 資格情報を登録する

テンプレートが使う資格情報は、Supabase・OpenAI・PostgreSQL の 3 つです。

- **Supabase**：Host と Secret Key を登録します（OAuth2 でもつなげます）。Host には、Supabase のダッシュボードの「Integrations」→「Data API」にある Project URL を、末尾の `/rest/v1` を除いて入れます
- **OpenAI**：AI Agent につながっている OpenAI Chat Model が使います
- **PostgreSQL**：会話の履歴を保存する Postgres Chat Memory が使います。履歴のテーブル（テンプレートでは `n8n_split_test_chat_histories`）は、無ければ自動で作られます

### 3. 2 つのプロンプトを書き換える

Define Path Values ノードの `baseline_value`（ベースライン）と `alternative_value`（代替）に、比べたいプロンプトを入れます。初期値は、動きを確かめるための短い文（犬の名前だけが違う 2 つの文）です。

### 4. 有効にして、n8n のチャットで試す

ワークフローを有効にし、n8n に組み込まれたチャットからメッセージを送ります。新しい会話を何度か始めると、会話によって違うプロンプトが使われることを確かめられます。

社外の人に使ってもらうときは、Chat Trigger の「Make Chat Publicly Available」を有効にし、n8n が用意するチャット画面（Hosted Chat）か、自分のサイトに埋め込むチャット（Embedded Chat）を選びます。

### モデルについて

テンプレートの初期設定のモデルは `gpt-4o-mini` です。OpenAI Chat Model ノードで、ほかのモデルに変えられます。OpenAI のモデルは順に提供が終わる（たとえば `gpt-4` は 2026年10月23日に API での提供が終わります）ので、使うモデルが OpenAI の廃止予定の一覧に載っていないかを確かめておきましょう。テンプレートのメモにあるとおり、このノードを差し替えれば OpenAI 以外のモデルも使えます。

## 効果を測るには

ここからは、テンプレートに自分で足す部分です。

### 測り方の考え方（一般的な A/B テストの進め方）

次は n8n の機能ではなく、A/B テスト一般の考え方です。

- **比べる指標を先に 1 つ決める**：たとえば「会話の中で問い合わせが解決したか」「利用者が『役に立った』を押したか」「担当者への引き継ぎが起きたか」など、用途の目的に合うもの
- **割り当てはランダムのままにする**：テンプレートは会話ごとに半々で割り当てます。人が選ぶと、偏りが入ります
- **テストの途中でプロンプトを変えない**：変えると、どちらの結果か分からなくなります
- **十分な数が集まるまで決めない**：会話が少ないうちの差は、偶然のことがあります。差が偶然でないかは、統計の検定で確かめます
- **品質と一緒に、費用と速さも見る**：返答の長さや使ったトークン、応答にかかる時間も比べると、採用の判断がしやすくなります

### 方法 1：本番の会話の結果を記録する

実際の利用者の会話で比べる方法です。会話ごとの結果（解決したか、評価ボタンが押されたかなど）を、割り当てと一緒に記録するように作り足します。たとえば `split_test_sessions` に結果の列を足し、ワークフローや別の仕組みから書き込みます。

集計は、Supabase の SQL エディターなどで行えます。結果の列を `resolved`（bool）とした場合の例です。

```sql
-- 結果の列 resolved は、自分で足した列の例
SELECT
  show_alternative,
  COUNT(*) AS sessions,
  AVG(CASE WHEN resolved THEN 1 ELSE 0 END) AS resolved_rate
FROM split_test_sessions
WHERE resolved IS NOT NULL
GROUP BY show_alternative;
```

### 方法 2：n8n の Evaluations で、同じテストケースを流して比べる

公開する前に、決まったテストケースで 2 つのプロンプトを比べる方法です。n8n には 1.95.0 から、AI のワークフローを評価する Evaluations の機能があり、公式ドキュメントでも「モデルやプロンプトを変えたときの性能の比較」が用途に挙げられています。

1. **テストケースを用意する**：n8n のデータテーブルか Google スプレッドシートに、入力と、必要なら期待する答えを並べます
2. **Evaluation Trigger をつなぐ**：テストケースを 1 行ずつワークフローに流します。Chat Trigger と並べて使うときは、2 つのトリガーからの流れをつなぎ合わせます
3. **出力を書き戻す**：Evaluation ノードの「Set Outputs」で、AI の返答をテストケースの表に書き戻します。ここまでが「ライト評価」で、返答を並べて目で比べられます
4. **指標を付ける**：Evaluation ノードの「Set Metrics」で指標を計算します（下の表）
5. **実行して比べる**：ワークフローの「Evaluations」タブで「Run Test」を押すと、指標ごとの集計が表示されます。ベースラインで実行したあと、代替のプロンプトに替えてもう一度実行し、結果を比べます

| 指標 | 中身 |
|---|---|
| Correctness（AI が判定） | 返答の意味が、期待する答えと合っているか（1〜5） |
| Helpfulness（AI が判定） | 返答が質問に答えているか（1〜5） |
| String Similarity | 期待する答えと、文字の単位でどれだけ近いか（0〜1） |
| Categorization | 期待する答えと完全に一致するか（1 か 0） |
| Tools Used | ツールを使ったか（0〜1） |
| Custom Metrics | ワークフローの中で計算した、自分の指標 |

AI に判定させる指標は、そのぶん時間と費用がかかります。Evaluation ノードの「Check If Evaluating」で、評価のときだけ指標を計算するように分けられます。

使えるプランにも違いがあります（2026年10月時点の公式ドキュメントによる）。

- ライト評価：n8n Cloud はすべてのプラン、セルフホストは Registered Community・Business・Enterprise
- 指標を使う評価：n8n Cloud は Pro・Enterprise、セルフホストは Enterprise（Registered Community と Starter でも、1 つのワークフローなら使える）

## 使う前に確かめたいこと

- **会話の内容が外部のサービスに送られ、保存される**：利用者のメッセージは OpenAI に送られ、会話の履歴は PostgreSQL に残ります。個人の情報や社外秘の内容を扱うなら、社内の情報の取り扱いのルールで確かめます
- **比べられるのは 2 つまで**：割り当ては真偽値の列（`show_alternative`）なので、3 つ以上を比べるには作り変えが要ります
- **振り分けは会話の単位**：同じ人でも、新しい会話を始めると別のプロンプトになることがあります

## よくある質問

### このテンプレートだけで、どちらのプロンプトが良いか分かりますか？

分かりません。テンプレートがするのは、会話ごとに 2 つのプロンプトのどちらかを割り当てるところまでです。効果を比べるには、会話の結果を記録する仕組みを足すか、Evaluations を使います。

### 同じ質問を A と B の両方に投げて比べたいです

n8n の Evaluations を使います。同じテストケースを、ベースラインと代替のプロンプトでそれぞれ流し、指標の集計を比べます。

### OpenAI 以外のモデルでも使えますか？

使えます。テンプレートのメモにあるとおり、OpenAI Chat Model のノードを、ほかの言語モデルのノードに差し替えます。

### 記事でよく見る「Function ノード」はどこにありますか？

Function ノードは、n8n 0.198.0（2022年10月）で Code ノードに置き換えられました。今は Code ノードを使います。

## まとめ

- テンプレート 2992 は、AI エージェントとのチャットを、会話ごとに 2 つのプロンプトのどちらかへランダムに振り分ける
- 必要なのは、Supabase の `split_test_sessions` テーブルと、Supabase・OpenAI・PostgreSQL の資格情報
- テンプレートは効果を測らない。本番の会話の結果を記録するか、Evaluations で同じテストケースを流して比べる
- 指標は先に 1 つ決め、十分な数が集まってから判断する

エンハンスドでは、n8n などを使って AI を業務の流れに組み込む支援を行っています（[AI × ハイパーオートメーション](https://enhanced.co.jp/services/ai-acceleration/hyper-automation/)）。

**あわせて読みたい**

- [n8nの拡張HTTPリクエスト機能でAPI連携を次のレベルへ：新機能完全ガイド](https://enhanced.co.jp/articles/n8n-extended-http-request-features/)
- [n8nで毎日の手作業を自動化。中小企業の実例9選と始め方【2026年版】](https://enhanced.co.jp/articles/n8n-business-automation-examples/)

## 参考資料

- [Split test different agent prompts with Supabase and OpenAI（n8n のテンプレート）](https://n8n.io/workflows/2992)
- [Understand why to test（n8n Docs）](https://docs.n8n.io/build/integrate-ai/test-and-improve-ai-workflows/understand-why-to-test/)
- [Run quick evaluations（n8n Docs）](https://docs.n8n.io/build/integrate-ai/test-and-improve-ai-workflows/run-quick-evaluations/)
- [Use metrics to measure quality（n8n Docs）](https://docs.n8n.io/build/integrate-ai/test-and-improve-ai-workflows/use-metrics-to-measure-quality/)
- [Chat Trigger（n8n Docs）](https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-langchain.chattrigger/)
- [Postgres Chat Memory（n8n Docs）](https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.memorypostgreschat/)
- [Supabase credentials（n8n Docs）](https://docs.n8n.io/integrations/builtin/credentials/supabase/)
- [Release notes 1.x（n8n Docs・n8n@1.95.0 で Evaluations を導入）](https://docs.n8n.io/changelog/release-notes-1.x/)
- [Release notes 0.x（n8n Docs・n8n@0.198.0 で Code ノードを導入）](https://docs.n8n.io/changelog/release-notes-0.x/)
- [Deprecations（OpenAI）](https://developers.openai.com/docs/deprecations)

---

出典: 「n8nでAIエージェントのプロンプトA/Bテストを自動化｜Supabase×OpenAI活用術」エンハンスド株式会社 https://enhanced.co.jp/articles/n8n-agent-prompt-ab-testing/
