Asynchroniczne scrapowanie lepiej sprawdza się w ingestii RAG
Systemy RAG często zawodzą z powodu nieaktualnych danych. Strona się zmienia, ale Twój indeks pozostaje taki sam. W efekcie Twoja sztuczna inteligencja udziela błędnych odpowiedzi z dużą pewnością.
Wiele osób próbuje rozwiązać ten problem za pomocą prostych, synchronicznych scraperów. Pobierasz stronę, wyodrębniasz dane i aktualizujesz swoją bazę wektorową. Takie podejście generuje problemy w środowisku produkcyjnym.
Główne problemy ze scrapowaniem synchronicznym:
- Ładowanie stron trwa długo ze względu na JavaScript lub banery cookies.
- Twoje API czeka na zakończenie pracy scrapera, co spowalnia użytkowników.
- Brakuje pamięci lub otwartych gniazd (sockets) podczas uruchamiania zadań równolegle.
- Błędy takie jak przekroczenie czasu oczekiwania (timeouts) czy limity zapytań (rate limits) są trudne do zarządzania.
Asynchroniczne scrapowanie wykorzystuje przepływ typu „wyślij, odpytaj i pobierz” (submit, poll, and retrieve). Przesyłasz zadanie, otrzymujesz identyfikator zadania (job ID) i sprawdzasz wynik później. Dzięki temu Twoja aplikacja pozostaje szybka.
Jak zbudować niezawodny potok ingestii:
- Oddziel scrapowanie od obsługi żądań. Twoja aplikacja nie powinna czekać na załadowanie przeglądarki.
- Przechowuj stany zadań w bazie danych. Śledź adres URL, status i błędy.
- Używaj skrótów treści (content hashes). Jeśli zawartość strony się nie zmieniła, nie twórz ponownie jej osadzeń (embeddings). Oszczędza to czas i pieniądze.
- Używaj kolejek błędów (dead-letter queues). Jeśli zadanie nie powiedzie się trzy razy, przestań ponawiać próby. Przenieś je na widoczną listę, aby móc je naprawić.
- Waliduj swoje dane. Użyj schematu, aby sprawdzić wyodrębnione dane, zanim trafią do bazy wektorowej. Pusty ciąg znaków jest gorszy niż nieudane zadanie.
Asynchroniczne scrapowanie najlepiej sprawdza się przy aktualizacjach w tle i zaplanowanych odświeżeniach. Nie jest przeznaczone do potrzeb czasu rzeczywistego, w których użytkownik czeka na świeżą stronę.
Jeśli użytkownik potrzebuje danych natychmiast, pokaż mu zasoby z pamięci podręcznej i zaktualizuj indeks w tle.
Opcjonalna społeczność edukacyjna: https://t.me/GyaanSetuAi