Jak stworzyć bazę wiedzy (RAG) dla agenta AI w n8n – Praktyczny przewodnik #EN92

Notatki z webinaru Roberta Szewczyka prezentującego proces budowania systemu RAG w n8n. Wszystkie instrukcje pochodzą od autora oryginalnego materiału.

TL;DR

  • RAG (Retrieval Augmented Generation) to technika umożliwiająca modelom AI korzystanie z własnych dokumentów podczas generowania odpowiedzi
  • Baza wektorowa Pinecone służy do przechowywania dokumentów w formie embeddingów, które pozwalają na semantyczne wyszukiwanie
  • Proces tworzenia RAG w n8n składa się z dwóch głównych części: indeksowania dokumentów i budowy agenta odpowiadającego na pytania
  • Kluczowym elementem skutecznego RAG jest odpowiednie dzielenie tekstu na fragmenty (chunking) – zalecane wartości to chunk size 1500 i chunk overlap 200
  • Parafrazowanie zapytań użytkownika zwiększa skuteczność wyszukiwania w bazie wiedzy
  • Filtry score pozwalają na wybór najbardziej trafnych fragmentów dokumentów (powyżej 0.4)
  • Namespaces w Pinecone umożliwiają organizację różnych kategorii dokumentów w jednej bazie

Wprowadzenie do RAG – Co to jest i dlaczego warto?

RAG (Retrieval Augmented Generation) to technika, która pozwala dużym modelom językowym takim jak ChatGPT czy Claude korzystać z zewnętrznej bazy wiedzy do generowania odpowiedzi. Zamiast opierać się wyłącznie na danych, na których został wytrenowany, model może sięgnąć po konkretne, aktualne informacje z dostarczonych przez nas źródeł.

Jest to szczególnie ważne, ponieważ standardowe modele AI nie mają dostępu do firmowych dokumentów, najnowszych danych lub specjalistycznych materiałów. RAG rozwiązuje ten problem, umożliwiając modelom „czytanie” naszych dokumentów i odpowiadanie na ich podstawie.

Ważna uwaga bezpieczeństwa: Nie wrzucaj do RAG danych poufnych czy wrażliwych. Zadbaj o bezpieczeństwo informacji.

Krok po kroku: Tworzenie bazy wiedzy w Pinecone

Checklist przygotowań:

  • Założenie konta na pinecone.io
  • Utworzenie indeksu z odpowiednim modelem embeddingowym
  • Wygenerowanie i zabezpieczenie klucza API
  • Zaplanowanie struktury namespaces

Założenie konta i tworzenie indeksu

Pierwszym krokiem jest przygotowanie bazy wektorowej Pinecone:

  1. Wejdź na stronę pinecone.io i załóż bezpłatne konto
  2. Po zalogowaniu przejdź do sekcji „Database” i „Indexes”
  3. Kliknij „Create Index” i nadaj mu nazwę (np. „baza-wiedzy-n8n”)
  4. W konfiguracji wybierz model „OpenAI Text Embedding 3 Small”
  5. Wybierz „Serverless” jako Capacity Mode
  6. Kliknij „Create Index”

Przygotowanie API Key

Po utworzeniu indeksu potrzebujesz klucza API:

  1. Przejdź do sekcji „API Keys” w Pinecone
  2. Kliknij „Create API Key” i nadaj mu nazwę
  3. Skopiuj i zachowaj klucz w bezpiecznym miejscu (będzie potrzebny później)

Budowanie workflow indeksowania dokumentów w n8n

Teraz przechodzimy do n8n, gdzie stworzymy workflow do indeksowania dokumentów:

