

Pipeline de Pesquisa para Apresentação: Tavily, LLM, Slides API (2026)
Um pipeline de pesquisa para apresentação recebe um tema e retorna um deck com fontes. Uma API de busca (Tavily ou Exa) coleta de 10 a 20 fontes, um LLM escreve um resumo de 12 slides com citações numeradas, e a API 2Slides transforma o resumo em um deck: POST /api/v1/slides/generate para um PPTX editável a 10 créditos por página (120 créditos, cerca de $0,30, para 12 slides), ou create-pdf-slides para slides com design de imagem a 10 + 100 créditos por página. É ideal para equipes de consultoria, analistas e operações de pesquisa que entregam o mesmo deck semanalmente.
Principais pontos
- Um deck Fast PPT de 12 slides custa 120 créditos, cerca de $0,30 na tarifa do pacote de $5; a versão com design de imagem custa 1.210 créditos, cerca de $3,03.
- O pipeline consiste em quatro chamadas: uma chamada à API de busca, uma chamada ao LLM,
GET /api/v1/themes/search, e depoisPOST /api/v1/slides/generate. - Toda resposta do 2Slides é encapsulada como
{ success, data: { jobId, status, downloadUrl } }, então um único parser trata tanto o envio quanto a consulta. - O limite de requisições é de 6 por minuto por chave, e um deck Fast PPT retorna em cerca de 30 segundos no modo síncrono.
- As citações sobrevivem apenas se o prompt do LLM forçar uma lista numerada de fontes e proibir números inventados; o gerador do deck formata o conteúdo, não faz verificação de fatos.
Para quem é este conteúdo
Você gerencia uma prática de consultoria, uma mesa de pesquisa ou uma operação de conteúdo, e alguém pede "um deck rápido sobre o mercado europeu de reciclagem de baterias" a cada poucos dias. A pesquisa leva uma hora, o deck mais duas, e são sempre os mesmos 12 slides: resumo, tamanho do mercado, players, tendências, riscos, recomendações, fontes. Se você já possui uma instância n8n ou um agendador Python, a receita não precisa de nova infraestrutura.
Não use esta receita para entregas finais ao cliente que exigem análise personalizada. Ela produz um primeiro rascunho com fontes em minutos; um humano ainda lê as fontes e decide o que dizer.
Fluxo de trabalho em resumo
| Passo | Ferramenta | O que acontece | Endpoint 2Slides / créditos |
|---|---|---|---|
| 1. Gatilho | Agendamento n8n ou Formulário, cron, ou argumento CLI | Uma string de tema entra no pipeline | nenhum |
| 2. Busca | Tavily /search ou Exa /search | 10 a 20 URLs com títulos e trechos de texto | nenhum |
| 3. Resumo | OpenAI ou Claude | Um esboço de 12 slides, cada estatística marcada [n], mais uma lista de fontes | nenhum |
| 4. Tema | GET /api/v1/themes/search?query=consulting | Retorna valores candidatos de themeId | grátis, 6 req/min |
| 5. Deck | POST /api/v1/slides/generate (ou create-pdf-slides) | Resumo vira um PPTX (ou PDF + imagens por página) | 10 créditos/página (ou 10 + 100/página) |
| 6. Consulta | GET /api/v1/jobs/{jobId} a cada 5 a 10 s | Aguarda status: "success" | grátis, 10 req/min |
| 7. Entrega | Upload no Google Drive, mensagem no Slack | A equipe recebe um link e o arquivo de fontes | nenhum |
Passo 1: Reúna de 10 a 20 fontes com uma API de pesquisa
O deck é tão bom quanto as fontes, então dedique esforço aqui. Tavily retorna resultados com conteúdo extraído da página, que é o que um LLM precisa para citar em vez de apenas recordar. Exa faz o mesmo com busca semântica. Peça de 10 a 20 resultados e restrinja aos últimos 12 meses quando o tema for sensível ao tempo.
Armazene cada resultado como { id, url, title, published, snippet } e numere os ids a partir de 1. Esses ids viram os marcadores de citação nos slides, então mantenha o mesmo array durante toda a execução.
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: Escreva um resumo de 12 slides com citações (OpenAI ou Claude)
O prompt faz três tarefas: fixa a estrutura dos slides, força que todo número carregue um id de citação, e proíbe números que não apareçam nas fontes. Peça texto simples, não JSON, porque o texto vai direto para o userInput da chamada 2Slides.
Uma estrutura que funciona para a maioria dos resumos de consultoria é 12 slides: 1 título, 2 resumo executivo, 3 tamanho do mercado, 4 a 5 principais players, 6 a 7 tendências, 8 a 9 riscos, 10 a 11 recomendações, 12 fontes. Mantenha 3 a 5 tópicos por slide; os templates Fast PPT são projetados para essa densidade.
Você é um analista de pesquisa. Usando SOMENTE as fontes numeradas abaixo, escreva um briefing de 12 slides sobre: {topic}.
Slides: 1 Título, 2 Resumo executivo, 3 Tamanho do mercado, 4-5 Principais players, 6-7 Tendências,
8-9 Riscos, 10-11 Recomendações, 12 Fontes.
Regras:
- Todo número, porcentagem ou data deve terminar com seu id de fonte entre colchetes, ex: "EUR 4.2B até 2030 [3]".
- Se as fontes não contiverem um dado, escreva "nenhum dado confiável encontrado" em vez de estimar.
- O slide 12 lista cada id citado como "[n] Título, Publicadora, URL".
- 3 a 5 tópicos por slide, cada um com menos de 20 palavras. Comece cada slide com "Slide N: <título>".
Fontes:
{sources}Passo 3: Escolha um tema no estilo consultoria
Decks Fast PPT são construídos a partir de templates desenhados, e o themeId decide o visual. Busque na biblioteca uma vez por "consulting" ou "corporate", escolha um ou dois ids, e fixe-os no pipeline. Buscar a cada execução só gasta orçamento do limite de requisições.
curl -s "https://2slides.com/api/v1/themes/search?query=consulting&limit=5" \
-H "Authorization: Bearer $SLIDES_API_KEY"A resposta lista cada tema com seu themeId, nome e pré-visualização. Para navegar visualmente, o Templates Hub mostra os mesmos 1.500+ templates.

