N
n8n Store
Workflow Market
Website Chatbot with Google Drive Knowledge Base using GPT-4 and Mistral AI

Website Chatbot with Google Drive Knowledge Base using GPT-4 and Mistral AI

by dbt0 views

説明

Categories

🤖 AI & Machine Learning

Nodes Used

n8n-nodes-base.ifn8n-nodes-base.setn8n-nodes-base.setn8n-nodes-base.coden8n-nodes-base.waitn8n-nodes-base.webhookn8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNoten8n-nodes-base.stickyNote
Price無料
Views0
最終更新11/28/2025
workflow.json
{
  "meta": {
    "instanceId": "e4680277d6b9c8b80748f71c2c1d0f9a640576175738ea2675967f762eeaf9df"
  },
  "nodes": [
    {
      "id": "671268e2-e7a4-4b30-90ad-e132f8e8afee",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -368,
        480
      ],
      "webhookId": "d536879e-1fa5-45f6-b106-25f580ea92f4",
      "parameters": {
        "mode": "webhook",
        "public": true,
        "options": {
          "responseMode": "lastNode"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "fb2d9289-334f-43a1-a305-d40e70e39b97",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        32,
        784
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "gpt-4.1-mini"
        },
        "options": {
          "temperature": 0.5,
          "presencePenalty": 1,
          "frequencyPenalty": 1
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "BEMsaCWtnyqTUtIt",
          "name": "OpenAi account 8 dbt digi"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "94cb5658-5ec0-47ac-8192-9793189937a8",
      "name": "Simple Memory",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        256,
        784
      ],
      "parameters": {
        "sessionIdType": "customKey",
        "contextWindowLength": 10
      },
      "typeVersion": 1.3
    },
    {
      "id": "f7408b4e-025e-4a43-9c76-3b157537d43d",
      "name": "Loop Over Items1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -880,
        1328
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "c7807b4e-eed0-42c1-a066-74c12215ec57",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        752,
        1552
      ],
      "webhookId": "29a6451b-8a53-4598-b4fe-e11241eb51ab",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "bab90cc7-5a3c-426d-8c84-c813bf037e76",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        1296,
        1584
      ],
      "parameters": {
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "source",
                "value": "={{ $json.content.parseJson().metadata.source }}"
              },
              {
                "name": "blobType",
                "value": "application/jsonb"
              },
              {
                "name": "loc",
                "value": "={{ $json.content.parseJson().metadata.loc }}"
              },
              {
                "name": "source_metadata_id",
                "value": "={{ $json.content.parseJson().metadata.source_metadata_id }}"
              }
            ]
          }
        },
        "jsonData": "={{ $json.content.parseJson().pageContent.toJsonString() }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1
    },
    {
      "id": "5349c366-6b07-4838-824e-b0192070de44",
      "name": "Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterCharacterTextSplitter",
      "position": [
        1376,
        1744
      ],
      "parameters": {
        "chunkSize": 10000000
      },
      "typeVersion": 1
    },
    {
      "id": "53158770-6435-4615-8c52-9499004d365f",
      "name": "If2",
      "type": "n8n-nodes-base.if",
      "position": [
        640,
        1328
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "d15e917b-43d2-40b8-8b49-af467ff63961",
              "operator": {
                "type": "string",
                "operation": "notExists",
                "singleValue": true
              },
              "leftValue": "={{ $json.data[0].parseJson().skipped }}",
              "rightValue": ""
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "9a5aa2c1-de3b-43b3-941d-eac3a9aa01c2",
      "name": "Qdrant Vector Store1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        1344,
        1312
      ],
      "parameters": {
        "mode": "insert",
        "options": {},
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "docragtestkb",
          "cachedResultName": "docragtestkb"
        },
        "embeddingBatchSize": "=200"
      },
      "credentials": {
        "qdrantApi": {
          "id": "hBirQvCk1VaV8cfQ",
          "name": "QdrantApi account"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "7994799d-0f57-454f-ae5f-6d0bfc78973a",
      "name": "Embeddings Mistral Cloud",
      "type": "@n8n/n8n-nodes-langchain.embeddingsMistralCloud",
      "position": [
        1136,
        1600
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "mistralCloudApi": {
          "id": "k9FknrnRcIKYNX7T",
          "name": "Mistral Cloud account 2 dbt rn"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c2595c65-fbff-45db-a179-d6bdbde1ea01",
      "name": "Qdrant Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreQdrant",
      "position": [
        544,
        656
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {},
        "toolDescription": "use this data answer query",
        "qdrantCollection": {
          "__rl": true,
          "mode": "list",
          "value": "docragtestkb",
          "cachedResultName": "docragtestkb"
        }
      },
      "credentials": {
        "qdrantApi": {
          "id": "4NinNhNX7VxfgZxs",
          "name": "QdrantApi account 2"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "e3617329-c6a9-4616-8f57-a571a4170ebe",
      "name": "Embeddings Mistral Cloud1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsMistralCloud",
      "position": [
        464,
        784
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "mistralCloudApi": {
          "id": "k9FknrnRcIKYNX7T",
          "name": "Mistral Cloud account 2 dbt rn"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "950091b1-c765-42ee-b0e8-d715fcefa8f3",
      "name": "When clicking ‘Execute workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1264,
        1328
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "a49b8efb-07bb-43ec-9fed-a5ed5b12a944",
      "name": "Set metadata",
      "type": "n8n-nodes-base.set",
      "position": [
        -656,
        1344
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "10646eae-ae46-4327-a4dc-9987c2d76173",
              "name": "file_id",
              "type": "string",
              "value": "={{ $json.id }}"
            },
            {
              "id": "f4536df5-d0b1-4392-bf17-b8137fb31a44",
              "name": "file_type",
              "type": "string",
              "value": "={{ $json.mimeType }}"
            },
            {
              "id": "77d782de-169d-4a46-8a8e-a3831c04d90f",
              "name": "file_title",
              "type": "string",
              "value": "={{ $json.name }}"
            },
            {
              "id": "9bde4d7f-e4f3-4ebd-9338-dce1350f9eab",
              "name": "file_url",
              "type": "string",
              "value": "={{ $json.webViewLink }}"
            },
            {
              "id": "fae402c8-c486-4b57-8d28-bf669db6b442",
              "name": "last_modified_date",
              "type": "string",
              "value": "={{ $json.modifiedTime }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "6451f612-f4db-49a7-8f83-436ed9025882",
      "name": "Mistral Upload",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -96,
        1344
      ],
      "parameters": {
        "url": "https://api.mistral.ai/v1/files",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "multipart-form-data",
        "authentication": "predefinedCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "purpose",
              "value": "ocr"
            },
            {
              "name": "file",
              "parameterType": "formBinaryData",
              "inputDataFieldName": "data"
            }
          ]
        },
        "nodeCredentialType": "mistralCloudApi"
      },
      "credentials": {
        "mistralCloudApi": {
          "id": "k9FknrnRcIKYNX7T",
          "name": "Mistral Cloud account 2 dbt rn"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "26913424-307f-435e-a6ee-ea4d217e11b7",
      "name": "Mistral Signed URL",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        144,
        1344
      ],
      "parameters": {
        "url": "=https://api.mistral.ai/v1/files/{{ $json.id }}/url",
        "options": {},
        "sendQuery": true,
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "queryParameters": {
          "parameters": [
            {
              "name": "expiry",
              "value": "24"
            }
          ]
        },
        "headerParameters": {
          "parameters": [
            {
              "name": "Accept",
              "value": "application/json"
            }
          ]
        },
        "nodeCredentialType": "mistralCloudApi"
      },
      "credentials": {
        "mistralCloudApi": {
          "id": "k9FknrnRcIKYNX7T",
          "name": "Mistral Cloud account 2 dbt rn"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b4d90372-a7d5-42e2-b9f3-21687fba59eb",
      "name": "Mistral DOC OCR",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        400,
        1344
      ],
      "parameters": {
        "url": "https://api.mistral.ai/v1/ocr",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"model\": \"mistral-ocr-latest\",\n  \"document\": {\n    \"type\": \"document_url\",\n    \"document_url\": \"{{ $json.url }}\"\n  },\n  \"include_image_base64\": true\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "mistralCloudApi"
      },
      "credentials": {
        "mistralCloudApi": {
          "id": "k9FknrnRcIKYNX7T",
          "name": "Mistral Cloud account 2 dbt rn"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2
    },
    {
      "id": "664b3731-0da6-4dfa-b3d5-d05edff8fb70",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -144,
        1200
      ],
      "parameters": {
        "color": 5,
        "width": 688,
        "height": 304,
        "content": "## MISTRAL OCR\n [OCR Guide](https://mistral.ai/news/mistral-ocr)\n1. UPLOAD FILE\n2. GET SIGNED URL\n3. GET EXTRACT DATA AFTER USING MISTRAL OCR"
      },
      "typeVersion": 1
    },
    {
      "id": "64cef90f-5a5f-4e09-856f-fc66d1b58b7f",
      "name": "Google Drive(brand related data for chatbot)",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1056,
        1328
      ],
      "parameters": {
        "filter": {
          "folderId": {
            "__rl": true,
            "mode": "list",
            "value": "1o3DK9Ceka5Lqb8irvFSfEeB8SVGG_OL7",
            "cachedResultUrl": "https://drive.google.com/drive/folders/1o3DK9Ceka5Lqb8irvFSfEeB8SVGG_OL7",
            "cachedResultName": "Website kb"
          }
        },
        "options": {
          "fields": [
            "id",
            "name",
            "webViewLink",
            "mimeType",
            "*"
          ]
        },
        "resource": "fileFolder",
        "searchMethod": "query"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "xS6kSuLaEkasxHtm",
          "name": "Google Drive account 6 rn dbt"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "3168eaff-b21c-4ff8-81f1-7c4b8605e66b",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1120,
        1200
      ],
      "parameters": {
        "color": 5,
        "height": 288,
        "content": "## load folder with all need for website chatbot"
      },
      "typeVersion": 1
    },
    {
      "id": "99e919d1-5a9c-436b-af53-245a29f35377",
      "name": "Google Drive(load file)",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -464,
        1344
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Set metadata').item.json.file_id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "xS6kSuLaEkasxHtm",
          "name": "Google Drive account 6 rn dbt"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "73883e55-221d-4a58-bfad-a93fb4e9c16c",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -544,
        1216
      ],
      "parameters": {
        "color": 5,
        "width": 320,
        "height": 272,
        "content": "## load individual files"
      },
      "typeVersion": 1
    },
    {
      "id": "2c3716a9-3731-4a29-913c-a0b20db6e767",
      "name": "Code(convert to chunks for loading into vector db)",
      "type": "n8n-nodes-base.code",
      "position": [
        1136,
        1312
      ],
      "parameters": {
        "jsCode": "// 0. Parse the incoming Document data\nlet raw = $input.first().json['Document data'];\nlet arr = typeof raw === 'string' ? JSON.parse(raw) : raw;\n\n// If document name exists, use it — else fallback\nlet source = $input.first().json['Document name'] || 'unknown_source';\n\n// If your workflow previously had a reference like $('Insert Document Metadata1')\n// and it caused an \"unexecuted\" error, we replace it with a safe null or fetch from input\nlet source_id = $input.first().json['source_metadata_id'] || $input.first().json['source'] || $input.first().json[' source'] || null;\n\n// Helper: return character length of an array object\nfunction getObjLength(obj) {\n  return (obj.content || '').length;\n}\n\nfunction getObjLengthofTextOnly(obj) {\n  // Ignore OCR images for character count\n  if (obj.type === 'image_ocr') return 0;\n  return (obj.content || '').length;\n}\n\n// Split any single item whose content is > chunkSize into multiple items\nfunction splitOversizedItems(arr, chunkSize) {\n  const result = [];\n  for (const item of arr) {\n    const content = item.content || '';\n    if (content.length <= chunkSize) {\n      result.push(item);\n    } else {\n      for (let start = 0; start < content.length; start += chunkSize) {\n        const part = content.slice(start, start + chunkSize);\n        result.push({ ...item, content: part });\n      }\n    }\n  }\n  return result;\n}\n\n// Chunking function\nfunction chunkByCharLength(arr, source, chunkSize = 1000) {\n  const flat = splitOversizedItems(arr, chunkSize);\n  const response = [];\n  let idx = 0;\n  let charPos = 0;\n\n  while (idx < flat.length) {\n    const a = [];\n    let sum = 0;\n    const from = charPos;\n\n    while (idx < flat.length && sum < chunkSize) {\n      const item = flat[idx];\n      const len = getObjLength(item);\n      const text_len = getObjLengthofTextOnly(item);\n      a.push(item);\n      sum += len;\n      charPos += text_len;\n      idx++;\n    }\n\n    const to = charPos;\n    const metadata = {\n      source: source,\n      source_metadata_id: source_id,\n      loc: { Characters: { from, to } }\n    };\n\n    response.push({\n      content: JSON.stringify({\n        pageContent: a,\n        metadata\n      })\n    });\n  }\n  return response;\n}\n\n// 1. Run chunking\nconst chunks = chunkByCharLength(arr, source, 1000);\n\n// 2. Return in n8n-compatible format\nreturn chunks.map(c => ({ json: c }));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "8648ab70-4909-401c-896e-7598eb0dd2ed",
      "name": "prepare for chunking",
      "type": "n8n-nodes-base.set",
      "position": [
        944,
        1312
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "5132d92c-41da-4a55-ad79-0c329ca7e626",
              "name": "Document name",
              "type": "string",
              "value": "={{ $('HTTP Request2').item.json.data[0].parseJson().source }}"
            },
            {
              "id": "c8160701-2be7-43c6-bcfa-295fbebe0e23",
              "name": "Document data",
              "type": "string",
              "value": "={{ $('HTTP Request2').item.json.data[0].parseJson().blocks }}"
            },
            {
              "id": "1087ab34-5643-4755-b545-cf34d0ae2cd2",
              "name": " source",
              "type": "string",
              "value": "={{ $('Google Drive(load file)').item.json.id }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "a028ac1b-6827-4255-bfc2-8060c77d889e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        848,
        1200
      ],
      "parameters": {
        "color": 5,
        "width": 416,
        "height": 272,
        "content": "## convert ocr output into chunks for loading into vector database"
      },
      "typeVersion": 1
    },
    {
      "id": "c87dbc3d-1623-442b-a122-bf4d3a49a821",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1296,
        1200
      ],
      "parameters": {
        "color": 5,
        "width": 336,
        "height": 272,
        "content": "## qdrant vector store"
      },
      "typeVersion": 1
    },
    {
      "id": "e1dcae50-2af5-42e2-89f2-3ccd8ebab25e",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -368,
        720
      ],
      "webhookId": "75458eba-ed7b-491d-9fcf-aa8f7440aab8",
      "parameters": {
        "path": "75458eba-ed7b-491d-9fcf-aa8f7440aab8",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2.1
    },
    {
      "id": "5f5aeada-4156-4212-8069-f36e5cec577b",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -16,
        400
      ],
      "parameters": {
        "color": 5,
        "width": 800,
        "height": 512,
        "content": "## website chat agent \n\nreply to user query either from embedded chat or webhook"
      },
      "typeVersion": 1
    },
    {
      "id": "659a7802-35ab-4e3d-a436-373e9e54767d",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        640
      ],
      "parameters": {
        "color": 5,
        "width": 288,
        "height": 240,
        "content": "## chatbot from webhook"
      },
      "typeVersion": 1
    },
    {
      "id": "891e023c-5823-4afd-8319-5a1e6b287890",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        384
      ],
      "parameters": {
        "color": 5,
        "width": 288,
        "height": 240,
        "content": "## embedded chat "
      },
      "typeVersion": 1
    },
    {
      "id": "e1ef6116-da64-4c7f-aced-475fc182bf03",
      "name": "website chat agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        240,
        528
      ],
      "parameters": {
        "text": "={{ $json.que }}",
        "options": {
          "systemMessage": "=You are the official AI assistant for this website. \nYour role is to inform and guide visitors about the brand’s offerings, services, and value. \nYour ONLY knowledge source is the supabase table \"chatdbtai\". \n\nRules:\n1. Always use vector  search on \"chatdbtai\". Base all answers only on that content.\n2. Speak in a clear, friendly, and conversational tone — like a website guide helping a visitor understand the brand.\n3. When asked “what does DBT offer” or “AI services,” explain the different offerings in a structured way:\n   - Summarize in 1–2 sentences.\n   - Then list the services / offerings as **bullet points** or **bold keywords**.\n   - Focus on benefits (what the visitor gains).\n4. If the user asks about a blog, share a direct clickable link from \"chatdbtai\".\n5. If the user provides a URL:\n   - If it exists in \"chatdbtai\", answer from that record.\n   - If not, summarize the page briefly.\n6. If nothing relevant is found, reply exactly:\n   “I couldn’t find that on this site.”\n7. If the question is unrelated to the website, give a short conversational reply, then guide the visitor back to brand services if possible.\n8. Never show database details, queries, or hidden fields.\n\nStyle:\n- Use short, engaging sentences.\n- Highlight brand strengths and services clearly.\n- Prefer **lists** for multiple offerings.\n- Keep it visitor-focused: how DBT helps them.\n\n\n"
        },
        "promptType": "define"
      },
      "typeVersion": 1.9
    },
    {
      "id": "21ecc7c5-7c25-4f5f-8aec-7d437d66e7c8",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1552,
        672
      ],
      "parameters": {
        "color": 5,
        "width": 576,
        "height": 336,
        "content": "## Website Chat + Document Intelligence Workflow\n\nEnables a **website chatbot** to answer user queries using **documents stored in Google Drive**.  \nThe workflow automatically **fetches, OCRs, chunks, and embeds** documents with **Mistral AI**, then stores them in **Qdrant** for vector search — allowing the chatbot to deliver accurate, context-aware replies in real time.\n\n**Flow:** Google Drive → OCR + Chunk → Embed → Qdrant Vector Store → Chat Query → Intelligent Response  \n**Core Tools:** Mistral AI · Qdrant · Supabase · OpenAI"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "If2": {
      "main": [
        [
          {
            "node": "prepare for chunking",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Google Drive(load file)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "website chat agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set metadata": {
      "main": [
        [
          {
            "node": "Google Drive(load file)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "website chat agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Mistral Upload": {
      "main": [
        [
          {
            "node": "Mistral Signed URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Mistral DOC OCR": {
      "main": [
        [
          {
            "node": "If2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items1": {
      "main": [
        [],
        [
          {
            "node": "Set metadata",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "website chat agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Mistral Signed URL": {
      "main": [
        [
          {
            "node": "Mistral DOC OCR",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Qdrant Vector Store1",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Qdrant Vector Store": {
      "ai_tool": [
        [
          {
            "node": "website chat agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "Qdrant Vector Store1": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "prepare for chunking": {
      "main": [
        [
          {
            "node": "Code(convert to chunks for loading into vector db)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Character Text Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive(load file)": {
      "main": [
        [
          {
            "node": "Mistral Upload",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings Mistral Cloud": {
      "ai_embedding": [
        [
          {
            "node": "Qdrant Vector Store1",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings Mistral Cloud1": {
      "ai_embedding": [
        [
          {
            "node": "Qdrant Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "website chat agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Execute workflow’": {
      "main": [
        [
          {
            "node": "Google Drive(brand related data for chatbot)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive(brand related data for chatbot)": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code(convert to chunks for loading into vector db)": {
      "main": [
        [
          {
            "node": "Qdrant Vector Store1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

相关工作流