解決する課題
ユーザーがアシスタントにYouTubeリンクを貼っても、拒否されるか、タイトルからハルシネーションを起こすか、長い動画で失敗します。リサーチ、営業、サポート向けのエージェントを作るチームには、YouTubeの変更のたびに壊れるスクレイパーを保守することなく、あらゆる動画をモデルが推論できるテキストに変換する確実な手段が必要です。
最初のバージョンに含めるべき機能
- 任意のYouTube URLまたは動画IDで呼び出せるツール
- 整形済みの文字起こしテキストと、引用用のタイムスタンプ付きセグメント
- 英語以外の動画に対応する言語選択と翻訳
- モデルのコンテキストに収まるよう長い動画を分割するチャンク処理
- 同じ動画を二度取得しないためのキャッシュ
開発手順(ステップごとに解説)
- 01
連携方法を選ぶ
アシスタントがModel Context Protocolに対応していれば、MCPサーバーを接続するだけでツールが自動的に使えるようになります。対応していない場合は、/transcribeを呼び出す関数ツールを定義します。
- 02
ツールの入出力を定義する
動画URLと任意の言語を受け取り、文字起こしテキストと開始時刻付きのセグメントリストを返します。
- 03
長い動画に対応する
コンテキストウィンドウより長い動画は、セグメントをチャンクに分割して各チャンクを要約してから回答するか、質問に関連するチャンクだけを取得します。
- 04
出典を示す
セグメントのタイムスタンプを引用するようモデルに指示し、ユーザーがすべての主張を確認できるようにします。
サンプルコード
このアイデアは「レシピ1:動画1本から構造化された出力を作る」パターンをベースにしています。チャンネル、プロンプト、保存先はご自身のものに置き換えてください。
import requests
API = "https://www.youtubetranscript.dev/api/v2"
HEADERS = {"Authorization": "Bearer yt_sk_live_YOUR_KEY"}
res = requests.post(f"{API}/transcribe", headers=HEADERS, json={
"video": "https://www.youtube.com/watch?v=VIDEO_ID",
"format": {"timestamp": True, "paragraphs": True},
}).json()
transcript = res["data"]["transcript"]
print(transcript["text"][:500]) # plain text for your LLM prompt
for seg in transcript["segments"][:3]: # timestamps for deep links
print(seg["start"], seg["text"])作る価値がある理由
これは通常、プロダクトではなく機能です。既存のアシスタント、ボット、コパイロットの有用性を大きく高めます。単体プロダクトとしては、共有された動画についての質問に答えるSlackやDiscordのボットをワークスペース単位で課金できます。
避けるべき失敗
- 3時間分の文字起こしを1つのプロンプトに詰め込むこと:チャンク単位で検索または要約しましょう。
- タイムスタンプを捨てること:回答の検証ができなくなります。
- 人気の動画を何度も取得すること:文字起こしはキャッシュしましょう。
このアイデアに関する質問
ChatGPTやClaudeはYouTube動画を読めますか?
単体では安定して読めません。文字起こしツールやMCPサーバーを接続すれば、字幕付きの公開動画であれば全文の文字起こしを読めるようになります。
MCPサーバーとは何ですか?
Model Context Protocolは、AIアシスタントにツールを提供するための標準的な仕組みです。当社のMCPサーバーは文字起こしツールを公開しており、対応するアシスタントはカスタムコードなしで呼び出せます。
非常に長い動画はどう扱えばよいですか?
タイムスタンプ付きセグメントをチャンクに分割し、各チャンクを要約するか、ユーザーの質問に関連するチャンクだけを取得してください。