2Slides Logo
Pipeline de investigación a presentación: Tavily, LLM, Slides API (2026)
2Slides Team
17 min read

Pipeline de Investigación a Presentación: Tavily, LLM, Slides API (2026)

Un pipeline de investigación a presentación toma un tema y devuelve una presentación con fuentes. Una API de búsqueda (Tavily o Exa) recopila de 10 a 20 fuentes, un LLM escribe un resumen de 12 diapositivas con citas numeradas, y la API de 2Slides convierte el resumen en una presentación: POST /api/v1/slides/generate para un PPTX editable a 10 créditos por página (120 créditos, unos $0.30, para 12 diapositivas), o create-pdf-slides para diapositivas diseñadas con imágenes a 10 + 100 créditos por página. Es ideal para equipos de consultoría, analistas y operaciones de investigación que entregan la misma presentación semanalmente.

Puntos clave

  • Una presentación Fast PPT de 12 diapositivas cuesta 120 créditos, unos $0.30 al precio del paquete de $5; la versión con diseño de imágenes cuesta 1,210 créditos, unos $3.03.
  • El pipeline consta de cuatro llamadas: una a la API de búsqueda, una al LLM, GET /api/v1/themes/search, y luego POST /api/v1/slides/generate.
  • Cada respuesta de 2Slides está envuelta como { success, data: { jobId, status, downloadUrl } }, por lo que un solo parser maneja tanto el envío como la consulta.
  • El límite de tasa es de 6 solicitudes por minuto por clave, y una presentación Fast PPT se entrega en unos 30 segundos en modo síncrono.
  • Las citas se mantienen solo si el prompt del LLM fuerza una lista numerada de fuentes y prohíbe cifras inventadas; el generador de presentaciones formatea el contenido, no lo verifica.

Para quién es esto

Diriges una práctica de consultoría, un equipo de investigación o una operación de contenido, y alguien pide "una presentación rápida sobre el mercado europeo de reciclaje de baterías" cada pocos días. La investigación toma una hora, la presentación dos más, y siempre son las mismas 12 diapositivas: resumen, tamaño de mercado, jugadores, tendencias, riesgos, recomendaciones, fuentes. Si ya tienes una instancia de n8n o un programador en Python, esta receta no requiere infraestructura nueva.

No uses esta receta para entregables finales al cliente que necesiten análisis personalizados. Produce un primer borrador con fuentes en minutos; un humano aún lee las fuentes y decide qué decir.

El flujo de trabajo en resumen

PasoHerramientaQué sucedeEndpoint 2Slides / créditos
1. Disparadorn8n Schedule o Form, cron, o argumento CLIEntra un string con el tema al pipelineninguno
2. BúsquedaTavily /search o Exa /search10 a 20 URLs con títulos y fragmentos de textoninguno
3. ResumenOpenAI o ClaudeUn esquema de 12 diapositivas, cada estadística con etiqueta [n], más lista de fuentesninguno
4. TemaGET /api/v1/themes/search?query=consultingDevuelve valores candidatos themeIdgratis, 6 req/min
5. PresentaciónPOST /api/v1/slides/generate (o create-pdf-slides)El resumen se convierte en un PPTX (o PDF + imágenes por página)10 créditos/página (o 10 + 100/página)
6. ConsultaGET /api/v1/jobs/{jobId} cada 5 a 10 sEsperar status: "success"gratis, 10 req/min
7. EntregaSubida a Google Drive, mensaje en SlackEl equipo recibe un enlace y el archivo de fuentesninguno

Paso 1: Recolectar de 10 a 20 fuentes con una API de investigación

La presentación es tan buena como las fuentes, así que dedica esfuerzo aquí. Tavily devuelve resultados con contenido extraído de la página, que es lo que un LLM necesita para citar en lugar de recordar. Exa hace lo mismo con búsqueda semántica. Pide de 10 a 20 resultados y restringe a los últimos 12 meses cuando el tema sea sensible al tiempo.

