TECNOLOBO

No recuerdas tu codigo?
Se te olvido como se hace?

Aqui podras guardar lo que necesiten
Y cuando sea necesesario

Creado por julian gomez
iiiiii

sistema rag



Descripcion

Crear un flujo que se le pueda Subir archivos y la

Notas


Objetivo:
Crear un RAG (Generacion Automatica por Recuperacion) es poder subir archivos que la IA pueda 
Alimentarse de ellos y yo poder preguntarle sobre toda esa fuente de informacion.

ARQUITECTRA
1. Creamos un nuevo flujo de trabajo 
2. Creeamos un Formulario para que nos ayude con la subida de archivos.
	2.1 : crear un dato de entrada que se de tipo FILE.
	2.2 : que acepte tipo de archivo solo PDF para este ejemplo.
3. Se creara un nodo de tipo Vector STORE. se se use para add document Vectorstroe para guardar los archivos
	3.1: se debe parametrizar herramientas como :
		3.1.1 Embeding: indica que IA se va usar para este proceso. para leer y grabar la inform del pdf
			3.1.2.1 Document Data Loader: quiere decir que tipo de dato se va Carga por defecto tiene una opcion de BINARIO (Para archivos)
			3.1.2.2 MODE:  all_input_data: para que tome toda la informacion del PDF.
			3.1.2.3 DATA FORMA: automatico
			3.1.2.4 Text Splitting : CUSTOM (Esto pedira al nuevo nodo EMVEDING SUB HERRAMIENTAS)
		 3.1.3 text splitter : 
		 	3.1.3.1 se le adiciona el nodo RECURSIVA CARACTERES SPLITTER
				3.1.3.1.1: Chunk Size = 1000 dividira el texto cada mil caracteres
				3.1.3.1.2: Chunk Overlap = 250 (1/4 de chick size) indica cuanto se pa traslapar entre cada session dividida.
		
						

Workflow-json


