{
  "name": "RAG Agent with Qdrant",
  "nodes": [
    {
      "parameters": {
        "options": {}
      },
      "id": "chat-trigger",
      "name": "Chat Trigger",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "typeVersion": 1.1,
      "position": [
        240,
        300
      ],
      "webhookId": "rag-chat-trigger"
    },
    {
      "parameters": {
        "content": "## RAG Agent z Qdrant\n\nTen agent używa RAG (Retrieval-Augmented Generation) z bazą danych wektorową Qdrant.\n\nFunkcje:\n1. Wyszukuje podobne dokumenty w Qdrant\n2. Używa kontekstu do generowania odpowiedzi\n3. Odpowiada na podstawie Twojej wiedzy\n\nSkonfiguruj Qdrant credentials!",
        "height": 160,
        "width": 250
      },
      "id": "instructions",
      "name": "Instructions",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        40,
        200
      ]
    },
    {
      "parameters": {
        "model": "gpt-4",
        "options": {
          "temperature": 0.3,
          "maxTokens": 1000
        }
      },
      "id": "openai-model",
      "name": "OpenAI Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "typeVersion": 1,
      "position": [
        640,
        300
      ],
      "credentials": {
        "openAiApi": {
          "id": "openai-api-credential",
          "name": "OpenAI API"
        }
      }
    },
    {
      "parameters": {
        "model": "text-embedding-3-small",
        "dimensions": 1536
      },
      "id": "embedding-model",
      "name": "Embedding Model",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "typeVersion": 1,
      "position": [
        440,
        200
      ],
      "credentials": {
        "openAiApi": {
          "id": "openai-api-credential",
          "name": "OpenAI API"
        }
      }
    },
    {
      "parameters": {
        "url": "={{ $vars.QDRANT_URL }}",
        "apiKey": "={{ $vars.QDRANT_API_KEY }}",
        "collectionName": "knowledge_base",
        "operation": "search",
        "query": "={{ $json.chatInput }}",
        "limit": 5,
        "scoreThreshold": 0.7
      },
      "id": "qdrant-search",
      "name": "Qdrant Search",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        440,
        400
      ]
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=## RAG Agent z Qdrant\n\nJesteś inteligentnym asystentem, który używa bazy wiedzy do odpowiadania na pytania.\n\n### Kontekst z bazy wiedzy:\n{{ $('Qdrant Search').item.json.result?.points?.map(point => `**Dokument:** ${point.payload?.title || 'Bez tytułu'}\n**Treść:** ${point.payload?.content || 'Brak treści'}\n**Score:** ${point.score}\n---`).join('\\n') || 'Brak znalezionych dokumentów' }}\n\n### Pytanie użytkownika:\n{{ $json.chatInput }}\n\n### Twoje zadanie:\nOdpowiedz na pytanie użytkownika używając kontekstu z bazy wiedzy. Jeśli nie ma odpowiednich informacji w kontekście, powiedz to szczerze.\n\n### Zasady:\n1. **Używaj kontekstu** - Odpowiadaj na podstawie znalezionych dokumentów\n2. **Bądź precyzyjny** - Cytuj konkretne informacje z dokumentów\n3. **Odpowiadaj po polsku** - Jeśli pytanie jest po polsku, odpowiadaj po polsku\n4. **Bądź szczery** - Jeśli nie znasz odpowiedzi, powiedz to\n5. **Podaj źródła** - Wspomnij z jakich dokumentów korzystasz\n\n### Format odpowiedzi:\n**Odpowiedź:**\n[Twoja odpowiedź na podstawie kontekstu]\n\n**Źródła:**\n[Wymień dokumenty, z których korzystałeś]",
        "options": {
          "systemMessage": "=Jesteś ekspertem w dziedzinie RAG (Retrieval-Augmented Generation). Twoje zadanie to:\n\n1. **Analizuj kontekst** - Przeanalizuj znalezione dokumenty\n2. **Odpowiadaj precyzyjnie** - Używaj tylko informacji z kontekstu\n3. **Bądź pomocny** - Dostarczaj wartościowe odpowiedzi\n4. **Cytuj źródła** - Zawsze podawaj źródła informacji\n5. **Bądź szczery** - Jeśli nie ma odpowiedzi w kontekście, powiedz to\n\n**WAŻNE:**\n- Odpowiadaj w tym samym języku co pytanie\n- Używaj tylko informacji z podanego kontekstu\n- Jeśli kontekst jest pusty, powiedz że nie masz informacji\n- Zawsze podawaj źródła swoich informacji"
        }
      },
      "id": "rag-agent",
      "name": "RAG Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        840,
        300
      ]
    },
    {
      "parameters": {
        "content": "=## 📚 RAG Response\n\n**Pytanie:** {{ $('Chat Trigger').item.json.chatInput }}\n\n**Odpowiedź:**\n{{ $json.response }}\n\n---\n\n**Znalezione dokumenty:** {{ $('Qdrant Search').item.json.result?.points?.length || 0 }}\n**Czas odpowiedzi:** {{ $now }}",
        "height": 300,
        "width": 300
      },
      "id": "response-format",
      "name": "Response Format",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        1040,
        200
      ]
    },
    {
      "parameters": {
        "url": "={{ $vars.QDRANT_URL }}/collections/knowledge_base/points",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "qdrantApi",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {
              "name": "points",
              "value": "=[\n  {\n    \"id\": \"{{ $json.id || $now }}\",\n    \"vector\": {{ $json.embedding }},\n    \"payload\": {\n      \"title\": \"{{ $json.title }}\",\n      \"content\": \"{{ $json.content }}\",\n      \"source\": \"{{ $json.source || 'manual' }}\",\n      \"created_at\": \"{{ $now }}\"\n    }\n  }\n]"
            }
          ]
        },
        "options": {}
      },
      "id": "qdrant-insert",
      "name": "Qdrant Insert",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        440,
        600
      ]
    },
    {
      "parameters": {
        "content": "## Dodaj dokument do bazy wiedzy\n\nUżyj tego workflow do dodawania nowych dokumentów do Qdrant.\n\nWymagane pola:\n- title: Tytuł dokumentu\n- content: Treść dokumentu\n- source: Źródło dokumentu",
        "height": 120,
        "width": 250
      },
      "id": "add-doc-instructions",
      "name": "Add Document Instructions",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        240,
        500
      ]
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=## Dodaj dokument do bazy wiedzy\n\n**Tytuł:** {{ $json.title }}\n**Treść:** {{ $json.content }}\n**Źródło:** {{ $json.source || 'manual' }}\n\nPrzygotuj ten dokument do dodania do bazy wiedzy Qdrant.",
        "options": {}
      },
      "id": "prepare-document",
      "name": "Prepare Document",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "typeVersion": 1.7,
      "position": [
        240,
        600
      ]
    }
  ],
  "pinData": {},
  "connections": {
    "Chat Trigger": {
      "main": [
        [
          {
            "node": "Qdrant Search",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Model": {
      "ai_languageModel": [
        [
          {
            "node": "RAG Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Embedding Model": {
      "ai_embedding": [
        [
          {
            "node": "Qdrant Search",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Qdrant Search": {
      "main": [
        [
          {
            "node": "RAG Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RAG Agent": {
      "main": [
        [
          {
            "node": "Response Format",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Document": {
      "main": [
        [
          {
            "node": "Embedding Model",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "Embedding Model": {
      "ai_embedding": [
        [
          {
            "node": "Qdrant Insert",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "rag-agent-qdrant-v1",
  "meta": {
    "templateId": "rag-agent-qdrant",
    "templateCredsSetupCompleted": false,
    "instanceId": "rag-agent-instance"
  },
  "id": "RAGAgentQdrant",
  "tags": ["rag", "qdrant", "ai", "knowledge-base", "vector-database"]
}