Guarda cada resultado como { id, url, title, published, snippet } y numera los ids desde 1. Esos ids serán los marcadores de cita en las diapositivas, así que mantén el mismo arreglo durante toda la ejecución.

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 }'

Paso 2: Escribir un resumen de 12 diapositivas con citas (OpenAI o Claude)

El prompt hace tres cosas: fija la estructura de las diapositivas, fuerza que cada número lleve un id de cita, y prohíbe números que no aparezcan en las fuentes. Pide texto plano, no JSON, porque el texto va directo a userInput de la llamada a 2Slides.

Una estructura que funciona para la mayoría de resúmenes de consultoría es 12 diapositivas: 1 título, 2 resumen ejecutivo, 3 tamaño de mercado, 4 a 5 jugadores clave, 6 a 7 tendencias, 8 a 9 riesgos, 10 a 11 recomendaciones, 12 fuentes. Mantén de 3 a 5 viñetas por diapositiva; las plantillas Fast PPT están diseñadas para esa densidad.

Eres un analista de investigación. Usando SOLO las fuentes numeradas abajo, escribe un resumen de 12 diapositivas sobre: {topic}. Diapositivas: 1 Título, 2 Resumen ejecutivo, 3 Tamaño de mercado, 4-5 Jugadores clave, 6-7 Tendencias, 8-9 Riesgos, 10-11 Recomendaciones, 12 Fuentes. Reglas: - Cada número, porcentaje o fecha debe terminar con su id de fuente entre corchetes, ej. "EUR 4.2B para 2030 [3]". - Si las fuentes no contienen una cifra, escribe "no reliable figure found" en lugar de estimar. - La diapositiva 12 lista cada id citado como "[n] Título, Editor, URL". - 3 a 5 viñetas por diapositiva, cada una con menos de 20 palabras. Comienza cada diapositiva con "Slide N: <título>". Fuentes: {sources}

Paso 3: Elegir un tema estilo consultoría

Las presentaciones Fast PPT se construyen a partir de plantillas diseñadas, y el themeId decide el aspecto. Busca en la biblioteca una vez por "consulting" o "corporate", elige uno o dos ids, y codifícalos en el pipeline. Buscar en cada ejecución solo consume presupuesto de límite de tasa.

curl -s "https://2slides.com/api/v1/themes/search?query=consulting&limit=5" \ -H "Authorization: Bearer $SLIDES_API_KEY"

La respuesta lista cada tema con su themeId, nombre y vista previa. Para navegar visualmente, el Templates Hub muestra los mismos más de 1,500 templates.

2Slides Templates Hub para elegir un tema estilo consultoría
Figura 1: El Templates Hub, donde eliges un tema consultoría o corporativo y copias su themeId para la llamada API.

Paso 4: Generar la presentación con la API de 2Slides

Dos caminos. Para un PPTX editable que un consultor pueda modificar en PowerPoint, llama a generate. Por defecto es síncrono, así que una presentación de 12 diapositivas regresa con un downloadUrl en una llamada en unos 30 segundos. Para lotes de varios temas, pasa mode: "async" y consulta luego.

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" }'

Respuesta:

{ "success": true, "data": { "jobId": "job_9f3a...", "status": "pending" } }

Para una versión premium con diseño de imágenes (PDF más imágenes por página), llama a create-pdf-slides con el mismo resumen. Establece page: 12 para coincidir con el resumen, o page: 0 para que el planificador elija.

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 caminos devuelven el mismo sobre. Consulta GET https://2slides.com/api/v1/jobs/{jobId} cada 5 a 10 segundos hasta que data.status sea success o failed, luego descarga data.downloadUrl.

Paso 5: Implementación A, el flujo de trabajo n8n (presentación Tavily n8n)

