

研究からプレゼンテーションへのパイプライン:Tavily、LLM、Slides API(2026年)
研究からプレゼンテーションへのパイプラインは、トピックを入力として受け取り、出典付きのスライドデッキを出力します。検索API(TavilyまたはExa)が10~20件のソースを収集し、LLMが番号付き引用付きの12枚スライドのブリーフを作成し、2Slides APIがそのブリーフをデッキに変換します。編集可能なPPTXはPOST /api/v1/slides/generateで1ページあたり10クレジット(12スライドで120クレジット、約0.30ドル)、画像デザインスライドはcreate-pdf-slidesで1ページあたり10 + 100クレジットです。コンサルティングチーム、アナリスト、リサーチオペレーションで毎週同じデッキを出す場合に適しています。
主なポイント
- 12スライドのFast PPTデッキは120クレジット、5ドルパック単価で約0.30ドル。画像デザイン版は1,210クレジット、約3.03ドル。
- パイプラインは4回の呼び出し:検索API呼び出し1回、LLM呼び出し1回、
GET /api/v1/themes/search、POST /api/v1/slides/generate。 - すべての2Slidesレスポンスは
{ success, data: { jobId, status, downloadUrl } }でラップされており、1つのパーサーで送信とポーリングを処理可能。 - レート制限は1キーあたり1分間に6リクエスト、Fast PPTデッキは同期モードで約30秒で返却。
- 引用はLLMのプロンプトで番号付きソースリストを強制し、架空の数字を禁止しないと残らない。デッキ生成は内容を整形するだけで事実確認はしない。
対象ユーザー
コンサルティング業務、リサーチデスク、コンテンツ運用を行い、「ヨーロッパのバッテリーリサイクル市場についての簡単なデッキを数日に一度作ってほしい」と依頼される方。調査に1時間、デッキ作成に2時間かかり、毎回同じ12スライド(概要、市場規模、プレイヤー、トレンド、リスク、提言、出典)を作成している場合。すでにn8nやPythonスケジューラを所有していれば、新たなインフラは不要です。
クライアント向けのカスタム分析が必要な最終成果物には使わないでください。数分で出典付きの初稿を作るもので、人間が出典を読み内容を判断します。
ワークフロー概要
| ステップ | ツール | 処理内容 | 2Slidesエンドポイント / クレジット |
|---|---|---|---|
| 1. トリガー | n8nスケジュールまたはフォーム、cron、CLI引数 | トピック文字列がパイプラインに入る | なし |
| 2. 検索 | Tavily /search または Exa /search | タイトルとテキストスニペット付きの10~20件のURLを取得 | なし |
| 3. ブリーフ作成 | OpenAIまたはClaude | 12スライドのアウトライン、各統計に[n]タグ付き、ソースリスト付き | なし |
| 4. テーマ選択 | GET /api/v1/themes/search?query=consulting | 候補のthemeIdを返す | 無料、6リクエスト/分 |
| 5. デッキ生成 | POST /api/v1/slides/generate(またはcreate-pdf-slides) | ブリーフをPPTX(またはPDF+ページ画像)に変換 | 10クレジット/ページ(または10 + 100/ページ) |
| 6. ポーリング | GET /api/v1/jobs/{jobId}を5~10秒ごとに | status: "success"になるまで待機 | 無料、10リクエスト/分 |
| 7. 配信 | Google Driveアップロード、Slackメッセージ | チームにリンクとソースファイルを共有 | なし |
ステップ1:研究APIで10~20件のソースを収集
デッキの質はソース次第なのでここに労力をかけてください。Tavilyはページ内容を抽出して返し、LLMが記憶ではなく引用できるようにします。Exaもセマンティック検索で同様です。トピックが時間依存なら過去12ヶ月に絞って10~20件を取得してください。
各結果は{ id, url, title, published, snippet }として保存し、idは1から連番にします。これらのidがスライドの引用マーカーになるので、処理中は同じ配列を保持してください。
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
}'ステップ2:引用付きの12スライドブリーフを作成(OpenAIまたはClaude)
プロンプトは3つの役割を果たします:スライド構成を固定、すべての数字に引用IDを付与、ソースにない数字を禁止。JSONではなくプレーンテキストで出力させ、2SlidesのuserInputに直接渡します。
多くのコンサルティングブリーフに合う構成は12スライド:1タイトル、2エグゼクティブサマリー、3市場規模、4~5主要プレイヤー、6~7トレンド、8~9リスク、10~11提言、12出典。1スライドあたり3~5箇条書き。Fast PPTテンプレートはこの密度に最適化されています。
You are a research analyst. Using ONLY the numbered sources below, write a 12-slide
briefing on: {topic}.
Slides: 1 Title, 2 Executive summary, 3 Market size, 4-5 Key players, 6-7 Trends,
8-9 Risks, 10-11 Recommendations, 12 Sources.
Rules:
- Every number, percentage or date must end with its source id in brackets, e.g. "EUR 4.2B by 2030 [3]".
- If the sources do not contain a figure, write "no reliable figure found" instead of estimating.
- Slide 12 lists every cited id as "[n] Title, Publisher, URL".
- 3 to 5 bullets per slide, each under 20 words. Start each slide with "Slide N: <heading>".
Sources:
{sources}ステップ3:コンサルティングスタイルのテーマを選択
Fast PPTデッキはデザイン済みテンプレートから作られ、themeIdが見た目を決定します。ライブラリを一度だけ「consulting」や「corporate」で検索し、1~2個のIDを選んでパイプラインにハードコードしてください。毎回検索するとレート制限を消費します。
curl -s "https://2slides.com/api/v1/themes/search?query=consulting&limit=5" \
-H "Authorization: Bearer $SLIDES_API_KEY"レスポンスは各テーマのthemeId、名前、プレビューを返します。視覚的に選ぶにはTemplates Hubで1,500以上のテンプレートを閲覧可能です。