Passo 4: Gere o deck com a API 2Slides
Dois caminhos. Para um PPTX editável que o consultor pode estilizar no PowerPoint, chame generate. O padrão é modo síncrono, então um deck de 12 slides retorna com um downloadUrl em uma chamada em cerca de 30 segundos. Para lotes de vários temas, passe mode: "async" e faça 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"
}'Resposta:
{ "success": true, "data": { "jobId": "job_9f3a...", "status": "pending" } }Para uma versão premium com design de imagem (PDF mais imagens por página), chame create-pdf-slides com o mesmo resumo. Defina page: 12 para coincidir com o resumo, ou page: 0 para deixar o planejador escolher.
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"
}'Ambos os caminhos retornam o mesmo envelope. Faça polling em GET https://2slides.com/api/v1/jobs/{jobId} a cada 5 a 10 segundos até que data.status seja success ou failed, então baixe data.downloadUrl.
Passo 5: Implementação A, o fluxo n8n (apresentação Tavily n8n)
n8n é a forma mais rápida de fazer um trabalho agendado de apresentação Tavily n8n que não engenheiros podem disparar via formulário. Sete nós padrão são suficientes.
- Gatilho Schedule (semanal) ou Gatilho Formulário com um único campo "tema".
- Requisição HTTP para Tavily
/searchcom o tema,max_results: 15. - Nó OpenAI (ou uma Requisição HTTP para Claude) com o prompt do Passo 2; passe as fontes numeradas na mensagem.
- Nó Código que monta
{ userInput, themeId, responseLanguage: "English", mode: "async" }a partir do texto do LLM. - Requisição HTTP para
POST https://2slides.com/api/v1/slides/generatecom cabeçalhoAuthorization: Bearer {{ $env.SLIDES_API_KEY }}. Mantenha a chave nas credenciais do n8n, nunca no corpo do nó. - Nó Espera (10 segundos), depois Requisição HTTP para
GET /api/v1/jobs/{{ $json.data.jobId }}e um Nó IF:successcontinua,pendingouprocessingvolta para Espera,failedenvia erro para Slack. - Requisição HTTP (baixa
data.downloadUrlcomo binário) depois Upload Google Drive e mensagem no Slack com o link do Drive e o tema.
Adicione um segundo upload no Google Drive para o sources.json do Passo 1; o revisor vai querer os trechos completos, não só o slide de Fontes. Credenciais e tratamento de erros estão cobertos em n8n + 2Slides: automatize fluxos de apresentação.
Passo 6: Implementação B, um script Python único
Para uma equipe que prefere um job cron, um arquivo Python faz o mesmo trabalho. Esta versão usa Tavily e OpenAI; troque para Exa ou Claude mudando uma função.
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)O script grava dois arquivos por execução: o PPTX e um .sources.json com a lista de fontes e o texto do resumo. O JSON é a trilha de auditoria quando um sócio pergunta de onde veio a figura do slide 3. Para lotes, mantenha submissões abaixo de 6 por minuto.
Higiene das citações: todo número carrega sua fonte
A geração automática de decks de consultoria falha de forma previsível: um número confiante no slide 3 que nenhuma fonte contém. O gerador do deck só formata o que recebe, então os controles ficam no passo do LLM e numa checagem posterior.
- Forçar o formato do marcador. Toda figura termina com
[n]. Rejeite o resumo (e refaça a chamada LLM) se um regex encontrar um número seguido de "%", "B", "M" ou um ano sem id entre colchetes na mesma linha. - Validar ids contra o array de fontes. Um
[7]no resumo com apenas 6 fontes significa que o modelo inventou uma referência. Falhe a execução. - Manter o slide de Fontes. O slide 12 lista
[n] Título, Publicadora, URLpara cada id citado. É o slide que o revisor lê primeiro. - Armazenar o arquivo acompanhante. O
.sources.json(ou o upload no Drive no n8n) mantém os trechos que o modelo viu, para que o revisor compare o texto do slide com a passagem original. - Prefira "nenhum dado confiável encontrado". Consultores podem preencher uma lacuna honesta; não detectam facilmente um número fabricado.
A alternativa agente: Claude Code ou Codex com a skill 2Slides ou MCP
O pipeline scriptado é ideal para temas agendados e repetíveis. Para um mergulho único, uma sessão agente faz os mesmos passos interativamente. Conecte o servidor 2Slides MCP hospedado ao Claude Code com um comando, depois peça ao agente para pesquisar o tema com sua ferramenta de busca web, escrever o resumo citado, chamar themes_search para um tema consultoria, e chamar slides_generate com o resumo. O MCP expõe 7 ferramentas, incluindo jobs_get para polling, na mesma chave e créditos da API REST.
claude mcp add --transport http 2slides "https://2slides.com/api/mcp?apikey=YOUR_KEY"
No Codex, Cursor ou outro agente que prefira skills, instale a Agent Skill da página de skills em vez disso; ela ensina os mesmos endpoints e o mesmo loop de envio, polling e download. Veja Agent Skills vs MCP servers para apresentações para os trade-offs e Como usar Claude MCP para gerar apresentações para o passo a passo.

