Winnow og kildeindsamling uden scrap-kaos
Bunken af sider er ikke produktet
Der findes en bestemt slags AI-projekt, der starter med entusiasme og ender med en mappe, der hedder scrape-final-2-real-final. Holdet har brug for forankring. Nogen siger, at vi skal indsamle kilder. En anden finder en crawler. En uge senere er der tusindvis af filer, tre CSV-filer, en notebook, der kun kører på én laptop, og en lille moralsk krise om, hvorvidt halvdelen af kilderne overhovedet måtte indsamles.
Tragedien er, at alle mente det godt. Holdet satte sig ikke for at bygge en datasump. De ville have bedre svar. De ville have, at modellen citerede faktisk materiale. De ville have, at systemet stoppede med at lyde som en konsulent efter forsinkelse nummer fire i lufthavnen. Så de indsamlede. Så indsamlede de mere. Så opdagede de, at indsamling ikke er det samme som at have kilder.
Et kildeindsamlingssystem skal besvare kedelige spørgsmål, før det smarte arbejde begynder. Hvor kom dette fra? Var det tilladt? Hvornår blev det hentet? Hvilken status returnerede forespørgslen? Hvad blev ekstraheret? Hvad var indholdshashen? Hvilken indsamler, søgerute eller API producerede det? Kan vi reproducere indsamlingspolitikken senere? Kan vi vise, at private netværksområder blev blokeret, og at hastighedsgrænser blev overholdt? Hvis disse spørgsmål mangler, er kildebunken bare en bunke med tillidsproblemer.
Winnow findes til det mindre glamourøse, mere nyttige lag. Det er en Rust-platform til dataindsamling og et CLI/bibliotek til søgning, scraping, crawling, API-indsamling og struktureret output. Implementeringen beskriver tekst-, JSON-, JSONL-, CSV- og HTML-outputs, robotpolitik, hastighedsgrænser pr. domæne, SSRF-beskyttelse og strukturerede indsamlingsregistreringer. Det er den rigtige slags kedelighed. Crawleren er ikke en sulten mund. Det er en kontrolleret indtagelse.
Denne skelnen betyder noget, fordi AI-forankring kun er så god som kildestien. En model kan citere et afsnit og stadig være operationelt ubrugelig, hvis ingen ved, hvor afsnittet kom fra, om det var aktuelt, om det måtte bruges, eller om en senere kørsel ville hente det samme materiale. Forankring uden oprindelse er bare en pænere udseende rygte.
Indsamling er en forsyningskæde
Folk forstår forsyningskæder, når der er kasser involveret. En leverandør sender dele. Delene har batchnumre. Der er fakturaer, leveringsdatoer, kvalitetskontroller, tilbagekaldelser og revisioner. Ingen seriøs siger, at lageret er fuldt, så vi er færdige. Med information bliver teams pludselig mystiske. En mappe har filer. En datasø har tabeller. En vektorbutik har bidder. På en eller anden måde skal det antyde sandhed.
Det gør det ikke. Kildeindsamling er også en forsyningskæde. Råmaterialet er ekstern information. Det ankommer gennem ruter med forskellig pålidelighed, tilladelser, latenstid, formater og fejltilstande. Søgeresultater er ikke det samme som API-registreringer. En crawlet side er ikke det samme som et arkivøjebliksbillede. En tabel-eksport er ikke det samme som et renderet HTML-dokument. At behandle alt det som bare indhold flader de fakta ud, der gør indholdet brugbart senere.
Winnows nyttige holdning er, at indsamlingsmetadata følger med ekstraktet. Kilde-URL'en betyder noget. Tidsstemplet betyder noget. Status betyder noget. Indholdshashen betyder noget. Indsamlerklassen betyder noget. Outputformatet betyder noget. Registreringen er ikke kun den tekst, der kom ud. Det er konvolutten omkring teksten.
Den konvolut er det, der senere lader en reviewer adskille kildekvalitet fra modelkvalitet. Hvis et svar er forkert, fordi modellen ignorerede beviser, er det én fejl. Hvis det er forkert, fordi indsamlingen trak forældede sider ind, er det en anden. Hvis det er forkert, fordi en kilde var blokeret, men stille og roligt blev sprunget over, er det en tredje. Hvis det er forkert, fordi crawleren hentede en loginside og behandlede den som indhold, tillykke, du har opfundet en meget dyr måde at citere et cookie-banner på.
God kildeindsamling gør ikke alt downstream-arbejde nemt. Den gør fejl diagnosticerbare. Det er allerede en stor forbedring. I produktion slår diagnosticerbarhed magi hver gang. Magiske demoer ældes som mælk.
Det åbne web er ikke dit lager
Meget scraping-kultur opfører sig stadig, som om internettet er et gratis lager med dårlig belysning. Send forespørgsler, tag sider, dump HTML, gå videre. Den holdning var allerede skrøbelig. For AI-systemer bliver den hensynsløs. Dataene bliver ikke bare set. De kan blive indekseret, opsummeret, citeret, brugt til at træffe beslutninger eller fødet ind i arbejdsgange, der overlever det oprindelige indsamlingsøjeblik.
Så indsamling har brug for bremser. Robots-politik er ikke en dekorativ tekstfil for høflige mennesker. Rate limits er ikke valgfrie, fordi pipelinen har en deadline. Private netværksområder er ikke en spændende opdagelsesmulighed. SSRF-beskyttelse er ikke paranoia. Det er forskellen mellem et indsamlingsværktøj og en sikkerhedshændelse med en maskot.
Winnows kildehenvisninger er på linje med disse beskyttelsesforanstaltninger: robots med deny-by-default-tilgang, rate limits pr. domæne, SSRF-beskyttelse, struktureret output. Det er ikke sidefunktioner. Det er produktets grænse. Et værktøj, der kan hente fra internettet uden et politiklag, er ikke kraftfuldt på en nyttig måde. Det er en forpligtelse med gennemløb.
Det er også her, europæisk regulering bliver meget konkret. Ikke i slogans forstand. I den faktiske operationelle forstand. Hvis en organisation vil have evidensbaseret AI, skal den vide, hvordan evidens kom ind i systemet. Var indsamling tilladt? Blev kilder behandlet forskelligt efter klasse? Blev poster hentet fra steder, organisationen har tilladelse til at behandle? Var private adresser blokeret? Kunne en operatør forklare politikken uden at lave en fortolkende dans foran indkøbsafdelingen?
Der er en tør lille ironi her. De kedelige crawler-indstillinger er ofte vigtigere for tillid end modelarkitekturen. Det føles uretfærdigt for folk, der kan lide arkitekturdiagrammer. Det er stadig sandt. Hvis evidensen kommer dårligt ind, kan modellen kun blive en elegant forstærker af en dårlig indgang.
Udtræk er ikke kopiering
En anden almindelig fejl er at forveksle kopiering med udtræk. At hente HTML er ikke det samme som at udtrække nyttigt indhold. En rå side indeholder navigation, cookie-bannere, reklamer, relaterede links, footer-sjask, scripts, layoutfragmenter og nogle gange det faktiske indhold, du kom efter, gemt væk, som om det skylder penge.
Winnows output betyder noget, fordi forskellige downstream-opgaver har brug for forskellige formater. Tekst til læsning. JSON eller JSONL til strukturerede rækker. CSV til tabelvenlige workflows. HTML, når den oprindelige struktur betyder noget. Pointen er ikke at vælge ét helligt output. Pointen er at gøre outputtet eksplicit og passende til opgaven.
Dette bliver kritisk, når kilder fodrer søgning, retrieval eller knowledge governance. En model bør ikke skulle beslutte, om et footerlink er bevis. Et retrievalsystem bør ikke indeksere hver cookie-banner, som om det var en politik-erklæring. En datapipeline bør ikke forvandle et sidelayout til en faktatabel ved optimisme. Ekstraktion er der, hvor kilden bliver et artefakt, der kan bruges af andre systemer uden at slæbe al web-side-affald med på rejsen.
Men ekstraktion skal også være ærlig. Oprydning er ikke omskrivning. Normalisering er ikke opfindelse. Fjernelse af boilerplate er ikke at ændre påstanden. Hvis ekstraktoren ikke kan se forskel, skal den behandles med samme mistænksomhed som en sælger, der bruger ordet ubesværet. Fint i små doser, farligt tæt på budgettet.
Hvorfor dette hører til før retrieval
Retrievalsystemer får skylden for mange problemer, der startede tidligere. Indekset returnerer dårlige kandidater, så teamet tuner rangering. Citaterne er svage, så nogen ændrer chunking. Modellen lyder usikker, så nogen tilføjer en prompt-instruktion med samme følelsesmæssige kraft som en køleskabsmagnet. Nogle gange er retrieval-laget faktisk problemet. Ofte har indsamlingslaget stille og roligt forgiftet måltidet, før rangering overhovedet begyndte.
Hvis kilder ankommer uden konvolutter, kan retrieval ikke forklare dem senere. Hvis tidsstempler mangler, bliver friskhed et gæt. Hvis statuskoder ignoreres, ligner fejl fravær. Hvis indholdshashes mangler, bliver ændringsdetektion folklore. Hvis ekstraktionskvaliteten varierer vildt, bliver rangering en konkurrence mellem signal og boilerplate.
Derfor passer Winnow naturligt før systemer som BitWeave, Spindle, Fabric eller ethvert kildebaseret AI-produkt. Det er ikke ræsonneringslaget. Det er ikke knowledge grafen. Det er ikke brugergrænsefladen. Det er indtagelsesdisciplinen, der afgør, om de senere lag modtager forsvarligt materiale eller et hjemsøgt loft fuld af web-fragmenter.
Denne rækkefølge betyder noget. Indsaml først med politik. Indpak hver kilde med kontekst. Ekstraher til eksplicitte former. Derefter indeksér, citer, analysér, certificér eller opsummér. Hvis rækkefølgen er omvendt, ender teamet med at polere svar oven på ukendt input. Sådan får dyr nonsens en pæn brugergrænseflade.
Tallene er mindre vigtige end kontrakten
Winnow har et stort katalog af collectorer, søgeintegrationer, API-indgange og stedspecifikke ekstraktionskapaciteter. De præcise tal varierer mellem kilde-snapshots, hvilket er normalt for en aktivt skiftende indsamlingsoverflade og ikke noget, der er værd at gøre til offentlig poesi. Det vigtige punkt er ikke et heroisk tal. Det vigtige punkt er kontrakten.
Kan værktøjet indsamle fra flere route-klasser? Kan det udskrive strukturerede formater? Kan det anvende sikkerhedsgrænser? Kan det bære kilde-metadata? Kan det bruges som et bibliotek eller CLI? Kan et team inspicere, hvordan en kilde kom ind i systemet? Det er de spørgsmål, der overlever en rigtig implementering.
Tal kan virke tillokkende, fordi de ser konkrete ud. Men for indsamlingsinfrastruktur kan det forkerte tal distrahere fra den reelle sikkerhed. Tusind sjuskede indsamlere er værre end et mindre antal med ordentlige politikker, kuverter og outputkontrakter. Det modne spørgsmål er ikke, hvor meget du kan skrabe. Det modne spørgsmål er, hvad du kan forsvare, efter du har skrabet det.
Lærdommen
Lærdommen fra Winnow er, at kildeindsamling ikke er et forspil til det egentlige AI-system. Det er en del af det egentlige AI-system. Det svar, en bruger ser, afhænger af, hvad der kom ind, hvordan det kom ind, hvad der blev udtrukket, hvilken kontekst der overlevede, og hvilke usikre ruter der blev blokeret. Det arbejde fortjener ingeniørkunst, ikke et weekendscript med et heroisk variabelnavn.
Winnow er nyttigt, fordi det behandler indsamling som kontrolleret tilgang: kilderuter, politikporte, sikkerhedsgrænser, strukturerede outputs og kildekuverter. Det gør ikke enhver kilde troværdig. Det gør kildens vej synlig nok til, at resten af systemet kan opføre sig som en voksen.
Det er den tørre sandhed bag det meste jordede AI-arbejde. Før modellen citerer en kilde, før retrieval rangerer en kandidat, før Spindle certificerer et atom, før Fabric viser en side bag et svar, skal nogen indsamle materialet uden at lave rod. Ikke glamourøst. Højst nødvendigt. Lidt som VVS, bortset fra at når det lækker, kalder alle det AI-hallucination.
Så ja, indsaml kilder. Men forveksl ikke en bunke med et korpus eller en crawler med governance. Det nyttige spørgsmål er ikke, hvor hurtigt værktøjet kan æde internettet. Det nyttige spørgsmål er, om organisationen stadig kan forklare, hvad det åd, hvorfor det var tilladt, hvad der kom ud, og om det næste system skal stole på det.