Tato případová studie je anonymizovaná. Stavíme interní systémy, takže popisujeme typ systému a proč vznikl, ne pro koho.
Výchozí situace
Klientem je obchodní firma, pro kterou jsou veřejné zakázky jedním z několika obchodních kanálů. Veřejní zadavatelé vypisují zakázky každý den a některé z nich odpovídají tomu, co firma prodává.
Potíž není v tom, že by zakázek bylo málo. Vycházejí na několika různých portálech, v různých formátech, a většina z nich se konkrétní firmy netýká. Najít ty relevantní znamenalo otevírat jeden portál za druhým, číst názvy, rozklikávat detaily, kontrolovat lhůty a slibné zakázky kopírovat do seznamu. Bylo to pomalé a zakázka na portálu, na který se ten den nikdo nepodíval, se snadno přehlédla.
Co jsme postavili
Workflow v n8n na vlastním serveru, které se spouští každé ráno a čtení udělá za tým. Výsledky přistávají v databázi, kterou tým už používá pro obchodní záznamy, takže se nikdo nemusí učit další nástroj.
Postup krok za krokem:
- Sběr. Workflow stahuje nové zakázky z několika portálů a agregátorů veřejných zakázek. Kde portál nabízí strukturovaná data, čteme je přímo; scraping je záloha, ne výchozí volba.
- Sjednocení a deduplikace. Každý zdroj má vlastní formát, takže se každý záznam převede do jednoho společného tvaru. Stejná zakázka často vyjde na více portálech; kopie se sloučí do jednoho záznamu, který si nechá všechny odkazy.
- Tvrdé filtry. Rozsah hodnoty, obor a lhůta se kontrolují obyčejnými pravidly dřív, než přijde na řadu AI, takže se nic neutrácí za zakázky, které nemohou sedět.
- Levný předvýběr. Levný jazykový model ohodnotí každou zbývající zakázku vůči sortimentu firmy. Většina zakázek skončí tady.
- Hlubší analýza. Zakázky nad prahem jdou silnějšímu modelu, který přečte oznámení a tam, kde je k dispozici, i zadávací dokumentaci, a shrne shodu, požadavky a možné překážky.
- Záznam. Každá relevantní zakázka se zapíše se skóre, zdůvodněním, lhůtou a odkazy na zdroje.
Sledují se i předběžná oznámení, která budoucí zakázku ohlašují, a když se skutečná zakázka otevře, existující záznam se aktualizuje místo vzniku duplikátu.
Jak to funguje v běžném provozu
Tým začíná den krátkým seznamem nových příležitostí, už ohodnocených a vysvětlených. Staré záznamy, se kterými nikdo nepracuje, se pravidelně uklízejí podle přesného seznamu stavů, které se smějí mazat, takže nemůže zmizet nic, na čem se pracuje. Jednoduchý vypínač umožní týmu pozastavit zakládání nových záznamů, aniž by sahal do samotného workflow.
Nikdo už neotevírá portály jeden po druhém. Tým tráví čas rozhodováním, do kterých zakázek jít, ne jejich hledáním.
Co jsme se naučili
Nejdřív pravidla, potom modely. Co jde rozhodnout obyčejným pravidlem, jako hodnota, obor nebo lhůta, má být rozhodnuto pravidlem. Jazykové modely jsou dobré ve čtení a posuzování textu a tam si na sebe vydělají.
Tichá ztráta je horší než pád. V každé smyčce, která zpracovává položky jednu po druhé, musí být i přeskočené položky započítané. Workflow, které hlásí úspěch a přitom potichu zahodí zbytek seznamu, je nejhůř odhalitelný typ selhání.
Nevěřte tvaru odpovědi modelu. Výstup modelu parsujte obranně a při potížích použijte bezpečnou výchozí hodnotu, aby jedna podivně naformátovaná odpověď nezastavila celý běh.
Když na tom záleží, čtěte zdrojové dokumenty. Oznámení jsou shrnutí. Když na nějakém údaji, třeba termínu dodání, záleží, vytáhněte ho ze skutečných dokumentů, citujte, odkud pochází, a označte vše, co je jen odhad.
Vybírejte modely na vlastních datech. Než model vyberete nebo vyměníte, pusťte kandidáty na skutečné příklady, které už tým posoudil. Cena za token toho moc neřekne o tom, jak si model poradí právě s vaším textem.
Které službě to odpovídá
Je to AI automatizace postavená na n8n: deterministické kroky všude, kde to data dovolí, jazykové modely jen tam, kde je skutečnou prací číst a posuzovat text, a výsledky doručené do nástroje, který tým už používá. Související příklad: Hledání dodavatelů a hlídání termínů v n8n.