n8n es la forma más rápida de hacer un trabajo programado de presentación Tavily n8n que usuarios no técnicos puedan disparar desde un formulario. Siete nodos estándar son suficientes.

  • Schedule Trigger (semanal) o Form Trigger con un solo campo "topic".
  • HTTP Request a Tavily /search con el tema, max_results: 15.
  • Nodo OpenAI (o una HTTP Request a Claude) con el prompt del Paso 2; pasa las fuentes numeradas en el mensaje.
  • Nodo Code que arma { userInput, themeId, responseLanguage: "English", mode: "async" } desde el texto del LLM.
  • HTTP Request a POST https://2slides.com/api/v1/slides/generate con encabezado Authorization: Bearer {{ $env.SLIDES_API_KEY }}. Mantén la clave en credenciales n8n, nunca en el cuerpo del nodo.
  • Nodo Wait (10 segundos), luego HTTP Request a GET /api/v1/jobs/{{ $json.data.jobId }} y un nodo IF: success continúa, pending o processing vuelve a Wait, failed envía el error a Slack.
  • HTTP Request (descarga data.downloadUrl como binario) luego subida a Google Drive y mensaje en Slack con el enlace de Drive y el tema.

Agrega una segunda subida a Google Drive para el sources.json del Paso 1; el revisor querrá los fragmentos completos, no solo la diapositiva de Fuentes. Credenciales y ramas de error se cubren en n8n + 2Slides: automatiza flujos de trabajo de presentación.

Paso 6: Implementación B, un script Python único

Para un equipo que prefiera un trabajo cron, un archivo Python hace el mismo trabajo. Esta versión usa Tavily y OpenAI; cambia a Exa o Claude modificando una función.

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)

El script escribe dos archivos por ejecución: el PPTX y un .sources.json con la lista de fuentes y el texto del resumen. El JSON es la pista de auditoría cuando un socio pregunta de dónde salió la cifra de la diapositiva 3. Para lotes, mantén las solicitudes por debajo de 6 por minuto.

Higiene de citas: cada número lleva su fuente

La generación automática de presentaciones de consultoría falla de forma predecible: un número confiado en la diapositiva 3 que ninguna fuente contiene. El generador solo formatea lo que recibe, así que los controles están en el paso del LLM y una verificación posterior.

  • Forzar el formato del marcador. Cada cifra termina con [n]. Rechaza el resumen (y vuelve a llamar al LLM) si una expresión regular encuentra un número seguido de "%", "B", "M" o un año sin un id entre corchetes en la misma línea.
  • Validar ids contra el arreglo de fuentes. Un [7] en el resumen con solo 6 fuentes significa que el modelo inventó una referencia. Falla la ejecución.
  • Mantener la diapositiva de Fuentes. La diapositiva 12 lista [n] Título, Editor, URL para cada id citado. Es la diapositiva que el revisor lee primero.
  • Guardar el archivo complementario. El .sources.json (o la subida a Drive en n8n) guarda los fragmentos que vio el modelo, para que un revisor compare el texto de la diapositiva con el pasaje original.
  • Preferir "no reliable figure found". Los consultores pueden llenar un vacío honesto; no pueden detectar fácilmente un número fabricado.

La alternativa agente: Claude Code o Codex con la skill 2Slides o MCP

El pipeline scriptado es ideal para temas programados y repetibles. Para un análisis puntual, una sesión agente hace los mismos pasos interactivamente. Conecta el servidor MCP alojado de 2Slides a Claude Code con un comando, luego pide al agente que investigue el tema con su herramienta de búsqueda web, escriba el resumen citado, llame a themes_search para un tema consultoría, y llame a slides_generate con el resumen. El MCP expone 7 herramientas, incluyendo jobs_get para consultas, con la misma clave y créditos que la API REST.

claude mcp add --transport http 2slides "https://2slides.com/api/mcp?apikey=YOUR_KEY"

Pestaña MCP Server de 2Slides con el endpoint HTTP Streamable y el comando claude mcp add
Figura 2: La pestaña MCP Server en la página de API, con el endpoint HTTP Streamable y la configuración de Claude Code en una línea.

