Din Tier 2-inkorg är där “snabba svar” går för att dö. En rörig e-posttråd blir till fem flikar, ett halvskrivet utkast och den där gnagande oron att du råkar klistra in något känsligt tillbaka till en kund.
Den här automatiseringen för Gmail Slack-triage träffar support leads först, men ops-folk och Customer Success-chefer känner av den också. Du får säkrare hantering av riskfyllda ärenden, konsekventa utkast för standardproblem och en tydlig eskaleringsväg när en människa ska ta över.
Nedan ser du vad workflowet gör, vad du behöver och hur delarna hänger ihop så att du kan köra Tier 2-support med färre överraskningar.
Så fungerar automatiseringen
Här är hela workflowet du kommer att sätta upp:
n8n Workflow Template: Gmail + Slack – säkrare triage för tier 2-support
flowchart LR
subgraph sg0["Gmail Flow"]
direction LR
n0@{ icon: "mdi:robot", form: "rounded", label: "Guardrails", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "Orchestrator Agent", pos: "b", h: 48 }
n2@{ icon: "mdi:wrench", form: "rounded", label: "Call Ticket Analyser Agent", pos: "b", h: 48 }
n3@{ icon: "mdi:wrench", form: "rounded", label: "Call Knowledge Worker Agent", pos: "b", h: 48 }
n4@{ icon: "mdi:wrench", form: "rounded", label: "Call Resolution Agent", pos: "b", h: 48 }
n5@{ icon: "mdi:memory", form: "rounded", label: "Simple Memory", pos: "b", h: 48 }
n6@{ icon: "mdi:play-circle", form: "rounded", label: "Gmail Trigger", pos: "b", h: 48 }
n7@{ icon: "mdi:message-outline", form: "rounded", label: "Email Reply Tool", pos: "b", h: 48 }
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Slack Tool", pos: "b", h: 48 }
n9@{ icon: "mdi:brain", form: "rounded", label: "Guard LLM", pos: "b", h: 48 }
n10@{ icon: "mdi:brain", form: "rounded", label: "Reasoning Model for Orchestr..", pos: "b", h: 48 }
n11["<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/airtable.svg' width='40' height='40' /></div><br/>Log Threats in Airtable"]
n9 -.-> n0
n0 --> n1
n0 --> n11
n8 -.-> n1
n6 --> n0
n5 -.-> n1
n7 -.-> n1
n4 -.-> n1
n2 -.-> n1
n3 -.-> n1
n10 -.-> n1
end
subgraph sg1["Upload File / Copy Text here Flow"]
direction LR
n13@{ icon: "mdi:robot", form: "rounded", label: "Knowledge worker and Investi..", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "Default Data Loader", pos: "b", h: 48 }
n15@{ icon: "mdi:vector-polygon", form: "rounded", label: "Embeddings OpenAI", pos: "b", h: 48 }
n16@{ icon: "mdi:cube-outline", form: "rounded", label: "Knowledge Base Retrieval", pos: "b", h: 48 }
n17@{ icon: "mdi:cube-outline", form: "rounded", label: "Knowledge Base Storage", pos: "b", h: 48 }
n18@{ icon: "mdi:brain", form: "rounded", label: "RAG LLM", pos: "b", h: 48 }
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/code.svg' width='40' height='40' /></div><br/>Clean Json"]
n25@{ icon: "mdi:memory", form: "rounded", label: "Simple Memory for RAG agent", pos: "b", h: 48 }
n28["<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/form.svg' width='40' height='40' /></div><br/>Upload File / Copy Text here"]
n29@{ icon: "mdi:swap-vertical", form: "rounded", label: "Placeholder 2(Read Note and ..", pos: "b", h: 48 }
n18 -.-> n13
n15 -.-> n17
n15 -.-> n16
n14 -.-> n17
n16 -.-> n13
n25 -.-> n13
n28 --> n17
n13 --> n19
n29 --> n13
end
subgraph sg2["Email / Ticket Analy Flow"]
direction LR
n20@{ icon: "mdi:brain", form: "rounded", label: "Ticket Analyser LLM", pos: "b", h: 48 }
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/>Clean JSON"]
n22@{ icon: "mdi:robot", form: "rounded", label: "Email / Ticket Analyser Agent", pos: "b", h: 48 }
n27@{ icon: "mdi:memory", form: "rounded", label: "Simple Memory for Email Anal..", pos: "b", h: 48 }
n30@{ icon: "mdi:swap-vertical", form: "rounded", label: "Placeholder 1(Read Note and ..", pos: "b", h: 48 }
n20 -.-> n22
n22 --> n21
n30 --> n22
n27 -.-> n22
end
subgraph sg3["Resolution Agent Flow"]
direction LR
n23@{ icon: "mdi:brain", form: "rounded", label: "Resolution Agent LLM", pos: "b", h: 48 }
n24@{ icon: "mdi:robot", form: "rounded", label: "Resolution Agent", pos: "b", h: 48 }
n26@{ icon: "mdi:memory", form: "rounded", label: "Simple Memory for Resolution..", pos: "b", h: 48 }
n31@{ icon: "mdi:swap-vertical", form: "rounded", label: "Placeholder 3(Read Note and ..", pos: "b", h: 48 }
n23 -.-> n24
n31 --> n24
n26 -.-> n24
end
subgraph sg4["Flow 5"]
direction LR
n12@{ icon: "mdi:message-outline", form: "rounded", label: "Email Trigger (IMAP)", pos: "b", h: 48 }
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 n6,n28 trigger
class n0,n1,n13,n14,n22,n24 ai
class n9,n10,n18,n20,n23 aiModel
class n2,n3,n4 ai
class n5,n25,n27,n26 ai
class n16,n17 ai
class n15 ai
class n11 database
class n19,n21 code
class n12 disabled
classDef customIcon fill:none,stroke:none
class n11,n19,n28,n21 customIcon
Varför det här spelar roll: Tier 2-ärenden är högrisk och kräver mycket kontext
Tier 2-support är inte bara “svårare frågor”. Det är inkorgen där kunder redan är frustrerade, där policys är avgörande och där en slarvig mening kan skapa återbetalningar, chargebacks eller compliance-problem. Att manuellt triagera de här mejlen är utmattande eftersom du gör tre jobb samtidigt: hotdetektion (är det här en prompt injection eller ett phishingförsök?), prioritering (är det här brådskande eller bara högljutt?) och kunskapsinhämtning (vad är den korrekta policyn, exakt?). Och ärligt talat: när du växlar kontext mellan Gmail, dokument, Slack och CRM är det så misstagen smyger sig in. Kostnaden är inte bara tid. Det är risk.
Friktionen byggs på. Så här faller det isär i verkliga team.
- Riskfyllda meddelanden kan slinka igenom, så du råkar svara på ett prompt injection-försök eller exponera PII i ett utkast.
- Viktiga ärenden ligger för länge eftersom inget flaggar “rasande kund” kontra “rutinmässig how-to”.
- Agenter uppfinner svar på nytt, vilket leder till policyglidning och inkonsekvent ton för samma ärendetyp.
- Eskaleringar sker för sent, ofta först efter att en arg uppföljning har landat.
Det du bygger: en säkerhetsförst Gmail-triage som skriver utkast eller eskalerar
Det här workflowet gör inkommande supportmejl till en kontrollerad, repeterbar beslutsprocess. Det startar när ett nytt meddelande kommer in i Gmail (eller IMAP om du föredrar). Innan någon AI skriver ett enda ord lägger ett hårt säkerhetslager ett scan på mejlet efter mönster för prompt injection, svordomar och PII. Om något ser misstänkt ut låser det ned, loggar incidenten till Airtable och stoppar. Korrekt formaterade mejl går vidare till “Master Orchestrator”, som anropar specialiserade sub-agenter för att analysera ärendet, hämta verifierad kunskap från dina policydokument (via en Supabase vektordatabas) och skriva ett professionellt svar. Om ärendet har hög prioritet eller kunden är rasande hoppar workflowet över utkastet och larmar en människa i Slack direkt.
Workflowet börjar med säker intake och en triagepoäng. Sedan hämtar det endast godkända fakta från din kunskapsbas så att utkastet inte gissar. Till sist skickar det antingen ett svar i Gmail eller routar situationen till Slack för ett mänskligt beslut.
Det du bygger
| Det som automatiseras | Det du uppnår |
|---|---|
|
|
Förväntade resultat
Säg att ditt team hanterar 20 Tier 2-mejl per dag. Manuellt är det lätt att lägga cirka 10 minuter på att läsa, klassificera, leta upp rätt policy och skriva ett försiktigt svar, vilket blir ungefär 3 timmar dagligen. Med det här workflowet blir “människotiden” granskningstid: du skannar Slack-larm för eskaleringar och godkänner eller justerar snabbt utkast för standardärenden, ofta på cirka 2 minuter styck. Det kan göra 3 timmars slit till under en timme, samtidigt som det skissiga blockeras automatiskt.
Innan du börjar
- n8n-instans (prova n8n Cloud gratis)
- Självhostningsalternativ om du föredrar det (Hostinger fungerar bra)
- Gmail för att ta emot och skicka supportsvar.
- Slack för att larma en människa när eskalering behövs.
- Airtable för att logga hot och blockerade meddelanden.
- Supabase för att lagra och söka i din policybaserade kunskapsbas.
- API-åtkomst till AI-modell (Gemini- eller OpenAI-uppgifter från din leverantörskonsol).
Kunskapsnivå: Mellan. Du kopplar konton, klistrar in uppgifter och gör en engångsuppladdning av kunskapsbasen.
Vill du att någon bygger detta åt dig? Prata med en automationsexpert (gratis 15-minuters konsultation).
Steg för steg
Ett nytt supportmejl kommer in. Workflowet bevakar ditt Gmail-supportalias (eller en IMAP-inkorg) och hämtar in oläst ärendeinnehåll plus avsändardetaljer.
Säkerhetskontroller sker först. Ett guardrails-lager skannar efter försök till prompt injection, svordomar och PII. Om det upptäcker ett hot loggar det incidenten i Airtable och stoppar, så att du inte råkar automatisera ett dåligt utfall.
Triage och beslutslogik tar vid. Master Orchestrator anropar en triage-agent som klassificerar ärendet och poängsätter sentiment, vilket ger en prioritetspoäng. Om kunden är rasande eller poängen passerar din tröskel skickas ett Slack-larm direkt.
Säkra ärenden får förankrade utkast. För standardförfrågningar hämtar en kunskapsagent de mest relevanta policyutdragen från Supabase, och sedan skriver en drafting-agent ett svar som håller sig inom de fakta. Sista steget skickar utkastsvaret via Gmail.
Du kan enkelt justera eskaleringskänsligheten så att den matchar teamets tolerans och bemanning. Se hela implementationsguiden nedan för anpassningsalternativ.
Steg-för-steg-guide för implementering
Steg 1: konfigurera Gmail-triggern
Börja med att sätta upp den Gmail-baserade triggern som lyssnar efter nya, olästa supportmejl.
- Öppna Incoming Gmail Watch och ställ in Filters → q till
[YOUR_EMAIL]. - Ställ in Filters → sender till
[YOUR_NAME]och Filters → readStatus tillunread. - I Poll Times, behåll
everyMinuteför att kontrollera efter nya mejl. - Inloggningsuppgifter krävs: anslut era
gmailOAuth2-inloggningsuppgifter i Incoming Gmail Watch.
⚠️ Vanlig fallgrop: om filtervärdena lämnas som platshållare kommer Incoming Gmail Watch inte att trigga. Ersätt [YOUR_EMAIL] och [YOUR_NAME] innan ni testar.
Steg 2: sätt upp säkerhetsscreening och loggning
Workflowet skickar varje mejl genom en säkerhetsgrind innan orkestrering och loggar flaggat innehåll till Airtable.
- I Safety Gatekeeper, ställ in Text till
{{ $json.snippet }}för att skanna inkommande mejl-snippet. - Säkerställ att Safety LLM är ansluten som språkmodell för Safety Gatekeeper. Inloggningsuppgifter krävs: anslut era
googlePalmApi-inloggningsuppgifter till Safety LLM (inloggningsuppgifter för AI-subnoder ställs in på den överordnade modellnoden). - Öppna Airtable Threat Logger och bekräfta att Operation är inställt på
upsert. - Mappa columns → id till
{{ $('Incoming Gmail Watch').item.json.id }}och columns → Sender Email till{{ $('Incoming Gmail Watch').item.json.From }}. - Inloggningsuppgifter krävs: anslut era
airtableTokenApi-inloggningsuppgifter i Airtable Threat Logger.
Obs: Safety Gatekeeper skickar utdata parallellt till både Master Orchestrator och Airtable Threat Logger för omedelbar säkerhetsspårning.
Steg 3: konfigurera master-orkestreringslagret
Orkestratorn driver triage, kunskapshämtning och utkastsekvensen med hjälp av verktyg och minne.
- I Master Orchestrator, ställ in Text till
{{ $('Incoming Gmail Watch').item.json.snippet }}. - Säkerställ att Orchestrator Reasoning LLM är ansluten som språkmodell för Master Orchestrator. Inloggningsuppgifter krävs: anslut era
googlePalmApi-inloggningsuppgifter till Orchestrator Reasoning LLM. - Öppna Session Memory Buffer och ställ in Session Key till
{{ $('Incoming Gmail Watch').item.json.id }}med Session ID Type somcustomKey. - Behåll Invoke Triage Analyzer, Invoke Knowledge Finder och Invoke Drafting Agent anslutna som verktyg till Master Orchestrator (inga separata inloggningsuppgifter på verktygssubnoder).
⚠️ Vanlig fallgrop: verktygssubnoder som Invoke Triage Analyzer tar inte emot inloggningsuppgifter direkt. Lägg i stället till inloggningsuppgifter på deras överordnade modellnoder (t.ex. Orchestrator Reasoning LLM).
Steg 4: konfigurera indata och parsning för triage-workflowet
Ärenden triageras i ett sub-workflow, parsas och returneras för routing-beslut.
- I Invoke Triage Analyzer, ställ in workflow-indata så att de mappar: query till
{{ $('Incoming Gmail Watch').item.json.snippet }}, threadId till{{ $('Incoming Gmail Watch').item.json.threadId }}och senderEmail till{{ $('Incoming Gmail Watch').item.json.From }}. - I triage-workflowet, behåll Ticket Triage Agent ansluten till Triage LLM. Inloggningsuppgifter krävs: anslut era
googlePalmApi-inloggningsuppgifter i Triage LLM. - Verifiera att Parse Triage JSON är ansluten efter Ticket Triage Agent för att normalisera JSON-utdata.
- Använd Triage Agent Memory med Session Key inställd på
{{ $('When Executed by Another Workflow').item.json.senderEmail }}_{{ $('When Executed by Another Workflow').item.json.threadId }}.
Tips: noden Parse Triage JSON innehåller fallback-standardvärden om parsningen misslyckas, vilket gör att ert workflow inte stannar på grund av felaktig AI-utdata.
Steg 5: bygg och fyll på kunskapsbasen (RAG)
Kundkunskap lagras i Supabase och hämtas via en RAG-agent, med embeddings genererade av OpenAI.
- Använd Upload Policy Content för att skicka in policytext via formuläret med titeln
Upload your File / Use sample data for your RAG. - I Default Document Loader, behåll Loader som
pdfLoaderoch Data Type sombinary. - Anslut OpenAI Embedding Generator till både Knowledge Base Upsert och Knowledge Base Lookup. Inloggningsuppgifter krävs: anslut era
openAiApi-inloggningsuppgifter i OpenAI Embedding Generator. - I Knowledge Base Upsert, behåll Mode inställt på
insertoch tabellnamnet tilln8n_documents. Inloggningsuppgifter krävs: anslut erasupabaseApi-inloggningsuppgifter. - I Knowledge Base Lookup, behåll Mode inställt på
retrieve-as-tooloch tabellnamnet tilln8n_documents. Inloggningsuppgifter krävs: anslut erasupabaseApi-inloggningsuppgifter.
Tips: om ni vill testa utan riktig data, använd Stub Inputs for RAG med platshållarvärden och kör sedan sub-workflowet manuellt.
Steg 6: konfigurera kunskapshämtning och normalisering
Kunskapsagenten hämtar fakta och normaliserar utdata innan svar utkastas.
- I Invoke Knowledge Finder, mappa workflow-indata: query till
{{ $('Incoming Gmail Watch').item.json.snippet }}, threadId till{{ $('Incoming Gmail Watch').item.json.threadId }}, senderEmail till{{ $('Incoming Gmail Watch').item.json.id }}, triageSummary till{{ $('Invoke Triage Analyzer').item.json.summary }}och triageCategory till{{ $('Invoke Triage Analyzer').item.json.category }}. - I Knowledge Research Agent, behåll Text som
=Search the Knowledge Base for facts regarding: "{{ $json.query }}" Context: {{ $json.triageSummary }}. - Säkerställ att RAG Gemini Model är ansluten som språkmodell för Knowledge Research Agent. Inloggningsuppgifter krävs: anslut era
googlePalmApi-inloggningsuppgifter i RAG Gemini Model. - I Normalize RAG Output, behåll JavaScript-koden intakt för att sätta
retrievedFactsoch rensa utdata. - Använd RAG Agent Memory med Session Key inställd på
{{ $('When Executed by Another Workflow').item.json.senderEmail }}_{{ $('When Executed by Another Workflow').item.json.threadId }}.
Steg 7: konfigurera utkast och svarsåtgärder
Utkastagenten genererar ett svar och skickar det via Gmail eller eskalerar via Slack.
- I Invoke Drafting Agent, mappa workflow-indata: ragFacts till
{{ $('Invoke Knowledge Finder').item.json.retrievedFacts }}, customerQuery till{{ $('Incoming Gmail Watch').item.json.snippet }}och triageSummary till{{ $('Invoke Triage Analyzer').item.json.summary }}. - Säkerställ att Drafting LLM är ansluten som språkmodell för Response Draft Agent. Inloggningsuppgifter krävs: anslut era
googlePalmApi-inloggningsuppgifter i Drafting LLM. - Konfigurera Gmail Reply Sender med Message inställt på
{{ $fromAI('Message', ``, 'string') }}och Message ID till{{ $('Incoming Gmail Watch').item.json.id }}. - Inloggningsuppgifter krävs: anslut era
gmailOAuth2-inloggningsuppgifter i Gmail Reply Sender. - I Slack Alert Notifier, ställ in Text till
{{ $fromAI('alertMessage', 'Critical Escalation Detected', 'string') }}och välj en Channel. Inloggningsuppgifter krävs: anslut eraslackApi-inloggningsuppgifter.
⚠️ Vanlig fallgrop: Slack Alert Notifier och Gmail Reply Sender är verktygssubnoder som används av Master Orchestrator. Säkerställ att orkestratorns logik matchar er eskaleringspolicy innan ni aktiverar.
Steg 8: valfria debug-indata och inaktiverad trigger
Använd stub-noder för manuell testning eller felsökning. Det finns även en inaktiverad IMAP-trigger för alternativ mejlinkomst.
- Använd Stub Inputs for Triage, Stub Inputs for RAG och Stub Inputs for Draft för att ange testvärden som
ellernär ni kör sub-workflows. - Observera att IMAP Email Trigger är inaktiverad; aktivera den endast om ni planerar att lämna Gmail för mejlinkomst.
Steg 9: testa och aktivera ert workflow
Kör en komplett testcykel för att verifiera triage, kunskapshämtning, utkast och leverans av svar.
- Klicka på Execute Workflow på Incoming Gmail Watch och skicka ett testmejl som matchar era filterinställningar.
- Bekräfta att Safety Gatekeeper släpper igenom innehållet och att Airtable Threat Logger tar emot en ny upsertad post när säkerhetsregler triggas.
- Verifiera att Master Orchestrator anropar Invoke Triage Analyzer och sedan routar antingen till Slack Alert Notifier + Gmail Reply Sender (eskalering) eller till Invoke Knowledge Finder → Invoke Drafting Agent för standardsvar.
- Kontrollera att Gmail Reply Sender postar ett svar i samma tråd och att det innehåller den utkastade texten.
- När allt är verifierat, slå på Active i n8n för att aktivera körning i produktion.
Felsökningstips
- Gmail-uppgifter kan löpa ut eller kräva specifika behörigheter. Om det skapar fel: kontrollera först det anslutna Google-kontot i n8n:s område för Credentials.
- Om du använder Wait-noder eller extern rendering varierar processtiderna. Öka väntetiden om efterföljande noder fallerar på tomma svar.
- Supabase vektorsökning är bara så bra som din dokumentinläsning. Om utkasten känns generiska, kör dokumentladdaren igen och bekräfta att embeddings- och upsert-stegen skriver till rätt tabell.
Snabba svar
Räkna med cirka 60–90 minuter om din Supabase och Airtable redan är redo.
Nej. Du kommer mest att koppla konton och klistra in några ID:n och API-nycklar.
Ja. n8n har ett gratis självhostat 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 med kostnader för AI-modellens API, som vanligtvis är några cent per ärende beroende på meddelandelängd.
Två alternativ: n8n Cloud (hanterat, enklast att komma igång) eller självhosting på en VPS. För självhosting är Hostinger VPS prisvärt och hanterar n8n bra. Självhosting ger dig obegränsade körningar men kräver grundläggande serverhantering.
Ja, och det bör du. Vanliga justeringar är att ändra Gmail-triggern så att den bevakar en annan etikett eller alias, justera prioritetströskeln i orchestratorns beslutslogik och byta Slack-kanal som används för eskaleringar. Du kan också ersätta Supabase RAG med en annan kunskapskälla, men behåll mönstret “guardrails först” så att riskfyllt innehåll aldrig når utkaststeget.
Oftast handlar det om en utgången Google-token eller att fel Gmail-konto är anslutet i n8n. Anslut Gmail-uppgiften igen och bekräfta sedan att triggern bevakar rätt inkorg, etikett och filtret “Unread”. Om du nyligen har skärpt Google Workspace-säkerheten kan du också behöva en admin som tillåter integrationen.
En typisk setup kan hantera hundratals ärenden per dag, men den verkliga begränsningen är din n8n-plan och AI:ns rate limits.
Ofta, ja, eftersom det här inte är en enkel tvåstegs-zap. Du kör en tillståndsbaserad process med guardrails, förgrenade beslut och flera AI-anrop, plus ett uppslag i kunskapsbasen. n8n gör den logiken enklare att kontrollera, och självhosting kan göra körkostnader mer förutsägbara när volymen sticker iväg. Zapier eller Make kan fortfarande fungera om du bara vill ha “mejl in, utkast ut” utan säkerhetslager och eskaleringsregler. Om du vill ha hjälp att välja, prata med en automationsexpert och mappa det mot din ärendevolym och risktolerans.
Sätt upp det en gång, så slutar inkorgen vara ett roulettehjul. Workflowet tar hand om den riskfyllda, repetitiva triagen så att teamet kan fokusera på ärenden som faktiskt kräver omdöme.
Kontakta oss
Hör av dig, så diskuterar vi hur just din verksamhet kan dra nytta av alla fantastiska möjligheter som AI skapar.