Dina compliancegranskningar ser förmodligen ut så här: någon laddar upp en PDF, någon annan letar igenom den med Ctrl+F, och sedan skriver en tredje person om samma anteckningar till en ”rapport” som ingen riktigt litar på.
Det är här Qdrant compliance checks snabbt ger effekt. Complianceansvariga känner av revisionspressen, men det drabbar även driftansvariga och konsulter på byrå som gör granskningar av kunddokumentation. Målet är enkelt: ta fram ett revisionsredo resultat med stödjande källhänvisningar, utan att lägga en halv dag på att jaga bevis.
Det här arbetsflödet gör om ett uppladdat dokument plus en inskickad policy/rutin till en strukturerad compliancerapport, och loggar sedan resultaten till Google Sheets så att du får en felfri spårbarhet. Du får se vad som automatiseras, vad du får tillbaka och vad du behöver hålla koll på.
Så fungerar automationen
Hela n8n-flödet, från trigger till slutlig output:
n8n Workflow Template: Qdrant + Google Sheets: regelefterlevnad med bevis
flowchart LR
subgraph sg0["AI Compliance Valida Flow"]
direction LR
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/webhook.dark.svg' width='40' height='40' /></div><br/>Procedure Submission"]
n9["<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/>Format Procedure Payload"]
n10@{ icon: "mdi:robot", form: "rounded", label: "AI Compliance Validator", pos: "b", h: 48 }
n11@{ icon: "mdi:brain", form: "rounded", label: "Language Model (AI Agent)", pos: "b", h: 48 }
n12@{ icon: "mdi:cube-outline", form: "rounded", label: "Retrieve Relevant Document C..", pos: "b", h: 48 }
n13@{ icon: "mdi:vector-polygon", form: "rounded", label: "Generate Query Embeddings", pos: "b", h: 48 }
n14@{ icon: "mdi:brain", form: "rounded", label: "Language Model (Structured O..", pos: "b", h: 48 }
n15@{ icon: "mdi:robot", form: "rounded", label: "Parse AI Response", pos: "b", h: 48 }
n16["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Return Compliance Report"]
n15 -.-> n10
n1 --> n9
n10 --> n16
n9 --> n10
n13 -.-> n12
n11 -.-> n10
n12 -.-> n10
n14 -.-> n15
end
subgraph sg1["Delete Old Document Flow"]
direction LR
n0["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Audit Document Upload"]
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/httprequest.dark.svg' width='40' height='40' /></div><br/>Fetch Document (Microsoft Gr.."]
n3@{ icon: "mdi:robot", form: "rounded", label: "Delete Old Document Vectors", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Extract PDF Text", pos: "b", h: 48 }
n5@{ icon: "mdi:vector-polygon", form: "rounded", label: "Generate Document Embeddings", pos: "b", h: 48 }
n6@{ icon: "mdi:cube-outline", form: "rounded", label: "Insert Vectors into Qdrant", pos: "b", h: 48 }
n7@{ icon: "mdi:robot", form: "rounded", label: "Load Document Metadata", pos: "b", h: 48 }
n8@{ icon: "mdi:robot", form: "rounded", label: "Split Text into Chunks", pos: "b", h: 48 }
n4 --> n6
n0 --> n2
n7 -.-> n6
n8 -.-> n7
n3 --> n4
n5 -.-> n6
n2 --> n3
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 n10,n15,n3,n7,n8 ai
class n11,n14 aiModel
class n12,n6 ai
class n13,n5 ai
class n1,n16,n0,n2 api
class n9 code
classDef customIcon fill:none,stroke:none
class n1,n9,n16,n0,n2 customIcon
Problemet: compliancekontroller utan bevis håller inte
Manuell compliancevalidering är långsam på ett förrädiskt sätt. Det handlar inte bara om att ”läsa en PDF”. Det handlar om att ladda ner filen, reda ut vilken version som är den riktiga, leta efter policyspråk som kan vara omformulerat, och sedan försöka styrka din bedömning med ett citat som har sidnummer. Gör du det över leverantörsdokumentation, interna SOP:er, HR-policyer, säkerhetsfrågeformulär eller regler för finansiell arkivering får du samma utfall: timmar lagda på att ta fram en rapport som ändå leder till följdfrågor eftersom underlaget är tunt.
Friktionen växer. Så fort någon frågar ”Var kommer det där ifrån?” är du tillbaka i dokumentet igen.
- Granskare slösar cirka 2 timmar per dokument på att hitta samma passager igen för källhänvisningar och skärmbilder.
- Bedömningar blir subjektiva när du inte kan peka på exakt text som stödjer ”uppfyller” eller ”uppfyller inte”.
- Revisionsspår brister när resultaten ligger i någons inkorg i stället för i en konsekvent logg.
- Policyuppdateringar skapar omarbete eftersom ingen vill göra om hela analysen från grunden.
Lösningen: Qdrant + AI-baserade compliancegranskningar, loggade till Sheets
Det här arbetsflödet delar upp compliancevalidering i två tydliga indata: först laddar du upp dokumentet (PDF, DOCX och liknande), sedan skickar du in rutin-/policytexten som dokumentet måste uppfylla. När dokumentet kommer in extraherar n8n texten, delar upp den i läsbara segment och lagrar vektorinbäddningar i Qdrant så att systemet senare kan hämta tillbaka mest relevant bevisning. När rutinen/policyn skickas in frågar AI-agenten Qdrant efter relaterade textpassager, jämför vad dokumentet faktiskt säger mot policykraven och returnerar en strukturerad rapport. Outputen innehåller en compliancesammanfattning, en sammanfattning av avvikelser, källhänvisningar hämtade från källtexten (med sidreferenser när de finns), samt ett konfidensvärde 0–100 baserat på bevisens kvalitet.
Flödet startar med två webhooks: en för dokumentuppladdning och en för rutininlämning som refererar till dokumentets ID. I mitten hanterar Qdrant ”hitta bevisen” medan AI-agenten hanterar ”avgör och förklara”. Till sist är resultaten redo att loggas i Google Sheets för ett revisionsredo spår som du kan sortera, dela och filtrera.
Det du får: automation kontra resultat
| Det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här ser det ut
Säg att du granskar 10 dokument i veckan mot interna rutiner. Manuellt kan en noggrann granskare lägga cirka 2 timmar per dokument på läsning, sökning och att bygga källhänvisningar, alltså ungefär 20 timmar per vecka. Med det här flödet laddar du upp PDF:en (en minut eller två), klistrar in rutinen och en kort beskrivning (ytterligare några minuter) och väntar sedan på bearbetning och AI-granskningen (ofta runt 10 minuter). Du gör fortfarande en snabb rimlighetskontroll, men du får tillbaka cirka 15 timmar de flesta veckor, plus starkare underlag för varje påstående.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Qdrant för vektorlagring och hämtning.
- Google Sheets för att logga resultat för revisioner.
- OpenAI API-nyckel (valfritt) (hämta den i OpenAI API-dashboarden) om du använder OpenAI för inbäddningar eller chatt.
Kunskapsnivå: Medel. Du kopplar in autentiseringar, mappar några fält och testar de två webhook-anropen med exempeldata.
Vill du inte sätta upp detta själv? Prata med en automationsexpert (gratis konsultation i 15 minuter).
Så fungerar det
Dokumentuppladdning triggar indexering. En webhook tar emot filuppladdningen, hämtar dokumentinnehållet (inklusive från ansluten lagring som Microsoft Graph i det här flödet) och förbereder det för sökning.
Text extraheras och förbereds för bevisning. n8n extraherar PDF-text, delar upp den i segment och skapar inbäddningar så att varje del blir sökbar på innebörd, inte bara nyckelord.
Qdrant blir ”bevisarkivet”. Flödet lagrar vektorerna i Qdrant och kan även rensa äldre vektorer först för att undvika att blanda versioner. Det håller dina källhänvisningar kopplade till rätt dokument.
Rutininlämningen triggar granskningen. En andra webhook tar emot policy-/rutintexten, en kort beskrivning för kontext och dokument-ID:t. AI-agenten hämtar de mest relevanta segmenten från Qdrant, utvärderar överensstämmelse och formaterar resultatet till en strukturerad compliancerapport med källhänvisningar och konfidensvärde.
Du kan enkelt justera formatet för rutinindata för att stödja checklistor eller kontroll-ID:n utifrån dina behov. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera webhook-triggern
Konfigurera de två webhook-inträdespunkterna som startar flödena för audit-inläsning och procedurvalidering.
- Lägg till webhooken Incoming Audit Upload och ställ in HTTP Method på
POST. - Ställ in Path till
creatorhub/audit-document-uploadoch Response Mode tilllastNode. - Lägg till webhooken Procedure Intake Hook med HTTP Method inställd på
POST. - Ställ in Path till
creatorhub/procedure-validateoch Response Mode tillresponseNode.
Tips: Använd test-URL:en för Incoming Audit Upload och Procedure Intake Hook när ni validerar payload-format under konfigureringen.
Steg 2: anslut filhämtning via Microsoft Graph
Konfigurera dokumenthämtningen som används för att hämta audit-filen från Microsoft Graph och förbereda den för bearbetning.
- I Retrieve Graph File ställer ni in URL till
={{$env.GRAPH_BASE_URL || "https://graph.microsoft.com"}}/v1.0/drives/{{$json.body.spDriveId}}/items/{{$json.body.spDocumentId}}/content. - Koppla Incoming Audit Upload → Retrieve Graph File → Purge Previous Vectors så att det linjerar med exekveringsflödet.
- I Purge Previous Vectors behåller ni koden som den är för att ta bort befintliga vektorer för samma
spDocumentIdinnan ni indexerar om.
⚠️ Vanlig fallgrop: Om er Graph-endpoint kräver autentisering, lägg till den i Retrieve Graph File via request headers eller en pre-request credential—det här workflowet inkluderar inte credentials på den noden som standard.
Steg 3: konfigurera dokumentbearbetning och vektorlagring
Extrahera PDF-innehåll, dela upp det i segment och lagra embeddings i Qdrant för hämtning under audit-analysen.
- I Extract PDF Content ställer ni in Operation till
pdfoch Binary Property Name till=data. - Konfigurera Chunk Text Segments med Chunk Overlap inställt på
10. - I Assemble Document Metadata ställer ni in Text Splitting Mode till
customoch mappar metadatavärden: documentId till={{ $('Purge Previous Vectors').item.json.body.spDocumentId }}och documentName till={{ $('Purge Previous Vectors').item.json.body.fileName }}. - I Create Document Embeddings ställer ni in Model till
={{ $env.OLLAMA_EMBED_MODEL || "nomic-embed-text:latest" }}. Credential Required: Anslut era ollamaApi-credentials. - I Store Vectors in Qdrant ställer ni in Mode till
insertoch Qdrant Collection till={{ $env.QDRANT_COLLECTION || "audit-docs" }}. Credential Required: Anslut era qdrantApi-credentials.
Tips: Säkerställ att Extract PDF Content output:ar den binära egenskapen med namnet data; annars kommer embeddings att fallera längre ned i flödet.
Steg 4: konfigurera procedurintag och datastrukturering
Normalisera inkommande procedurer så att var och en utvärderas separat av AI-auditagenten.
- Koppla Procedure Intake Hook → Structure Procedure Data så att det matchar exekveringsflödet.
- I Structure Procedure Data ställer ni in JS Code till
const {procedures, spDocumentId, description} = $input.first().json.body; const result = procedures.map(procedure => ({ json: { spDocumentId, procedure, description } })); return result;.
Steg 5: sätt upp pipelinen för AI-granskning av regelefterlevnad
Konfigurera AI-agenten, dess verktyg och parsing av strukturerad output för att generera regelefterlevnadsfynd.
- I AI Compliance Review behåller ni Prompt Type som
defineoch säkerställer att Has Output Parser är aktiverat för strukturerade svar. - Sätt upp LLM Audit Agent som språkmodell med Model inställt på
={{ $env.OLLAMA_CHAT_MODEL || "qwen2.5:7b" }}. Credential Required: Anslut era ollamaApi-credentials. - Konfigurera Build Query Embeddings med Model inställt på
={{ $env.OLLAMA_EMBED_MODEL || "nomic-embed-text:latest" }}. Credential Required: Anslut era ollamaApi-credentials. - I Fetch Related Text Chunks ställer ni in Mode till
retrieve-as-tool, Top K till8och Tool Description tillQuery document text from uploaded documents.. Ställ även in Search Filter JSON till={ "should": [ { "key": "metadata.documentId", "match": { "value": "{{ $('Structure Procedure Data').first().json.spDocumentId }}" } } ] }. Credential Required: Anslut era qdrantApi-credentials. - Konfigurera LLM Structured Output med Model inställt på
={{ $env.OLLAMA_CHAT_MODEL || "qwen2.5:7b" }}. Credential Required: Anslut era ollamaApi-credentials. - I Parse AI Findings behåller ni Auto Fix aktiverat och ställer in Input Schema till det tillhandahållna JSON-schemat för
confidenceLevel,summaryOfCompliance,summaryOfNonComplianceochsupportingTextCitations. Den här output-parsern är kopplad till AI Compliance Review—credentials ska läggas till i den överordnade språkmodellnoden (LLM Structured Output), inte i den här parsern.
⚠️ Vanlig fallgrop: Om Fetch Related Text Chunks inte kan hämta träffar, bekräfta att Store Vectors in Qdrant skriver metadata med documentId från Assemble Document Metadata.
Steg 6: konfigurera leverans av output
Returnera den strukturerade regelefterlevnadsrapporten till anroparen när analysen är klar.
- Koppla AI Compliance Review → Respond Compliance Report för att slutföra request-livscykeln.
- I Respond Compliance Report ställer ni in Respond With till
allIncomingItemsför att returnera den strukturerade JSON-outputen.
Steg 7: testa och aktivera ert workflow
Validera båda inträdespunkterna och bekräfta lyckad indexering och AI-analys innan ni går live.
- Kör Incoming Audit Upload manuellt med en test-payload med
spDriveId,spDocumentIdoch en giltig filreferens för att bekräfta att Store Vectors in Qdrant tar emot embeddings. - Trigga Procedure Intake Hook med exempel på
procedures,spDocumentIdochdescriptionför att verifiera att AI Compliance Review returnerar strukturerad JSON. - Bekräfta en lyckad körning genom att kontrollera att Respond Compliance Report returnerar
summaryOfCompliance,summaryOfNonComplianceochsupportingTextCitations. - När allt är validerat byter ni båda webhooks till produktions-URL:er och aktiverar workflowet.
Vanliga fallgropar
- Autentiseringar för Google Drive eller Google Sheets kan löpa ut eller kräva specifika behörigheter. Om något slutar fungera, kontrollera först det anslutna Google-kontot och status för n8n-credentials.
- Om du använder Wait-noder eller extern rendering varierar bearbetningstiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Qdrant-collections kan bli röriga om du inte isolerar per dokument-ID. Om källhänvisningar ser ”fel” ut, verifiera att du rensar tidigare vektorer eller skriver till en per-dokument-namespace innan du laddar upp igen.
Vanliga frågor
Cirka en timme om dina Qdrant- och Google-credentials är klara.
Nej. Du kopplar främst ihop konton och klistrar in ett par request-exempel för att testa de två webhookarna.
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 API-kostnader för din modellleverantör (för OpenAI ser många team ören per granskning för grundläggande kontroller).
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 obegränsat antal körningar men kräver grundläggande serverhantering.
Ja, och det är en av de bästa uppgraderingarna. Du kan justera rutin-payloaden så att den skickar en array av kontroller i stället för ett textblock, och sedan uppdatera kodnoden ”Structure Procedure Data” så att den loopar igenom varje kontroll och skickar in den till AI Compliance Review. Många team lägger också till kolumner i Google Sheets för kontroll-ID, allvarlighetsgrad, ägare och förfallodatum så att outputen blir en åtgärdstracker, inte bara en rapport.
Oftast är det en URL- eller API-nyckelfråga, eller att namnet på Qdrant-collection inte matchar vad flödet förväntar sig. Kontrollera din Qdrant-endpoint, bekräfta att API-nyckeln har åtkomst och säkerställ att ditt nätverk tillåter att n8n når Qdrant. Om det bara fallerar på större filer kan det också vara timeouts under inbäddning eller hämtning, så att minska chunk-storlek eller öka timeouts löser det ofta.
Väldigt många, så länge din server och modellleverantör hänger med. På n8n Cloud Starter begränsas du av månatliga körningar; self-hosting har ingen körningsgräns, men stora PDF:er kostar mer i inbäddning och tar längre tid att processa. I praktiken kör de flesta små team utan problem dussintals dokument per vecka när chunking och timeouts är intrimmade.
Ofta, ja. Det här flödet behöver dokumentsegmentering, vektorsökning, strukturerade outputs och grenlogik, och n8n klarar det utan att varje ”extra steg” blir ett prissättningsproblem. Zapier eller Make kan fungera för lättviktig routing, men RAG-liknande bevisinhämtning blir snabbt klumpig där. Dessutom spelar self-hosting roll för complianceteam som inte kan skicka dokument via för många tredjeparter. Prata med en automationsexpert om du vill ha en snabb rekommendation baserad på din volym och datakänslighet.
När det här väl rullar slutar compliancegranskningar att vara en skattjakt. Du får beslut, källhänvisningar och en kalkylarklogg som du kan ge till en revisor utan att oroa dig för följdfrågorna.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.