En Codex, Cursor u otro agente que prefiera skills, instala la Agent Skill desde la página de skills en su lugar; enseña los mismos endpoints y el mismo ciclo de envío, consulta y descarga. Consulta Agent Skills vs MCP servers for presentations para las diferencias y How to use Claude MCP to generate presentations para la configuración paso a paso.

Página de Agent Skills de 2Slides listando Claude Code, OpenAI Codex, Cursor, Google Antigravity, Manus y Openclaw
Figura 3: La página Agent Skills, con instrucciones de instalación para Claude Code, Codex, Cursor y otros agentes.

Cómo es una presentación de nivel consultoría

La Galería 2Slides aloja presentaciones de referencia como "AI at Work 2025" de BCG, que abre con una tesis en una línea y cierra con metodología y fuentes, la misma estructura que el resumen de 12 diapositivas arriba. Estas presentaciones de galería son referencias del mundo real alojadas en 2Slides, no salidas de la API. Úsalas como inspiración de diseño, o pasa una URL de imagen de página como referenceImageUrl a create-like-this para que la ruta con diseño de imágenes derive su tipo, color y disposición de la referencia.

Presentación de referencia BCG AI at Work 2025 de la Galería 2Slides, referencia de estructura estilo consultoría
Figura 4: Diapositiva de título de la presentación de referencia BCG AI at Work 2025 en la Galería 2Slides.

Presentación de referencia BCG AI at Work 2025 de la Galería 2Slides, referencia de estructura estilo consultoría
Figura 5: Una diapositiva posterior de la misma presentación, mostrando el diseño de un mensaje por diapositiva que esperan las audiencias consultoras.

Para una visión más amplia de qué herramientas encajan en el trabajo consultor, consulta Best AI presentation tools for consultants. La página API de Gamma documenta una receta comparable n8n + Tavily + OpenAI; sus claves API requieren plan Pro, mientras que las claves 2Slides funcionan en cualquier cuenta. 2Slides es nuestro producto, así que toma esa comparación con criterio.

Cuánto cuesta

Los créditos son pay-as-you-go: $5 compran 2,000 créditos ($0.0025 por crédito) y $80 compran 40,000 ($0.002 por crédito). Las tarifas de la API de búsqueda y LLM las facturan sus proveedores y no están incluidas aquí.

VolumenFast PPT generate (12 diapositivas = 120 créditos)Imagen diseñada create-pdf-slides (12 diapositivas a 2K = 1,210 créditos)
20 presentaciones / mes2,400 créditos, unos $6.00 (cubre el paquete de $9.50)24,200 créditos, unos $48 a $61 según paquete
500 presentaciones / mes60,000 créditos, unos $120 (dos paquetes de $80)605,000 créditos, unos $1,210 a $0.002 por crédito

Las cuentas nuevas reciben 500 créditos gratis, que son 4 presentaciones Fast PPT completas de prueba antes de comprar.

¿Fast PPT o diapositivas diseñadas con imágenes para este caso?

  • Fast PPT generate encaja cuando el consultor editará la presentación en PowerPoint, cuando el volumen es alto (500 presentaciones al mes cuestan unos $120), y cuando un aspecto de plantilla es aceptable. Devuelve en unos 30 segundos.
  • create-pdf-slides encaja cuando la presentación va a un cliente como PDF solo lectura y necesita un diseño con una idea por diapositiva. El costo es aproximadamente 10 veces mayor por presentación.
  • create-like-this encaja cuando la firma tiene un estilo propio: pasa una imagen de diapositiva con marca como referenceImageUrl y cada ejecución hereda ese estilo.
  • Narración y MP4 están disponibles solo en los trabajos con diseño de imágenes, vía generate-narration a 210 créditos por página. Útil para un video interno de informe de investigación, no para la ruta Fast PPT.

