RAG de documentation et chatbot basé sur Weaviate et OpenAI

Avancé

Ceci est unDocument Extraction, Multimodal AIworkflow d'automatisation du domainecontenant 17 nœuds.Utilise principalement des nœuds comme Set, FormTrigger, ExtractFromFile, ChatTrigger, LmChatOpenAi. Chatbot de questions-réponses pour documents RAG : interroger le contenu de PDF avec Weaviate et OpenAI

Prérequis
  • Clé API OpenAI
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "hWxVTNvDEcGofp5O",
  "meta": {
    "instanceId": "be3e0177f1eeda5879f300082f54531dfa9819a5d7441e94ea64b32f8b1fd49c",
    "templateCredsSetupCompleted": true
  },
  "name": "rag-with-weaviate",
  "tags": [],
  "nodes": [
    {
      "id": "4cfa559c-9cec-4a74-84d5-9cf4a2d7915a",
      "name": "Weaviate Stockage vectoriel",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreWeaviate",
      "position": [
        432,
        288
      ],
      "parameters": {
        "mode": "insert",
        "options": {
          "textKey": "text"
        },
        "weaviateCollection": {
          "__rl": true,
          "mode": "id",
          "value": "FileUpload"
        }
      },
      "credentials": {
        "weaviateApi": {
          "id": "qiTSL6FfsPCZLyUv",
          "name": "Weaviate Credentials account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c87c8fe2-56bf-405f-a91a-3b1af7cf2e8c",
      "name": "Default Data Loader",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        512,
        496
      ],
      "parameters": {
        "options": {
          "metadata": {
            "metadataValues": [
              {}
            ]
          }
        },
        "jsonData": "={{ $json.text }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1
    },
    {
      "id": "ac0c796a-3b1d-4ba6-83e5-23a673e4628d",
      "name": "Incorporations OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        384,
        496
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "v6dOwJXW6XXHxHQw",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d89bd8be-a275-4a57-a1a6-6006302ba3dd",
      "name": "Recursive Character Text Splitter1",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        544,
        656
      ],
      "parameters": {
        "options": {},
        "chunkSize": 500
      },
      "typeVersion": 1
    },
    {
      "id": "dcabfdff-749b-4442-933d-409b1479d2c8",
      "name": "Extract from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -48,
        288
      ],
      "parameters": {
        "options": {
          "maxPages": 99
        },
        "operation": "pdf",
        "binaryPropertyName": "PDF_File"
      },
      "typeVersion": 1
    },
    {
      "id": "779add5c-4770-472a-a2e9-934e1e2e4569",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        128,
        288
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d719d94d-6597-402c-8958-dd270de82ce6",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "eda536c5-d88f-45e4-9505-d3b1e6c5fa27",
      "name": "À la réception du message",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        992,
        288
      ],
      "webhookId": "683bf7e6-5f6f-43e0-afef-eb854d52ebed",
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.1
    },
    {
      "id": "94ed5f2b-fb86-42e8-a778-ab51d7a49d42",
      "name": "Weaviate Stockage vectoriel1",
      "type": "@n8n/n8n-nodes-langchain.vectorStoreWeaviate",
      "position": [
        1280,
        624
      ],
      "parameters": {
        "options": {},
        "weaviateCollection": {
          "__rl": true,
          "mode": "list",
          "value": "FileUpload",
          "cachedResultName": "FileUpload"
        }
      },
      "credentials": {
        "weaviateApi": {
          "id": "qiTSL6FfsPCZLyUv",
          "name": "Weaviate Credentials account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "ae3a9b66-a5c8-4108-980c-1c3ace05e528",
      "name": "Question and Answer Chaîne",
      "type": "@n8n/n8n-nodes-langchain.chainRetrievalQa",
      "position": [
        1168,
        288
      ],
      "parameters": {
        "text": "=Using only the attached Weaviate vector store collection (and no external knowledge), answer the following query:\n{{ $json.chatInput }}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 1.6
    },
    {
      "id": "d9110fef-f3ae-4c3a-bfc0-b3bfe0f6fcb0",
      "name": "Stockage vectoriel Retriever",
      "type": "@n8n/n8n-nodes-langchain.retrieverVectorStore",
      "position": [
        1280,
        480
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "79aaa15c-f0d6-4c88-bd15-ff7835131b2b",
      "name": "Modèle de chat OpenAI",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1152,
        480
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "v6dOwJXW6XXHxHQw",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "9f961ef2-5466-475d-9ccb-1436469dee00",
      "name": "Incorporations OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        1360,
        768
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "v6dOwJXW6XXHxHQw",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d46d3a49-ec16-40aa-928e-291fc90b9f2d",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -256,
        176
      ],
      "parameters": {
        "color": 5,
        "width": 544,
        "height": 336,
        "content": "## Part 1: Manually upload data \nIn this example, we manually upload a 100+ page article from arXiv called [\"A Survey of Large Language Models\"](https://arxiv.org/pdf/2303.18223).\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_**Note: This is a simple implementation of loading data. You can replace this block with your own (more advanced) data pipeline!**_"
      },
      "typeVersion": 1
    },
    {
      "id": "9b192882-6d54-43c5-9ccb-cca0bcf456f4",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        944,
        176
      ],
      "parameters": {
        "color": 6,
        "width": 640,
        "height": 736,
        "content": "## Part 3: Perform RAG over PDF file with Weaviate\nEnter your query by running the Chat Node and get a RAG response grounded in context."
      },
      "typeVersion": 1
    },
    {
      "id": "431f55e3-9599-4de7-a363-2e82e6581101",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -256,
        -128
      ],
      "parameters": {
        "color": 4,
        "width": 992,
        "height": 288,
        "content": "# RAG over a PDF file with Weaviate\nThis workflow allows you to upload a PDF file and ask questions about it using the Question and Answer Chain and the Weaviate Vector Store nodes. \n\n## Prerequisites\n1.  **An existing Weaviate cluster.** You can view instructions for setting up a **local cluster** with Docker [here](https://weaviate.io/developers/weaviate/installation/docker-compose#starter-docker-compose-file) or a **Weaviate Cloud** cluster [here](https://weaviate.io/developers/wcs/quickstart).\n2.  **API keys** to generate embeddings and power chat models. We use [OpenAI](https://openai.com/), but feel free to switch out the models as you like.\n3.  **Self-hosted n8n instance.** See this [video](https://www.youtube.com/watch?v=kq5bmrjPPAY&t=108s) for how to get set up in just three minutes.\n\n\n💚  Sign up [here](https://console.weaviate.cloud/?utm_source=recipe&utm_campaign=n8n&utm_content=n8n_arxiv_template) for a 14-day free trial of Weaviate Cloud (no credit card required)."
      },
      "typeVersion": 1
    },
    {
      "id": "588d9eee-f769-4c6b-9b16-2b1790118a4d",
      "name": "Upload PDF",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -224,
        288
      ],
      "webhookId": "8499e732-aff6-4e0f-85ac-4c0591012616",
      "parameters": {
        "options": {},
        "formTitle": "Upload your file here",
        "formFields": {
          "values": [
            {
              "fieldType": "file",
              "fieldLabel": "PDF File",
              "multipleFiles": false,
              "requiredField": true,
              "acceptFileTypes": ".pdf"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4d4244ef-c4af-4eb1-8389-6bd95cc5613e",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        304,
        176
      ],
      "parameters": {
        "color": 3,
        "width": 624,
        "height": 688,
        "content": "## Part 2: Embed and load data into Weaviate collection\nWe generate embeddings for the full-text of the article and store them in Weaviate.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n_**Note: We don't add any metadata to Weaviate in this example. To add metadata, click on the Default Data Loader node → `Add Option` → `Metadata`.**_"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "61bb6430-21b1-4443-8924-34a83eab6965",
  "connections": {
    "588d9eee-f769-4c6b-9b16-2b1790118a4d": {
      "main": [
        [
          {
            "node": "dcabfdff-749b-4442-933d-409b1479d2c8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "779add5c-4770-472a-a2e9-934e1e2e4569": {
      "main": [
        [
          {
            "node": "Weaviate Vector Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI": {
      "ai_embedding": [
        [
          {
            "node": "Weaviate Vector Store",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "dcabfdff-749b-4442-933d-409b1479d2c8": {
      "main": [
        [
          {
            "node": "779add5c-4770-472a-a2e9-934e1e2e4569",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Question and Answer Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI1": {
      "ai_embedding": [
        [
          {
            "node": "Weaviate Vector Store1",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "c87c8fe2-56bf-405f-a91a-3b1af7cf2e8c": {
      "ai_document": [
        [
          {
            "node": "Weaviate Vector Store",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Weaviate Vector Store": {
      "main": [
        []
      ]
    },
    "Vector Store Retriever": {
      "ai_retriever": [
        [
          {
            "node": "Question and Answer Chain",
            "type": "ai_retriever",
            "index": 0
          }
        ]
      ]
    },
    "Weaviate Vector Store1": {
      "ai_vectorStore": [
        [
          {
            "node": "Vector Store Retriever",
            "type": "ai_vectorStore",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "Question and Answer Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d89bd8be-a275-4a57-a1a6-6006302ba3dd": {
      "ai_textSplitter": [
        [
          {
            "node": "c87c8fe2-56bf-405f-a91a-3b1af7cf2e8c",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Extraction de documents, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds17
Catégorie2
Types de nœuds12
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur
Mary Newhauser

Mary Newhauser

@maryn

Machine Learning Engineer at Weaviate.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34