Du bygger en ”hjälpsam” receptbot, och ändå rekommenderar den det enda användaren inte tål. Sedan kommer korrigeringen, ursäkten, fram och tillbaka. Ärligt talat är det inte chatbotten som ser dålig ut. Det är ditt varumärke.
Det här problemet med en Qdrant-receptbot drabbar produktmarknadsförare som försöker minska churn. Supportansvariga ser det i ärenden. Och småföretagare som driver en matcommunity märker det när folk tyst slutar använda funktionen.
Det här arbetsflödet visar hur du rekommenderar bättre val med Qdrants Recommendation API (med ”undvik”-indata) och hur Gmail-varningar kan hålla både systemet och teamet uppdaterade.
Så fungerar den här automatiseringen
Hela n8n-arbetsflödet, från trigger till slutresultat:
n8n Workflow Template: Qdrant + Gmail: receptbot som följer undviklistor
flowchart LR
subgraph sg0["When clicking "Test workflow" Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking 'Test workflow'", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get This Week's Menu"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Extract Available Courses"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/html.dark.svg' width='40' height='40' /></div><br/>Extract Server Data"]
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get Course Metadata", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Recipe"]
n6@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings Mistral Cloud", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Default Data Loader", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge Course & Recipe"]
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Documents", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Recursive Character Text Spl..", pos: "b", h: 48 }
n12["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/html.dark.svg' width='40' height='40' /></div><br/>Extract Recipe Details"]
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Save Recipes to DB"]
n23@{ icon: "mdi:cube-outline", form: "rounded", label: "Qdrant Vector Store", pos: "b", h: 48 }
n5 --> n12
n9 --> n23
n9 --> n21
n7 -.-> n23
n3 --> n2
n4 --> n8
n1 --> n3
n8 --> n9
n12 --> n8
n6 -.-> n23
n2 --> n4
n2 --> n5
n0 --> n1
n10 -.-> n7
end
subgraph sg1["Execute Workflow Flow"]
direction LR
n14@{ icon: "mdi:play-circle", form: "rounded", label: "Execute Workflow Trigger", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Get Tool Response", pos: "b", h: 48 }
n17@{ icon: "mdi:cog", form: "rounded", label: "Wait for Rate Limits", pos: "b", h: 48 }
n18["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Mistral Embeddings"]
n19["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Use Qdrant Recommend API"]
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Get Recipes From DB"]
n20 --> n16
n17 --> n18
n18 --> n19
n14 --> n17
n19 --> n20
end
subgraph sg2["Chat Flow"]
direction LR
n11@{ icon: "mdi:play-circle", form: "rounded", label: "Chat Trigger", pos: "b", h: 48 }
n13@{ icon: "mdi:wrench", form: "rounded", label: "Qdrant Recommend API", pos: "b", h: 48 }
n15@{ icon: "mdi:brain", form: "rounded", label: "Mistral Cloud Chat Model", pos: "b", h: 48 }
n22@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n11 --> n22
n13 -.-> n22
n15 -.-> n22
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0,n14,n11 trigger
class n7,n10,n22 ai
class n15 aiModel
class n13 ai
class n23 ai
class n6 ai
class n1,n5,n18,n19 api
class n2,n21,n20 code
classDef customIcon fill:none,stroke:none
class n1,n2,n3,n5,n8,n12,n21,n18,n19,n20 customIcon
Problemet: receptrekommendationer ignorerar ”undvik”-listor
Likhetssökning är bra tills den inte är det. Om användaren säger ”inga svampar” och botten svarar med ”krämig svamppasta” har du i praktiken lärt dem att inte lita på funktionen. Det blir värre när undvik-listan är personlig (allergier, religiösa begränsningar, hälsomål). Teamet lappar då upp upplevelsen med manuella regler, enstaka undantag och ursäktande support-svar. Samtidigt ligger grundproblemet kvar: systemet saknar ett tillförlitligt sätt att behandla ”undvik” som en förstklassig indata vid rekommendationer.
Friktionen byggs på.
- Användare upprepar preferenser i varje session, så samtalet känns dumt och tröttande.
- Supporten dras in i trådar av typen ”er bot föreslog X igen” som aldrig borde finnas.
- Team försöker med hårdkodade filter, men de skapar fel så fort receptinnehållet ändras.
- En enda dålig rekommendation kan förstöra en vecka av annars bra engagemang.
Lösningen: Qdrant-rekommendationer med negativa promptar + Gmail-varningar
Det här n8n-arbetsflödet bygger en chatbot för receptrekommendationer ovanpå Qdrants vektorlagring och dess Recommendation API, som stödjer indata i stil med ”negativ prompt”. Ditt receptinnehåll samlas in (exemplet använder HelloFresh-recept), delas upp i chunkar, omvandlas till embeddings (arbetsflödet använder Mistral-embeddings) och lagras i en Qdrant-kollektion för semantisk hämtning. Hela receptet lagras också för senare uppslag (arbetsflödet nämner SQLite för den delen), så att du kan visa fullständiga instruktioner och ingredienser efter att botten valt en träff. När en användare ber om en rekommendation och anger vad de vill undvika använder AI-agenten Qdrant-rekommendationer i stället för ren likhetssökning, så att ”undvik” på riktigt styr resultaten bort från oönskade ingredienser eller recept.
Arbetsflödet startar med en webhook-förfrågan (eller en ansluten trigger), förbereder sedan användarens prompt plus indata från undvik-listan och skickar det genom en AI-agent som stöds av en OpenAI Chat Model. Qdrant returnerar kandidater som matchar det användaren vill ha, samtidigt som det som de inte vill ha trycks bort. Till sist svarar arbetsflödet via webhook och kan skicka Gmail-varningar för övervakning, feedbackloopar eller undantagshantering.
Det du får: automatisering kontra resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att ditt team publicerar 40 nya recept varje vecka och du vill att en chatbot ska rekommendera 10 ”bästa träffar” per dag. Manuell kontroll med bara 5 minuter per rekommendation blir ungefär 50 minuter per dag, plus allt omarbete när någon flaggar ett problem med en undvik-lista. Med det här arbetsflödet skickar användaren in sin förfrågan en gång (cirka en minut), agenten frågar Qdrant och returnerar val på under en minut, och Gmail kan pinga dig bara när det finns ett undantag. Det är nära en timme tillbaka de flesta dagar, utan att tumma på kvaliteten.
Det här behöver du
- n8n-instans (prova n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Qdrant för att lagra vektorer och köra rekommendationer
- Gmail för att skicka varningar och notiser
- Mistral API-nyckel (hämta den i din Mistral-kontodashboard)
Kunskapsnivå: Medel. Du kopplar tjänster, klistrar in API-nycklar och gör mindre justeringar i promptar och fält.
Vill du inte sätta upp det här själv? Prata med en automationsspecialist (gratis 15-minuters konsultation).
Så fungerar det
En förfrågan träffar din webhook. Arbetsflödet kan triggas av en webhook (för chatt), och det kan också lyssna på innehållsändringar via en Google Drive-trigger när du uppdaterar dina källfiler för recept.
Receptdata förbereds för hämtning. Recept samlas in via HTTP-förfrågningar (demon använder HelloFresh) och delas sedan upp i mindre chunkar så att embeddings förblir meningsfulla. Dessa vektorer läggs in i Qdrant, medan hela receptinnehållet sparas för senare visning.
AI-agenten ber Qdrant om ”bra matchningar” och ”saker att undvika”. I stället för att använda en vanlig likhetsuppslagning anropar agenten Qdrants Recommendation API och inkluderar negativa signaler baserat på användarens undvik-lista (ingredienser, kök, specifika recept).
Resultat returneras och övervakas. n8n svarar tillbaka till den som frågar via ”Respond to Webhook”, och Gmail kan varna dig när en körning misslyckas, när inga bra kandidater hittas eller när du vill ha en granskning med människa i loopen.
Du kan enkelt ändra receptkällan för att använda din egen databas eller CMS utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Vanliga fallgropar
- Gmail-inloggningar kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först sidan Credentials i n8n och säkerhetsvarningar i ditt Google-konto.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om noder längre nedströms misslyckas på tomma svar.
- Standardpromptar i AI-noder är generiska. Lägg in er tonalitet tidigt, annars kommer du att redigera utdata för alltid.
Vanliga frågor
Cirka en timme om dina Qdrant- och Gmail-konton är redo.
Nej. Du kopplar mest konton och finjusterar promptar och fält.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis testperiod på n8n Cloud. Cloud-planer börjar på 20 USD/månad för högre volym. Du behöver också räkna in Mistral-användning för embeddings och eventuella LLM-anrop du gör.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller self-hosting på en VPS. För self-hosting är Hostinger VPS prisvärd och hanterar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det är en av de bästa delarna. Byt ut delen för skrapning/data-inläsning (HTTP Request och parsing-/koddelarna) mot din egen katalogkälla och behåll sedan samma mönster: chunkning, embeddings, lagring i Qdrant och användning av Recommendation API med negativa indata. Vanliga byten är ”recept → produkter”, ”ingredienser → exkluderade varumärken/material” och ”kostrestriktioner → efterlevnadsregler”. Om du redan har data i Google Drive kan du också styra inläsning från en mapp-trigger i stället för att skrapa.
Oftast beror det på att endpoint eller API-nyckel inte stämmer. Bekräfta din Qdrant-URL (cloud vs lokal), generera sedan en ny nyckel och uppdatera den i HTTP Request-noden eller den Qdrant-inloggning du använder. Kontrollera också att kollektionsnamnet finns och matchar exakt, eftersom ett litet skrivfel kan se ut som ”inga resultat” i stället för ett tydligt fel.
Den skalar bekvämt till tusentals recept, och mer om din Qdrant-instans är rätt dimensionerad. I n8n Cloud beror dina månatliga körningar på din plan, så hög chattvolym kan göra att du behöver en större plan. Om du self-hostar finns ingen körningsgräns, men då blir serverresurserna begränsningen. I praktiken är den tyngre kostnaden embeddings och LLM-anrop, inte att lagra vektorer.
För rekommendationslogik med förgreningar, dataformatering och AI-steg är n8n oftast bättre. Du kan köra komplexa flöden utan att varje villkor blir ett separat betalt steg, och self-hosting gör skalning mer förutsägbar. Zapier och Make kan fortfarande fungera om du bara behöver en enkel ”formulär in → svar ut”-väg, men du kommer att känna av begränsningarna när du lägger till undvik-listor, retries och övervakning. Om ditt use case berör användarförtroende eller allergier vill du ha den extra kontrollen. Prata med en automationsspecialist om du vill ha en snabb rimlighetskontroll innan du bygger.
När undvik-listor tas på allvar slutar rekommendationer att kännas slumpmässiga. Sätt upp det, låt arbetsflödet hantera upprepningen och håll användarna trygga med varje förslag.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.