Sortera och samla källor utan skrapkaos
Högen av sidor är inte produkten
Det finns en särskild typ av AI-projekt som börjar med entusiasm och slutar med en mapp som heter scrape-final-2-real-final. Teamet behöver grounding. Någon säger att vi borde samla in källor. Någon annan hittar en crawler. En vecka senare finns det tusentals filer, tre CSV-filer, en notebook som bara fungerar på en laptop, och en liten moralisk kris om huruvida hälften av källorna ens fick samlas in från början.
Tragedin är att alla menade väl. Teamet gav sig inte ut för att bygga ett dataträsk. De ville ha bättre svar. De ville att modellen skulle citera verkligt material. De ville att systemet skulle sluta låta som en konsult efter flygförsening nummer fyra. Så de samlade. Sedan samlade de mer. Sedan upptäckte de att samla inte är samma sak som att ha källor.
Ett system för källinsamling måste svara på tråkiga frågor innan det smarta arbetet börjar. Var kom detta ifrån? Var det tillåtet? När hämtades det? Vilken status returnerade begäran? Vad extraherades? Vad var innehållshashen? Vilken samlare, sökväg eller API producerade det? Kan vi återskapa insamlingspolicyn senare? Kan vi visa att privata nätverksintervall blockerades och att rate limits respekterades? Om dessa frågor saknas är källhögen bara en hög med förtroendeproblem.
Winnow finns för det mindre glamorösa, mer användbara lagret. Det är en Rust-plattform för datainsamling och ett CLI/bibliotek för sökning, skrapning, crawlning, API-insamling och strukturerad utdata. Implementeringen beskriver text-, JSON-, JSONL-, CSV- och HTML-utdata, robots-policy, rate limits per domän, SSRF-skydd och strukturerade insamlingsposter. Det är rätt sorts tråkighet. Crawlern är inte en hungrig mun. Det är ett kontrollerat intag.
Denna distinktion spelar roll eftersom AI-grounding bara är så bra som källvägen. En modell kan citera ett stycke och ändå vara operativt värdelös om ingen vet var stycket kom ifrån, om det var aktuellt, om det var tillåtet att använda, eller om en senare körning skulle hämta samma material. Grounding utan proveniens är bara ett snyggare rykte.
Insamling är en leveranskedja
Människor förstår leveranskedjor när lådor är inblandade. En leverantör skickar delar. Delarna har batchnummer. Det finns fakturor, leveransdatum, kvalitetskontroller, återkallelser, revisioner. Ingen seriös person säger att lagret är fullt, så vi är klara. När det gäller information blir team plötsligt mystiska. En mapp har filer. En datasjö har tabeller. En vektorbutik har bitar. På något sätt ska detta innebära sanning.
Det gör det inte. Källinsamling är också en leveranskedja. Råmaterialet är extern information. Den anländer genom vägar med olika tillförlitlighet, behörigheter, latens, format och felscenarier. Sökresultat är inte samma sak som API-poster. En crawlad sida är inte samma sak som en arkivögonblicksbild. En tabellexport är inte samma sak som ett renderat HTML-dokument. Att behandla allt detta som bara innehåll plattar bort just de fakta som gör innehållet användbart senare.
Winnows användbara hållning är att insamlingsmetadata följer med extraktet. Källans URL spelar roll. Tidsstämpeln spelar roll. Statusen spelar roll. Innehållshashen spelar roll. Samlarklassen spelar roll. Utdataformatet spelar roll. Posten är inte bara texten som kom ut. Det är kuvertet runt texten.
Det kuvertet är det som senare låter en granskare skilja källkvalitet från modellkvalitet. Om ett svar är fel för att modellen ignorerade bevis, är det ett slags fel. Om det är fel för att insamlingen hämtade inaktuella sidor, är det ett annat. Om det är fel för att en källa var blockerad men tyst hoppades över, är det ytterligare ett. Om det är fel för att crawler hämtade en inloggningssida och behandlade den som innehåll, grattis, du har uppfunnit ett mycket dyrt sätt att citera en cookie-banner.
Bra källinsamling gör inte allt efterföljande arbete enkelt. Den gör fel diagnostiserbara. Det är redan en stor förbättring. I produktion slår diagnostiserbart magiskt varje gång. Magiska demoer åldras som mjölk.
Den öppna webben är inte ditt lager
Mycket av skrapningskulturen beter sig fortfarande som om webben vore ett gratis lager med dålig belysning. Skicka förfrågningar, ta sidor, dumpa HTML, gå vidare. Den attityden var redan skör. För AI-system blir den vårdslös. Datan visas inte bara upp. Den kan indexeras, sammanfattas, citeras, användas för beslut eller matas in i arbetsflöden som överlever det ursprungliga insamlingstillfället.
Så insamling behöver bromsar. Robots-policy är inte en dekorativ textfil för artiga människor. Rate limits är inte valfria för att pipelinen har en deadline. Privata nätverksintervall är inte en spännande upptäcktsmöjlighet. SSRF-skydd är inte paranoia. Det är skillnaden mellan ett insamlingsverktyg och en säkerhetsincident med en maskot.
Winnows källanteckningar är i linje med dessa skyddsräcken: robots med deny-som-standard, rate limits per domän, SSRF-skydd, strukturerad utdata. Det är inte sidofunktioner. Det är produktens gräns. Ett verktyg som kan hämta från internet utan ett policylager är inte kraftfullt på ett användbart sätt. Det är en skuld med genomströmning.
Det är också här europeisk styrning blir mycket konkret. Inte i sloganmening. I faktisk operativ mening. Om en organisation vill ha evidensbaserad AI måste den veta hur bevis kom in i systemet. Var insamling tillåten? Behandlades källor olika beroende på klass? Hämtades poster från platser som organisationen har rätt att behandla? Var privata adresser blockerade? Kunde en operatör förklara policyn utan att utföra interpretativ dans framför upphandlingen?
Det finns en torr liten ironi här. De tråkiga crawlerinställningarna är ofta viktigare för förtroendet än modellarkitekturen. Det känns orättvist för människor som gillar arkitekturdiagram. Det är ändå sant. Om bevisen kommer in dåligt kan modellen bara bli en elegant förstärkare av ett dåligt inflöde.
Extraktion är inte kopiering
Ett annat vanligt misstag är att blanda ihop kopiering med extraktion. Att hämta HTML är inte samma sak som att extrahera användbart innehåll. En rå sida innehåller navigering, cookie-banners, reklam, relaterade länkar, sidfotssörja, skript, layoutfragment och ibland det du faktiskt kom för, gömt som om det vore skyldigt pengar.
Winnows utdata spelar roll eftersom olika nedströmsuppgifter behöver olika format. Text för läsning. JSON eller JSONL för strukturerade rader. CSV för tabellvänliga flöden. HTML när den ursprungliga strukturen är viktig. Poängen är inte att välja ett heligt format. Poängen är att göra utdata explicit och anpassad till uppgiften.
Detta blir kritiskt när källor matar sökning, hämtning eller kunskapsstyrning. En modell ska inte behöva avgöra om en sidfotslänk är bevis. Ett hämtningssystem ska inte indexera varje cookie-banner som om det vore ett policyuttalande. En datapipeline ska inte förvandla en sidlayout till en faktatabell genom optimism. Extraktion är där källan blir en artefakt som kan användas av andra system utan att bära med sig varje bit av webbskräp på vägen.
Men extraktion måste också vara ärlig. Rengöring är inte omskrivning. Normalisering är inte att hitta på. Att ta bort boilerplate är inte att ändra påståendet. Om extraktorn inte kan se skillnaden bör den behandlas med samma misstänksamhet som en säljare som använder ordet ansträngningslöst. Bra i små doser, farligt nära budget.
Varför detta hör hemma före hämtning
Hämtningssystem får skulden för många problem som började tidigare. Indexet returnerar dåliga kandidater, så teamet finjusterar rankningen. Citaten är svaga, så någon ändrar chunking. Modellen låter osäker, så någon lägger till en promptinstruktion med samma känslomässiga kraft som en kylskåpsmagnet. Ibland är hämtningslagret verkligen problemet. Ofta har insamlingslagret tyst förgiftat måltiden långt innan rankningen började.
Om källorna anländer utan kuvert kan hämtningen inte förklara dem senare. Om tidsstämplar saknas blir färskhet en gissning. Om statuskoder ignoreras ser misslyckande ut som frånvaro. Om innehållshashar saknas blir ändringsdetektering folklore. Om extraktionskvaliteten varierar kraftigt blir rankningen en tävling mellan signal och boilerplate.
Det är därför Winnow naturligt placerar sig före system som BitWeave, Spindle, Fabric eller någon annan källbaserad AI-produkt. Det är inte resonemangslagret. Det är inte kunskapsgrafen. Det är inte användargränssnittet. Det är intagsdisciplinen som avgör om de senare lagren får försvarbart material eller en hemsökt vind av webbfragment.
Denna ordning spelar roll. Samla först med policy. Slå in varje källa med kontext. Extrahera till explicita former. Indexera sedan, citera, analysera, certifiera eller sammanfatta. Om ordningen är omvänd hamnar teamet med att polera svar ovanpå okänd input. Så får dyr dynga ett snyggt gränssnitt.
Antalen är mindre viktiga än kontraktet
Winnow har en stor katalog av samlare, sökintegrationer, API-poster och platsspecifika extraktionsmöjligheter. De exakta antalen skiljer sig mellan källögonblicksbilder, vilket är normalt för en aktivt föränderlig samlingsyta och inte värt att förvandla till offentlig poesi. Den viktiga punkten är inte ett heroiskt nummer. Den viktiga punkten är kontraktet.
Kan verktyget samla från flera ruttklasser? Kan det mata ut strukturerade format? Kan det tillämpa säkerhetsgränser? Kan det bära källmetadata? Kan det användas som bibliotek eller CLI? Kan ett team inspektera hur en källa kom in i systemet? Det är de frågor som överlever en verklig driftsättning.
Numbers är lockande eftersom de ser konkreta ut. Men för insamlingsinfrastruktur kan fel siffra distrahera från den verkliga tryggheten. Tusen slarviga samlare är sämre än en mindre uppsättning med korrekt policy, kuvert och utdatakontrakt. Den mogna frågan är inte hur mycket du kan skrapa. Den mogna frågan är vad du kan försvara efter att du har skrapat det.
Läxan
Läxan från Winnow är att källinsamling inte är ett förspel till det riktiga AI-systemet. Det är en del av det riktiga AI-systemet. Svaret en användare ser beror på vad som kom in, hur det kom in, vad som extraherades, vilket sammanhang som överlevde och vilka osäkra vägar som blockerades. Det arbetet förtjänar ingenjörskonst, inte ett helgskript med ett heroiskt variabelnamn.
Winnow är användbart eftersom det behandlar insamling som kontrollerat intag: källvägar, policygrindar, säkerhetsgränser, strukturerade utdata och källkuvert. Det gör inte varje källa pålitlig. Det gör källans väg tillräckligt synlig för att resten av systemet ska kunna bete sig som en vuxen.
Det är den torra sanningen bakom det mesta grundade AI-arbetet. Innan modellen citerar en källa, innan hämtning rankar en kandidat, innan Spindle certifierar en atom, innan Fabric visar en sida bakom ett svar, måste någon samla in materialet utan att stöka till det. Inte glamoröst. Mycket nödvändigt. Lite som VVS, förutom att när det läcker kallar alla det AI-hallucination.
Så ja, samla in källor. Men blanda inte ihop en hög med en korpus, eller en crawler med styrning. Den användbara frågan är inte hur snabbt verktyget kan äta upp webben. Den användbara frågan är om organisationen fortfarande kan förklara vad den åt, varför det var tillåtet, vad som kom ut och om nästa system ska lita på det.