Behöver ert företag hjälp med att implementera AI? Kontakta oss och få prisoffert här →
AI Skolan
januari 22, 2026

Google Cloud Storage till Qdrant, redo för bildsök

Rickard Andersson Partner, Nodenordic.se

Ditt bildsökprojekt är inte ”svårt” i början. Sedan växer datasetet, filnamn glider isär, metadata blir inkonsekvent, och plötsligt bygger du om embeddings igen eftersom något inte stämde.

Marketing ops-team märker det när taggningen faller sönder. Produkt-team märker det när sökkvaliteten sjunker. Och byråfolk märker det när kundernas dataset fortsätter att förändras. Den här automatiseringen för Qdrant image upload gör en stökig bild-bucket till en sökbar, repeterbar pipeline.

Du får se hur arbetsflödet kontrollerar/skapar en Qdrant-collection, hämtar bilder från Google Cloud Storage, genererar embeddings i batchar och laddar upp allt med konsekventa payload-fält så att du faktiskt kan lita på resultaten.

Så fungerar automatiseringen

Här är hela arbetsflödet som du kommer att sätta upp:

n8n Workflow Template: Google Cloud Storage till Qdrant, redo för bildsök

Varför det här är viktigt: att göra bildsök ”redo” är oftast den svåra delen

Att ladda upp bilder till en vektordatabas låter enkelt tills du gör det mer än en gång. Ena veckan embed:ar du 5 000 bilder, nästa vecka uppdateras datasetet och nu vet du inte vilka objekt som redan finns, vilket metadataschema du använde sist eller varför halva frågorna känns ”off”. Den verkliga kostnaden är inte compute. Det är stopp-och-start-arbetet: formatera om fält, felsöka trasiga batchar och försöka sy ihop en pålitlig pipeline medan teamet väntar på att ”sök” ska bli användbart.

Friktionen byggs på. Och den dyker nästan alltid upp på samma ställen.

  • Du tvingas embed:a om dataset eftersom payload-fälten var inkonsekventa mellan uppladdningarna.
  • Batchjobb misslyckas utan tydlig signal, så du upptäcker saknade vektorer först när sökresultaten ser fel ut.
  • Manuell collection-setup upprepas för varje miljö, vilket gör att drift mellan dev/prod i praktiken är garanterad.
  • Filtrering och logik för ”exkludera de här klasserna” ligger i någons notebook, inte i pipelinen som teamet kan återanvända.

Det du bygger: en repeterbar Google Cloud Storage → Qdrant ingest-pipeline

Det här arbetsflödet tar ett bilddataset som ligger i Google Cloud Storage och laddar in det i Qdrant på ett sätt som är byggt för att hålla i verklig drift. Du startar det manuellt när du är redo att ingest:a (perfekt för backfills av dataset eller schemalagda körningar senare). Först sätter det dina centrala Qdrant-variabler och kontrollerar sedan om target-collection redan finns. Om den inte gör det skapar arbetsflödet den och lägger till ett payload-index så att Qdrant kan hantera senare filtreringsförfrågningar effektivt. Därefter hämtar det dina Cloud Storage-objekt, mappar varje objekt till konsekventa Qdrant-klara fält, filtrerar bort oönskade poster (i den här mallen: icke-tomat-relaterad logik för avvikelse-testning), batchar allt med UUID:er, genererar embeddings via ett multimodalt embeddings-API och laddar upp vektorerna plus metadata till Qdrant i batchar.

Körningen börjar med collection-hygien (verifiera, skapa vid behov). Sedan kommer dataset-import och rensning, så att bara de bilder du faktiskt vill ha embed:as. Till sist genereras embeddings och laddas upp i batchar, vilket håller processen stabil även när datasetet är stort.

Det du bygger

Förväntade resultat