ステップ4:2Slides APIでデッキを生成
2つの方法があります。編集可能なPPTXをPowerPointで再編集したい場合はgenerateを呼び出します。デフォルトは同期モードで、12スライドなら約30秒でdownloadUrlが返ります。複数トピックをバッチ処理する場合はmode: "async"を渡してポーリングしてください。
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"
}'レスポンス例:
{ "success": true, "data": { "jobId": "job_9f3a...", "status": "pending" } }高品質な画像デザイン版(PDF+ページ画像)を作る場合は同じブリーフでcreate-pdf-slidesを呼び出します。page: 12でブリーフに合わせるか、page: 0でプランナーに任せます。
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"
}'どちらも同じ形式のレスポンスを返します。GET https://2slides.com/api/v1/jobs/{jobId}を5~10秒ごとにポーリングし、data.statusがsuccessまたはfailedになるまで待ち、data.downloadUrlを取得してください。
ステップ5:実装例A、n8nワークフロー(Tavily n8nプレゼンテーション)
n8nは非エンジニアでもフォームからトリガーできるスケジュールされたTavily n8nプレゼンテーションジョブを最速で作れます。7つの標準ノードで十分です。
- Schedule Trigger(週次)または単一の「topic」フィールドを持つForm Trigger。
- トピックでTavily
/searchにHTTP Request、max_results: 15。 - Step 2のプロンプトを使うOpenAIノード(またはClaudeへのHTTP Request)。番号付きソースをメッセージに渡す。
- LLMテキストから
{ userInput, themeId, responseLanguage: "English", mode: "async" }を組み立てるCodeノード。 POST https://2slides.com/api/v1/slides/generateにHTTP Request。ヘッダーにAuthorization: Bearer {{ $env.SLIDES_API_KEY }}。APIキーはn8nの資格情報に保持し、ノード本文には入れない。- Waitノード(10秒)、続いて
GET /api/v1/jobs/{{ $json.data.jobId }}のHTTP RequestとIFノード:successは続行、pendingまたはprocessingはWaitに戻る、failedはSlackにエラー投稿。 - HTTP Requestで
data.downloadUrlをバイナリでダウンロードし、Google DriveアップロードとSlackメッセージでDriveリンクとトピックを共有。
Step 1のsources.jsonもGoogle Driveにアップロードしてください。レビュアーはスライドの出典だけでなく全文スニペットも確認したいはずです。資格情報やエラーブランチはn8n + 2Slides: automate presentation workflowsで解説しています。
ステップ6:実装例B、単一Pythonスクリプト
cronジョブで動かすチーム向けに、1ファイルで同じ処理を行うPythonスクリプト例。TavilyとOpenAIを使い、ExaやClaudeに差し替え可能です。
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)このスクリプトは1回の実行でPPTXファイルと.sources.json(ソースリストとブリーフテキスト)を出力します。JSONはパートナーから「スライド3の数字はどこから?」と聞かれた時の監査証跡になります。バッチ処理時は1分間に6件以下の送信に抑えてください。
引用の衛生管理:すべての数字に出典を付ける
自動コンサルティングデッキ生成が失敗する典型例は、スライド3にソースにない自信満々の数字が出ること。デッキ生成は受け取った内容を整形するだけなので、制御はLLMステップとその後のチェックにあります。
- マーカー形式を強制。 すべての数字は
[n]で終わる。正規表現で数字の後に%、B、M、または年があって括弧付きIDがない行があればブリーフを拒否し、LLM呼び出しを再実行。 - IDをソース配列と照合。 ブリーフに
[7]がありソースが6件ならモデルが架空の参照を作った。失敗として処理停止。 - 出典スライドを保持。 スライド12に
[n] Title, Publisher, URLをすべてリストアップ。レビュアーはまずここを見る。 - 補助ファイルを保存。
.sources.json(またはn8nのDriveアップロード)にモデルが見たスニペットを保持し、レビュアーがスライド文と原文を比較可能に。 - 「no reliable figure found」を推奨。 コンサルタントは正直な欠落を埋められるが、捏造数字は検出困難。
エージェント代替:Claude CodeやCodexと2SlidesスキルまたはMCP
スクリプトパイプラインは定期的で繰り返しのトピック向け。一回限りの深掘りはエージェントセッションで同じ手順を対話的に行えます。ホストされた2Slides MCPサーバーをClaude Codeに1コマンドで接続し、エージェントにウェブ検索ツールで調査、引用付きブリーフ作成、themes_searchでコンサルティングテーマ取得、slides_generateでブリーフを渡すよう指示。MCPはREST APIと同じキーとクレジットで7つのツール(jobs_getによるポーリング含む)を公開します。
claude mcp add --transport http 2slides "https://2slides.com/api/mcp?apikey=YOUR_KEY"
Codex、Cursorなどスキルを好むエージェントはスキルページからAgent Skillをインストールしてください。同じエンドポイントと送信・ポーリング・ダウンロードループを教えます。Agent Skills vs MCP servers for presentationsで比較とトレードオフを解説し、How to use Claude MCP to generate presentationsでセットアップ手順を説明。

