This workflow corresponds to n8n.io template #14968 — we link there as the canonical source.
This workflow follows the Agent → Chainllm recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"nodes": [
{
"id": "ecefd13e-b601-4ad8-8115-f32f59aae6b9",
"name": "Daily Index Refresh (3:00 AM)",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-1968,
752
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 3
}
]
}
},
"typeVersion": 1.3
},
{
"id": "6967fed2-e50c-43ab-95c1-f8f74142e188",
"name": "Set Folder Config",
"type": "n8n-nodes-base.set",
"position": [
-1744,
752
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "604c87a6-3cb2-4297-ad75-0d756d97b986",
"name": "Query String",
"type": "string",
"value": "'YOUR_GOOGLE_DRIVE_FOLDER_ID' in parents"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "5778d9e8-e69d-4520-be12-1b33f7c650d3",
"name": "List Drive Files",
"type": "n8n-nodes-base.googleDrive",
"position": [
-1520,
752
],
"parameters": {
"filter": {},
"options": {},
"resource": "fileFolder",
"returnAll": true,
"queryString": "={{ $json['Query String'] }}",
"searchMethod": "query"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "1f7bb38a-56e2-4b73-aa13-2f59d8bc8bdf",
"name": "Download File",
"type": "n8n-nodes-base.googleDrive",
"position": [
-1296,
752
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "f58a8517-e4d3-44fd-8670-7bc5ca0b096c",
"name": "Extract Text",
"type": "n8n-nodes-base.extractFromFile",
"position": [
-1072,
752
],
"parameters": {
"options": {},
"operation": "text"
},
"typeVersion": 1.1
},
{
"id": "332ef96c-6085-4363-a807-28005ee0a209",
"name": "Upsert to Pinecone",
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"position": [
-816,
544
],
"parameters": {
"mode": "insert",
"options": {
"clearNamespace": true
},
"pineconeIndex": {
"__rl": true,
"mode": "list",
"value": "rag-index",
"cachedResultName": "rag-index"
}
},
"credentials": {
"pineconeApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "642b98c7-c208-446b-b6ea-a2a4c834aa16",
"name": "Load Document",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
-720,
768
],
"parameters": {
"options": {},
"textSplittingMode": "custom"
},
"typeVersion": 1.1
},
{
"id": "4948179a-c636-48f0-b2bc-6386c22f6ece",
"name": "Split into Chunks",
"type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
"position": [
-640,
976
],
"parameters": {
"options": {},
"chunkSize": 500,
"chunkOverlap": 50
},
"typeVersion": 1
},
{
"id": "d0a6627d-2b49-4cec-900a-2af32f6e387f",
"name": "Search Pinecone",
"type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
"position": [
-1520,
1344
],
"parameters": {
"mode": "load",
"topK": 5,
"prompt": "={{ $('Slack Trigger').item.json.text }}",
"options": {},
"pineconeIndex": {
"__rl": true,
"mode": "list",
"value": "rag-index",
"cachedResultName": "rag-index"
}
},
"credentials": {
"pineconeApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "ca720028-42cb-46b4-b283-3102ac015107",
"name": "Aggregate Context",
"type": "n8n-nodes-base.aggregate",
"position": [
-1168,
1344
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "document.pageContent"
}
]
}
},
"typeVersion": 1
},
{
"id": "9a8e100f-dc5a-4868-bfe9-d303bea89619",
"name": "HR QA Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-944,
1344
],
"parameters": {
"text": "=\u4eca\u306e\u65e5\u6642\u306f{{ $now }}\u3067\u3059\u3002\n\u4ee5\u4e0b\u306e\u6587\u66f8\u3092\u53c2\u8003\u306b\u3010\u30e6\u30fc\u30b6\u30fc\u306e\u8cea\u554f\u3011\u306b\u7b54\u3048\u3066\u304f\u3060\u3055\u3044\n---\n{{ $json.pageContent.join('\\n\\n') }}\n---\n\n\u3010\u30e6\u30fc\u30b6\u30fc\u306e\u8cea\u554f\u3011\n{{ $('Slack Trigger').item.json.text }}",
"options": {
"systemMessage": "\u91cd\u8981\u306a\u30eb\u30fc\u30eb\uff1a\n\u30fb\u5fc5\u305a\u63d0\u4f9b\u3055\u308c\u305f\u6587\u66f8\u306e\u5185\u5bb9\u306e\u307f\u3092\u6839\u62e0\u306b\u56de\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\n\u30fb\u6587\u66f8\u306b\u8a18\u8f09\u304c\u306a\u3044\u60c5\u5831\u306f\u300c\u3053\u306e\u6587\u66f8\u306b\u306f\u8a18\u8f09\u304c\u3042\u308a\u307e\u305b\u3093\u300d\u3068\u660e\u793a\u3057\u3066\u304f\u3060\u3055\u3044\n\u30fb\u4e00\u822c\u7684\u306a\u6cd5\u5f8b\u77e5\u8b58\u3084\u6163\u7fd2\u3092\u88dc\u5b8c\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\n\u30fb\u4e0d\u660e\u306a\u70b9\u306f\u4eba\u4e8b\u30fb\u7dcf\u52d9\u3078\u306e\u78ba\u8a8d\u3092\u4fc3\u3057\u3066\u304f\u3060\u3055\u3044\n\u30fb\u6587\u66f8\u306b\u8a18\u8f09\u304c\u306a\u3044\u5834\u5408\u3067\u3082\u3001\u95a2\u9023\u3059\u308b\u8a18\u8f09\u304c\u3042\u308c\u3070\n\u3000\u305d\u308c\u3092\u63d0\u793a\u3057\u305f\u4e0a\u3067\u300c\u8a73\u7d30\u306f\u4eba\u4e8b\u30fb\u7dcf\u52d9\u3078\u300d\u3068\u6848\u5185\u3057\u3066\u304f\u3060\u3055\u3044\n\u30fb\u4ee5\u4e0b\u306b\u8a72\u5f53\u3059\u308b\u8cea\u554f\u306b\u306f\u3001\u6587\u66f8\u306e\u30eb\u30fc\u30eb\u3092\u63d0\u793a\u3057\u305f\u4e0a\u3067\n\u3000\u300c\u500b\u4eba\u306e\u72b6\u6cc1\u306b\u3064\u3044\u3066\u306f\u4eba\u4e8b\u30b7\u30b9\u30c6\u30e0\u307e\u305f\u306f\u4eba\u4e8b\u30fb\u7dcf\u52d9\u306b\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u300d\n\u3000\u3068\u5fc5\u305a\u6848\u5185\u3057\u3066\u304f\u3060\u3055\u3044\n\u3000- \u500b\u4eba\u306e\u72b6\u6cc1\u306b\u4f9d\u5b58\u3059\u308b\u60c5\u5831\uff08\u6b8b\u65e5\u6570\u30fb\u6b8b\u9ad8\u30fb\u500b\u4eba\u306e\u7533\u8acb\u72b6\u6cc1\u306a\u3069\uff09\n\u3000- \u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30c7\u30fc\u30bf\u304c\u5fc5\u8981\u306a\u60c5\u5831\uff08\u73fe\u5728\u306e\u72b6\u6cc1\u30fb\u6700\u65b0\u306e\u60c5\u5831\u306a\u3069\uff09\n\u3000- \u793e\u5185\u30b7\u30b9\u30c6\u30e0\u4e0a\u306e\u30c7\u30fc\u30bf\u304c\u5fc5\u8981\u306a\u60c5\u5831\uff08\u52e4\u6020\u30fb\u7d66\u4e0e\u30fb\u4eba\u4e8b\u30c7\u30fc\u30bf\u306a\u3069\uff09\n\u3000- \u5177\u4f53\u7684\u306a\u65e5\u7a0b\u3084\u5019\u88dc\u65e5\u306e\u63d0\u6848\n\u30fb\u8cea\u554f\u304c\u66d6\u6627\u3067\u8907\u6570\u306e\u89e3\u91c8\u304c\u3067\u304d\u308b\u5834\u5408\u306f\u3001\u56de\u7b54\u3059\u308b\u524d\u306b\n\u3000\u300c\u4f55\u306b\u3064\u3044\u3066\u77e5\u308a\u305f\u3044\u3067\u3059\u304b\uff1f\u4f8b\uff1a\u7d4c\u8cbb\u7cbe\u7b97\u30fb\u6709\u7d66\u4f11\u6687\u30fb\u30c6\u30ec\u30ef\u30fc\u30af\u306a\u3069\u300d\n\u3000\u306e\u3088\u3046\u306b\u5177\u4f53\u7684\u306a\u9078\u629e\u80a2\u3092\u793a\u3057\u3066\u805e\u304d\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\n\u30fb\u8cea\u554f\u306e\u610f\u56f3\u304c\u660e\u78ba\u306a\u5834\u5408\u306f\u305d\u306e\u307e\u307e\u56de\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\n\u30fb\u805e\u304d\u8fd4\u3057\u306f1\u56de\u307e\u3067\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\u3000\u30e6\u30fc\u30b6\u30fc\u304c\u518d\u5ea6\u66d6\u6627\u306a\u56de\u7b54\u3092\u3057\u305f\u5834\u5408\u306f\u3067\u304d\u308b\u7bc4\u56f2\u3067\u56de\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\n\u30fb\u8cea\u554f\u304c\u66d6\u6627\u3067\u8907\u6570\u306e\u30ab\u30c6\u30b4\u30ea\u306b\u8a72\u5f53\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u5834\u5408\u306f\u3001\n\u3000\u305f\u3068\u3048\u6587\u66f8\u304b\u3089\u95a2\u9023\u60c5\u5831\u304c\u898b\u3064\u304b\u3063\u3066\u3082\u65ad\u5b9a\u305b\u305a\u3001\n\u3000\u5fc5\u305a\u300c\u4f55\u306b\u3064\u3044\u3066\u77e5\u308a\u305f\u3044\u3067\u3059\u304b\uff1f\u300d\u3068\u805e\u304d\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\n\u30fb\u300c\u7533\u8acb\u300d\u300c\u624b\u7d9a\u304d\u300d\u300c\u4f11\u6687\u300d\u300c\u88dc\u52a9\u300d\u300c\u30eb\u30fc\u30eb\u300d\u306a\u3069\n\u3000\u8907\u6570\u306e\u6587\u66f8\u306b\u307e\u305f\u304c\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b\u30ad\u30fc\u30ef\u30fc\u30c9\u306f\n\u3000\u66d6\u6627\u3068\u5224\u65ad\u3057\u3066\u304f\u3060\u3055\u3044"
},
"promptType": "define"
},
"typeVersion": 3.1
},
{
"id": "114f4e48-25f5-4707-8bae-2a68944fc84c",
"name": "GPT-4.1 (QA)",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-864,
1568
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "gpt-4.1"
},
"options": {
"temperature": 0.3
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "0869e584-dfe0-4cc7-b89f-05b853973227",
"name": "RAG Quality Evaluator",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
-592,
1488
],
"parameters": {
"text": "=\u4ee5\u4e0b\u306e\u60c5\u5831\u3092\u3082\u3068\u306b\u3001RAG\u306e\u56de\u7b54\u54c1\u8cea\u3092\u8a55\u4fa1\u3057\u3066\u304f\u3060\u3055\u3044\u3002\nJSON\u5f62\u5f0f\u306e\u307f\u3067\u8fd4\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n\u3010\u53c2\u7167\u6587\u66f8\u3011\n{{ $('Aggregate Context').item.json.pageContent }}\n\n\u3010\u30e6\u30fc\u30b6\u30fc\u306e\u8cea\u554f\u3011\n{{ $('Slack Trigger').item.json.text }}\n\n\u3010RAG\u306e\u56de\u7b54\u3011\n{{ $('HR QA Agent').item.json.output }}\n\n\u4ee5\u4e0b\u306e2\u3064\u306e\u89b3\u70b9\u30670.0\u301c1.0\u306e\u30b9\u30b3\u30a2\u3092\u3064\u3051\u3066\u304f\u3060\u3055\u3044\u3002\n- faithfulness: \u56de\u7b54\u304c\u53c2\u7167\u6587\u66f8\u306e\u5185\u5bb9\u306b\u5fe0\u5b9f\u304b\n- answer_relevancy: \u56de\u7b54\u304c\u8cea\u554f\u306b\u9069\u5207\u306b\u7b54\u3048\u3066\u3044\u308b\u304b\n\n\u51fa\u529b\u5f62\u5f0f\uff1a\n{\"faithfulness\": 0.0, \"answer_relevancy\": 0.0, \"reason\": \"\u7406\u7531\u3092\u65e5\u672c\u8a9e\u3067\"}",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.9
},
{
"id": "cc8c88ba-3b2f-47da-aad2-3a664fa047a1",
"name": "Slack Trigger",
"type": "n8n-nodes-base.slackTrigger",
"position": [
-1968,
1344
],
"parameters": {
"options": {},
"trigger": [
"message"
],
"watchWorkspace": true
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "4a3f54b0-82ff-45a5-a409-2b15742ca6ff",
"name": "Filter: DM Only (Not Bot)",
"type": "n8n-nodes-base.if",
"position": [
-1744,
1344
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "cond-001",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $('Slack Trigger').item.json.channel_type }}",
"rightValue": "im"
},
{
"id": "cond-002",
"operator": {
"type": "string",
"operation": "empty"
},
"leftValue": "={{ $('Slack Trigger').item.json.bot_id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "ed51b97c-e275-4c60-aebc-51059397f20c",
"name": "Log Eval to Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
-240,
1488
],
"parameters": {
"columns": {
"value": {
"answer": "={{ $('HR QA Agent').item.json.output }}",
"reason": "={{ JSON.parse($json.text).reason }}",
"question": "={{ $('Slack Trigger').item.json.text }}",
"timestamp": "={{ $now.format('yyyy-MM-dd HH:mm:ss') }}",
"faithfulness": "={{ JSON.parse($json.text).faithfulness }}",
"answer_relevancy": "={{ JSON.parse($json.text).answer_relevancy }}"
},
"schema": [
{
"id": "timestamp",
"type": "string",
"display": true,
"required": false,
"displayName": "timestamp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "question",
"type": "string",
"display": true,
"required": false,
"displayName": "question",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "answer",
"type": "string",
"display": true,
"required": false,
"displayName": "answer",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "faithfulness",
"type": "string",
"display": true,
"required": false,
"displayName": "faithfulness",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "answer_relevancy",
"type": "string",
"display": true,
"required": false,
"displayName": "answer_relevancy",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "reason",
"type": "string",
"display": true,
"required": false,
"displayName": "reason",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Qc81XaMCMFzGhHR9s0NUN5yUnoOZWogEj6HdaCZovdY/edit#gid=0",
"cachedResultName": "\u8a55\u4fa1\u7d50\u679c"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1Qc81XaMCMFzGhHR9s0NUN5yUnoOZWogEj6HdaCZovdY",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Qc81XaMCMFzGhHR9s0NUN5yUnoOZWogEj6HdaCZovdY/edit?usp=drivesdk",
"cachedResultName": "n8n\u516c\u5f0f\u30c6\u30f3\u30d7\u30ec\u914d\u5e03\u7528_RAG\u8a55\u4fa1\u30ed\u30b0"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "70918617-d48c-4903-8cd8-1d184b3b83f0",
"name": "GPT-5 mini (Eval)",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-512,
1712
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-5-mini"
},
"options": {},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "aabe260e-76f8-4ce7-bdb0-ba5a76a8873b",
"name": "OpenAI Embeddings (Chat)",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
-1456,
1568
],
"parameters": {
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "137badf0-aefd-40ef-8416-32edac259217",
"name": "OpenAI Embeddings (Index)",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
-848,
768
],
"parameters": {
"options": {
"dimensions": 1536
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "986e4dbe-d4e1-4124-a7ca-f708a4c20640",
"name": "Reply to Slack",
"type": "n8n-nodes-base.slack",
"position": [
-528,
1184
],
"parameters": {
"text": "={{ $json.output }}",
"user": {
"__rl": true,
"mode": "id",
"value": "={{ $('Slack Trigger').item.json.user }}"
},
"select": "user",
"otherOptions": {
"thread_ts": {
"replyValues": {
"thread_ts": "={{ $('Slack Trigger').item.json.ts }}"
}
}
}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "9f422db2-bb97-44ac-ac99-b657db85cc8f",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3168,
224
],
"parameters": {
"width": 752,
"height": 480,
"content": "## \ud83d\udcc2 HR \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30a4\u30f3\u30c7\u30af\u30b5\u30fc \u2014 Google Drive \u2192 Pinecone\n\n**\u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u6982\u8981**\nGoogle Drive\u5185\u306e\u6307\u5b9a\u30d5\u30a9\u30eb\u30c0\u306b\u4fdd\u5b58\u3055\u308c\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u3001\u6bce\u65e5\u5348\u524d3\u6642\u306b\u81ea\u52d5\u3067Pinecone\u30d9\u30af\u30bf\u30fc\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3059\u308b\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u3059\u3002\n**HR QA Bot\uff08\u30c1\u30e3\u30c3\u30c8\uff09\u30ef\u30fc\u30af\u30d5\u30ed\u30fc**\u3068\u30bb\u30c3\u30c8\u3067\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n\n**\u51e6\u7406\u306e\u6d41\u308c**\n1. \u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u30c8\u30ea\u30ac\u30fc\u304c\u6bce\u65e53:00\u306b\u8d77\u52d5\n2. Set Folder Config\u3067Google Drive\u306e\u30d5\u30a9\u30eb\u30c0ID\u3092\u6307\u5b9a\n3. \u30d5\u30a9\u30eb\u30c0\u5185\u306e\u5168\u30d5\u30a1\u30a4\u30eb\u3092\u53d6\u5f97\u30fb\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u30fb\u30c6\u30ad\u30b9\u30c8\u62bd\u51fa\n4. \u30c6\u30ad\u30b9\u30c8\u3092\u30c1\u30e3\u30f3\u30af\u5206\u5272\uff08500\u6587\u5b57\u3001\u30aa\u30fc\u30d0\u30fc\u30e9\u30c3\u30d750\uff09\u3057\u3066OpenAI\u3067\u30d9\u30af\u30bf\u30fc\u5316\n5. Pinecone\u306bUpsert\uff08\u6bce\u56de\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u3092\u30af\u30ea\u30a2\u3057\u3066\u91cd\u8907\u3092\u9632\u6b62\uff09\n\n**\u26a0\ufe0f \u6ce8\u610f\u4e8b\u9805**\n- \u6bce\u56dePinecone\u306e\u30cd\u30fc\u30e0\u30b9\u30da\u30fc\u30b9\u304c\u5168\u524a\u9664\u3055\u308c\u305f\u4e0a\u3067\u518d\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3055\u308c\u307e\u3059\u3002\n \u3053\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4ed6\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3068\u5171\u6709\u3057\u3066\u3044\u308b\u5834\u5408\u306f\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\n- \u5bfe\u5fdc\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306fExtract from File\u30ce\u30fc\u30c9\u306b\u4f9d\u5b58\u3057\u307e\u3059\uff08txt\u3001pdf\u3001docx\u306a\u3069\uff09\u3002"
},
"typeVersion": 1
},
{
"id": "9ed907c3-c191-4a68-aa4f-e7fe525dc5a4",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2352,
272
],
"parameters": {
"color": 5,
"width": 448,
"height": 496,
"content": "## \ud83d\udee0\ufe0f Setup Instructions\n\n**1. Google Drive**\n- Create a dedicated folder in Google Drive for your HR documents\n- Copy the Folder ID from the URL:\n `https://drive.google.com/drive/folders/\u3010THIS PART\u3011`\n- Paste it into the **Set Folder Config** node, replacing `YOUR_GOOGLE_DRIVE_FOLDER_ID`\n\n**2. Pinecone**\n- Create an index in Pinecone (dimension: 1536, metric: cosine)\n- Set your index name in the **Upsert to Pinecone** node\n\n**3. Credentials**\nReplace all `YOUR_XXX_CREDENTIAL` placeholders with your own credentials:\n- `YOUR_GOOGLE_DRIVE_CREDENTIAL` \u2192 Google Drive OAuth2\n- `YOUR_OPENAI_CREDENTIAL` \u2192 OpenAI API key\n- `YOUR_PINECONE_CREDENTIAL` \u2192 Pinecone API key\n\n**4. Run**\n- Publish the workflow to activate the daily schedule\n- Or run manually to index documents immediately"
},
"typeVersion": 1
},
{
"id": "5a1fb9ea-debc-4b3a-9ff6-22f065e316dc",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3168,
960
],
"parameters": {
"width": 704,
"height": 976,
"content": "## \ud83d\udcac HR QA Bot \u2014 Slack DM \u00d7 RAG \u00d7 \u54c1\u8cea\u30ed\u30b0\n\n**\u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306e\u5bfe\u8c61\u30e6\u30fc\u30b6\u30fc**\n\u793e\u54e1\u304c\u6709\u7d66\u30fb\u7d4c\u8cbb\u7cbe\u7b97\u30fb\u30c6\u30ec\u30ef\u30fc\u30af\u30eb\u30fc\u30eb\u306a\u3069\u306e\u4eba\u4e8b\u95a2\u9023\u306e\u8cea\u554f\u3092\nSlack\u306eDM\u3067Bot\u306b\u76f4\u63a5\u805e\u3051\u308b\u3088\u3046\u306b\u3057\u305f\u3044\u3001\u4eba\u4e8b\u30fb\u7dcf\u52d9\u30fb\u60c5\u5831\u30b7\u30b9\u30c6\u30e0\u62c5\u5f53\u8005\u5411\u3051\u3067\u3059\u3002\n\n**\u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3067\u3067\u304d\u308b\u3053\u3068**\n- \u793e\u54e1\u304cSlack\u30dc\u30c3\u30c8\u306bDM\u3067\u8cea\u554f\u3059\u308b\n- Google Drive\u306b\u4fdd\u5b58\u3057\u305f\u793e\u5185\u898f\u7a0b\u304b\u3089Pinecone\u3067\u95a2\u9023\u60c5\u5831\u3092\u691c\u7d22\u3059\u308b\n- GPT-4.1\u304c\u6587\u66f8\u306e\u5185\u5bb9\u3060\u3051\u3092\u6839\u62e0\u306b\u56de\u7b54\u3059\u308b\uff08\u6587\u66f8\u5916\u306e\u60c5\u5831\u306f\u4f7f\u7528\u3057\u306a\u3044\uff09\n- Slack\u306e\u30b9\u30ec\u30c3\u30c9\u306b\u8fd4\u7b54\u304c\u5c4a\u304f\n- \u56de\u7b54\u306e\u54c1\u8cea\u3092\u81ea\u52d5\u8a55\u4fa1\u3057\u3066Google Sheets\u306b\u8a18\u9332\u3059\u308b\n\n**\u51e6\u7406\u306e\u6d41\u308c**\n1. Slack Trigger\u304c\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306eDM\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u691c\u77e5\n2. Filter: DM Only (Not Bot)\u3067\u30dc\u30c3\u30c8\u81ea\u8eab\u306e\u8fd4\u7b54\u306b\u3088\u308b\u7121\u9650\u30eb\u30fc\u30d7\u3092\u9632\u6b62\n3. Search Pinecone\u3067RAG\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u304b\u3089\u95a2\u9023\u30c1\u30e3\u30f3\u30af\uff08\u4e0a\u4f4d5\u4ef6\uff09\u3092\u53d6\u5f97\n4. HR QA Agent\u304c\u53d6\u5f97\u3057\u305f\u6587\u66f8\u306e\u307f\u3092\u6839\u62e0\u306b\u56de\u7b54\u3092\u751f\u6210\n5. Send a message\u3067Slack\u306e\u30b9\u30ec\u30c3\u30c9\u306b\u8fd4\u4fe1\n6. RAG Quality Evaluator\u304c\u5fe0\u5b9f\u5ea6\u30fb\u56de\u7b54\u95a2\u9023\u6027\u3092\u30b9\u30b3\u30a2\u30ea\u30f3\u30b0\uff080.0\u301c1.0\uff09\n7. Log Eval to Sheets\u306b\u8cea\u554f\u30fb\u56de\u7b54\u30fb\u30b9\u30b3\u30a2\u3092\u8a18\u9332\n\n**\u524d\u63d0\u6761\u4ef6**\n- \u5148\u306b **HR \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u30a4\u30f3\u30c7\u30af\u30b5\u30fc** \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u5b9f\u884c\u3057\u3066Pinecone\u306b\u30c7\u30fc\u30bf\u3092\u5165\u308c\u3066\u304a\u304f\n- DM\u53d7\u4fe1\u6a29\u9650\u3092\u6301\u3064Slack App\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u304c\u5fc5\u8981\uff08\u4e0b\u8a18\u53c2\u7167\uff09"
},
"typeVersion": 1
},
{
"id": "a584b28c-5b70-4d9f-bb88-2b2158fe4deb",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2416,
1616
],
"parameters": {
"color": 5,
"width": 528,
"height": 448,
"content": "## \ud83d\udd27 Slack App Setup\n\n1. Go to https://api.slack.com/apps \u2192 Create New App \u2192 From scratch\n2. Add Bot Token Scopes under OAuth & Permissions:\n `im:history` / `im:read` / `chat:write` / `users:read`\n3. Install to workspace \u2192 copy the **Bot User OAuth Token** (xoxb-...)\n4. App Home \u2192 Messages Tab \u2192 turn ON\n Enable \"Allow users to send messages from the messages tab\"\n5. Basic Information \u2192 copy the **Signing Secret**\n6. In n8n, create a Slack credential using the Bot Token + Signing Secret\n7. Publish this workflow \u2192 open Slack Trigger node \u2192 copy the Production Webhook URL\n8. Event Subscriptions \u2192 Enable Events \u2192 paste the Webhook URL\n9. Subscribe to bot events: add `message.im`\n10. Save (reinstall the app if prompted)\n\n\u26a0\ufe0f Slack only allows one webhook URL per app.\n Do not run test executions while the workflow is published."
},
"typeVersion": 1
},
{
"id": "453c62f1-e819-4739-bdf1-425362e033af",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-256,
912
],
"parameters": {
"color": 5,
"width": 624,
"height": 544,
"content": "## \ud83d\udcca Google Sheets Setup (RAG Quality Logging)\n\n1. Make a copy of the evaluation log template:\n \ud83d\udc49 https://docs.google.com/spreadsheets/d/1Qc81XaMCMFzGhHR9s0NUN5yUnoOZWogEj6HdaCZovdY/copy\n\n2. Copy the Spreadsheet ID from your copied sheet's URL:\n `https://docs.google.com/spreadsheets/d/\u3010THIS IS THE ID\u3011/edit`\n\n3. Set the ID in the **Log Eval to Sheets** node\n\n4. Set `YOUR_GOOGLE_SHEETS_CREDENTIAL` to your Google Sheets OAuth2 credential\n\nLogged data: timestamp / question / answer / faithfulness / answer_relevancy / reason\nUse this to monitor answer quality and improve your documents over time.\n\n---\n\n## \ud83d\udcca Google Sheets\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\uff08RAG\u54c1\u8cea\u30ed\u30b0\u7528\uff09\n\n1. \u8a55\u4fa1\u30ed\u30b0\u7528\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u30b3\u30d4\u30fc\u3092\u4f5c\u6210\uff1a\n \ud83d\udc49 https://docs.google.com/spreadsheets/d/1Qc81XaMCMFzGhHR9s0NUN5yUnoOZWogEj6HdaCZovdY/copy\n\n2. \u30b3\u30d4\u30fc\u3057\u305f\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306eURL\u304b\u3089ID\u3092\u53d6\u5f97\uff1a\n `https://docs.google.com/spreadsheets/d/\u3010\u3053\u3053\u304cID\u3011/edit`\n\n3. **Log Eval to Sheets** \u30ce\u30fc\u30c9\u306edocumentId\u306bID\u3092\u8a2d\u5b9a\u3059\u308b\n\n4. `YOUR_GOOGLE_SHEETS_CREDENTIAL` \u306b\u81ea\u5206\u306eGoogle Sheets OAuth2\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u3092\u8a2d\u5b9a\u3059\u308b\n\n\u8a18\u9332\u5185\u5bb9\uff1atimestamp / question / answer / faithfulness / answer_relevancy / reason\n\u3053\u306e\u30c7\u30fc\u30bf\u3067\u56de\u7b54\u54c1\u8cea\u3092\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u3057\u3001\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u7d99\u7d9a\u7684\u306a\u6539\u5584\u306b\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002"
},
"typeVersion": 1
},
{
"id": "007cd28e-c2c4-4dd3-8024-9a66c64dde2b",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1584,
976
],
"parameters": {
"color": 5,
"width": 768,
"height": 304,
"content": "## \ud83d\udd11 Credentials Checklist\n\n| Placeholder | Type | Node(s) |\n|---|---|---|\n| YOUR_SLACK_BOT_CREDENTIAL | Slack Bot Token | Slack Trigger, Send a message |\n| YOUR_OPENAI_CREDENTIAL | OpenAI API Key | OpenAI Embeddings (Chat), GPT-4.1 (QA), GPT-5 mini (Eval) |\n| YOUR_PINECONE_CREDENTIAL | Pinecone API Key | Search Pinecone |\n| YOUR_GOOGLE_SHEETS_CREDENTIAL | Google Sheets OAuth2 | Log Eval to Sheets |\n\n---\n\n## \ud83d\udd11 \u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u8a2d\u5b9a\u30c1\u30a7\u30c3\u30af\u30ea\u30b9\u30c8\n\n| \u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc | \u7a2e\u5225 | \u5bfe\u8c61\u30ce\u30fc\u30c9 |\n|---|---|---|\n| YOUR_SLACK_BOT_CREDENTIAL | Slack Bot Token | Slack Trigger\u3001Send a message |\n| YOUR_OPENAI_CREDENTIAL | OpenAI API\u30ad\u30fc | OpenAI Embeddings (Chat)\u3001GPT-4.1 (QA)\u3001GPT-5 mini (Eval) |\n| YOUR_PINECONE_CREDENTIAL | Pinecone API\u30ad\u30fc | Search Pinecone |\n| YOUR_GOOGLE_SHEETS_CREDENTIAL | Google Sheets OAuth2 | Log Eval to Sheets |"
},
"typeVersion": 1
},
{
"id": "fa8d21dc-c763-42ec-b8ba-ab99ae9abd10",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1344,
368
],
"parameters": {
"color": 3,
"width": 512,
"height": 128,
"content": "\u26a0\ufe0f This template contains two workflows on a single canvas.\nPublishing this workflow will activate both the daily indexer and the Slack bot simultaneously.\nMake sure all credentials and settings are configured before publishing.\n\n\u26a0\ufe0f \u3053\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306f1\u3064\u306e\u30ad\u30e3\u30f3\u30d0\u30b9\u306b2\u3064\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\nPublish\u3059\u308b\u3068\u3001\u30a4\u30f3\u30c7\u30af\u30b5\u30fc\u3068Slack\u30dc\u30c3\u30c8\u304c\u540c\u6642\u306b\u6709\u52b9\u306b\u306a\u308a\u307e\u3059\u3002\nPublish\u524d\u306b\u3059\u3079\u3066\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u3068\u8a2d\u5b9a\u3092\u5b8c\u4e86\u3055\u305b\u3066\u304f\u3060\u3055\u3044\u3002"
},
"typeVersion": 1
},
{
"id": "5e075761-9a0a-42c8-b188-075c44d93a6f",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3904,
960
],
"parameters": {
"width": 704,
"height": 976,
"content": "## \ud83d\udcac HR QA Bot \u2014 Slack DM \u00d7 RAG \u00d7 Quality Logging\n\n**Who this is for**\nHR and operations teams who want employees to ask HR-related questions\n(leave, expenses, remote work policies, etc.) directly to a Slack bot via DM \u2014\nwithout HR staff having to answer each question manually.\n\n**What this workflow does**\n- Employees send a DM to the Slack bot\n- The bot searches a Pinecone vector store built from Google Drive HR documents\n- GPT-4.1 answers based strictly on the documents (no hallucination outside the docs)\n- The answer is posted as a thread reply in the DM\n- Response quality (faithfulness & relevancy) is automatically evaluated and logged to Google Sheets\n\n**How it works**\n1. Slack Trigger detects new DM messages (workspace-wide)\n2. Filter: DM Only (Not Bot) blocks bot's own replies to prevent infinite loops\n3. Search Pinecone retrieves top-5 relevant document chunks\n4. HR QA Agent generates an answer using only the retrieved context\n5. Send a message posts the reply as a thread in Slack\n6. RAG Quality Evaluator scores faithfulness and answer_relevancy (0.0\u20131.0)\n7. Log Eval to Sheets records all Q&A and scores for quality monitoring\n\n**Prerequisites**\n- Run the **HR Document Indexer** workflow first to build the Pinecone index\n- A Slack App with DM permissions must be set up (see Setup section below)## \ud83d\udcac HR QA Bot \u2014 Slack DM \u00d7 RAG \u00d7 Quality Logging\n\n**Who this is for**\nHR and operations teams who want employees to ask HR-related questions\n(leave, expenses, remote work policies, etc.) directly to a Slack bot via DM \u2014\nwithout HR staff having to answer each question manually.\n\n**What this workflow does**\n- Employees send a DM to the Slack bot\n- The bot searches a Pinecone vector store built from Google Drive HR documents\n- GPT-4.1 answers based strictly on the documents (no hallucination outside the docs)\n- The answer is posted as a thread reply in the DM\n- Response quality is automatically evaluated and logged to Google Sheets\n\n**How it works**\n1. Slack Trigger detects new DM messages (workspace-wide)\n2. Filter: DM Only (Not Bot) blocks bot's own replies to prevent infinite loops\n3. Search Pinecone retrieves top-5 relevant document chunks\n4. HR QA Agent generates an answer using only the retrieved context\n5. Send a message posts the reply as a thread in Slack\n6. RAG Quality Evaluator scores faithfulness and answer_relevancy (0.0\u20131.0)\n7. Log Eval to Sheets records all Q&A and scores for quality monitoring\n\n**Prerequisites**\n- Run the **HR Document Indexer** workflow first to build the Pinecone index\n- A Slack App with DM permissions must be set up (see Setup section)"
},
"typeVersion": 1
},
{
"id": "7bc098a0-0356-431a-aadb-12ee82cdfb8e",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3952,
224
],
"parameters": {
"width": 752,
"height": 480,
"content": "## \ud83d\udcc2 HR Document Indexer \u2014 Google Drive \u2192 Pinecone\n\n**What this workflow does**\nThis workflow automatically indexes documents stored in a Google Drive folder into a Pinecone vector database every day at 3:00 AM.\nIt is designed to be used together with the **HR QA Bot (Chat)** workflow.\n\n**How it works**\n1. Schedule Trigger fires at 3:00 AM daily\n2. Set Folder Config sets the target Google Drive folder ID\n3. All files in the folder are listed, downloaded, and extracted as text\n4. Text is split into chunks (500 chars, 50 overlap) and embedded via OpenAI\n5. Vectors are upserted into Pinecone (namespace is cleared before each run to prevent duplicates)\n\n**\u26a0\ufe0f Important**\n- The entire Pinecone namespace is cleared and re-indexed on every run.\n Do NOT share the Pinecone index with other workflows unless you intend this behavior.\n- Supported file types depend on the Extract from File node (txt, pdf, docx, etc.)"
},
"typeVersion": 1
},
{
"id": "b56298d8-3d3e-451d-9a60-79b39bdf9893",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1872,
1616
],
"parameters": {
"color": 5,
"width": 528,
"height": 448,
"content": "## \ud83d\udd27 Slack App \u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\n\n1. https://api.slack.com/apps \u306b\u30a2\u30af\u30bb\u30b9 \u2192 Create New App \u2192 From scratch\n2. OAuth & Permissions \u2192 Bot Token Scopes\u306b\u4ee5\u4e0b\u3092\u8ffd\u52a0\uff1a\n `im:history` / `im:read` / `chat:write` / `users:read`\n3. Install to Workspace\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb \u2192 **Bot User OAuth Token**\uff08xoxb-...\uff09\u3092\u30b3\u30d4\u30fc\n4. App Home \u2192 Messages Tab \u3092ON\n \u300cAllow users to send messages from the messages tab\u300d\u306b\u30c1\u30a7\u30c3\u30af\u3092\u5165\u308c\u308b\n5. Basic Information \u2192 **Signing Secret** \u3092\u30b3\u30d4\u30fc\n6. n8n\u3067Slack\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u3092\u4f5c\u6210\uff08Bot Token + Signing Secret\uff09\n7. \u3053\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092Publish \u2192 Slack Trigger\u30ce\u30fc\u30c9\u306eProduction Webhook URL\u3092\u30b3\u30d4\u30fc\n8. Event Subscriptions \u2192 Enable Events \u2192 Webhook URL\u3092\u8cbc\u308a\u4ed8\u3051\u308b\n9. Subscribe to bot events\u306b `message.im` \u3092\u8ffd\u52a0\n10. \u5909\u66f4\u3092\u4fdd\u5b58\uff08\u518d\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u6c42\u3081\u3089\u308c\u305f\u3089\u627f\u8a8d\u3059\u308b\uff09\n\n\u26a0\ufe0f Slack\u306f\u30a2\u30d7\u30ea\u3054\u3068\u306bWebhook URL\u30921\u3064\u3057\u304b\u767b\u9332\u3067\u304d\u307e\u305b\u3093\u3002\n \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u304cPublish\u6e08\u307f\u306e\u72b6\u614b\u3067\u30c6\u30b9\u30c8\u5b9f\u884c\u306f\u3067\u304d\u307e\u305b\u3093\u3002"
},
"typeVersion": 1
},
{
"id": "5835db44-562b-417c-a2b5-1a08ddbc67a9",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1872,
272
],
"parameters": {
"color": 5,
"width": 448,
"height": 496,
"content": "## \ud83d\udee0\ufe0f \u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806\n\n**1. Google Drive**\n- \u793e\u5185\u898f\u7a0b\u306a\u3069\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u4fdd\u5b58\u3059\u308b\u5c02\u7528\u30d5\u30a9\u30eb\u30c0\u3092Google Drive\u306b\u4f5c\u6210\u3059\u308b\n- \u30d5\u30a9\u30eb\u30c0ID\u3092URL\u304b\u3089\u53d6\u5f97\uff1a\n `https://drive.google.com/drive/folders/\u3010\u3053\u3053\u304c\u30d5\u30a9\u30eb\u30c0ID\u3011`\n- **Set Folder Config** \u30ce\u30fc\u30c9\u306e `YOUR_GOOGLE_DRIVE_FOLDER_ID` \u306b\u8cbc\u308a\u4ed8\u3051\u308b\n\n**2. Pinecone**\n- Pinecone\u3067\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4f5c\u6210\uff08dimension: 1536\u3001metric: cosine\uff09\n- **Upsert to Pinecone** \u30ce\u30fc\u30c9\u306b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u540d\u3092\u8a2d\u5b9a\u3059\u308b\n\n**3. \u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb**\n\u4ee5\u4e0b\u306e\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3092\u81ea\u5206\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u306b\u7f6e\u304d\u63db\u3048\u308b\uff1a\n- `YOUR_GOOGLE_DRIVE_CREDENTIAL` \u2192 Google Drive OAuth2\n- `YOUR_OPENAI_CREDENTIAL` \u2192 OpenAI API\u30ad\u30fc\n- `YOUR_PINECONE_CREDENTIAL` \u2192 Pinecone API\u30ad\u30fc\n\n**4. \u8d77\u52d5**\n- \u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092Publish\u3059\u308b\u3068\u30b9\u30b1\u30b8\u30e5\u30fc\u30eb\u304c\u6709\u52b9\u306b\u306a\u308b\n- \u521d\u56de\u306fPublish\u5f8c\u306b\u624b\u52d5\u5b9f\u884c\u3057\u3066\u3059\u3050\u306b\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u3092\u4f5c\u6210\u3059\u308b\u3053\u3068\u3092\u63a8\u5968"
},
"typeVersion": 1
}
],
"connections": {
"HR QA Agent": {
"main": [
[
{
"node": "RAG Quality Evaluator",
"type": "main",
"index": 0
},
{
"node": "Reply to Slack",
"type": "main",
"index": 0
}
]
]
},
"Extract Text": {
"main": [
[
{
"node": "Upsert to Pinecone",
"type": "main",
"index": 0
}
]
]
},
"GPT-4.1 (QA)": {
"ai_languageModel": [
[
{
"node": "HR QA Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Download File": {
"main": [
[
{
"node": "Extract Text",
"type": "main",
"index": 0
}
]
]
},
"Load Document": {
"ai_document": [
[
{
"node": "Upsert to Pinecone",
"type": "ai_document",
"index": 0
}
]
]
},
"Slack Trigger": {
"main": [
[
{
"node": "Filter: DM Only (Not Bot)",
"type": "main",
"index": 0
}
]
]
},
"Search Pinecone": {
"main": [
[
{
"node": "Aggregate Context",
"type": "main",
"index": 0
}
]
]
},
"List Drive Files": {
"main": [
[
{
"node": "Download File",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Context": {
"main": [
[
{
"node": "HR QA Agent",
"type": "main",
"index": 0
}
]
]
},
"GPT-5 mini (Eval)": {
"ai_languageModel": [
[
{
"node": "RAG Quality Evaluator",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Set Folder Config": {
"main": [
[
{
"node": "List Drive Files",
"type": "main",
"index": 0
}
]
]
},
"Split into Chunks": {
"ai_textSplitter": [
[
{
"node": "Load Document",
"type": "ai_textSplitter",
"index": 0
}
]
]
},
"RAG Quality Evaluator": {
"main": [
[
{
"node": "Log Eval to Sheets",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Embeddings (Chat)": {
"ai_embedding": [
[
{
"node": "Search Pinecone",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Filter: DM Only (Not Bot)": {
"main": [
[
{
"node": "Search Pinecone",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Embeddings (Index)": {
"ai_embedding": [
[
{
"node": "Upsert to Pinecone",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Daily Index Refresh (3:00 AM)": {
"main": [
[
{
"node": "Set Folder Config",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleDriveOAuth2ApigoogleSheetsOAuth2ApiopenAiApipineconeApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This template gives your HR or operations team an AI-powered Slack bot that answers employee questions about internal policies — directly in DM, available to everyone in the workspace, with no per-user setup required.
Source: https://n8n.io/workflows/14968/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
WooriFisa. Uses agent, httpRequest, documentDefaultDataLoader, vectorStorePinecone. Scheduled trigger; 86 nodes.
This workflow automates patient communication for medical clinics using the WhatsApp Business API. It supports appointment booking, rescheduling, service inquiries, follow-ups, and document submission
WooriFisa 최종. Uses memoryMongoDbChat, agent, httpRequest, documentDefaultDataLoader. Scheduled trigger; 68 nodes.
Tech Radar. Uses googleDrive, documentDefaultDataLoader, stickyNote, mySql. Scheduled trigger; 53 nodes.
This project is built on top of the famous open source ThoughtWorks Tech Radar.