Säg att du behöver ingest:a 5 000 bilder från Cloud Storage. Manuellt kan du lägga cirka 2 minuter per bild på nedladdning, embedding, payload-formatering och uppladdning, vilket kan bli långt över hundra timmar av hackigt stopp-och-start-arbete. Med det här arbetsflödet triggar du en körning, låter det batcha datasetet, generera embeddings och ladda upp till Qdrant medan du övervakar progress. Den ”hands-on”-tid som krävs sjunker ofta till under en timme eftersom du granskar i stället för att göra de repetitiva stegen.

Innan du börjar

  • n8n-instans (testa n8n Cloud gratis)
  • Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
  • Google Cloud Storage för att hosta objekten i ditt bilddataset.
  • Qdrant Cloud för att lagra vektorer och sökbar payload-metadata.
  • Voyage AI API-nyckel (hämta den i din Voyage AI-dashboard).

Svårighetsgrad: Medel. Du kopplar några konton och klistrar in API-nycklar samt rimlighetskontrollerar ett payload-schema.

Vill du att någon bygger detta åt dig? Prata med en automationsspecialist (gratis 15-minuters konsultation).

Steg för steg

En manuell körning startar allt. Du kör arbetsflödet när du är redo att ingest:a ett dataset eller uppdatera en befintlig collection. Det är perfekt för backfills, proof of concept eller kontrollerade produktionskörningar.

Qdrant förbereds först. Arbetsflödet laddar konfigurationsvariabler, kontrollerar om din Qdrant-collection finns och skapar den vid behov. Det sätter också upp ett payload-index, vilket gör senare filtrerade frågor mycket mer pålitliga.

Ditt dataset importeras och rensas. Bilder hämtas från Google Cloud Storage, fält mappas till en konsekvent struktur och sedan tar ett filter bort poster du inte vill ha med (mallen exkluderar tomat-relaterade objekt för test av avvikelsedetektering).

Embeddings och uppladdning sker i batchar. Objekt delas upp i batchar med UUID:er, formateras för embeddings-API:t, skickas för multimodal embedding-generering och laddas sedan upp till Qdrant via batch-requests så att du inte hamnar med partiella, inkonsekventa inserts.

Du kan enkelt justera filtreringsreglerna för att inkludera andra etiketter eller klasser utifrån dina behov. Se hela implementationsguiden nedan för alternativ för anpassning.

Steg-för-steg-guide för implementation

Steg 1: Konfigurera den manuella triggern

Detta workflow startar på begäran så att ni kan styra när dataset laddas upp till Qdrant.

  1. Lägg till och öppna Manual Launch Trigger.
  2. Lämna standardinställningarna för att köra workflowet manuellt under test och uppsättning.

Steg 2: Anslut Qdrant och lagringstjänster

Dessa noder skapar er Qdrant-collection och ansluter till Google Cloud Storage för att hitta bilder.

  1. Öppna Qdrant Config Vars och ställ in qdrantCloudURL till =https://[YOUR_ID].eu-central-1-0.aws.cloud.qdrant.io.
  2. Ställ in collectionName till =agricultural-crops.
  3. Ställ in VoyageEmbeddingsDim till 1024 och batchSize till 4.
  4. Öppna Verify Collection Presence och behåll URL:en som ={{ $json.qdrantCloudURL }}/collections/{{ $json.collectionName }}/exists.
  5. Inloggningsuppgifter krävs: Anslut era qdrantApi-credentials i Verify Collection Presence.
  6. Öppna Initialize Qdrant Collection och behåll Method som PUT med JSON body satt till ={{ { "vectors": { "voyage": { "size": $('Qdrant Config Vars').first().json.VoyageEmbeddingsDim, "distance": "Cosine" } } } }}.
  7. Inloggningsuppgifter krävs: Anslut era qdrantApi-credentials i Initialize Qdrant Collection.
  8. Öppna Create Crop Payload Index och behåll Method som PUT med JSON body ={ "field_name": "crop_name", "field_schema": "keyword" }.
  9. Inloggningsuppgifter krävs: Anslut era qdrantApi-credentials i Create Crop Payload Index.
  10. Öppna Retrieve Cloud Storage Objects och ställ in Bucket Name till n8n-qdrant-demo, Return All till true och Prefix till agricultural-crops.
  11. Inloggningsuppgifter krävs: Anslut era googleCloudStorageOAuth2Api-credentials i Retrieve Cloud Storage Objects.
