Ditt team enas äntligen om ”en bra prompt” … och två veckor senare kan ingen förklara varför modell A såg bättre ut än modell B. Testfallen har flyttats, källdokumenten har ändrats och resultaten ligger utspridda i skärmdumpar, Slack-trådar och halvfärdiga kalkylark.
Det här drabbar produktmarknadsförare som kör budskapstester, men ops-ansvariga och byråteam som validerar AI-leveranser känner av det också. Med den här automatiseringen för Sheets LLM-evals kan du köra om samma evalueringsuppsättning på flera modeller och logga resultat konsekvent, utan att bygga om processen varje gång.
Du får se vad workflowet gör, varför det är byggt för repeterbarhet och hur du använder det som en strukturerad baseline som du kan anpassa till dina egna dataset.
Så fungerar automatiseringen
Här är hela workflowet du kommer att sätta upp:
n8n Workflow Template: Google Sheets + OpenRouter: repeterbara LLM-utvärderingar
flowchart LR
subgraph sg0["Structured JSON Pars 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/>Incoming Webhook Trigger"]
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/merge.svg' width='40' height='40' /></div><br/>Combine Payloads"]
n5@{ icon: "mdi:robot", form: "rounded", label: "Structured JSON Parser", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "LLM Evaluation Chain", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "Download Drive File", pos: "b", h: 48 }
n8@{ icon: "mdi:cog", form: "rounded", label: "Extract PDF Text", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Capture Input Output", pos: "b", h: 48 }
n11@{ icon: "mdi:brain", form: "rounded", label: "OpenRouter Chat Engine", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Store Original Payload", pos: "b", h: 48 }
n1 --> n12
n1 --> n9
n7 --> n8
n6 --> n2
n8 --> n6
n9 --> n7
n12 --> n2
n11 -.-> n6
n5 -.-> n6
end
subgraph sg1["Manual Execution Start Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Execution Start", pos: "b", h: 48 }
n3@{ icon: "mdi:database", form: "rounded", label: "Retrieve Test Rows", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-horizontal", form: "rounded", label: "PDF File Check", pos: "b", h: 48 }
n10["<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/>Invoke Subprocess API"]
n13@{ icon: "mdi:cog", form: "rounded", label: "Sample Limit Gate", pos: "b", h: 48 }
n14@{ icon: "mdi:database", form: "rounded", label: "Append Results Sheet", pos: "b", h: 48 }
n4 --> n13
n3 --> n4
n10 --> n14
n13 --> n10
n0 --> 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 n0 trigger
class n5,n6 ai
class n11 aiModel
class n4 decision
class n3,n14 database
class n1,n10 api
class n13 disabled
classDef customIcon fill:none,stroke:none
class n1,n2,n10 customIcon
Varför det här spelar roll: LLM-testning blir snabbt rörig
LLM-”utvärdering” börjar ofta som ett snabbt experiment. Några prompts. Ett par modeller. Lite copy-paste in i ett dokument. Sedan växer det. Du lägger till fler testfall, någon föreslår en ny modell och plötsligt jonglerar du PDF:er i Drive, prompts i chatten och outputs på tre olika ställen. Ännu värre: nästa gång du kör är inputs inte identiska. Då går det inte att lita på jämförelsen. Det är då AI-arbetet går från spännande till dränerande, eftersom du lägger tiden på att jaga konsekvens i stället för att fatta beslut.
Det eskalerar snabbt. Här är var det brukar falla isär.
- Testfallen ligger i ett kalkylark, men ”källdokumentet” för varje fall är sparat någon annanstans och öppnas manuellt vid varje körning.
- Modellanrop sker ett i taget, så en full benchmarkkörning kan ta upp en hel eftermiddag.
- Outputs dokumenteras inkonsekvent, vilket gör att ni till slut diskuterar formatering i stället för korrekthet.
- När någon frågar ”kan vi köra om förra månadens evals?” inser du att du inte kan återskapa exakt samma körning med säkerhet.
Vad du bygger: en repeterbar benchmarkkörning från Google Sheets
Det här workflowet gör Google Sheets till en repeterbar evalueringsmotor för LLM:er. Du behåller dina testfall i ett ark, inklusive referenser till källfilerna i Google Drive. När du kör workflowet hämtar det raderna, kontrollerar vilken filtyp varje fall behöver, laddar ner dokumentet och konverterar det till text (inklusive PDF:er). Sedan paketerar det varje testfall och skickar det till en intern webhook som routar payloaden till en OpenRouter-baserad chatmodell. Workflowet fångar input och output på ett strukturerat sätt, slår ihop kontexten tillbaka till en och samma post och lägger till resultaten i ditt resultatark så att varje körning går att granska i efterhand. Byt modell, kör om i morgon, jämför på riktigt.
Loopen hämtar varje rad, behandlar det tillhörande Drive-dokumentet och kör en evalueringskedja som anropar OpenRouter via en chatmotor. Till sist skriver den tillbaka en strukturerad resultatrad till Google Sheets så att du kan filtrera, sortera och jämföra mellan 6 modeller eller 60.
Det här bygger du
| Vad som automatiseras | Vad du uppnår |
|---|---|
|
|
Förväntat resultat
Låt oss använda workflowets exempelskala: 18 testfall över 6 LLM:er (108 modellanrop totalt). En manuell körning innebär vanligtvis att du öppnar Drive-dokumentet, extraherar text, klistrar in den i en prompt, kör den och sedan loggar output. Även om det bara tar cirka 5 minuter per fall och modell är det ungefär 9 timmar av administrativt pill. Med det här workflowet startar du en körning från Sheets, den processar parallellt (cirka 2 förfrågningar per sekund) och resultaten landar automatiskt tillbaka i kalkylarket. Du granskar fortfarande outputs, men du slutar göra det administrativa arbetet.
Innan du börjar
- n8n-instans (testa n8n Cloud gratis)
- Alternativ för self-hosting om du föredrar det (Hostinger fungerar bra)
- Google Sheets för att lagra testfall och resultat
- Google Drive för att lagra källfiler (PDF:er/dokument)
- OpenRouter API-nyckel (hämta den i din OpenRouter-dashboard)
Nivå: Medel. Du kopplar konton, mappar några fält och testar en webhook end-to-end.
Vill du att någon bygger det här åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
En manuell körning hämtar dina senaste testfall. Starta workflowet så läser det evalueringsrader från Google Sheets (din ”cases”-tabell). Det arket blir sanningskällan för vad som testas.
Varje fall berikas med rätt dokumentkontext. För varje rad kontrollerar workflowet om källan är en PDF, laddar ner filen från Google Drive och extraherar sedan text så att prompten alltid får konsekvent input.
Evalueringskedjan anropar modellen via OpenRouter. En webhook tar emot payloaden, slår ihop originalmetadata och kör en LLM-evalueringskedja med en OpenRouter-chatmotor (vilket gör det enkelt att byta modell). Parallell bearbetning används så att du inte väntar på en förfrågan i taget.
Resultaten läggs till tillbaka i Google Sheets. Workflowet fångar input/output-paret och skriver en korrekt formaterad post i ditt resultatark, vilket gör att du kan jämföra modeller, köra om nästa vecka och behålla en revisionsspårning.
Du kan enkelt ändra vilka modeller du testar för att matcha din budget eller dina krav på träffsäkerhet. Se den fullständiga implementeringsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera triggertypen
Konfigurera båda ingångarna så att ni kan köra tester manuellt eller ta emot externa utvärderingspayloads via webhook.
- Lägg till Manual Execution Start som den manuella triggern för testkörningar.
- Konfigurera Incoming Webhook Trigger med HTTP Method satt till
POST. - Ställ in Path till
1cbce320-d28e-4e97-8663-bf2c6a36a358. - Ställ in Response Data till
allEntriesoch Response Mode tilllastNode. - Bekräfta den parallella splitten: Incoming Webhook Trigger skickar output till både Store Original Payload och Capture Input Output parallellt.
Steg 2: anslut Google Sheets för indata och resultat
Dessa noder hämtar testrader och lägger tillbaka utvärderingsresultat i ert kalkylark.
- Öppna Retrieve Test Rows och välj kalkylarket
Info Extraction Tasks (LLM Judge)och bladetTests. - Autentiseringsuppgifter krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Retrieve Test Rows.
- Öppna Append Results Sheet och bekräfta att Operation är
appendOrUpdate. - Mappa kolumnerna i Append Results Sheet med de angivna uttrycken, till exempel
{{$json['ID']}},{{$json.output.decision}}och{{$json.output.reasoning}}. - Autentiseringsuppgifter krävs: Anslut era googleSheetsOAuth2Api-uppgifter i Append Results Sheet.
Steg 3: konfigurera dataförberedelse, routning och sammanslagning av payloads
Dessa noder förbereder utvärderingsdata och styr vilka rader som går vidare i arbetsflödet.
- I PDF File Check, säkerställ att första villkoret kontrollerar efter en PDF:
{{$json['Relevant Source Reference']}}contains.pdf. - Ställ in det andra villkoret i PDF File Check för att verifiera att raden finns:
{{$json.row_number}}greater than0. - Konfigurera Sample Limit Gate med Max Items satt till
3för att strypa testkörningar. - I både Capture Input Output och Store Original Payload, ställ in JSON Output till
{{$json.body}}. - I Combine Payloads, ställ in Mode till
combineoch Combine By tillcombineByPosition.
Steg 4: ladda ner och extrahera källtext från PDF
I det här steget hämtas källdokumentet från Drive och texten extraheras för utvärdering.
- Öppna Download Drive File och ställ in Operation till
download. - Ställ in File ID till uttrycket
{{$json["URL"].match(/[-\w]{25,}/)[0]}}för att tolka ut Drive-ID:t från URL:en. - Autentiseringsuppgifter krävs: Anslut era googleDriveOAuth2Api-uppgifter i Download Drive File.
- I Extract PDF Text, ställ in Operation till
pdf.
Steg 5: sätt upp kedjan för LLM-utvärdering
Konfigurera LLM-utvärderingsprompten, JSON-tolkningen och modellens autentiseringsuppgifter.
- Öppna LLM Evaluation Chain och ställ in Text till exakt den här mallen:
=INPUT: { "task": {{ $('Capture Input Output').item.json['Input '] }}, "source": {{ $json.text }}, "output": {{ $('Capture Input Output').item.json['Output '] }} } OUTPUT: - Säkerställ att Has Output Parser är aktiverad i LLM Evaluation Chain.
- I Structured JSON Parser, behåll exempelschemat som returnerar
reasoningochdecision. - Konfigurera OpenRouter Chat Engine med Model satt till
openai/gpt-4.1. - Autentiseringsuppgifter krävs: Anslut era openRouterApi-uppgifter i OpenRouter Chat Engine.
Steg 6: konfigurera API-anropet till delprocessen och slutlig återrapportering
Det här sista segmentet skickar bearbetade poster till en extern endpoint innan resultaten läggs till.
- I Invoke Subprocess API, ställ in URL till
https://webhook-processor-production-48f8.up.railway.app/webhook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. - Ställ in Method till
POSToch JSON Body till{{$json}}. - Bekräfta flödesordningen: Sample Limit Gate → Invoke Subprocess API → Append Results Sheet.
Steg 7: testa och aktivera ert arbetsflöde
Validera båda trigger-vägarna och bekräfta att resultaten sparas i ert ark.
- Klicka på Execute Workflow på Manual Execution Start för att köra ett test från Google Sheets.
- Skicka en testpayload till Incoming Webhook Trigger via POST-URL:en för att verifiera beteendet i den parallella grenen.
- Verifiera att Extract PDF Text ger text som output och att LLM Evaluation Chain returnerar ett strukturerat
output-objekt. - Bekräfta att nya rader visas i målbladet för Append Results Sheet med ifyllda fält för Decision och Reasoning.
- Växla arbetsflödet till Active när testningen är lyckad.
Felsökningstips
- Google Sheets-autentisering kan löpa ut eller kräva specifika behörigheter. Om det slutar fungera, kontrollera listan Credentials i n8n och bekräfta att det kopplade Google-kontot fortfarande har åtkomst till arket.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om nedströmsnoder fallerar på tomma svar.
- Standardprompter i AI-noder är generiska. Lägg in din varumärkesröst tidigt, annars kommer du att redigera outputs i all oändlighet.
Snabba svar
Räkna med cirka en timme om ditt Sheet, din Drive-mapp och din OpenRouter-nyckel är redo.
Nej, ingen kodning krävs. Du kopplar främst in credentials och mappar arkkolumner till workflowets inputfält.
Ja. n8n har ett gratis self-hosted-alternativ och en gratis provperiod på n8n Cloud. Cloud-planer startar på 20 USD/månad för högre volym. Du behöver också räkna in modellkostnaderna i OpenRouter, som varierar beroende på leverantör och modell.
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 klarar n8n bra. Self-hosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det bör du. Du kan byta modell i OpenRouter-chatmotorn, justera Google Sheets-mappningen i ”Retrieve Test Rows” så att den matchar dina egna kolumner och ersätta PDF-extraheringsflödet om du använder ren text eller HTML i stället. Vanliga justeringar är att lägga till en poängrubrik i evalueringskedjan, skriva resultat till ett andra ”sammanfattnings”-ark och tagga varje körning med ett versionsnamn så att jämförelserna håller sig prydliga.
Oftast beror det på utgången Google-auth eller att arket flyttats till en Drive-plats som det kopplade kontot inte kommer åt. Återanslut Google Sheets-credential i n8n och öppna sedan arklänken i samma Google-konto för att bekräfta att det fortfarande har behörighet. Kontrollera också att noden ”Update/Append Results” pekar på ditt kopierade kalkylark, inte originalexemplet.
Det är byggt för att skala bortom en-och-en-körningar eftersom det kan skicka cirka 2 förfrågningar per sekund. På n8n Cloud är din gräns främst antal körningar per månad i din plan, medan self-hosting begränsas av din server och de rate limits du träffar i OpenRouter.
Ofta, ja. n8n hanterar ”riktiga workflow”-delarna bättre: loopa igenom rader, slå ihop payloads, villkorsstyrd PDF-hantering och strukturerad loggning utan att bli en spaghetti-zap. Du kan också self-hosta, vilket spelar roll när du kör många evals och inte vill ha prissättning per uppgift. Zapier eller Make kan fortfarande fungera om du kör en pytteliten testuppsättning och inte behöver dokumenttolkning. Ärligt talat: så fort du lägger till PDF:er och repeterbar benchmarking blir n8n det lugnare valet. Prata med en automationsexpert om du vill ha hjälp att välja.
När det här är på plats slutar ni bråka om ”vad som hände förra körningen” och börjar fatta tydliga modellbeslut baserat på felfri data. Sätt upp det en gång och kör om när som helst.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.