{
  "name": "Sistema RAG estandar",
  "nodes": [
    {
      "parameters": {
        "formTitle": "Alimentar IA con Textos",
        "formDescription": "Porfavor Cargue un archivo ",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Archivo",
              "fieldType": "file",
              "acceptFileTypes": ".pdf"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.5,
      "position": [
        -288,
        -96
      ],
      "id": "c51db0d2-f15a-4a9b-bd99-63a34d9f0c1a",
      "name": "On form submission",
      "webhookId": "83d05547-1401-4e41-b19d-ccbba982187f"
    },
    {
      "parameters": {
        "mode": "insert",
        "memoryKey": {
          "__rl": true,
          "mode": "list",
          "value": "vector_store_key"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
      "typeVersion": 1.3,
      "position": [
        -80,
        -96
      ],
      "id": "c3dab9e8-c9b5-4fe6-aa23-6995becf018e",
      "name": "Simple Vector Store"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "typeVersion": 1.2,
      "position": [
        464,
        320
      ],
      "id": "1bb2895e-0aa2-4cac-8904-119d829aeeba",
      "name": "Embeddings OpenAI",
      "credentials": {
        "openAiApi": {
          "id": "Hi2nIFmfGco5UK7a",
          "name": "OpenAI account"
        }
      }
    },
    {
      "parameters": {
        "dataType": "binary",
        "textSplittingMode": "custom",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "typeVersion": 1.1,
      "position": [
        128,
        80
      ],
      "id": "00753de0-432b-4e0f-b56e-48e9f0aad0c6",
      "name": "Default Data Loader"
    },
    {
      "parameters": {
        "chunkOverlap": 250,
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "typeVersion": 1,
      "position": [
        32,
        304
      ],
      "id": "bc11fd5b-d4c3-4bf2-8ad8-85f530beeb57",
      "name": "Recursive Character Text Splitter"
    },
    {
      "parameters": {
        "content": "## LLENAR DATOS EN BASE DATOS VECTORIAL\n",
        "height": 752,
        "width": 864,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -496,
        -320
      ],
      "typeVersion": 1,
      "id": "d9c49f0c-98e9-4398-ba24-c9e4d3a6becd",
      "name": "Sticky Note"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.4,
      "position": [
        512,
        -128
      ],
      "id": "3261dfcf-3552-4fca-9c81-82f3baf9f9c2",
      "name": "When chat message received",
      "webhookId": "30c20ba7-5ffd-4df9-a2ff-3f4881d79db3"
    },
    {
      "parameters": {
        "options": {
          "systemMessage": "=# Rol: Asistente Legal\n\n## Descripci?n\nEres un asistente legal dise?ado para ayudar a un abogado a consultar informaci?n contenida en documentos legales internos.  \nDebes recuperar, analizar y entregar respuestas precisas, claras y fundamentadas basadas ?nicamente en los documentos disponibles.  \nMant?n siempre un tono profesional y formal, y prioriza la exactitud legal en todas tus respuestas.  \n\nTus respuestas deben de ser cortas y puntuales.\n\nSi no conoces la respuesta, responde que no dispones de la informaci?n.\n\n\n\n## Capacidades\n- B?squeda y recuperaci?n de informaci?n legal relevante.  \n- Respuestas concisas y con fundamento en los documentos disponibles.  \n- Inclusi?n de referencia del documento utilizado para responder.  \n- Identificaci?n de ausencia de informaci?n en los documentos.  \n- Mantener confidencialidad y precisi?n en todas las respuestas.  \n\n\n## Comportamiento\n1. Recepci?n de la consulta: Recibe la pregunta o solicitud del abogado.  \n2. B?squeda de informaci?n en la base de conocimiento para encontrar informaci?n relevante en los documentos.  \n3. Generaci?n de la respuesta:  \n   - Si encuentras la informaci?n:  \n     - Proporciona un resumen conciso, claro y preciso.  \n     - Incluye la referencia del documento donde encontraste la informaci?n (nombre o identificaci?n del documento y secci?n/cl?usula si aplica).  \n   - Si no encuentras la informaci?n:  \n     - Responde ?nicamente con:  \n       ```\n       No puedo encontrar la respuesta en los recursos disponibles.\n       ```\n4. Confidencialidad: No reveles informaci?n fuera de lo que est? contenido en los documentos.  \n5. Tono: Profesional, formal, claro y directo.  \n\n## Ejemplo\nPregunta del abogado:  \n> ?Cu?l es el procedimiento de terminaci?n anticipada del contrato de arrendamiento?\n\nRespuesta del asistente (ejemplo):  \n> Seg?n el Contrato de Arrendamiento - Cl?usula 12, el contrato puede ser terminado anticipadamente por cualquiera de las partes notificando con al menos 30 d?as de antelaci?n y cumpliendo con el pago proporcional de las obligaciones pendientes.  \n> Referencia: Contrato_Arrendamiento_2025.pdf, Cl?usula 12.  "
        }
      },
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 3.1,
      "position": [
        720,
        -128
      ],
      "id": "a68c9db0-2272-4f25-aad9-05343493367c",
      "name": "AI Agent"
    },
    {
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini"
        },
        "builtInTools": {},
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1.3,
      "position": [
        592,
        80
      ],
      "id": "43528d8d-1b1e-4450-af16-e8093051dea5",
      "name": "OpenAI Chat Model",
      "credentials": {
        "openAiApi": {
          "id": "Hi2nIFmfGco5UK7a",
          "name": "OpenAI account"
        }
      }
    },
    {
      "parameters": {
        "contextWindowLength": 10
      },
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "typeVersion": 1.4,
      "position": [
        736,
        80
      ],
      "id": "fbe76ea7-9beb-4719-b315-9ebc78763de6",
      "name": "Simple Memory"
    },
    {
      "parameters": {
        "mode": "retrieve-as-tool",
        "toolDescription": "Tienes accesos a una fuente de informaci?n de m?ltiples archivos legales. todo lo que se te consulte debe ser de dicha fuente de datos.",
        "memoryKey": {
          "__rl": true,
          "mode": "list",
          "value": "vector_store_key"
        }
      },
      "type": "@n8n/n8n-nodes-langchain.vectorStoreInMemory",
      "typeVersion": 1.3,
      "position": [
        928,
        112
      ],
      "id": "70715dd2-0c7d-4ec7-82a9-0e87f522e05f",
      "name": "Simple Vector Store1"
    }
  ],
  "pinData": {},
  "connections": {
    "On form submission": {
      "main": [
        [
          {
            "node": "Simple Vector Store",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Embeddings OpenAI": {
      "ai_embedding": [
        [
          {
            "node": "Simple Vector Store",
            "type": "ai_embedding",
            "index": 0
          },
          {
            "node": "Simple Vector Store1",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Default Data Loader": {
      "ai_document": [
        [
          {
            "node": "Simple Vector Store",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "Recursive Character Text Splitter": {
      "ai_textSplitter": [
        [
          {
            "node": "Default Data Loader",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Simple Memory": {
      "ai_memory": [
        [
          {
            "node": "AI Agent",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "Simple Vector Store1": {
      "ai_tool": [
        [
          {
            "node": "AI Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "versionId": "4a597849-c310-4a69-905c-d6ff1b8d89a9",
  "meta": {
    "templateCredsSetupCompleted": true,
    "instanceId": "fe291777ffabf9d737d29c561fd9bdf11a3d8ba106af6fb4a8b650410061a9ea"
  },
  "nodeGroups": [],
  "id": "f3G3y0Huyjwp0Hu5",
  "tags": [
    {
      "updatedAt": "2026-07-05T23:33:42.909Z",
      "createdAt": "2026-07-05T23:33:42.909Z",
      "id": "TlSlZ6bMbs3eKkOZ",
      "name": "RAG"
    }
  ]
}
						

SubWorkflow-json


as