Flödet kontrollerar om en Qdrant-collection finns och initierar den endast om Collection Presence Check evalueras till false.

Steg 3: Konfigurera mappning och filtreringslogik

Dessa noder formar cloud storage-objekt till Qdrant-klara poster och tar bort oönskade grödor.

  1. Öppna Map Qdrant Fields och ställ in publicLink till =https://storage.googleapis.com/{{ $json.bucket }}/{{ $json.selfLink.split('/').splice(-1) }}.
  2. Ställ in cropName till ={{ $json.id.split('/').slice(-3, -2)[0].toLowerCase()}} i Map Qdrant Fields.
  3. Öppna Exclude Tomato Records och behåll villkoret cropName notEquals tomato med ={{ $json.cropName }}.
⚠️ Vanlig fallgrop: Om era GCS-objektsökvägar inte matchar det förväntade formatet kan cropName tolkas fel och filtrera bort giltiga poster.

Steg 4: Sätt upp batchbearbetning och embeddings

Dessa noder batchar bilderna, lägger till UUID:er och förbereder payloads för embedding och uppladdning.

  1. Öppna Batch Splitter with UUIDs och behåll Python-koden som använder batch_size = int(_('Qdrant Config Vars').first()['json']['batchSize']) för att dela upp poster.
  2. Öppna Format API Batches och ställ in batchVoyage till ={{ $json.batch.map(item => ({ "content": ([{"type": "image_url", "image_url": item["publicLink"]}])}))}}.
  3. Ställ in batchPayloadQdrant till ={{ $json.batch.map(item => ({"crop_name":item["cropName"], "image_path":item["publicLink"]})) }}.
  4. Ställ in uuids till ={{ $json.uuids }}.

Steg 5: Konfigurera embedding och uppladdning till Qdrant

Generera image embeddings och ladda upp vektordatan till Qdrant.

  1. Öppna Generate Image Embeddings och ställ in URL till https://api.voyageai.com/v1/multimodalembeddings med Method POST.
  2. Behåll JSON body som ={{ { "inputs": $json.batchVoyage, "model": "voyage-multimodal-3", "input_type": "document" } }}.
  3. Inloggningsuppgifter krävs: Anslut era httpHeaderAuth-credentials i Generate Image Embeddings.
  4. Öppna Upload Batch to Qdrant och behåll Method PUT med JSON body ={{ { "batch": { "ids" : $('Format API Batches').item.json.uuids, "vectors": {"voyage": $json.data.map(item => item["embedding"]) }, "payloads": $('Format API Batches').item.json.batchPayloadQdrant } } }}.
  5. Inloggningsuppgifter krävs: Anslut era qdrantApi-credentials i Upload Batch to Qdrant.

Steg 6: Testa och aktivera ert workflow

Kör ett manuellt test för att verifiera att collections skapas, embeddings genereras och att points infogas i Qdrant.

  1. Klicka på Execute Workflow för att trigga Manual Launch Trigger.
  2. Bekräfta att Verify Collection Presence returnerar true eller att Initialize Qdrant Collection och Create Crop Payload Index körs utan fel.
  3. Kontrollera att Generate Image Embeddings har en giltig data-array och att Upload Batch to Qdrant ger ett lyckat svar.
  4. När allt är validerat, slå på workflowet till Active för användning i produktion.
🔒

Lås upp fullständig steg-för-steg-guide

Få den kompletta implementeringsguiden + nedladdningsbar mall