Errores comunes

  • Límites de tasa a 6 solicitudes por minuto. Programa ejecuciones en lote con una presentación cada 10 a 12 segundos; la consulta usa el presupuesto separado de 10 req/min para jobs.
  • Clave API en el cuerpo del nodo n8n o en un script de navegador. Mantén la clave en credenciales n8n o en variable de entorno del servidor, nunca en código cliente.
  • Intentar narrar una presentación Fast PPT. generate-narration solo acepta trabajos de create-pdf-slides o create-like-this. Los trabajos Fast PPT son rechazados.
  • page: 0 significa auto-detectar, no cero páginas. En create-pdf-slides, usa page: 12 cuando el resumen ya tiene 12 diapositivas, o page: 0 para que el planificador decida.
  • Códigos de idioma en lugar de nombres. responseLanguage acepta "Spanish" o "German", no "es" o "de".
  • Enviar 20 artículos completos como userInput. Resume primero; el resumen, no las fuentes crudas, va a 2Slides.

Preguntas Frecuentes

¿Cuánto cuesta un pipeline de investigación a presentación por presentación?

Unos $0.30 para la parte 2Slides de una presentación Fast PPT de 12 diapositivas (120 créditos a $0.0025 por crédito), o unos $3.03 para una presentación de 12 diapositivas con diseño de imágenes a 2K (1,210 créditos). Añade una llamada a la API de búsqueda y una finalización LLM, facturadas por sus proveedores. A 500 presentaciones al mes, la ruta Fast PPT cuesta unos $120 en créditos.

¿Puede el pipeline generar una presentación en otro idioma?

Sí. Pasa responseLanguage como nombre de idioma, por ejemplo "Spanish" o "Japanese"; se soportan más de 20 idiomas. La configuración más limpia escribe el resumen en inglés y deja que 2Slides traduzca en tiempo de generación, así las citas y URLs de fuentes permanecen idénticas en las versiones de idioma de la misma presentación.

¿Necesito n8n o puedo ejecutar esto sin una herramienta de flujo de trabajo?

No necesitas n8n. El script Python del Paso 6 hace el mismo trabajo desde un cron, y una sesión agente con el MCP o skill de 2Slides lo hace interactivamente. n8n es útil cuando usuarios no técnicos deben disparar ejecuciones desde un formulario y quieres entrega en Google Drive y Slack sin escribir esas integraciones.

¿Cómo evito que el LLM invente estadísticas en las diapositivas?

Restringe el prompt y valida la salida. Requiere que cada cifra termine con un id fuente [n], ordena al modelo escribir "no reliable figure found" en lugar de estimar, y rechaza cualquier resumen cuyos ids excedan el conteo de fuentes. Guarda el archivo de fuentes junto a la presentación para que un revisor pueda verificar cada diapositiva con su pasaje.

¿Puedo hacer que el estilo de mis diapositivas coincida con el de mi empresa en lugar de usar una plantilla?

Sí, con create-like-this. Pasa una URL pública de una de tus diapositivas con marca como referenceImageUrl y el pipeline con diseño de imágenes deriva sus colores, tipo y disposición de ella. El costo es igual que create-pdf-slides: 10 créditos de planificación más 100 créditos por página a 2K. Para un PPTX editable, elige el tema más cercano desde themes/search.

Próximos pasos

  • Obtén una clave API en 2slides.com/api. Las cuentas nuevas comienzan con 500 créditos gratis, suficientes para 4 presentaciones de prueba de 12 diapositivas.
  • Ve cómo otros equipos usan los mismos endpoints en el post del hub, Casos de uso de API de presentación AI por equipo.
  • Si tu equipo trabaja en Claude Code o Codex, instala la Agent Skill y ejecuta el pipeline de investigación a presentación interactivamente antes de programarlo; n8n + 2Slides cubre la versión con herramienta de flujo.

About 2Slides

Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.

Try For Free