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

Google Sheets + OpenAI: RAG-relevans poängsatt snabbt

Rickard Andersson Partner, Nodenordic.se

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

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

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.

  1. 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.
  2. I Dataset Row Trigger ställer ni in Document URL till https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309.
  3. Lägg till Chat Intake Trigger för att ta emot inkommande chattsessioner.
  4. Lägg till Manual Start Trigger för att kunna köra manuell dataset-inläsning.

Om ni vill testa snabbt, använd Manual Start Trigger först för att validera datainläsningen innan ni triggar via dataset-rader.

Steg 2: Anslut Google Sheets

Anslut Google Sheets så att arbetsflödet kan läsa utvärderingsrader och bygga datasetet.

  1. Öppna Dataset Row Trigger och välj credential-typen googleSheetsOAuth2Api. Credential Required: Anslut era googleSheetsOAuth2Api-uppgifter.
  2. Öppna Retrieve Dataset och ställ in Sheet URL till https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309.
  3. I Retrieve Dataset ställer ni in Document URL till https://docs.google.com/spreadsheets/d/1uuPS5cHtSNZ6HNLOi75A2m8nVWZrdBZ_Ivf58osDAS8/edit?gid=630157309#gid=630157309 och väljer googleSheetsOAuth2Api. Credential Required: Anslut era googleSheetsOAuth2Api-uppgifter.

⚠️ Vanlig fallgrop: Om ni använder en Sheet URL utan korrekta delningsbehörigheter kommer triggrarna att misslyckas även om credentials är anslutna.

Steg 3: Sätt upp bearbetning och inläsning till vektorlagret

Förbered datasetet, deduplicera rader och ladda dokument till vektorlagret.

  1. Konfigurera Retrieve Dataset att köras från Manual Start Trigger och mata in i Deduplicate Records.
  2. I Deduplicate Records ställer ni in Compare till selectedFields och Fields to Compare till document_id.
  3. I Recursive Text Split behåller ni standardinställningarna och kopplar den till Default Data Ingest.
  4. I Default Data Ingest ställer ni in JSON Data till {{ $json.document_text }} och JSON Mode till expressionData.
  5. Konfigurera In-Memory Vector Store med Mode insert, Memory Key rag_evaluation_demo och Clear Store true.
  6. Koppla OpenAI Embedding Engine till In-Memory Vector Store som embedding-källa. Credential Required: Anslut era openAiApi-uppgifter.

Inläsningsflödet är Manual Start TriggerRetrieve DatasetDeduplicate RecordsIn-Memory Vector Store, där Recursive Text SplitDefault Data Ingest matar dokument in i lagret.

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.

  1. I Normalize Chat Input ställer ni in fältet chatInput till {{ $json.question }} för att standardisera inkommande prompttext.
  2. Koppla Dataset Row TriggerNormalize Chat InputAssistant Agent, och koppla även Chat Intake Trigger direkt till Assistant Agent.
  3. I Assistant Agent aktiverar ni Return Intermediate Steps (redan inställt) så att verktygsutdata kan extraheras senare.
  4. Koppla OpenAI Conversation Model till Assistant Agent som språkmodell. Credential Required: Anslut era openAiApi-uppgifter på OpenAI Conversation Model.
  5. Konfigurera Vector Store Tool med Mode retrieve-as-tool, Tool Name vector_knowledge_base, Memory Key rag_evaluation_demo och Tool Description Source of all knowledge to work with.
  6. Koppla OpenAI Embedding Tool till Vector Store Tool som embedding-leverantör. Credential Required: Anslut era openAiApi-uppgifter.

AI-verktygsnoder som Vector Store Tool och In-Memory Vector Store använder embeddings som tillhandahålls av andra noder – lägg till credentials på OpenAI Embedding Tool och OpenAI Embedding Engine, inte på själva verktygsnoderna.

Steg 5: Konfigurera relevanspoäng och mätvärden

Extrahera hämtade dokument, poängsätt relevans och registrera utvärderingsmätvärden.

  1. Konfigurera Evaluation Check med Operation checkIfEvaluating för att styra utvärderingsläge.
  2. Ställ in Pull Documents så att documents tilldelas med {{ $json.intermediateSteps.filter(x => x.action.tool == 'vector_knowledge_base')[0].observation }}.
  3. Ställ in Compute Relevance Score Model till gpt-4o-mini och aktivera JSON Output true.
  4. I Compute Relevance Score ställer ni in användarmeddelandets innehåll till =QUESTION: {{ $('Dataset Row Trigger').item.json.question }} FACTS: {{ $json.documents }}.
  5. Koppla Compute Relevance Score till Apply Metrics och ställ in similarity till {{ $json.message.content.score }}.
  6. Compute Relevance Score kräver OpenAI-åtkomst. Credential Required: Anslut era openAiApi-uppgifter.

Evaluation Check skickar utdata parallellt till både Pull Documents och Send Chat Reply, så säkerställ att Pull Documents är kopplad till Compute Relevance Score innan ni kör utvärderingar.

Steg 6: Testa och aktivera ert arbetsflöde

Validera varje väg och aktivera sedan arbetsflödet för användning i produktion.

  1. Klicka på Execute Workflow och kör Manual Start Trigger för att bekräfta dataset-inläsning och att vektorlagret fylls.
  2. Trigga Dataset Row Trigger med en testrad och verifiera att Normalize Chat InputAssistant AgentEvaluation CheckPull DocumentsCompute Relevance ScoreApply Metrics körs utan fel.
  3. Bekräfta att utdata innehåller ett JSON-svar med ett score-värde och att Apply Metrics registrerar similarity.
  4. När allt är validerat, växla arbetsflödet till Active för att hantera nya dataset-rader och chattförfrågningar i produktion.
🔒

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

Få den kompletta implementeringsguiden + nedladdningsbar mall

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

Hur lång tid tar det att sätta upp den här automatiseringen för relevanspoängsättning i RAG?

Cirka 45 minuter om ditt Sheet och din OpenAI-nyckel är redo.

Behöver jag kunna koda för att automatisera relevanspoängsättning i RAG?

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.

Är n8n gratis att använda för det här arbetsflödet för relevanspoängsättning i RAG?

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.

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

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.

Kan jag anpassa det här arbetsflödet för relevanspoängsättning i RAG efter min egen bedömningsrubrik?

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.

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

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.

Hur många rader klarar den här automatiseringen för relevanspoängsättning i RAG?

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.

Är den här automatiseringen för relevanspoängsättning i RAG bättre än att använda Zapier eller Make?

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.

×

Använd mall

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

Launch login modal Launch register modal