Poprawić błędy w pracy agenta AI z bazą wektorową
Cześć.
Robię aplikację. System jest zbudowany w ten sposób: Użytkownik zadaje pytanie w czacie aplikacji - Agent AI szuka informacji w bazie danych i udziela odpowiedzi. Jeśli zapytanie użytkownika wykracza poza ramy bazy danych, wtedy agent zwraca się do Gemini.
Baza danych - Supabase. Tam są załadowane dane z dwóch stron rządowych przez API.
W backendzie zbudowany jest flow w n8n (ten sam agent). On przeszukuje bazę i udziela odpowiedzi oraz komentarzy.
W Supabase utworzone są tabele z danymi z 2 stron. Są one połączone w 1 tabelę document_chunks.
Problem - Agent AI znajduje informacje tylko w 1 tabeli, a danych z drugiej jakby nie widzi. Nawet jeśli zadać pytanie i skopiować dane, które trzeba znaleźć (wiemy, że te dane tam są), to agent ich nie znajduje.
Również konieczne jest zbudowanie algorytmu do wyszukiwania dla agenta. Baza informacji jest ogromna i tak rozumiem, że agent nie wie, co jest istotne, a co nie. Brakuje systemu "klastrów" wyszukiwania.
W kwestii różnej metadanych. to nie jest błąd, a rozwiązanie architektoniczne. W jednej tabeli przechowywane są dwa zasadniczo różne typy dokumentów:
Ustawodawstwo (Sejm) - ma strukturę "Artykuł/Paragraf".
Orzeczenia sądowe (SAOS) - mają strukturę "Numer sprawy/Sąd". To, że w niektórych wierszach są jedne pola, a w innych są NULL — to normalna praktyka dla mieszanych baz danych. To pozwala Agentowi zrozumieć, czy cytuje on ustawę, czy wyrok sądu. Ujednolicenie ich jest niemożliwe, ponieważ są to różne byty.
W kwestii „zapisujemy jedne wektory, szukamy inne”.
I do zapisu w bazie (parsowanie), i do wyszukiwania (agent) używana jest ta sama model — Google Gemini Embeddings.
Wymiar wektora jest stały — 768.
Gdyby rozmiary się różniły, baza danych zgłosiłaby błąd transakcji już na etapie zapisu lub wyszukiwania, a system w ogóle by nie działał.
W kwestii "wyszukiwania w kilku etapach" - a tutaj chyba się zgadzam, bo innych opcji nie znalazłem, prawdopodobnie trzeba wdrożyć hybrydowe wyszukiwanie
Wektory formuje model Google Gemini Embeddings przez API.
Technicznie jest to zrealizowane przez węzeł Google Gemini Embeddings w n8n, który wysyła tekst na serwery Google, otrzymuje w odpowiedzi wektorową tablicę embedding i przekazuje ją do zapisu w bazie danych.
Wejściowe zapytanie jest przekształcane na wektor za pomocą modelu Google Gemini.
W Supabase wywoływana jest funkcja, która porównuje wektor zapytania z wektorami dokumentów w bazie.
Wyniki są sortowane według współczynnika podobieństwa (od największego do najmniejszego).
Baza zwraca ustaloną liczbę Top-K najbardziej relewantnych fragmentów tekstu, niezależnie od tego, czy to ustawa Sejm, czy orzeczenie sądowe SAOS, które następnie są przekazywane do kontekstu SI.
Fizycznie w bazie dane są. Sprawdziłem to przez bezpośrednie zapytania do bazy danych — zapisy orzeczeń sądowych SAOS zostały załadowane poprawnie.
Agent nie widzi tych orzeczeń w momencie formowania odpowiedzi. Agent SI podczas wyszukiwania nie może poprawnie dopasować ludzkiego pytania do tekstów prawnych orzeczeń sądowych. Widzi ustawy Sejm, ale „pomija” wyroki SAOS i to jest główny problem.
Cała logika i struktura projektu są zrealizowane standardowo w ramach twojego konta Supabase (PostgreSQL). Nic zewnętrznego ani ukrytego tam nie ma.
Funkcje wyszukiwania to standardowe funkcje SQL, znajdują się bezpośrednio w schemacie bazy danych.
Rozmiar wektora, ten parametr jest wyraźnie określony w typach danych kolumn tabeli z dokumentami.
Każdy programista, mając dostęp do bazy, może uzyskać te informacje w minutę, po prostu przeglądając strukturę Schema i listę funkcji przez zapytanie SQL lub interfejs Supabase.
Wiersze, w których sejm_id jest, a saos_id — NULL to akty prawne. Pochodzą z bazy polskiego Sejmu. Ponieważ to ustawa, ma numer w rejestrze Sejmu, ale nie jest orzeczeniem sądowym, więc nie może mieć saos_id.
Wiersze, w których saos_id jest, a sejm_id — NULL to orzeczenia sądowe z bazy SAOS. Każdy wyrok ma swój unikalny numer w systemie sądów. Ale wyrok — to nie ustawa, Sejm go nie uchwalił, więc nie ma i nie może mieć sejm_id.
Щодо різної метадати. це не помилка, а архітектурне рішення. В одній таблиці зберігаються два принципово різні типи документів:
Законодавство (Sejm) - має структуру "Артикул/Параграф".
Судові рішення (SAOS) - мають структуру "Номер справи/Суд". Те, що в одних рядках є одні поля, а в інших вони NULL — це нормальна практика для змішаних баз даних. Це дозволяє Агенту розуміти, чи цитує він закон, чи вирок суду. Уніфікувати їх неможливо, бо це різні сутності.
Щодо «записуємо одні вектори, шукаємо інші».
І для запису в базу (парсинг), і для пошуку (агент) використовується одна й та сама модель — Google Gemini Embeddings.
Розмірність вектора фіксована — 768.
Якби розміри відрізнялися, база даних видала б помилку транзакції ще на етапі запису або пошуку, і система не працювала б взагалі.
Щодо "пошуку в декілька етапів" - а ось тут мабуть погоджуюсь, бо інших варіантів я не знайшов, напевно треба реалізовувати гібрідний пошук
Вектори формує модель Google Gemini Embeddings через API.
Технічно це реалізовано через ноду Google Gemini Embeddings у n8n вона відправляє текст на сервери Google, отримує у відповідь векторний масив embedding і передає його для запису в базу даних.
Вхідний запит перетворюється на вектор за допомогою моделі Google Gemini.
У Supabase викликається функція, яка порівнює вектор запиту з векторами документів у базі.
Результати сортуються за коефіцієнтом схожості (від найбільшого до найменшого).
База повертає встановлену кількість Top-K найбільш релевантних фрагментів тексту, незалежно від того, чи це закон Sejm, чи судове рішення SAOS, які далі передаються в контекст ШІ.
Фізично в базі дані є. Я перевірив це через прямі запити до бази даних — записи судових рішень SAOS завантажені коректно.
Агент не бачить цих рішень у момент формування відповіді. ШІ-агент при пошуку не може правильно зіставити людське питання із юридичними текстами судових рішень. Він бачить закони Sejm, але «пропускає» вироки SAOS і саме це головна проблема.
Вся логіка та структура проекту реалізована стандартно в межах вашого акаунта Supabase (PostgreSQL). Нічого зовнішнього чи прихованого там немає.
Функції пошуку це стандартні SQL-функції, вони знаходяться безпосередньо в схемі бази даних.
Розмір вектора цей параметр чітко визначений у типах даних колонок таблиці з документами.
Будь-який розробник, маючи доступ до бази, може отримати цю інформацію за хвилину, просто переглянувши структуру Schema та список функцій через SQL-запит або інтерфейс Supabase.
Рядки, де sejm_id є, а saos_id — NULL це законодавчі акти. Вони приходять з бази польського Сейму. Оскільки це закон, у нього є номер у реєстрі Сейму, але він не є судовим рішенням, тому він не може мати saos_id.
Рядки, де saos_id є, а sejm_id — NULL це судові рішення з бази SAOS. У кожного вироку є свій унікальний номер у системі судів. Але вирок — це не закон, Сейм його не ухвалював, тому він не має і не може мати sejm_id.
Załączniki 1
-
2 dni990 PLN
272 1 2 dni990 PLNDzień dobry,
Przeanalizowałem problem z Twoim agentem AI i zidentyfikowałem główną przyczynę — konkurencja wektorowa między dwoma różnymi typami dokumentów w jednej przestrzeni. Dokumenty Sejmu (strukturalne artykuły) zawsze wygrywają z orzeczeniami SAOS (nieustrukturalizowany tekst prawniczy) przy standardowym wyszukiwaniu wektorowym.
Rozwiązanie
Architektura z dwoma niezależnymi strumieniami wyszukiwania:
Klasyfikator zapytania — określa typ wyszukiwania (ustawa/precedens/oba)
Równoległe wyszukiwanie — oddzielne zapytania z optymalną konfiguracją
Inteligentne łączenie — scalenie z cross-reference (orzeczenia → ustawy)
… Optymalizacja kosztów API
Obecny system: ~$0.20-$0.25/zapytanie
Nowy system: ~$0.03-$0.04/zapytanie
Redukcja: 85% (przy 1000 zapytań/mc = oszczędność ~800 PLN/mc)
Zakres prac
Wykonam zdalnie (9-10h):
Analiza i plan techniczny (2-3h)
Funkcje SQL + konfiguracja (2-2.5h)
Klasyfikator zapytań (2h)
Podstawowy n8n workflow (3-3.5h)
Wykonasz samodzielnie (oszczędność ~4-5h):
Migracja danych (gotowy skrypt SQL z instrukcją)
Import workflow + konfiguracja credentials
Testowanie według checklisty
Fine-tuning parametrów
Otrzymasz: SQL skrypty, n8n workflow JSON, instrukcje step-by-step, checklist, wsparcie Telegram
Wycena
Standardowa kalkulacja: 1000-1350 PLN (9-10h × 25-30 EUR)
Propozycja: 990 PLN
Rabat ~30% od standardowej stawki
Opcjonalnie: pełne wdrożenie "pod klucz" +200 PLN (TeamViewer debugging, rozszerzone testy)
Jeśli propozycja jest OK, możemy zacząć od analizy (2-3h) — otrzymasz konkretny plan i potwierdzenie wykonalności.
Pozdrawiam,
Eugeniusz
-
1 dzień500 PLN
1562 7 0 1 dzień500 PLNWchodzę do top-5 deweloperów w kategorii „Sztuczna inteligencja i uczenie maszynowe” wśród ~2100 specjalistów na platformie.
Gwarantuję:
- Szybkie i jakościowe wykonanie zadania
- Ścisłe przestrzeganie terminów
- Regularny kontakt przez cały proces
Będę zadowolony, aby omówić szczegóły twojego projektu w prywatnych wiadomościach.
cena warunkowa
-
3 dni500 PLN
1539 4 0 1 3 dni500 PLNDzień dobry. Przyjrzałem się opisowi problemu, typowy przypadek.
Wygląda na to, że część danych nie została zaindeksowana przez embeddings lub po prostu nie trafia w wyszukiwanie. Dodatkowo, obecnie agent nie ma normalnej logiki selekcji, przez co gubi się w dużej bazie i nie rozumie, gdzie czego szukać.
Pracowałem z Supabase, wyszukiwaniem wektorowym i systemami RAG. Mogę znaleźć, dlaczego druga część danych nie jest odnajdywana. Przebudować logikę wyszukiwania. Sprawić, aby Gemini łączył się tylko wtedy, gdy w bazie danych naprawdę nie ma odpowiedzi.
W rezultacie agent zacznie stabilnie znajdować dane i odpowiadać adekwatnie.
Jestem gotów przyjrzeć się waszej bieżącej realizacji i zaproponować rozwiązanie.
-
15 dni5000 PLN
12784 4 2 15 dni5000 PLNCześć,
Jestem bardzo zainteresowany pomocą w poprawie możliwości wyszukiwania Twojego Agenta AI i zapewnieniu, że niezawodnie pozyskuje zarówno ustawodawstwo Sejmu, jak i orzeczenia sądowe SAOS. Mam duże doświadczenie w budowaniu i optymalizacji systemów backendowych z dużymi, wielo-podmiotowymi bazami danych, w tym Supabase/PostgreSQL, oraz w integrowaniu opartych na wektorach przepływów pracy AI.
Mogę wdrożyć solidny, hybrydowy algorytm wyszukiwania, który uwzględnia wiele typów dokumentów, poprawia ranking trafności w dużych zbiorach danych i wprowadza klasteryzację lub wyszukiwanie uwzględniające podmioty, aby zapewnić, że Agent AI nie pominie żadnego źródła. Czuję się komfortowo pracując z przepływami pracy n8n, modelami osadzonymi, takimi jak Google Gemini, oraz projektując skalowalne rozwiązania dla danych strukturalnych o dużej objętości.
Jestem pewien, że mogę poprawić logikę wyszukiwania, zwiększyć dokładność wyników i zapewnić, że Agent AI w pełni wykorzysta Twój połączony zbiór danych.
Z poważaniem,
… Jeo Vincent Carretas
-
5 dni1000 PLN
3160 23 1 3 5 dni1000 PLNCześć, Maksymilian! Zrozumiałem twoją sytuację, proponuję integracyjnego podejścia do rozwiązania problemu z agentem AI. Najpierw zajmę się szczegółowym audytem istniejącego przepływu w n8n oraz struktury twojej bazy Supabase. Opierając się na moim doświadczeniu w projektowaniu architektur systemów, szybko zidentyfikuję i rozwiążę problem z wyszukiwaniem w "document_chunks". Ponadto opracuję optymalny algorytm klasteryzacji, który zwiększy dokładność i trafność wyników agenta. Skonfiguruję system do nieprzerwanej i skalowalnej pracy. Omówimy projekt dalej?
-
1 dzień500 PLN
2236 46 0 1 dzień500 PLNDzień dobry. Bez realnego zrozumienia, co tam zrobiliście, trudno powiedzieć o realnych terminach i kosztach. Piszcie na priv, omówimy szczegóły. Na razie tylko wstępne pytania.
Czy jesteście pewni, że macie dwie tabele? A może macie dwie bazy danych? Z obrazka nic nie wynika, poza tym, że jest jedna tabela. Co oznacza kolumna chunk_index w tej tabeli?
Jakiej wielkości są embeddingi? Jakie są rozmiary chunków? Dlaczego subbase, a nie specjalistyczne rozwiązania?