Din RAG-app ”känns” bra tills en kund ställer en lite udda fråga och svaret självsäkert citerar fel chunk. Då är du tillbaka i gissningsläge: stickprov i loggar, diskussioner om edge cases och hoppas att inget har försämrats efter senaste prompt- eller embedding-justeringen.
Relevanspoäng för RAG träffar produktorienterade ingenjörer först. Men marketing ops som kör AI-assisterat innehåll, och byråledare som levererar kundchatbotar dras in i samma QA-träsk. Du behöver ett score du kan följa upp, inte en magkänsla.
Det här arbetsflödet använder Google Sheets som testuppsättning, kör frågor genom en agent och låter OpenAI bedöma om de hämtade dokumenten faktiskt var relevanta. Du får se hur det fungerar, vad du behöver och vad du ska se upp med.
Så fungerar automatiseringen
Hela n8n-flödet, från trigger till slutligt resultat:
n8n Workflow Template: Google Sheets + OpenAI: RAG-relevans poängsatt snabbt
flowchart LR
subgraph sg0["When fetching a dataset row Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When fetching a dataset row", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "Evaluating?", pos: "b", h: 48 }
n2@{ icon: "mdi:play-circle", form: "rounded", label: "When chat message received", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Match chat format", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Return chat response", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Set metrics", pos: "b", h: 48 }
n13@{ icon: "mdi:robot", form: "rounded", label: "Calculate doc relevance metric", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n15@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Extract documents", pos: "b", h: 48 }
n17@{ icon: "mdi:memory", form: "rounded", label: "Simple Vector Store1", pos: "b", h: 48 }
n18@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings OpenAI1", pos: "b", h: 48 }
n14 --> n1
n1 --> n16
n1 --> n4
n16 --> n13
n3 --> n14
n15 -.-> n14
n18 -.-> n17
n17 -.-> n14
n2 --> n14
n0 --> n3
n13 --> n5
end
subgraph sg1["When clicking ‘Execute workflow’ Flow"]
direction LR
n6@{ icon: "mdi:database", form: "rounded", label: "Get dataset", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Remove Duplicates", pos: "b", h: 48 }
n8@{ icon: "mdi:memory", form: "rounded", label: "Simple Vector Store", pos: "b", h: 48 }
n9@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings OpenAI", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Default Data Loader", pos: "b", h: 48 }
n11@{ icon: "mdi:robot", form: "rounded", label: "Recursive Character Text Spl..", pos: "b", h: 48 }
n12@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n6 --> n7
n9 -.-> n8
n7 --> n8
n10 -.-> n8
n11 -.-> n10
n12 --> n6
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,n2,n12 trigger
class n13,n14,n10,n11 ai
class n15 aiModel
class n17,n8 ai
class n18,n9 ai
class n6 database
Problemet: RAG-QA är för lätt att ”få att se bra ut”
När du ändrar något i en retrieval-pipeline kan kvaliteten skifta utan att ge ett tydligt fel. Byt embedding-inställningar. Lägg till några dokument. Justera chunkning. Agenten svarar fortfarande, så det ser ut att ”fungera”, men den hämtade kontexten blir i tysthet sämre. Det smärtsamma är verifieringsloopen: någon måste plocka ut ett urval av frågor, återskapa resultat, läsa de hämtade dokumenten och sedan avgöra om de var relevanta. Det är långsamt, inkonsekvent och ärligt talat svårt att göra på exakt samma sätt två gånger.
Friktionen byggs på. Här är var det fallerar i verkliga team.
- Manuella stickprov tar ett par timmar per release, och du missar ändå edge cases.
- Olika granskare bedömer ”relevans” olika, så du kan inte avgöra om kvaliteten verkligen har ändrats.
- När något försämras får du oftast veta det via användarfeedback, inte via dina egna tester.
- Utan ett repeterbart mått är det svårt att motivera förbättringar eller prioritera åtgärder.
Lösningen: poängsätt relevans i retrieval från en Sheets-testuppsättning
Det här n8n-arbetsflödet gör din ”ser det okej ut?”-testning för RAG till en repeterbar utvärderingskörning. Du behåller en enkel dataset i Google Sheets (frågor, förväntade kontextledtrådar eller vilka anteckningar du nu använder för QA). Flödet kan starta på två sätt: som en utvärderingskörning som läser rader från datasetet, eller som en vanlig chatt-trigger när du bara vill testa interaktivt. I båda fallen svarar en AI-agent på frågan med ett vektorbutiksverktyg, och den skriver också ut vilka dokument den hämtade så att du kan granska vad den lutade sig mot. När flödet körs i utvärderingsläge jämför OpenAI de hämtade dokumenten med frågan och tar fram en relevanspoäng. Poängen skickas tillbaka som ett mätvärde så att du kan följa den körning för körning.
Det börjar med att Google Sheets matar in frågor till n8n:s utvärderingstrigger. Agenten hämtar kontext via en in-memory vektorstore, sedan betygsätter steget ”Compute Relevance Score” retrievaln och ”Apply Metrics” rapporterar resultaten. Utanför utvärderingsläget hoppar den över poängsättning för att hålla nere kostnaderna.
Det här får du: automatisering vs. resultat
| Vad det här arbetsflödet automatiserar | Resultat du får |
|---|---|
|
|
Exempel: så här kan det se ut
Säg att du underhåller en testuppsättning med 50 rader i Google Sheets och kör den två gånger i veckan efter ändringar. Manuellt kan även en snabb process (öppna loggar, hitta hämtade chunks, skumma dem, notera ”relevant eller inte”) ta cirka 3 minuter per rad, vilket blir runt 2,5 timmar per körning. Med det här flödet tar det några minuter att starta en utvärderingskörning, och sedan väntar du medan n8n processar raderna och rapporterar relevanspoäng tillbaka som mätvärden. Du granskar fortfarande avvikelserna, men du granskar kanske 10 ”dåliga” rader, inte alla 50.
Det här behöver du
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för egen hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra din utvärderingsdataset.
- OpenAI för embeddings, agentsvar och poängsättning.
- OpenAI API-nyckel (hämta den från API keys-sidan i OpenAI-dashboarden)
Kunskapsnivå: Medel. Du kopplar konton, mappar några fält och är bekväm med att redigera promptar och datasetkolumner.
Vill du inte sätta upp det här själv? Prata med en automationsexpert (gratis 15-minuters konsultation).
Så fungerar det
En datasetrad startar allt. I utvärderingsläge läser Dataset Row Trigger frågor från Google Sheets. Det finns också en chatt-trigger, så att du kan köra samma agent interaktivt utan att varje test blir en poängsatt utvärdering.
Ditt innehåll indexeras för retrieval. Flödet kan läsa in dokument, dela upp dem i chunks och skapa embeddings med OpenAI. Vektorerna lagras i en in-memory vektorstore, vilket är enkelt och snabbt för utvärderingskörningar och demos.
Agenten svarar och visar sitt underlag. Assistant Agent använder vektorstore-verktyget för att hämta dokument som är relevanta för frågan. Ett litet men viktigt steg säkerställer att agenten skriver ut listdata från verktygen den använde, så att du kan poängsätta och granska vad som faktiskt hämtades.
Poängsättning sker bara när du utvärderar. Om Evaluation Check upptäcker en utvärderingskörning beräknar flödet en relevanspoäng genom att jämföra de hämtade dokumenten med frågan med hjälp av en OpenAI-modell, och tillämpar sedan mätvärdet. Om det inte är en utvärderingskörning hoppar den över poängsättning och svarar bara.
Du kan enkelt justera bedömningsrubriken så att den matchar din definition av ”relevant”, eller byta datakälla om Sheets inte är din grej. Se hela implementationsguiden nedan för alternativ för anpassning.
Steg-för-steg-guide för implementering
Steg 1: Konfigurera triggertypen
Konfigurera triggrarna som startar utvärderings- och chattflödena.
- Lägg till Dataset Row Trigger och ställ in Sheet URL till
https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309. - I Dataset Row Trigger ställer ni in Document URL till
https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309. - Lägg till Chat Intake Trigger för att ta emot inkommande chattsessioner.
- Lägg till Manual Start Trigger för att kunna köra manuell dataset-inläsning.
Steg 2: Anslut Google Sheets
Anslut Google Sheets så att arbetsflödet kan läsa utvärderingsrader och bygga datasetet.
- Öppna Dataset Row Trigger och välj credential-typen googleSheetsOAuth2Api. Credential Required: Anslut era googleSheetsOAuth2Api-uppgifter.
- Öppna Retrieve Dataset och ställ in Sheet URL till
https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309. - I Retrieve Dataset ställer ni in Document URL till
https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309och väljer googleSheetsOAuth2Api. Credential Required: Anslut era googleSheetsOAuth2Api-uppgifter.
Steg 3: Sätt upp bearbetning och inläsning till vektorlagret
Förbered datasetet, deduplicera rader och ladda dokument till vektorlagret.
- Konfigurera Retrieve Dataset att köras från Manual Start Trigger och mata in i Deduplicate Records.
- I Deduplicate Records ställer ni in Compare till
selectedFieldsoch Fields to Compare tilldocument_id. - I Recursive Text Split behåller ni standardinställningarna och kopplar den till Default Data Ingest.
- I Default Data Ingest ställer ni in JSON Data till
{{ $json.document_text }}och JSON Mode tillexpressionData. - Konfigurera In-Memory Vector Store med Mode
insert, Memory Keyrag_evaluation_demooch Clear Storetrue. - Koppla OpenAI Embedding Engine till In-Memory Vector Store som embedding-källa. Credential Required: Anslut era openAiApi-uppgifter.
Steg 4: Sätt upp assistentagenten och verktyg för hämtning
Konfigurera agenten så att den svarar från vektorlagret och fångar mellanliggande steg.
- I Normalize Chat Input ställer ni in fältet chatInput till
{{ $json.question }}för att standardisera inkommande prompttext. - Koppla Dataset Row Trigger → Normalize Chat Input → Assistant Agent, och koppla även Chat Intake Trigger direkt till Assistant Agent.
- I Assistant Agent aktiverar ni Return Intermediate Steps (redan inställt) så att verktygsutdata kan extraheras senare.
- Koppla OpenAI Conversation Model till Assistant Agent som språkmodell. Credential Required: Anslut era openAiApi-uppgifter på OpenAI Conversation Model.
- Konfigurera Vector Store Tool med Mode
retrieve-as-tool, Tool Namevector_knowledge_base, Memory Keyrag_evaluation_demooch Tool DescriptionSource of all knowledge to work with. - Koppla OpenAI Embedding Tool till Vector Store Tool som embedding-leverantör. Credential Required: Anslut era openAiApi-uppgifter.
Steg 5: Konfigurera relevanspoäng och mätvärden
Extrahera hämtade dokument, poängsätt relevans och registrera utvärderingsmätvärden.
- Konfigurera Evaluation Check med Operation
checkIfEvaluatingför att styra utvärderingsläge. - Ställ in Pull Documents så att documents tilldelas med
{{ $json.intermediateSteps.filter(x => x.action.tool == 'vector_knowledge_base')[0].observation }}. - Ställ in Compute Relevance Score Model till
gpt-4o-minioch aktivera JSON Outputtrue. - I Compute Relevance Score ställer ni in användarmeddelandets innehåll till
=QUESTION: {{ $('Dataset Row Trigger').item.json.question }} FACTS: {{ $json.documents }}. - Koppla Compute Relevance Score till Apply Metrics och ställ in similarity till
{{ $json.message.content.score }}. - Compute Relevance Score kräver OpenAI-åtkomst. Credential Required: Anslut era openAiApi-uppgifter.
Steg 6: Testa och aktivera ert arbetsflöde
Validera varje väg och aktivera sedan arbetsflödet för användning i produktion.
- Klicka på Execute Workflow och kör Manual Start Trigger för att bekräfta dataset-inläsning och att vektorlagret fylls.
- Trigga Dataset Row Trigger med en testrad och verifiera att Normalize Chat Input → Assistant Agent → Evaluation Check → Pull Documents → Compute Relevance Score → Apply Metrics körs utan fel.
- Bekräfta att utdata innehåller ett JSON-svar med ett
score-värde och att Apply Metrics registrerarsimilarity. - När allt är validerat, växla arbetsflödet till Active för att hantera nya dataset-rader och chattförfrågningar i produktion.
Vanliga fallgropar
- Google Sheets-inloggningar kan löpa ut eller sakna åtkomst till kalkylarket. Om det strular, kontrollera Google-anslutningen i n8n under Credentials och bekräfta att arket är delat med rätt Google-konto.
- Om du använder Wait-liknande beteende (eller är beroende av extern bearbetning) varierar timing. När efterföljande noder fallerar på tomma svar, öka fördröjningen eller lägg till en enkel gren för ”försök igen vid tomt svar”.
- Standardpromptar för poängsättning är intetsägande. Lägg in dina egna relevanskriterier tidigt (vad som räknas som relevant, vad som räknas som delvis träff), annars kommer du lägga veckor på att debattera poängen istället för att förbättra retrieval.
Vanliga frågor
Cirka 45 minuter om ditt Sheet och din OpenAI-nyckel är redo.
Nej. Du kommer främst att koppla konton och mappa några fält i n8n. Den enda ”tekniska” delen är att bestämma vad din poängsättningsprompt ska betrakta som relevant.
Ja. n8n har ett gratis alternativ för egen hosting 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 OpenAI API-kostnader, som vanligtvis är några cent per utvärderingsrad beroende på modell och dokumentlängd.
Två alternativ: n8n Cloud (hanterat, enklast uppsättning) eller egen hosting på en VPS. För egen hosting är Hostinger VPS prisvärd och hanterar n8n bra. Egen hosting ger obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det bör du. Uppdatera prompten i ”Compute Relevance Score” så att den matchar din definition av relevans (strikt träff, delvis träff, acceptabel parafras och så vidare). Vanliga anpassningar är att poängsätta på en 1–5-skala, flagga ”ingen relevant kontext hämtad” och lägga till ett kort förklaringsfält som granskare kan använda för revision senare.
Oftast beror det på en ogiltig eller utgången API-nyckel. Skapa en ny nyckel i OpenAI, uppdatera sedan uppgiften i n8n och kör en testrad igen. Om det fortfarande fallerar, kontrollera att ditt konto har åtkomst till den modell du valt och att du inte slår i rate limits under stora utvärderingskörningar.
Några hundra rader per körning är realistiskt för de flesta team. I n8n Cloud är din praktiska gräns din månatliga körningskvot och OpenAI-genomströmning; i self-hosted n8n finns inget körningstak, men serverresurserna spelar fortfarande roll. Om du testar tusentals rader vill du batcha och sätta en försiktig rate limit så att du inte får intermittenta fel. Börja med 50–200 rader, få rubriken rätt och skala sedan upp.
För RAG-utvärdering är n8n oftast ett bättre val eftersom du kan förgrena logik fritt, hindra att steg som bara behövs vid utvärdering körs (för att kontrollera kostnad) och använda LangChain-liknande agent- och vektorstore-noder utan krångliga workarounds. Zapier och Make kan köra ett enkelt flöde ”Sheet-rad → OpenAI → skriv tillbaka”, men det blir klumpigt när du lägger till retrieval-verktyg och metriksrapportering. En annan skillnad är kontroll: med self-hosted n8n är det enklare att köra större testuppsättningar utan att oroa sig för prissättning per uppgift. Om målet är snabba, enkla automationer kan Zapier eller Make kännas enklare. Om målet är pålitlig QA med ett mätvärde du litar på vinner den här metoden. Prata med en automationsexpert om du vill ha hjälp att välja.
En tydlig relevanspoäng flyttar samtalet från åsikter till bevis. Sätt upp det en gång, kör det efter varje meningsfull ändring och se till att din RAG-kvalitet inte glider iväg i tysthet.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.