

Pipeline da Ricerca a Presentazione: Tavily, LLM, Slides API (2026)
Una pipeline da ricerca a presentazione prende un argomento in input e restituisce un deck con fonti. Una API di ricerca (Tavily o Exa) raccoglie da 10 a 20 fonti, un LLM scrive un brief di 12 slide con citazioni numerate, e l’API 2Slides trasforma il brief in un deck: POST /api/v1/slides/generate per un PPTX modificabile a 10 crediti per pagina (120 crediti, circa $0.30, per 12 slide), oppure create-pdf-slides per slide con design a immagini a 10 + 100 crediti per pagina. È adatto a team di consulenza, analisti e operazioni di ricerca che consegnano lo stesso deck settimanalmente.
Punti chiave
- Un deck Fast PPT di 12 slide costa 120 crediti, circa $0.30 al prezzo del pacchetto da $5; la versione con design a immagini costa 1.210 crediti, circa $3.03.
- La pipeline prevede quattro chiamate: una alla API di ricerca, una all’LLM,
GET /api/v1/themes/search, poiPOST /api/v1/slides/generate. - Ogni risposta 2Slides è incapsulata come
{ success, data: { jobId, status, downloadUrl } }, quindi un solo parser gestisce sia l’invio che il polling. - Il limite di richieste è 6 al minuto per chiave, e un deck Fast PPT torna in circa 30 secondi in modalità sincrona.
- Le citazioni sopravvivono solo se il prompt LLM impone una lista numerata di fonti e vieta numeri inventati; il generatore di deck formatta il contenuto, non lo verifica.
A chi è rivolto
Gestisci una pratica di consulenza, un desk di ricerca o un’operazione di contenuti, e qualcuno ti chiede “un deck veloce sul mercato europeo del riciclo delle batterie” ogni pochi giorni. La ricerca richiede un’ora, il deck due ore in più, ed è sempre lo stesso set di 12 slide: sintesi, dimensione del mercato, player, trend, rischi, raccomandazioni, fonti. Se possiedi già un’istanza n8n o uno scheduler Python, questa ricetta non richiede nuova infrastruttura.
Non usare questa ricetta per deliverable finali al cliente che necessitano di analisi su misura. Produce una prima bozza con fonti in pochi minuti; un umano legge ancora le fonti e decide cosa dire.
Il flusso di lavoro a colpo d’occhio
| Passo | Strumento | Cosa succede | Endpoint 2Slides / crediti |
|---|---|---|---|
| 1. Trigger | n8n Schedule o Form, cron, o argomento CLI | Una stringa di argomento entra nella pipeline | nessuno |
| 2. Ricerca | Tavily /search o Exa /search | 10-20 URL con titoli e snippet di testo | nessuno |
| 3. Brief | OpenAI o Claude | Outline di 12 slide, ogni dato con tag [n], più lista fonti | nessuno |
| 4. Tema | GET /api/v1/themes/search?query=consulting | Restituisce valori candidati themeId | gratuito, 6 req/min |
| 5. Deck | POST /api/v1/slides/generate (o create-pdf-slides) | Il brief diventa un PPTX (o PDF + immagini per pagina) | 10 crediti/pagina (o 10 + 100/pagina) |
| 6. Poll | GET /api/v1/jobs/{jobId} ogni 5-10 s | Attende status: "success" | gratuito, 10 req/min |
| 7. Consegna | Upload su Google Drive, messaggio Slack | Il team riceve un link e il file fonti | nessuno |
Passo 1: Raccogliere 10-20 fonti con una API di ricerca
Il deck è buono quanto le fonti, quindi dedica qui il tuo sforzo. Tavily restituisce risultati con contenuto estratto dalla pagina, ciò che un LLM usa per citare invece di ricordare. Exa fa lo stesso con ricerca semantica. Richiedi 10-20 risultati e limita agli ultimi 12 mesi se l’argomento è sensibile al tempo.
Memorizza ogni risultato come { id, url, title, published, snippet } e numerali da 1. Quegli id diventano i marcatori di citazione nelle slide, quindi mantieni lo stesso array per tutta la run.
curl -s https://api.tavily.com/search \
-H "Content-Type: application/json" \
-d '{
"api_key": "'"$TAVILY_API_KEY"'",
"query": "European battery recycling market size 2026",
"search_depth": "advanced",
"max_results": 15,
"include_raw_content": false
}'Passo 2: Scrivere un brief di 12 slide con citazioni (OpenAI o Claude)
Il prompt fa tre cose: fissa la struttura delle slide, forza ogni numero a portare un id di citazione, e vieta numeri che non appaiono nelle fonti. Richiedi testo semplice, non JSON, perché il testo va direttamente in userInput della chiamata 2Slides.
Una struttura che funziona per la maggior parte dei brief di consulenza è 12 slide: 1 titolo, 2 sintesi esecutiva, 3 dimensione mercato, 4-5 player chiave, 6-7 trend, 8-9 rischi, 10-11 raccomandazioni, 12 fonti. Mantieni 3-5 punti per slide; i template Fast PPT sono progettati per questa densità.
Sei un analista di ricerca. Usando SOLO le fonti numerate qui sotto, scrivi un briefing di 12 slide su: {topic}.
Slide: 1 Titolo, 2 Sintesi esecutiva, 3 Dimensione mercato, 4-5 Player chiave, 6-7 Trend,
8-9 Rischi, 10-11 Raccomandazioni, 12 Fonti.
Regole:
- Ogni numero, percentuale o data deve terminare con il suo id fonte tra parentesi, es. "EUR 4.2B entro il 2030 [3]".
- Se le fonti non contengono un dato, scrivi "nessun dato affidabile trovato" invece di stimare.
- La slide 12 elenca ogni id citato come "[n] Titolo, Editore, URL".
- 3-5 punti per slide, ognuno sotto 20 parole. Inizia ogni slide con "Slide N: <titolo>".
Fonti:
{sources}Passo 3: Scegliere un tema in stile consulenza
I deck Fast PPT sono costruiti da template di design, e il themeId decide l’aspetto. Cerca nella libreria una volta per "consulting" o "corporate", scegli uno o due id, e codificali nella pipeline. Cercare a ogni run consuma il budget del rate-limit.
curl -s "https://2slides.com/api/v1/themes/search?query=consulting&limit=5" \
-H "Authorization: Bearer $SLIDES_API_KEY"La risposta elenca ogni tema con themeId, nome e anteprima. Per navigare visivamente, il Templates Hub mostra gli stessi 1.500+ template.

