A/B 스플릿 테스트
고급
이것은Content Creation, Multimodal AI분야의자동화 워크플로우로, 16개의 노드를 포함합니다.주로 If, Set, Supabase, Agent, ChatTrigger 등의 노드를 사용하며. 사용Supabase、Langchain Agent및OpenAI GPT-4o进行AI提示A/B测试
사전 요구사항
- •Supabase URL과 API Key
- •OpenAI API Key
- •PostgreSQL 데이터베이스 연결 정보
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "TEA7K9MSVQGCWKe6",
"meta": {
"instanceId": "ac63467607103d9c95dd644384984672b90b1cb03e07edbaf18fe72b2a6c45bb",
"templateCredsSetupCompleted": true
},
"name": "A/B Split Testing",
"tags": [],
"nodes": [
{
"id": "e8404493-4297-4169-a72f-89e668ae5fbc",
"name": "채팅 메시지 수신 시",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-1460,
-140
],
"webhookId": "334e3a8d-73d2-4d3c-9927-158c1169ef5e",
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "582e1c1b-12ff-42ff-8130-48f94eebd706",
"name": "AI 에이전트",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
220,
-160
],
"parameters": {
"text": "={{ $('When chat message received').item.json.chatInput }}",
"options": {
"systemMessage": "={{ $json.prompt }}"
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "39ca5c70-11d4-4f86-bde5-0f9827297be9",
"name": "세션 존재 여부 확인",
"type": "n8n-nodes-base.supabase",
"position": [
-960,
-140
],
"parameters": {
"filters": {
"conditions": [
{
"keyName": "session_id",
"keyValue": "={{ $('When chat message received').item.json.sessionId }}"
}
]
},
"tableId": "split_test_sessions",
"operation": "get"
},
"credentials": {
"supabaseApi": {
"id": "1iEg1EzFrF29iqp2",
"name": "Supabase (bsde.ai)"
}
},
"executeOnce": false,
"typeVersion": 1,
"alwaysOutputData": true
},
{
"id": "35f2c270-9571-41ba-ab7c-47a6742d7d90",
"name": "세션이 존재하는 경우",
"type": "n8n-nodes-base.if",
"position": [
-720,
-140
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "4270c464-6874-45d2-aa3b-606f45544c3d",
"operator": {
"type": "number",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "ec00ad92-96e9-4936-a547-2a2715ff5c32",
"name": "세션에 경로 할당",
"type": "n8n-nodes-base.supabase",
"position": [
-400,
-20
],
"parameters": {
"tableId": "split_test_sessions",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "show_alternative",
"fieldValue": "={{ Math.random() < 0.5 }}"
},
{
"fieldId": "session_id",
"fieldValue": "={{ $('When chat message received').item.json.sessionId }}"
}
]
}
},
"credentials": {
"supabaseApi": {
"id": "1iEg1EzFrF29iqp2",
"name": "Supabase (bsde.ai)"
}
},
"typeVersion": 1
},
{
"id": "92ee7145-30ae-41e9-bc04-eef03b84485e",
"name": "경로 값 정의",
"type": "n8n-nodes-base.set",
"position": [
-1200,
-140
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9581a184-a120-4b1f-8408-cfe97520d107",
"name": "baseline_value",
"type": "string",
"value": "The dog's name is Ben"
},
{
"id": "1752f2c4-4ce4-4893-b8db-1c59131c298a",
"name": "alternative_value",
"type": "string",
"value": "The dog's name is Tom"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "23c1b4e2-2ba2-4237-bb4b-b92da127d201",
"name": "OpenAI 채팅 모델",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
300,
60
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"id": "1OMpAMAKR9l3eUDI",
"name": "OpenAi account"
}
},
"typeVersion": 1.2
},
{
"id": "be3f14b9-68c7-457d-b5bf-a6abbadf5b67",
"name": "Postgres 채팅 메모리",
"type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
"position": [
480,
60
],
"parameters": {
"tableName": "n8n_split_test_chat_histories",
"sessionKey": "={{ $('When chat message received').item.json.sessionId }}",
"sessionIdType": "customKey"
},
"credentials": {
"postgres": {
"id": "tzLXHvhykxvYghPC",
"name": "bsde.ai Supabase (Session Pooler)"
}
},
"typeVersion": 1.3
},
{
"id": "1c20d274-2482-4551-a4ea-64860eb35276",
"name": "스티커 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1520,
-260
],
"parameters": {
"color": 7,
"width": 220,
"height": 300,
"content": "## 1. Receive Message\n\n"
},
"typeVersion": 1
},
{
"id": "ee22d3b1-d447-4e35-8ac4-d093edf6deee",
"name": "스티커 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1280,
-340
],
"parameters": {
"color": 7,
"width": 1340,
"height": 500,
"content": "## 2. Determine Prompt for LLM\n"
},
"typeVersion": 1
},
{
"id": "7d90ec00-5fca-4b0d-bc1f-e8b8c179b960",
"name": "스티커 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
80,
-240
],
"parameters": {
"color": 7,
"width": 520,
"height": 440,
"content": "## 3. AI Agent"
},
"typeVersion": 1
},
{
"id": "b9b9e0e8-53c1-4d6a-bbdc-c2a13d740dfb",
"name": "올바른 프롬프트 가져오기",
"type": "n8n-nodes-base.set",
"position": [
-80,
-160
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "08de68ec-0f12-43ee-98ab-59d8a414f114",
"name": "prompt",
"type": "string",
"value": "={{ $json.show_alternative ? $('Define Path Values').item.json.alternative_value : $('Define Path Values').item.json.baseline_value }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "2b78ce9b-e6b4-4744-8ddf-00f8ae990fc8",
"name": "스티커 노트6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1260,
-240
],
"parameters": {
"color": 5,
"width": 220,
"height": 260,
"content": "### Modification\nSet the values of the baseline and alternative prompts"
},
"typeVersion": 1
},
{
"id": "0646f176-407a-41ee-b602-34bd681fc421",
"name": "스티커 노트8",
"type": "n8n-nodes-base.stickyNote",
"position": [
100,
40
],
"parameters": {
"color": 5,
"width": 340,
"height": 140,
"content": "### Modification\nReplace this sub-node \nto use a different language\n model"
},
"typeVersion": 1
},
{
"id": "a391018c-5d28-4384-89e1-0435758a6945",
"name": "스티커 노트5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1480,
-600
],
"parameters": {
"width": 520,
"height": 240,
"content": "### Setup\n1. Create a table in Supabase called **split_test_sessions**. It needs to have the following columns: **session_id** (`text`) and **show_alternative** (`bool`)\n2. Add your **Supabase**, **OpenAI**, and **PostgreSQL** credentials\n3. Modify the **Define Path Values** node to set the baseline and alternative prompt values.\n4. Activate the workflow and test by sending messages through n8n's inbuilt chat\n5. Experiment with different chat sessions to test see both prompts in action"
},
"typeVersion": 1
},
{
"id": "2382d146-f0c1-4de6-9e90-b17c304df692",
"name": "스티커 노트3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2120,
-360
],
"parameters": {
"width": 560,
"height": 480,
"content": "\n## Split Test Different Agent Prompts with Supabase and OpenAI\n### Use Case\nOftentimes, it's useful to test different settings for a large language model in production against various metrics. Split testing is a good method for doing this.\n### What it Does\nThis workflow randomly assigns chat sessions to one of two prompts, the baseline and the alternative. The agent will use the same prompt for all interactions in that chat session.\n### How it Works\n1. When messages arrive, a table containing information regarding session ID and which prompt to use is checked to see if the chat already exists\n2. If it does not, the session ID is added to the table and a prompt is randomly assigned\n3. These values are then used to generate a response\n### Next Steps\n- Modify the workflow to test different LLM settings such as temperature\n- Add a method to measure the efficacy of the two alternative prompts"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "339c6f2f-e4d1-4922-9442-2c1a78e96067",
"connections": {
"23c1b4e2-2ba2-4237-bb4b-b92da127d201": {
"ai_languageModel": [
[
{
"node": "582e1c1b-12ff-42ff-8130-48f94eebd706",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"92ee7145-30ae-41e9-bc04-eef03b84485e": {
"main": [
[
{
"node": "39ca5c70-11d4-4f86-bde5-0f9827297be9",
"type": "main",
"index": 0
}
]
]
},
"b9b9e0e8-53c1-4d6a-bbdc-c2a13d740dfb": {
"main": [
[
{
"node": "582e1c1b-12ff-42ff-8130-48f94eebd706",
"type": "main",
"index": 0
}
]
]
},
"be3f14b9-68c7-457d-b5bf-a6abbadf5b67": {
"ai_memory": [
[
{
"node": "582e1c1b-12ff-42ff-8130-48f94eebd706",
"type": "ai_memory",
"index": 0
}
]
]
},
"35f2c270-9571-41ba-ab7c-47a6742d7d90": {
"main": [
[
{
"node": "b9b9e0e8-53c1-4d6a-bbdc-c2a13d740dfb",
"type": "main",
"index": 0
}
],
[
{
"node": "ec00ad92-96e9-4936-a547-2a2715ff5c32",
"type": "main",
"index": 0
}
]
]
},
"ec00ad92-96e9-4936-a547-2a2715ff5c32": {
"main": [
[
{
"node": "b9b9e0e8-53c1-4d6a-bbdc-c2a13d740dfb",
"type": "main",
"index": 0
}
]
]
},
"39ca5c70-11d4-4f86-bde5-0f9827297be9": {
"main": [
[
{
"node": "35f2c270-9571-41ba-ab7c-47a6742d7d90",
"type": "main",
"index": 0
}
]
]
},
"e8404493-4297-4169-a72f-89e668ae5fbc": {
"main": [
[
{
"node": "92ee7145-30ae-41e9-bc04-eef03b84485e",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 콘텐츠 제작, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
✨🩷자동화소셜 미디어콘텐츠게시工厂 + 系统提示组合
基于动态系统提示및GPT-4o의AI驱动多平台소셜 미디어콘텐츠工厂
If
Set
Code
+
If
Set
Code
100 노드Amit Mehta
콘텐츠 제작
전기 에이전트
GPT-5와 Google Docs로 전문 이력서 자동 생성 및 다듬기
If
Set
Google Docs
+
If
Set
Google Docs
17 노드Asfandyar Malik
콘텐츠 제작
AI 기반 회의 효과 자동 분석 및 Slack 피드백 전송
AI 기반 회의 효과 자동 분석 및 Slack 피드백 발송
If
Set
Code
+
If
Set
Code
18 노드Junichiro Tobe
콘텐츠 제작
OpenAI, LangChain, API 통합을 사용한 작업 자동화 초보자 가이드
OpenAI, LangChain 및 API 통합을 사용한 작업 자동화 시작자 가이드
If
Set
Code
+
If
Set
Code
33 노드Meelioo
콘텐츠 제작
완전한 B2B 판매 프로세스: Apollo 잠재 고객 생성, Mailgun 프로모션 및 AI 응답 관리
완전한 B2B 판매 프로세스: Apollo 잠재 고객 생성, Mailgun 확장 및 AI 응답 관리
If
Set
Code
+
If
Set
Code
116 노드Paul
콘텐츠 제작
자동 업데이트 RAG 채팅 로봇(Google Drive, Gemini, Supabase)을 만들기
Google Drive, Gemini와 Supabase를 사용하여 자동 업데이트 RAG 채팅 로봇을 생성합니다.
Set
Code
Merge
+
Set
Code
Merge
45 노드Anirudh Aeran
콘텐츠 제작