コンサルティング品質のデッキ例
2SlidesギャラリーにはBCGの「AI at Work 2025」などの参考デッキがあり、1行の主張で始まり方法論と出典で終わる、上記12スライドブリーフと同じ構成です。これらはAPI出力ではなく実際のリファレンスデッキ。デザインの参考に使うか、画像デザイン版のcreate-like-thisにページ画像URLをreferenceImageUrlとして渡し、色・レイアウト・タイプを参照元から継承させることも可能。


コンサルティング業務に合うツールの全体像はBest AI presentation tools for consultantsを参照。GammaのAPIページは類似のn8n + Tavily + OpenAIレシピを掲載。GammaのAPIキーはProプランが必要ですが、2Slidesのキーはどのアカウントでも使えます。2Slidesは当社製品なので比較はご留意ください。
費用について
クレジットは従量課金制:5ドルで2,000クレジット(1クレジット0.0025ドル)、80ドルで40,000クレジット(1クレジット0.002ドル)。検索APIとLLMの料金は各プロバイダーに請求され、以下には含みません。
| ボリューム | Fast PPT generate(12スライド=120クレジット) | 画像デザイン版 create-pdf-slides(12スライド2K=1,210クレジット) |
|---|---|---|
| 月20デッキ | 2,400クレジット、約6.00ドル(9.50ドルパックでカバー) | 24,200クレジット、約48~61ドル(パックにより変動) |
| 月500デッキ | 60,000クレジット、約120ドル(80ドルパック2つ分) | 605,000クレジット、約1,210ドル(1クレジット0.002ドル換算) |
新規アカウントは500クレジット無料、Fast PPTテストデッキ4回分に相当。
このユースケースにおけるFast PPTと画像デザインスライドの使い分け
- Fast PPT
generateは コンサルタントがPowerPointで編集する場合、高ボリューム(月500デッキで約120ドル)、テンプレート外観で問題ない場合に適合。約30秒で返却。 create-pdf-slidesは クライアント向けの読み取り専用PDFで、デザイン性の高い1スライド1アイデアの見た目が必要な場合に適合。コストは約10倍。create-like-thisは 企業のハウススタイルがある場合に適合。既存のブランドスライド画像をreferenceImageUrlに渡し、色・タイプ・レイアウトを継承。- ナレーションとMP4は画像デザインジョブのみ対応、
generate-narrationで1ページ210クレジット。社内リサーチ動画に便利で、Fast PPTパスでは不可。
よくある落とし穴
- レート制限は1分間に6リクエスト。 バッチは10~12秒に1件送信し、ポーリングは別枠の10リクエスト/分
jobs予算を使う。 - APIキーをn8nノード本文やブラウザスクリプトに入れない。 n8n資格情報かサーバー環境変数に保持。
- Fast PPTデッキのナレーションは不可。
generate-narrationはcreate-pdf-slidesまたはcreate-like-thisのジョブのみ受け付ける。Fast PPTは拒否される。 page: 0は自動検出で0ページではない。create-pdf-slidesではブリーフが12スライドならpage: 12、プランナー任せならpage: 0。- 言語コードではなく言語名を使う。
responseLanguageは"Spanish"や"German"など、"es"や"de"は不可。 - 20件の全文記事を
userInputに送らない。 まず要約し、ブリーフを2Slidesに渡す。
よくある質問
研究からプレゼンテーションパイプラインの1デッキあたりの費用は?
12スライドFast PPTデッキの2Slides部分は約0.30ドル(120クレジット×0.0025ドル)、12スライド画像デザイン版2Kは約3.03ドル(1,210クレジット)。検索APIとLLMは別途プロバイダーに請求。月500デッキならFast PPTパスは約120ドル。
他言語でデッキを出力できる?
はい。responseLanguageに"Spanish"や"Japanese"など言語名を渡せば20以上の言語に対応。最もクリーンな方法はブリーフを英語で書き、生成時に2Slidesに翻訳させることで、引用とURLは言語間で同一に保てます。
n8nは必須?ワークフローツールなしで動かせる?
n8nは必須ではありません。ステップ6のPythonスクリプトはcronから同じ処理を行い、2Slides MCPやスキルを使ったエージェントセッションは対話的に実行可能。n8nは非エンジニアがフォームから起動し、Google DriveやSlack連携をコードなしで実現したい場合に有用です。
LLMがスライドで統計を捏造するのを防ぐには?
プロンプトを制約し、出力を検証してください。すべての数字に[n]出典IDを付けることを要求し、推定ではなく「no reliable figure found」と書くよう指示。ソース数を超えるIDがあればブリーフを拒否。デッキ横にソースファイルを保存し、レビュアーがスライドと原文を照合できるように。
自社のスライドスタイルに合わせたい場合は?
create-like-thisを使い、既存のブランドスライドの公開URLをreferenceImageUrlに渡すと、画像デザイン版が色・フォント・レイアウトを継承。コストはcreate-pdf-slidesと同じで、10クレジット+ページごとに100クレジット(2K解像度)。編集可能PPTXならthemes/searchで最も近いテーマを選択してください。
次のステップ
- 2slides.com/apiでAPIキーを取得。新規アカウントは500クレジット無料、12スライド4デッキ分。
- 同じエンドポイントを使う他チームの活用例はハブ記事AI presentation API use cases by teamを参照。
- チームがClaude CodeやCodexを使うならAgent Skillをインストールし、スケジュール前に対話的に研究からプレゼン作成を試す。ワークフローツール版はn8n + 2Slidesで解説。
About 2Slides
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For Free