Passo 4: Generare il deck con l’API 2Slides
Due strade. Per un PPTX modificabile che un consulente può rielaborare in PowerPoint, chiama generate. Di default è sync, quindi un deck di 12 slide torna con un downloadUrl in una chiamata in circa 30 secondi. Per batch di più argomenti, passa mode: "async" e fai polling.
curl -s -X POST https://2slides.com/api/v1/slides/generate \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Slide 1: European Battery Recycling Market 2026\n...\nSlide 12: Sources\n[1] ...",
"themeId": "THEME_ID_FROM_SEARCH",
"responseLanguage": "English",
"mode": "async"
}'Risposta:
{ "success": true, "data": { "jobId": "job_9f3a...", "status": "pending" } }Per una versione premium con design a immagini (PDF più immagini per pagina), chiama create-pdf-slides con lo stesso brief. Imposta page: 12 per corrispondere al brief, o page: 0 per lasciare decidere al planner.
curl -s -X POST https://2slides.com/api/v1/slides/create-pdf-slides \
-H "Authorization: Bearer $SLIDES_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"userInput": "Slide 1: European Battery Recycling Market 2026\n...",
"designStyle": "consulting deck, navy and white, dense data slides, one chart per slide",
"aspectRatio": "16:9",
"resolution": "2K",
"page": 12,
"contentDetail": "standard",
"responseLanguage": "English"
}'Entrambe le strade restituiscono lo stesso involucro. Fai polling con GET https://2slides.com/api/v1/jobs/{jobId} ogni 5-10 secondi finché data.status è success o failed, poi scarica data.downloadUrl.
Passo 5: Implementazione A, il workflow n8n (presentazione Tavily n8n)
n8n è il modo più veloce per creare un job programmato di presentazione Tavily n8n che utenti non tecnici possono attivare da un form. Bastano sette nodi standard.
- Schedule Trigger (settimanale) o Form Trigger con un solo campo "topic".
- HTTP Request a Tavily
/searchcon il topic,max_results: 15. - Nodo OpenAI (o HTTP Request a Claude) con il prompt del Passo 2; passa le fonti numerate nel messaggio.
- Nodo Code che assembla
{ userInput, themeId, responseLanguage: "English", mode: "async" }dal testo LLM. - HTTP Request a
POST https://2slides.com/api/v1/slides/generatecon headerAuthorization: Bearer {{ $env.SLIDES_API_KEY }}. Tieni la chiave nelle credenziali n8n, mai nel corpo del nodo. - Nodo Wait (10 secondi), poi HTTP Request a
GET /api/v1/jobs/{{ $json.data.jobId }}e un IF node:successcontinua,pendingoprocessingtorna a Wait,failedposta l’errore su Slack. - HTTP Request (scarica
data.downloadUrlcome binario) poi upload su Google Drive e messaggio Slack con link Drive e topic.
Aggiungi un secondo upload Google Drive per il sources.json del Passo 1; il revisore vorrà gli snippet completi, non solo la slide Fonti. Credenziali e gestione errori sono trattate in n8n + 2Slides: automatizzare i workflow di presentazione.
Passo 6: Implementazione B, uno script Python singolo
Per un team che preferisce un cron job, un file Python fa lo stesso lavoro. Questa versione usa Tavily e OpenAI; sostituisci con Exa o Claude cambiando una funzione.
import os, time, json, requests
TAVILY = os.environ["TAVILY_API_KEY"]
OPENAI = os.environ["OPENAI_API_KEY"]
SLIDES = os.environ["SLIDES_API_KEY"]
BASE = "https://2slides.com/api/v1"
H = {"Authorization": f"Bearer {SLIDES}", "Content-Type": "application/json"}
def search(topic, n=15):
r = requests.post("https://api.tavily.com/search", json={
"api_key": TAVILY, "query": topic, "search_depth": "advanced", "max_results": n})
r.raise_for_status()
return [{"id": i + 1, "url": s["url"], "title": s["title"], "snippet": s["content"]}
for i, s in enumerate(r.json()["results"])]
def write_brief(topic, sources):
src = "\n".join(f"[{s['id']}] {s['title']} | {s['url']}\n{s['snippet']}" for s in sources)
prompt = open("brief_prompt.txt").read().format(topic=topic, sources=src)
r = requests.post("https://api.openai.com/v1/chat/completions",
headers={"Authorization": f"Bearer {OPENAI}"},
json={"model": "gpt-4.1", "messages": [{"role": "user", "content": prompt}], "temperature": 0.2})
r.raise_for_status()
return r.json()["choices"][0]["message"]["content"]
def pick_theme(query="consulting"):
r = requests.get(f"{BASE}/themes/search", headers=H, params={"query": query, "limit": 5})
r.raise_for_status()
return r.json()["data"]["themes"][0]["themeId"]
def generate_deck(brief, theme_id, language="English"):
r = requests.post(f"{BASE}/slides/generate", headers=H, json={
"userInput": brief, "themeId": theme_id,
"responseLanguage": language, "mode": "async"})
r.raise_for_status()
body = r.json()
assert body["success"], body
return body["data"]["jobId"]
def wait_for(job_id, every=8, timeout=600):
start = time.time()
while time.time() - start < timeout:
d = requests.get(f"{BASE}/jobs/{job_id}", headers=H).json()["data"]
if d["status"] == "success":
return d["downloadUrl"]
if d["status"] == "failed":
raise RuntimeError(f"job {job_id} failed: {d}")
time.sleep(every)
raise TimeoutError(job_id)
if __name__ == "__main__":
topic = "European battery recycling market 2026"
sources = search(topic)
brief = write_brief(topic, sources)
url = wait_for(generate_deck(brief, pick_theme()))
slug = topic.lower().replace(" ", "-")
open(f"{slug}.pptx", "wb").write(requests.get(url).content)
json.dump({"topic": topic, "sources": sources, "brief": brief},
open(f"{slug}.sources.json", "w"), indent=2)Lo script scrive due file per run: il PPTX e un .sources.json con la lista fonti e il testo del brief. Il JSON è la traccia di audit quando un partner chiede da dove viene la cifra della slide 3. Per batch, mantieni le submission sotto 6 al minuto.
Igiene delle citazioni: ogni numero porta la sua fonte
La generazione automatica di deck di consulenza fallisce in un modo prevedibile: un numero sicuro sulla slide 3 che nessuna fonte contiene. Il generatore di deck formatta solo ciò che riceve, quindi i controlli sono nello step LLM e in una verifica dopo.
- Forza il formato del marcatore. Ogni dato termina con
[n]. Rifiuta il brief (e rilancia la chiamata LLM) se una regex trova un numero seguito da "%", "B", "M" o un anno senza id tra parentesi sulla stessa riga. - Valida gli id rispetto all’array fonti. Un
[7]nel brief con solo 6 fonti significa che il modello ha inventato un riferimento. Fallisci la run. - Mantieni la slide Fonti. La slide 12 elenca
[n] Titolo, Editore, URLper ogni id citato. È la slide che il revisore legge per prima. - Conserva il file companion. Il
.sources.json(o l’upload Drive in n8n) conserva gli snippet visti dal modello, così un revisore può confrontare il testo della slide con il passaggio originale. - Preferisci "nessun dato affidabile trovato". I consulenti possono colmare un vuoto onestamente; non possono facilmente rilevare un numero fabbricato.
L’alternativa agent: Claude Code o Codex con la skill 2Slides o MCP
La pipeline scriptata è adatta a argomenti programmati e ripetibili. Per un deep dive one-off, una sessione agent fa gli stessi passi in modo interattivo. Collega il server MCP 2Slides ospitato a Claude Code con un comando, poi chiedi all’agent di ricercare l’argomento con lo strumento di ricerca web, scrivere il brief citato, chiamare themes_search per un tema consulting, e chiamare slides_generate con il brief. L’MCP espone 7 strumenti, incluso jobs_get per il polling, con la stessa chiave e crediti della REST API.
claude mcp add --transport http 2slides "https://2slides.com/api/mcp?apikey=YOUR_KEY"
In Codex, Cursor o altro agent che preferisce skill, installa invece la Agent Skill dalla pagina skills; insegna gli stessi endpoint e lo stesso ciclo submit, poll, download. Vedi Agent Skills vs MCP servers per presentazioni per i compromessi e Come usare Claude MCP per generare presentazioni per la configurazione passo passo.