Pierwszy workflow – indeksowanie dokumentów

  1. Trigger (wyzwalacz):
    • Dodaj trigger „Manual” do uruchamiania workflow ręcznie
  2. Wyszukiwanie plików:
    • Dodaj node „Google Drive” > „Search Files and Folders”
    • Dodaj filtr na folder zawierający dokumenty (np. „baza-wiedzy-RAG”)
    • To ograniczy dostęp tylko do wybranych dokumentów
  3. Pobieranie plików:
    • Dodaj node „Google Drive” > „Download File”
    • W polu „file” wybierz ID dokumentu z poprzedniego kroku
  4. Dodawanie do Pinecone:
    • Dodaj node „Pinecone Vector Store” > „Add Documents to Vector Store”
    • Wklej API key z Pinecone
    • Wybierz indeks utworzony wcześniej
    • Dodaj opcję „Pinecone Namespace” (np. „baza-wiedzy”)
    • Namespace pozwala na organizację różnych kategorii dokumentów
  5. Model embeddingowy:
    • Dodaj node „Embeddings OpenAI”
    • Połącz się z API OpenAI
    • Wybierz model „text-embedding-3-small” (ten sam, który wybrałeś w Pinecone)
  6. Data loader:
    • Dodaj „Default Data Loader”
    • Ustaw „Type of Data” na „Binary” dla plików PDF
    • Dodaj metadane (np. „filename”) dla lepszego filtrowania w przyszłości
  7. Text splitter (dzielenie tekstu):
    • Dodaj „RecursiveCharacterTextSplitter”
    • Ustaw „chunk size” na 1500 (liczba znaków w jednym fragmencie)
    • Ustaw „chunk overlap” na 200 (część wspólna między fragmentami)

Czym jest chunking i dlaczego jest ważny?

Dzielenie tekstu (chunking) to proces podziału długich dokumentów na mniejsze fragmenty. Wyobraź to sobie jak dzielenie książki na rozdziały lub akapity:

Kluczowe parametry chunkingu:

  • Chunk size (1500) określa, jak duże będą fragmenty tekstu
  • Chunk overlap (200) to część, która jest wspólna dla końca jednego fragmentu i początku następnego – zapobiega gubieniu kontekstu

Konsekwencje wartości chunkingu:

  • Zbyt małe chunki:
    • ✓ Łatwiejsze dopasowanie do konkretnych zapytań
    • ✗ Utrata szerszego kontekstu
    • ✗ Fragmentacja powiązanych informacji
  • Zbyt duże chunki:
    • ✓ Zachowanie pełnego kontekstu
    • ✗ Trudniejsze dopasowanie do konkretnych zapytań
    • ✗ Więcej nieistotnych informacji w odpowiedzi

Odpowiednie parametry chunk size i chunk overlap są kluczowe dla jakości odpowiedzi generowanych przez model. W transkrypcie zalecano wartości 1500/200 jako punkt startowy do testów.

Tworzenie workflow do komunikacji z bazą wiedzy

Checklist komunikacji z RAG:

  • Skonfigurować trigger uruchamiający workflow
  • Zaimplementować parafrazowanie zapytań
  • Ustawić przeszukiwanie bazy wiedzy z filtrowaniem
  • Wyeliminować duplikaty w wynikach
  • Skonfigurować LLM do generowania odpowiedzi

Drugim krokiem jest stworzenie workflow do odpowiadania na pytania:

Konfiguracja wejścia:

  1. Trigger Chat:
    • Dodaj trigger „On Chat Message”
    • To może być również inny trigger, np. z bazy danych, maila, itp.

Zwiększanie trafności wyszukiwania:

  1. Parafraza zapytań:
    • Dodaj „LLM Chain” z modelem GPT-4 Nano
    • Skonfiguruj, aby generował trzy różne parafrazy pytania
    • Ta technika zwiększa skuteczność wyszukiwania w bazie wiedzy
    • W systemowym prompcie poproś o wygenerowanie trzech parafraz
    • Ustaw format odpowiedzi jako JSON z trzema różnymi parafrazami
  2. Podział zapytań:
    • Dodaj node „Split Out”
    • Ustaw „fields to split out” na „output”
    • Dzięki temu każda parafraza będzie oddzielnym zapytaniem