Como é um deck no padrão consultoria
A Galeria 2Slides hospeda decks de referência como o "AI at Work 2025" da BCG, que abre com uma tese em uma linha e fecha com metodologia e fontes, a mesma estrutura do resumo de 12 slides acima. Esses decks da galeria são referências do mundo real hospedadas no 2Slides, não saída da API. Use-os como inspiração de design, ou passe uma URL de imagem de página como referenceImageUrl para create-like-this para que o caminho de design por imagem derive seu tipo, cor e layout da referência.


Para uma visão mais ampla das ferramentas que se encaixam no trabalho de consultoria, veja Melhores ferramentas de apresentação AI para consultores. A página da API do Gamma documenta uma receita comparável n8n + Tavily + OpenAI; suas chaves API exigem plano Pro, enquanto as chaves 2Slides funcionam em qualquer conta. 2Slides é nosso produto, então pese essa comparação adequadamente.
Quanto custa
Créditos são pay-as-you-go: $5 compra 2.000 créditos ($0,0025 por crédito) e $80 compra 40.000 ($0,002 por crédito). Taxas da API de busca e LLM são cobradas pelos provedores e não estão incluídas abaixo.
| Volume | Fast PPT generate (12 slides = 120 créditos) | Image-designed create-pdf-slides (12 slides a 2K = 1.210 créditos) |
|---|---|---|
| 20 decks / mês | 2.400 créditos, cerca de $6,00 (pacote de $9,50 cobre) | 24.200 créditos, cerca de $48 a $61 dependendo do pacote |
| 500 decks / mês | 60.000 créditos, cerca de $120 (dois pacotes de $80) | 605.000 créditos, cerca de $1.210 a $0,002 por crédito |
Contas novas recebem 500 créditos grátis, o que equivale a 4 decks Fast PPT completos para teste antes de comprar.
Fast PPT ou slides com design de imagem para este caso?
- Fast PPT
generateé adequado quando o consultor vai editar o deck no PowerPoint, quando o volume é alto (500 decks por mês custam cerca de $120), e quando um visual de template é aceitável. Retorna em cerca de 30 segundos. create-pdf-slidesé adequado quando o deck vai para o cliente como PDF somente leitura e precisa de um visual desenhado, uma ideia por slide. O custo é cerca de 10 vezes maior por deck.create-like-thisé adequado quando a empresa tem um estilo próprio: passe uma imagem de slide com marca comoreferenceImageUrle cada execução herda esse estilo.- Narração e MP4 estão disponíveis apenas nos jobs com design de imagem, via
generate-narrationa 210 créditos por página. Útil para vídeo interno de briefing de pesquisa, não para o caminho Fast PPT.
Armadilhas comuns
- Limite de taxa de 6 requisições por minuto. Faça filas de execuções em lotes com uma submissão a cada 10 a 12 segundos; o polling usa o orçamento separado de 10 req/min para
jobs. - Chave API no corpo do nó n8n ou script de navegador. Mantenha na credencial do n8n ou variável de ambiente do servidor, nunca no código cliente.
- Tentar narrar um deck Fast PPT.
generate-narrationaceita apenas jobs decreate-pdf-slidesoucreate-like-this. Jobs Fast PPT são rejeitados. page: 0significa auto-detectar, não zero páginas. Emcreate-pdf-slides, definapage: 12quando o resumo já tem 12 slides, oupage: 0para deixar o planejador decidir.- Códigos de idioma em vez de nomes.
responseLanguageaceita"Spanish"ou"German", não"es"ou"de". - Enviar 20 artigos completos como
userInput. Resuma primeiro; o resumo, não as fontes brutas, vai para 2Slides.
Perguntas Frequentes
Quanto custa um pipeline de pesquisa para apresentação por deck?
Cerca de $0,30 para a parte 2Slides de um deck Fast PPT de 12 slides (120 créditos a $0,0025 por crédito), ou cerca de $3,03 para um deck de 12 slides com design de imagem a 2K (1.210 créditos). Adicione uma chamada à API de busca e uma conclusão LLM, cobradas pelos seus provedores. A 500 decks por mês, o caminho Fast PPT custa cerca de $120 em créditos.
O pipeline pode gerar um deck em outro idioma?
Sim. Passe responseLanguage como nome de idioma, por exemplo "Spanish" ou "Japanese"; mais de 20 idiomas são suportados. A configuração mais limpa escreve o resumo em inglês e deixa o 2Slides traduzir na geração, assim citações e URLs das fontes permanecem idênticos entre versões do mesmo deck.
Preciso do n8n ou posso rodar sem uma ferramenta de workflow?
Você não precisa do n8n. O script Python do Passo 6 faz o mesmo trabalho a partir de um job cron, e uma sessão agente com o MCP ou skill 2Slides faz interativamente. O n8n vale a pena quando não engenheiros devem disparar execuções via formulário e você quer entrega no Google Drive e Slack sem escrever essas integrações.
Como evitar que o LLM invente estatísticas nos slides?
Constrinja o prompt e valide a saída. Exija que toda figura termine com um id de fonte [n], diga ao modelo para escrever "nenhum dado confiável encontrado" em vez de estimar, e rejeite qualquer resumo cujos ids excedam o número de fontes. Armazene o arquivo de fontes junto ao deck para que o revisor confira cada slide com sua passagem.
Posso combinar o estilo de slides da minha empresa em vez de usar um template?
Sim, com create-like-this. Passe uma URL pública de um dos seus slides com marca como referenceImageUrl e o pipeline com design de imagem deriva suas cores, tipo e layout dele. O custo é o mesmo de create-pdf-slides: 10 créditos de planejamento mais 100 créditos por página a 2K. Para um PPTX editável, escolha o tema mais próximo em themes/search.
Próximos passos
- Obtenha uma chave API em 2slides.com/api. Contas novas começam com 500 créditos grátis, suficientes para 4 decks de teste de 12 slides.
- Veja como outras equipes usam os mesmos endpoints no post do hub, Casos de uso da API de apresentação AI por equipe.
- Se sua equipe trabalha em Claude Code ou Codex, instale a Agent Skill e rode o pipeline de pesquisa para apresentação interativamente antes de agendá-lo; n8n + 2Slides cobre a versão com ferramenta de workflow.
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free