Come appare un deck di livello consulenza
La Galleria 2Slides ospita deck di riferimento come “AI at Work 2025” di BCG, che apre con una tesi in una riga e chiude con metodologia e fonti, la stessa forma del brief di 12 slide sopra. Questi deck di galleria sono riferimenti reali ospitati su 2Slides, non output API. Usali come ispirazione di design, o passa un URL immagine pagina come referenceImageUrl a create-like-this così il percorso con design a immagini deriva tipo, colore e layout dal riferimento.


Per una panoramica più ampia sugli strumenti adatti al lavoro di consulenza, vedi I migliori strumenti AI per presentazioni per consulenti. La pagina API di Gamma documenta una ricetta simile n8n + Tavily + OpenAI; le sue chiavi API richiedono un piano Pro, mentre le chiavi 2Slides funzionano su qualsiasi account. 2Slides è il nostro prodotto, quindi valuta il confronto di conseguenza.
Quanto costa
I crediti sono pay-as-you-go: $5 comprano 2.000 crediti ($0.0025 per credito) e $80 comprano 40.000 ($0.002 per credito). Le tariffe di ricerca API e LLM sono fatturate dai loro provider e non incluse qui.
| Volume | Fast PPT generate (12 slide = 120 crediti) | Image-designed create-pdf-slides (12 slide a 2K = 1.210 crediti) |
|---|---|---|
| 20 deck / mese | 2.400 crediti, circa $6.00 (coperto dal pacchetto da $9.50) | 24.200 crediti, circa $48-$61 a seconda del pacchetto |
| 500 deck / mese | 60.000 crediti, circa $120 (due pacchetti da $80) | 605.000 crediti, circa $1.210 a $0.002 per credito |
I nuovi account ricevono 500 crediti gratuiti, equivalenti a 4 test deck Fast PPT completi prima di acquistare.
Fast PPT o slide con design a immagini per questo caso?
- Fast PPT
generateconviene quando il consulente modificherà il deck in PowerPoint, quando il volume è alto (500 deck al mese costano circa $120), e quando un look da template è accettabile. Torna in circa 30 secondi. create-pdf-slidesconviene quando il deck va al cliente come PDF sola lettura e serve un look progettato, un’idea per slide. Il costo è circa 10 volte superiore per deck.create-like-thisconviene quando l’azienda ha uno stile proprietario: passa un’immagine slide brandizzata pubblica comereferenceImageUrle ogni run eredita colori, tipo e layout.- Narrazione e MP4 sono disponibili solo sui job con design a immagini, tramite
generate-narrationa 210 crediti per pagina. Utile per video briefing interni di ricerca, non per il percorso Fast PPT.
Errori comuni
- Limite di richieste a 6 al minuto. Metti in coda i batch con una submission ogni 10-12 secondi; il polling usa il budget separato di 10 req/min per
jobs. - Chiave API nel corpo nodo n8n o script browser. Tienila nelle credenziali n8n o in variabile ambiente server, mai nel codice client.
- Provare a narrare un deck Fast PPT.
generate-narrationaccetta solo job dacreate-pdf-slidesocreate-like-this. I job Fast PPT sono rifiutati. page: 0significa auto-detect, non zero pagine. Sucreate-pdf-slides, impostapage: 12se il brief è già 12 slide, opage: 0per lasciare decidere al planner.- Codici lingua invece di nomi.
responseLanguageprende"Spanish"o"German", non"es"o"de". - Mandare 20 articoli completi come
userInput. Riassumi prima; il brief, non le fonti raw, va a 2Slides.
Domande Frequenti
Quanto costa una pipeline da ricerca a presentazione per deck?
Circa $0.30 per la parte 2Slides di un deck Fast PPT di 12 slide (120 crediti a $0.0025 per credito), o circa $3.03 per un deck con design a immagini di 12 slide a 2K (1.210 crediti). Aggiungi una chiamata search API e una completamento LLM, fatturate dai rispettivi provider. A 500 deck al mese il percorso Fast PPT costa circa $120 in crediti.
La pipeline può produrre un deck in un’altra lingua?
Sì. Passa responseLanguage come nome lingua tipo "Spanish" o "Japanese"; sono supportate più di 20 lingue. La configurazione più pulita scrive il brief in inglese e lascia che 2Slides traduca al momento della generazione, così citazioni e URL fonti restano identici tra versioni linguistiche dello stesso deck.
Serve n8n o posso farlo senza workflow tool?
Non serve n8n. Lo script Python del Passo 6 fa lo stesso lavoro da cron, e una sessione agent con MCP 2Slides o skill lo fa interattivamente. n8n è utile quando utenti non tecnici devono attivare run da form e vuoi consegna su Google Drive e Slack senza scrivere integrazioni.
Come evito che l’LLM inventi statistiche sulle slide?
Vincola il prompt e valida l’output. Richiedi che ogni dato finisca con un id fonte [n], dì al modello di scrivere "nessun dato affidabile trovato" invece di stimare, e rifiuta ogni brief con id superiori al numero di fonti. Conserva il file fonti accanto al deck così un revisore può controllare ogni slide rispetto al passaggio originale.
Posso abbinare lo stile slide della mia azienda invece di un template?
Sì, con create-like-this. Passa un URL pubblico di una tua slide brandizzata come referenceImageUrl e la pipeline con design a immagini ne deriva colori, tipo e layout. Il costo è uguale a create-pdf-slides: 10 crediti di pianificazione più 100 crediti per pagina a 2K. Per un PPTX modificabile, scegli il tema più vicino da themes/search.
Prossimi passi
- Ottieni una chiave API su 2slides.com/api. I nuovi account partono con 500 crediti gratuiti, sufficienti per 4 test deck da 12 slide.
- Scopri come altri team usano gli stessi endpoint nel post hub, Casi d’uso API AI per presentazioni per team.
- Se il tuo team lavora in Claude Code o Codex, installa la Agent Skill e prova la pipeline da ricerca a presentazione interattivamente prima di programmarla; n8n + 2Slides copre la versione con workflow tool.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free