Tips för felsökning

  • Qdrant-inloggningsuppgifter kan löpa ut eller kräva specifika behörigheter. Om det strular, kontrollera först din Qdrant Cloud API-nyckel och cluster-URL i n8n:s credential-inställningar.
  • Om du använder batch-uppladdningar och extern embedding-generering varierar processtiderna. Minska batchstorleken (eller lägg in en kort väntan) om embeddings-requesten returnerar tomma svar och upload-noden faller.
  • Standardmappning för payload är sällan det du vill ha på sikt. Lås ett konsekvent metadataschema tidigt (datasetnamn, källsökväg, klassetikett, UUID), annars får du reindexera senare.

Snabba svar

Hur lång tid tar det att sätta upp den här automatiseringen för Qdrant image upload?

Cirka en timme om dina API-nycklar och din bucket är redo.

Krävs det kod för att få till den här bild-uppladdningen?

Nej. Du kopplar mest konton, klistrar in API-nycklar och justerar några mapping-fält.

Är n8n gratis att använda för det här arbetsflödet för Qdrant image upload?

Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volymer. Du behöver också räkna in användning av Voyage AI:s embeddings-API samt kostnader för lagring/throughput i Qdrant Cloud.

Var kan jag hosta n8n för att köra den här automatiseringen?

Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärt och hanterar n8n bra. Self-hosting ger obegränsade körningar men kräver grundläggande serverhantering.

Kan jag anpassa det här arbetsflödet för Qdrant image upload för andra use cases?

Ja, och det bör du. De flesta byter sökvägen till Google Cloud Storage-datasetet, ändrar filtret som exkluderar poster (steget ”Exclude Tomato Records”) och justerar mappingen i ”Map Qdrant Fields” så den matchar deras metadataschema. Om du vill byta embeddings-leverantör senare kan du ersätta HTTP-requesten ”Generate Image Embeddings” och behålla resten av batch- och uppladdningslogiken intakt.

Varför misslyckas min Qdrant-anslutning i det här arbetsflödet?

Oftast beror det på en ogiltig API-nyckel eller fel cluster-URL. Uppdatera Qdrant-credentials i n8n och kör sedan om enbart requesten ”Verify Collection Presence” för att bekräfta att den når collection-endpointen. Om det fungerar men uppladdningar misslyckas kan det vara problem med payload-schema (fel vektorstorlek för collectionen) eller problem med request-storlek från batchar som är för stora.

Vilka volymer kan det här arbetsflödet för Qdrant image upload hantera?

Mycket, så länge du batchar vettigt. På n8n Cloud Starter begränsas du av månadsvisa executions, medan self-hosting inte har något tak (det handlar främst om din server och API-gränser). I praktiken kör de flesta team detta i delar om några hundra bilder per batch och schemalägger flera körningar för väldigt stora dataset.

Är den här automatiseringen för Qdrant image upload bättre än att använda Zapier eller Make?

Ofta, ja, eftersom det här arbetsflödet behöver batchning, villkorligt skapande av collections och strukturerad payload-mappning, och det blir snabbt klumpigt (och dyrt) i enklare automationsverktyg. n8n gör det också enklare att hålla hela ingest-pipelinen på ett ställe i stället för att sprida den över flera ”zaps”. Å andra sidan kan Zapier eller Make fungera för små uppladdningar eller enkla notiser. Den här pipelinen ligger närmare data engineering än ”koppla app A till app B”. Om du är osäker, prata med en automationsspecialist så pekar vi dig mot det enklaste alternativet som inte kommer att skapa problem senare.

När det här väl är på plats slutar ingest av dataset att vara en hjälteinsats. Du laddar in bilder, embeddings förblir konsekventa och Qdrant-sök beter sig som du förväntade dig från början.

Kontakta oss

Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.

×

Använd mall

Få direkt tillgång till denna n8n-arbetsflödes JSON-fil

Launch login modal Launch register modal