業務自動化

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

ENHANCED編集部更新 約11分で読めます

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)とした場合の例です。

-- 結果の列 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 × ハイパーオートメーション)。

あわせて読みたい

参考資料

この記事に関わるエンハンスドの事業

AI活用・無料相談

その業務、AIを使えばもっと効率化できます

メール対応や書類作成、データ入力、レポート集計。毎日の定型業務は、AIと自動化の組み合わせで大きく減らせます。エンハンスドが、貴社に合った進め方をご提案します。

  • 業務の棚卸しと無料診断
  • AI活用と自動化の具体プランのご提案
  • 導入から社内定着まで専門チームが伴走
無料で相談する

ご相談は何度でも無料です。まずはお気軽にお問い合わせください。

← 記事一覧に戻る