Chat de documentos internos

Avanzado

Este es unInternal Wiki, AI RAGflujo de automatización del dominio deautomatización que contiene 29 nodos.Utiliza principalmente nodos como Set, Switch, Webhook, Supabase, Aggregate. Dialogar con documentos internos usando Ollama, la base de datos vectorial Supabase y Google Drive

Requisitos previos
  • Punto final de HTTP Webhook (n8n generará automáticamente)
  • URL y Clave de API de Supabase
  • Credenciales de API de Google Drive
  • Información de conexión de la base de datos PostgreSQL
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "id": "pfmUDAfMnmwHPCSC",
  "meta": {
    "instanceId": "558d88703fb65b2d0e44613bc35916258b0f0bf983c5d4730c00c424b77ca36a",
    "templateCredsSetupCompleted": true
  },
  "name": "Chat-internal-documents",
  "tags": [],
  "nodes": [
    {
      "id": "5499112e-c417-4a13-9d3f-6e1aa16ee8cd",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        840,
        840
      ],
      "parameters": {
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "=file_id",
                "value": "={{ $('Set File ID').first().json.file_id }}"
              }
            ]
          }
        },
        "jsonData": "={{ $json.data || $json.text || $json.concatenated_data }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1
    },
    {
      "id": "b780ee44-6928-4382-96d9-52d015e97fc2",
      "name": "Nota adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        60
      ],
      "parameters": {
        "color": 4,
        "width": 583,
        "height": 489,
        "content": "## Agent Tools for RAG"
      },
      "typeVersion": 1
    },
    {
      "id": "733c038e-5315-490f-a8f1-449aae7aa7b1",
      "name": "Nota adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1240,
        580
      ],
      "parameters": {
        "color": 5,
        "width": 2353,
        "height": 627,
        "content": "## Tool to Add a Google Drive File to Vector DB"
      },
      "typeVersion": 1
    },
    {
      "id": "f4f6830e-e057-4817-99b6-cd1a24ef85af",
      "name": "Descargar archivo",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -400,
        800
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Set File ID').item.json.file_id }}"
        },
        "options": {
          "googleFileConversion": {
            "conversion": {
              "docsToFormat": "text/plain"
            }
          }
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "",
          "name": "Google Drive account"
        }
      },
      "executeOnce": true,
      "typeVersion": 3
    },
    {
      "id": "d6053181-12df-4ee9-98fc-5263c44cb828",
      "name": "File Created",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -1160,
        700
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1kxxE-cSJYZA1EwRohcgNL2PNFZDzAyhw",
          "cachedResultUrl": "",
          "cachedResultName": "test-folder"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0ed25822-27c2-4ae3-9ec9-ff0eaeec1938",
      "name": "File Updated",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -1160,
        920
      ],
      "parameters": {
        "event": "fileUpdated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1kxxE-cSJYZA1EwRohcgNL2PNFZDzAyhw",
          "cachedResultUrl": "",
          "cachedResultName": "test-folder"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "70d053ec-b880-489c-8c20-261f0a4c148c",
      "name": "Extract Document Text",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        360,
        1000
      ],
      "parameters": {
        "options": {},
        "operation": "text"
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "cb9d4b81-c74f-44e5-9cb5-f55133b737d5",
      "name": "Postgres Chat Memoria",
      "type": "@n8n/n8n-nodes-langchain.memoryPostgresChat",
      "position": [
        -480,
        360
      ],
      "parameters": {},
      "credentials": {
        "postgres": {
          "id": "",
          "name": "Postgres account"
        }
      },
      "notesInFlow": false,
      "typeVersion": 1
    },
    {
      "id": "fff92d07-0a2c-40ff-a073-b2e17d4695a3",
      "name": "Delete Old Doc Rows",
      "type": "n8n-nodes-base.supabase",
      "position": [
        -640,
        800
      ],
      "parameters": {
        "tableId": "documents",
        "operation": "delete",
        "filterType": "string",
        "filterString": "=metadata->>file_id=like.*{{ $json.file_id }}*"
      },
      "credentials": {
        "supabaseApi": {
          "id": "",
          "name": "Supabase account"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "e5ca30cc-ea70-42b1-bdce-b110a922765b",
      "name": "Establecer File ID",
      "type": "n8n-nodes-base.set",
      "position": [
        -880,
        800
      ],
      "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 }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "02fbed8f-592d-4380-b9b4-f129cbc052d5",
      "name": "Nota adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        60
      ],
      "parameters": {
        "width": 1036,
        "height": 485,
        "content": "## RAG AI Agent with Chat Interface"
      },
      "typeVersion": 1
    },
    {
      "id": "33ffec5d-1c87-42df-91a9-87f29fda4d24",
      "name": "Respond to Disparador Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        -180,
        140
      ],
      "parameters": {
        "options": {},
        "respondWith": "allIncomingItems"
      },
      "typeVersion": 1.1
    },
    {
      "id": "c7cf92ba-d3b7-401f-be57-1f2ad1452fad",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        -740,
        140
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9a9a245e-f1a1-4282-bb02-a81ffe629f0f",
              "name": "chatInput",
              "type": "string",
              "value": "={{ $json?.chatInput || $json.body.chatInput || $json.body.message }}"
            },
            {
              "id": "b80831d8-c653-4203-8706-adedfdb98f77",
              "name": "sessionId",
              "type": "string",
              "value": "={{ $json?.sessionId || $json.body.sessionId}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "28af4afe-bb57-41cf-97cd-5f5bf244ced2",
      "name": "Al recibir mensaje de chat",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -1000,
        140
      ],
      "webhookId": "15e4d662-3f98-48d0-9f50-68838769ecac",
      "parameters": {
        "public": true,
        "options": {
          "allowFileUploads": true
        },
        "initialMessages": "Hi there! 👋\nMy name is Laki. How can I assist you today?"
      },
      "typeVersion": 1.1
    },
    {
      "id": "172cdbdc-df5e-4126-b437-6ee87cb002e8",
      "name": "Disparador Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -1000,
        340
      ],
      "webhookId": "9ba11544-5c4e-4f91-818a-08a4ecb596c5",
      "parameters": {
        "path": "rag-chat",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 2
    },
    {
      "id": "c22851fc-54b3-4f6f-90de-1d1ee4144987",
      "name": "Extract PDF Text",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        360,
        620
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "6cd6a07e-e401-4941-8120-0fe720138986",
      "name": "Agregar",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        280,
        800
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "57dd71fa-6500-4e8f-b5e2-824eb8812b9a",
      "name": "Character Text Splitter",
      "type": "@n8n/n8n-nodes-langchain.textSplitterCharacterTextSplitter",
      "position": [
        840,
        1060
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "af7a36dc-8a07-4b00-affc-5c01677d3dcf",
      "name": "Resumir",
      "type": "n8n-nodes-base.summarize",
      "position": [
        440,
        800
      ],
      "parameters": {
        "options": {},
        "fieldsToSummarize": {
          "values": [
            {
              "field": "data",
              "aggregation": "concatenate"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "64931b9c-35d3-4eff-89f6-9fb6053325d2",
      "name": "RAG Agente IA",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -520,
        140
      ],
      "parameters": {
        "text": "={{ $json.chatInput }}\n\nContext from retrieved documents:\n{{ $json.user_documents }}\n\nInstructions:\n- Use ONLY the context above to answer the question.\n- If the context already provides the answer, respond directly with that Answer.\n- Do NOT call any tools or offer to call tools if the context already has the answer.\n- Only call tools if the context is empty or obviously incomplete.\n- Keep the answer clear and complete.\n",
        "options": {
          "systemMessage": "=You are a helpful assistant that answers user questions. Always prioritize using the provided context. Only call tools when the provided context does not contain the necessary information.\nIf you use the tool then provide the answer coming from the tool directly\n"
        },
        "promptType": "define"
      },
      "typeVersion": 1.6
    },
    {
      "id": "de90a406-592e-4c0d-9052-3e95caebf01b",
      "name": "Interruptor",
      "type": "n8n-nodes-base.switch",
      "position": [
        -180,
        800
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $('Set File ID').item.json.file_type }}",
                    "rightValue": "application/pdf"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "2ae7faa7-a936-4621-a680-60c512163034",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $('Set File ID').item.json.file_type }}",
                    "rightValue": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "fc193b06-363b-4699-a97d-e5a850138b0e",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $('Set File ID').item.json.file_type }}",
                    "rightValue": "application/vnd.google-apps.document"
                  }
                ]
              }
            }
          ]
        },
        "options": {
          "fallbackOutput": 2
        }
      },
      "typeVersion": 3
    },
    {
      "id": "a2055d5e-a445-4706-afb7-f36f8adedb43",
      "name": "Insert into Supabase Vectorstore",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        720,
        620
      ],
      "parameters": {
        "mode": "insert",
        "options": {
          "queryName": "match_documents"
        },
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        }
      },
      "credentials": {
        "supabaseApi": {
          "id": "",
          "name": "Supabase account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5d235803-705e-4366-b00f-ceef912db642",
      "name": "Extract from Excel",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        120,
        800
      ],
      "parameters": {
        "options": {},
        "operation": "xlsx"
      },
      "typeVersion": 1
    },
    {
      "id": "0f3b9083-0510-4129-9833-215c7189148b",
      "name": "Incrustaciones Ollama",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
      "position": [
        680,
        840
      ],
      "parameters": {
        "model": "nomic-embed-text:latest"
      },
      "credentials": {
        "ollamaApi": {
          "id": "7CIt42W14b1MCgxQ",
          "name": "Ollama account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "ca178e83-d5c1-475a-b5fa-9e83f840cd19",
      "name": "Incrustaciones Ollama1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOllama",
      "position": [
        200,
        420
      ],
      "parameters": {
        "model": "nomic-embed-text:latest"
      },
      "credentials": {
        "ollamaApi": {
          "id": "7CIt42W14b1MCgxQ",
          "name": "Ollama account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5a3c0b2d-1a38-4a5f-b6b9-638ea50cce7d",
      "name": "Supabase Almacén de vectores",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
      "position": [
        80,
        280
      ],
      "parameters": {
        "options": {
          "queryName": "match_documents"
        },
        "tableName": {
          "__rl": true,
          "mode": "list",
          "value": "documents",
          "cachedResultName": "documents"
        }
      },
      "credentials": {
        "supabaseApi": {
          "id": "",
          "name": "Supabase account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "aa18ff0f-e29e-453f-b637-581bbb021594",
      "name": "Ollama Model",
      "type": "@n8n/n8n-nodes-langchain.lmOllama",
      "position": [
        420,
        320
      ],
      "parameters": {
        "model": "llama3.1:latest",
        "options": {}
      },
      "credentials": {
        "ollamaApi": {
          "id": "7CIt42W14b1MCgxQ",
          "name": "Ollama account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "175164e7-4a84-48b2-a225-dea6afe1e94d",
      "name": "Ollama Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOllama",
      "position": [
        -660,
        380
      ],
      "parameters": {
        "model": "llama3.1:latest",
        "options": {
          "temperature": 0.5
        }
      },
      "credentials": {
        "ollamaApi": {
          "id": "7CIt42W14b1MCgxQ",
          "name": "Ollama account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "8a46d0ff-ceb9-435f-a347-d97e103cd0bc",
      "name": "User_documents",
      "type": "@n8n/n8n-nodes-langchain.toolVectorStore",
      "position": [
        200,
        120
      ],
      "parameters": {
        "name": "user_documents",
        "description": "Contains all the user's documents that you can check for context to answer user questions."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "5e57d44f-1063-4539-bbeb-d2c65025509a",
  "connections": {
    "Switch": {
      "main": [
        [
          {
            "node": "c22851fc-54b3-4f6f-90de-1d1ee4144987",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "5d235803-705e-4366-b00f-ceef912db642",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "70d053ec-b880-489c-8c20-261f0a4c148c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook": {
      "main": [
        [
          {
            "node": "c7cf92ba-d3b7-401f-be57-1f2ad1452fad",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Summarize",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Summarize": {
      "main": [
        [
          {
            "node": "a2055d5e-a445-4706-afb7-f36f8adedb43",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c7cf92ba-d3b7-401f-be57-1f2ad1452fad": {
      "main": [
        [
          {
            "node": "RAG AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set File ID": {
      "main": [
        [
          {
            "node": "fff92d07-0a2c-40ff-a073-b2e17d4695a3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d6053181-12df-4ee9-98fc-5263c44cb828": {
      "main": [
        [
          {
            "node": "Set File ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0ed25822-27c2-4ae3-9ec9-ff0eaeec1938": {
      "main": [
        [
          {
            "node": "Set File ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "aa18ff0f-e29e-453f-b637-581bbb021594": {
      "ai_languageModel": [
        [
          {
            "node": "8a46d0ff-ceb9-435f-a347-d97e103cd0bc",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "RAG AI Agent": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download File": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8a46d0ff-ceb9-435f-a347-d97e103cd0bc": {
      "ai_tool": [
        [
          {
            "node": "RAG AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "c22851fc-54b3-4f6f-90de-1d1ee4144987": {
      "main": [
        [
          {
            "node": "a2055d5e-a445-4706-afb7-f36f8adedb43",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings Ollama": {
      "ai_embedding": [
        [
          {
            "node": "a2055d5e-a445-4706-afb7-f36f8adedb43",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "175164e7-4a84-48b2-a225-dea6afe1e94d": {
      "ai_languageModel": [
        [
          {
            "node": "RAG AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings Ollama1": {
      "ai_embedding": [
        [
          {
            "node": "Supabase Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "5d235803-705e-4366-b00f-ceef912db642": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5499112e-c417-4a13-9d3f-6e1aa16ee8cd": {
      "ai_document": [
        [
          {
            "node": "a2055d5e-a445-4706-afb7-f36f8adedb43",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "fff92d07-0a2c-40ff-a073-b2e17d4695a3": {
      "main": [
        [
          {
            "node": "Download File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Postgres Chat Memory": {
      "ai_memory": [
        [
          {
            "node": "RAG AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "70d053ec-b880-489c-8c20-261f0a4c148c": {
      "main": [
        [
          {
            "node": "a2055d5e-a445-4706-afb7-f36f8adedb43",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Supabase Vector Store": {
      "ai_vectorStore": [
        [
          {
            "node": "8a46d0ff-ceb9-435f-a347-d97e103cd0bc",
            "type": "ai_vectorStore",
            "index": 0
          }
        ]
      ]
    },
    "57dd71fa-6500-4e8f-b5e2-824eb8812b9a": {
      "ai_textSplitter": [
        [
          {
            "node": "5499112e-c417-4a13-9d3f-6e1aa16ee8cd",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "c7cf92ba-d3b7-401f-be57-1f2ad1452fad",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿Cómo usar este flujo de trabajo?

Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.

¿En qué escenarios es adecuado este flujo de trabajo?

Avanzado - Wiki interno, RAG de IA

¿Es de pago?

Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.

Información del flujo de trabajo
Nivel de dificultad
Avanzado
Número de nodos29
Categoría2
Tipos de nodos21
Descripción de la dificultad

Adecuado para usuarios avanzados, flujos de trabajo complejos con 16+ nodos

Autor
Lakindu Siriwardana

Lakindu Siriwardana

@laki99

AI Engineer | Researcher

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34