Jotform、SupabaseでのRAG、Together AI、Geminiを使ってナレッジベースチャットボットを構築
中級
これは自動化ワークフローで、15個のノードを含みます。主にCode, Supabase, Aggregate, HttpRequest, JotFormTriggerなどのノードを使用。 Jotform、Supabase上のRAG、Together AI、Geminiを使ってナレッジベースチャットボットを構築
前提条件
- •Supabase URL と API Key
- •ターゲットAPIの認証情報が必要な場合あり
- •Google Gemini API Key
使用ノード (15)
カテゴリー
-
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"meta": {
"instanceId": "93f396852104089b8670e7494b0f3668b420464668ae4a8c1d6b4b5799f8e3ef",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "1c57da69-7af2-47c8-8bc2-92e49449bd81",
"name": "チャンク分割",
"type": "n8n-nodes-base.code",
"position": [
2192,
-496
],
"parameters": {
"jsCode": "const text = $input.first().json.text;\nconst chunkSize = 1000;\n\nlet chunks = [];\nfor (let i = 0; i < text.length; i += chunkSize) {\n chunks.push({\n json: { chunk: text.slice(i, i + chunkSize) }\n });\n}\n\nreturn chunks;\n\n"
},
"typeVersion": 2
},
{
"id": "d5ed1aaf-6089-4731-980d-b5c356b22403",
"name": "アップロード文書の埋め込み",
"type": "n8n-nodes-base.httpRequest",
"position": [
2416,
-496
],
"parameters": {
"url": "https://api.together.xyz/v1/embeddings",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "model",
"value": "BAAI/bge-large-en-v1.5"
},
{
"name": "input",
"value": "={{ $json.chunk }}"
}
]
},
"genericAuthType": "httpBearerAuth",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"credentials": {
"httpBearerAuth": {
"id": "ePx2TlbqIiRjDGfW",
"name": "Together API"
}
},
"typeVersion": 4.2
},
{
"id": "0b1c609f-e335-4541-8dae-e3517ec4bb63",
"name": "埋め込みをDBに保存",
"type": "n8n-nodes-base.supabase",
"position": [
2624,
-496
],
"parameters": {
"tableId": "RAG",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "chunk",
"fieldValue": "={{ $('Splitting into Chunks').item.json.chunk }}"
},
{
"fieldId": "embeddings",
"fieldValue": "={{ JSON.stringify($json.data[0].embedding) }}"
}
]
}
},
"credentials": {
"supabaseApi": {
"id": "sNLLVD1n1FkMp81B",
"name": "abhi.vaar"
}
},
"typeVersion": 1
},
{
"id": "3a39d174-434e-4c81-921c-8a354fad5ebe",
"name": "集約",
"type": "n8n-nodes-base.aggregate",
"position": [
2064,
64
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "chunk"
}
]
}
},
"typeVersion": 1
},
{
"id": "4ce2ab5b-bb1e-46ce-9dd8-2cfdee5510a2",
"name": "埋め込み検索",
"type": "n8n-nodes-base.httpRequest",
"position": [
1840,
64
],
"parameters": {
"url": "https://enter-your-supabase-host/rest/v1/rpc/matchembeddings1",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "=query_embedding",
"value": "={{ $json.data[0].embedding }}"
},
{
"name": "match_count",
"value": "5"
}
]
},
"nodeCredentialType": "supabaseApi"
},
"credentials": {
"supabaseApi": {
"id": "sNLLVD1n1FkMp81B",
"name": "abhi.vaar"
}
},
"typeVersion": 4.2
},
{
"id": "76c8df3f-cf64-4848-b077-d04e9de88d12",
"name": "ユーザーメッセージの埋め込み",
"type": "n8n-nodes-base.httpRequest",
"position": [
1616,
64
],
"parameters": {
"url": "https://api.together.xyz/v1/embeddings",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "genericCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "model",
"value": "BAAI/bge-large-en-v1.5"
},
{
"name": "input",
"value": "={{ $json.chatInput }}"
}
]
},
"genericAuthType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "ePx2TlbqIiRjDGfW",
"name": "Together API"
}
},
"typeVersion": 4.2
},
{
"id": "d8dba80c-597e-470b-852b-6d53363238bc",
"name": "Google Gemini チャットモデル",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
2272,
288
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "qsaK3VMNWQDWLweQ",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "f74c0006-15e0-4f48-8c02-b0b765154c5b",
"name": "AIエージェント",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2272,
64
],
"parameters": {
"text": "=You are a helpful and professional customer support agent. Use the following context to answer the user's question. \n\nHandle greetings without the need of the context...\n\nContext:\n{{ $json.chunk }}\n\nUser's message:\n{{ $('When chat message received').item.json.chatInput }}\n\nFormat your reply in WhatsApp style:\n- Use _italics_ for emphasis\n- Use *bold* for key points\n- Use • for bullet lists (no markdown dashes or hashes)\n- Keep responses short, clear, and conversational, like real WhatsApp support\n- Avoid markdown headers or code blocks\n\nGive a clear, accurate, and friendly response based only on the context. \nIf the answer cannot be found in the context, reply: _\"I don't know based on the provided information.\"_\n",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "81c63733-c5c8-4a4d-b634-e3d93d9bb1c6",
"name": "PDFファイルからのテキスト抽出",
"type": "n8n-nodes-base.extractFromFile",
"position": [
2000,
-496
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "490c541e-fae8-4965-9840-9e13d562acdd",
"name": "チャットメッセージ受信時",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
1392,
64
],
"webhookId": "2032c492-7d92-4d79-b545-5e0b9807253f",
"parameters": {
"options": {}
},
"typeVersion": 1.3
},
{
"id": "8add4f5e-d2f8-4ea8-a6e1-6d4912d60393",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
1296,
-768
],
"parameters": {
"width": 1584,
"height": 512,
"content": "### Part 1: Feeding the AI Knowledge (The \"Librarian\" part)\n\nThis part of the workflow runs whenever someone uploads a new PDF contract using your Jotform form. Its only job is to read, understand, and store the information from that document.\n\n* A user uploads a PDF contract through a JotForm, which is then downloaded.\n* The system extracts the raw text and splits it into smaller, more manageable chunks.\n* Each text chunk is converted into a numerical representation, called an embedding, that captures its semantic meaning.\n* These embeddings and their original text are stored in a Supabase vector database, effectively creating a searchable knowledge library.\n"
},
"typeVersion": 1
},
{
"id": "d764c67f-cca8-476e-8d63-78d2733f6b64",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1296,
-208
],
"parameters": {
"width": 1600,
"height": 656,
"content": "---\n\n### Part 2: Asking the AI a Question (The \"Researcher\" part)\n\nThis part of the workflow runs whenever a user sends a message in a chat interface. Its job is to find the right information from the library and generate an answer.\n\n* A user asks a question, which the system converts into a numerical embedding to understand its meaning.\n* This embedding is used to search a vector database, retrieving the most relevant chunks of text from the stored documents.\n* The retrieved text chunks are then provided to an AI agent as the sole context for answering the question.\n* The AI generates a precise and accurate answer based only on the provided context, ensuring it doesn't invent information."
},
"typeVersion": 1
},
{
"id": "d1f68d16-6baa-4420-8606-dbc7ca5791c7",
"name": "JotFormトリガー",
"type": "n8n-nodes-base.jotFormTrigger",
"position": [
1376,
-496
],
"webhookId": "52c8e2e7-7277-4dfd-8336-c3857f945102",
"parameters": {
"form": "252862840518058",
"onlyAnswers": false
},
"credentials": {
"jotFormApi": {
"id": "4612J1BsqtC505ac",
"name": "secondary"
}
},
"typeVersion": 1
},
{
"id": "8f035b6b-c3c0-449a-acb4-0c359c309e32",
"name": "新規ナレッジベース取得",
"type": "n8n-nodes-base.httpRequest",
"position": [
1584,
-496
],
"parameters": {
"url": "=https://api.jotform.com/submission/{{ $json.submissionID }}?apiKey=enter-your-jotfomr-api",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "b826edc5-d97f-498c-bea1-b3f3d1430635",
"name": "アップロードされたナレッジベースファイルリンク取得",
"type": "n8n-nodes-base.httpRequest",
"position": [
1792,
-496
],
"parameters": {
"url": "={{ $json.content.answers['6'].answer[0] }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
},
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "APIKEY",
"value": "enter-your-jotfomr-api"
}
]
}
},
"typeVersion": 4.2
}
],
"pinData": {},
"connections": {
"f74c0006-15e0-4f48-8c02-b0b765154c5b": {
"main": [
[]
]
},
"3a39d174-434e-4c81-921c-8a354fad5ebe": {
"main": [
[
{
"node": "f74c0006-15e0-4f48-8c02-b0b765154c5b",
"type": "main",
"index": 0
}
]
]
},
"d1f68d16-6baa-4420-8606-dbc7ca5791c7": {
"main": [
[
{
"node": "8f035b6b-c3c0-449a-acb4-0c359c309e32",
"type": "main",
"index": 0
}
]
]
},
"4ce2ab5b-bb1e-46ce-9dd8-2cfdee5510a2": {
"main": [
[
{
"node": "3a39d174-434e-4c81-921c-8a354fad5ebe",
"type": "main",
"index": 0
}
]
]
},
"76c8df3f-cf64-4848-b077-d04e9de88d12": {
"main": [
[
{
"node": "4ce2ab5b-bb1e-46ce-9dd8-2cfdee5510a2",
"type": "main",
"index": 0
}
]
]
},
"1c57da69-7af2-47c8-8bc2-92e49449bd81": {
"main": [
[
{
"node": "d5ed1aaf-6089-4731-980d-b5c356b22403",
"type": "main",
"index": 0
}
]
]
},
"8f035b6b-c3c0-449a-acb4-0c359c309e32": {
"main": [
[
{
"node": "b826edc5-d97f-498c-bea1-b3f3d1430635",
"type": "main",
"index": 0
}
]
]
},
"d8dba80c-597e-470b-852b-6d53363238bc": {
"ai_languageModel": [
[
{
"node": "f74c0006-15e0-4f48-8c02-b0b765154c5b",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"81c63733-c5c8-4a4d-b634-e3d93d9bb1c6": {
"main": [
[
{
"node": "1c57da69-7af2-47c8-8bc2-92e49449bd81",
"type": "main",
"index": 0
}
]
]
},
"490c541e-fae8-4965-9840-9e13d562acdd": {
"main": [
[
{
"node": "76c8df3f-cf64-4848-b077-d04e9de88d12",
"type": "main",
"index": 0
}
]
]
},
"d5ed1aaf-6089-4731-980d-b5c356b22403": {
"main": [
[
{
"node": "0b1c609f-e335-4541-8dae-e3517ec4bb63",
"type": "main",
"index": 0
}
]
]
},
"b826edc5-d97f-498c-bea1-b3f3d1430635": {
"main": [
[
{
"node": "81c63733-c5c8-4a4d-b634-e3d93d9bb1c6",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
中級
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
RAG、Gemini、Supabase、Google Docsを使ってナレッジベースWhatsAppアシスタントを構築
RAG、Gemini、Supabase、Google Docsを使って知識ベースWhatsAppアシスタントを構築
If
Code
Supabase
+
If
Code
Supabase
15 ノードiamvaar
コンテンツ作成
AI駆動のNDA審査と即時アラートシステム - JotForm、Gemini、Telegram
JotForm、Gemini、Telegramを基盤としたAI駆動のNDA審査と即時アラートシステム
Telegram
Http Request
Jot Form Trigger
+
Telegram
Http Request
Jot Form Trigger
13 ノードiamvaar
n8nノードの探索(可視化リファレンスライブラリ内)
n8nノードを可視化リファレンスライブラリで探索
If
Ftp
Set
+
If
Ftp
Set
113 ノードI versus AI
その他
コンテキスト・ハイブリッドRAG AIコピー
RAGアプリケーション向けのGoogle DriveからSupabaseコンテキストベクトルデータベースへの同期
If
Set
Code
+
If
Set
Code
76 ノードMichael Taleb
AI RAG検索拡張
Gemini AI を使用した不具合レポートの自動化:Jotform から GitHub へ、そして Telegram への通知送信
Gemini AIを使用したバグレポートの自動化:JotformからGitHubへとTelegram投稿を送信
Code
Telegram
Github Tool
+
Code
Telegram
Github Tool
10 ノードiamvaar
Supabase ストレージ内のファイルと対話する AI エージェント
Supabaseストレージ内のファイルと対話するAIエージェント
If
Merge
Switch
+
If
Merge
Switch
33 ノードMark Shcherbakov
エンジニアリング