To studium przypadku jest zanonimizowane. Budujemy systemy wewnętrzne, więc opisujemy rodzaj systemu i powód jego powstania, a nie dla kogo.
Sytuacja wyjściowa
Klientem jest firma handlowa, dla której zamówienia publiczne są jednym z kilku kanałów sprzedaży. Instytucje publiczne codziennie ogłaszają przetargi i część z nich pasuje do tego, co firma sprzedaje.
Trudnością nie jest brak przetargów. Ukazują się na kilku różnych portalach, w różnych formatach, a większość danej firmy nie dotyczy. Znalezienie tych istotnych oznaczało otwieranie portalu za portalem, czytanie tytułów, rozwijanie szczegółów, sprawdzanie terminów i kopiowanie obiecujących przetargów do listy. To było powolne, a przetarg na portalu, którego tego dnia nikt nie otworzył, łatwo umykał.
Co zbudowaliśmy
Workflow w n8n na własnym serwerze, który uruchamia się każdego ranka i czyta za zespół. Wyniki trafiają do bazy, której zespół już używa do zapisów sprzedażowych, więc nikt nie musi uczyć się kolejnego narzędzia.
Kolejne kroki:
- Zbieranie. Workflow pobiera nowe przetargi z kilku portali i agregatorów zamówień publicznych. Gdzie portal udostępnia dane strukturalne, czytamy je bezpośrednio; scrapowanie jest zapasem, a nie domyślnym wyborem.
- Ujednolicenie i deduplikacja. Każde źródło ma własny format, więc każdy rekord jest sprowadzany do jednej wspólnej postaci. Ten sam przetarg często pojawia się na więcej niż jednym portalu; kopie są łączone w jeden rekord, który zachowuje wszystkie linki.
- Twarde filtry. Zakres wartości, kategoria i termin są sprawdzane prostymi regułami, zanim w ogóle włączy się AI, żeby nic nie było wydawane na przetargi, które nie mogą pasować.
- Tanie wstępne sito. Tani model językowy ocenia każdy pozostały przetarg względem asortymentu firmy. Większość kończy się tutaj.
- Głębsza analiza. Przetargi powyżej progu trafiają do mocniejszego modelu, który czyta ogłoszenie i, gdy są dostępne, dokumenty przetargowe, a potem podsumowuje dopasowanie, wymagania i możliwe przeszkody.
- Zapis. Każdy istotny przetarg staje się rekordem z oceną, uzasadnieniem, terminem i linkami do źródeł.
Śledzone są też ogłoszenia wstępne zapowiadające przyszły przetarg, a rekord jest aktualizowany, gdy właściwy przetarg zostaje otwarty, zamiast tworzyć duplikat.
Jak to działa na co dzień
Zespół zaczyna dzień od krótkiej listy nowych okazji, już ocenionych i wyjaśnionych. Stare rekordy, którymi nikt się nie zajął, są regularnie porządkowane według ścisłej listy statusów, które wolno usuwać, więc nie znika nic, nad czym ktoś pracuje. Prosty przełącznik pozwala wstrzymać tworzenie nowych rekordów bez dotykania samego workflow.
Nikt już nie otwiera portali jeden po drugim. Zespół decyduje, w których przetargach startować, zamiast ich szukać.
Czego się nauczyliśmy
Najpierw reguły, potem modele. Wszystko, co da się rozstrzygnąć prostą regułą, jak wartość, kategoria czy termin, powinno być tak rozstrzygane. Modele językowe dobrze czytają i oceniają tekst i tam zarabiają na swój koszt.
Cicha strata jest gorsza niż awaria. W każdej pętli przetwarzającej elementy jeden po drugim pominięte elementy też muszą być rozliczone. Workflow, który melduje sukces, a po cichu gubi resztę listy, to najtrudniejszy do zauważenia rodzaj błędu.
Nie ufaj formie odpowiedzi modelu. Parsuj wyniki modelu defensywnie i wracaj do bezpiecznej wartości domyślnej, żeby jedna dziwnie sformatowana odpowiedź nie zatrzymała całego uruchomienia.
Czytaj dokumenty źródłowe, gdy to ważne. Ogłoszenia są streszczeniami. Gdy jakiś element, na przykład termin dostawy, ma znaczenie, wyciągaj go z właściwych dokumentów, podawaj źródło i oznaczaj wszystko, co jest tylko szacunkiem.
Wybieraj modele na własnych danych. Zanim wybierzesz lub zmienisz model, uruchom kandydatów na prawdziwych przykładach, które zespół już ocenił. Cena za token niewiele mówi o tym, jak model poradzi sobie z Twoim tekstem.
Której usłudze to odpowiada
To automatyzacja AI zbudowana na n8n: deterministyczne kroki wszędzie, gdzie pozwalają dane, modele językowe tylko tam, gdzie prawdziwą pracą jest czytanie i ocena tekstu, a wyniki trafiają do narzędzia, którego zespół już używa. Powiązany przykład: Wyszukiwanie dostawców i alerty terminów w n8n.