Przeszukiwanie i przetwarzanie wyników:

  1. Przeszukiwanie bazy wiedzy:
    • Dodaj „Pinecone Vector Store” > „Get Menu”
    • Wybierz indeks Pinecone
    • Ustaw limit wyników na 4 (dla każdej parafrazy)
    • Dodaj opcję „Pinecone Namespace” wybraną wcześniej
  2. Filtrowanie wyników:
    • Dodaj node „Filter”
    • Ustaw warunek „score” > 0.4
    • Score to prawdopodobieństwo dopasowania fragmentu do pytania (0-1)
    • Filtrowanie po score zapewnia, że dostaniemy tylko trafne fragmenty
  3. Usuwanie duplikatów:
    • Dodaj „Remove Duplicates”
    • Ustaw porównywanie na pole „document.page_content”
    • Zapobiega to powtarzaniu tych samych fragmentów w odpowiedzi
  4. Łączenie danych:
    • Dodaj „Aggregate”
    • Połącz wszystkie unikalne fragmenty w jeden zestaw danych
    • To pozwala modelowi analizować wszystkie znalezione fragmenty jednocześnie

Generowanie odpowiedzi:

  1. Odpowiedź dla użytkownika:
    • Dodaj „Basic LLM Chain” z modelem GPT-4 Mini
    • Skonfiguruj prompt systemowy zawierający pytanie użytkownika i znalezione fragmenty
    • Ustaw wytyczne dla modelu jak ma odpowiadać na podstawie znalezionych fragmentów

Korzyści płynące z parafrazowania zapytań:

  • Zwiększona szansa znalezienia trafnych fragmentów
  • Możliwość interpretacji pytania z różnych perspektyw
  • Lepsza odporność na niestandardowe sformułowania użytkownika
  • Większa kompletność odpowiedzi (różne interpretacje mogą znaleźć różne fragmenty)

Praktyczne wskazówki przy budowaniu RAG

Dokonuj mądrych wyborów technicznych:

  • Używaj LLM Chain zamiast Agent AI – w przypadku RAG model nie potrzebuje pamięci ani dostępu do narzędzi, więc wystarczy prostszy LLM Chain
  • Testuj różne wartości chunk size i chunk overlap – sprawdź, czy AI nie gubi kontekstu i czy odpowiedzi są satysfakcjonujące
  • Dostosuj poziom filtrowania score – możesz ustawić wyższy próg (np. 0.5 lub 0.6) dla większej precyzji

Organizuj dane efektywnie:

  • Używaj namespaces w Pinecone – pozwala to na segregowanie dokumentów, np. osobno transkrypty filmów, osobno dane firmowe
  • Dodawaj metadane do dokumentów – umożliwia to późniejsze filtrowanie po konkretnych atrybutach, np. nazwie pliku

Checklist optymalizacji RAG:

  • Przetestuj różne wartości chunk size (1000-2000 znaków)
  • Dostosuj chunk overlap (zwykle 10-20% chunk size)
  • Wybierz odpowiedni próg score (0.4-0.6)
  • Zorganizuj dokumenty w logiczne namespaces
  • Dodaj metadane ułatwiające filtrowanie
  • Przetestuj skuteczność z różnymi rodzajami zapytań

Możliwości rozwoju i zaawansowane techniki RAG

Przedstawiony przewodnik to dopiero wierzchołek góry lodowej. Zaawansowany RAG może obejmować:

  • Filtrowanie wyników
  • Rerankowanie
  • Bardziej zaawansowane strategie dzielenia tekstu
  • Różne modele embeddingowe
  • Integrację z innymi bazami danych

Polecane materiały do pogłębienia wiedzy

Dla osób zainteresowanych tematem RAG i bazami wektorowymi warto rozważyć następujące pozycje:

  1. „Building RAG Applications with LangChain” – James Briggs
  2. „Vector Databases: From Embeddings to Applications” – Ethan Rosenthal
  3. „Generative AI with LangChain” – Ben Auffarth
  4. „Retrieval Augmented Generation: Building AI Applications with LLMs and Your Data” – Alex Ratner
  5. „LLMs for Data Processing: Leveraging Large Language Models for Data Engineering” – Dan McCreary

Ten artykuł jest częścią serii notatek z wartościowych webinarów. Treść bazuje wyłącznie na informacjach i doświadczeniach przedstawionych przez Roberta Szewczyka w webinarze „Jak Stworzyć BAZĘ WIEDZY (RAG) Dla Agenta AI w n8n”. Wszystkie wskazówki, przykłady i rekomendacje pochodzą od twórcy oryginalnego materiału.

Źródło webinaru: https://www.youtube.com/watch?v=Q3_l2qyUcyk&t=11s


Opublikowano

,

Komentarze

Dodaj komentarz