これで何ができるか

追いかけているYouTubeチャンネルの新着動画を、見る前に中身を知れるようにします。

  • 登録チャンネルの新着を毎日自動でチェック
  • 字幕を取ってきてAIに要約させる
  • 「3行サマリー」「重要トピック」の形で1ページにまとめる

30分の動画が5本溜まっていても、10秒で「今日はどれを見るべきか」が判断できます。全部見れば2時間半、要約を読めば1分です。

YouTube要約の流れ。チャンネルIDからYouTube Data APIを3回叩いて、アップロード再生リストのID、動画ID、動画の詳細(再生時間を含む)を取る。次に字幕を日本語・英語・中国語の順に試して取得し、AIに要約させて1ページにまとめる。要約済みの動画IDは保存し、翌日はスキップする。
1日1回この順で動きます。この流れをAIが作ります。読者が書くのは指示文だけです。

この記事の本題は、嘘の要約を書かせないための言い方です。字幕が取れなかったとき、AIは中身を見ていないのに見てきたような要約を平気で書きます。そこをどう縛るかが全部です。

前提

かかる時間 1時間30分
費用 無料枠で収まります
必要なもの GitHubアカウント / Googleアカウント / ファイルを作れるAI
プログラミング 不要

これは前の2つのレシピより手間がかかります。外部のサービスを2つ使う登録作業があるためです。ただ、そのハマりどころは全部この記事に書きました。

先に 定時実行をAIに作らせる を読んでおくと楽です。

AIへの頼み方

1. 全体像を渡す

追いかけているYouTubeチャンネルの新着動画を、毎日自動で要約させる仕組みを作りたいです。 条件: - 1日1回、自動で動かす - 新着動画の字幕を取ってきて、AIに要約させる - 「3行サマリー」と「重要トピック」の形でまとめる - 1日に新しく要約するのは5本まで。それ以上は翌日に回す - 一度要約した動画は二度と要約しない(毎日同じ動画に課金したくない) - 私はプログラムを書けないので、ファイルはすべてあなたが作ってください まず全体の構成と、私が用意する必要があるもの(アカウント・キーなど)を教えてください。

「一度要約した動画は二度と要約しない」を最初に言ってください。これが無いと、毎日同じ動画にAIの利用料を払い続ける仕組みができます

2. 必要な登録を、手順で説明させる

私が用意する必要があるものを、番号を振った手順で教えてください。 各手順について、次を書いてください。 - どの画面を開くか(URL) - そこで何をクリックするか - 取得した値をどこに保存するか - 無料枠はどれくらいか。超える心配はあるか

「無料枠はどれくらいか」を必ず聞いてください。外部サービスを使う自動化で一番不安なのはここです。実測では、10チャンネルでも1日30ユニット(無料枠は10,000)でした。

取得したキーはAIに渡さないでください。保存先の画面は教えてもらいますが、値の入力は自分でやります。

3. 字幕が取れないときの動きを、先に決めさせる

ここがこの記事の核心です。

字幕が取れない動画があると思います。字幕が無い、投稿者が無効にしている、クラウドから取得できない、などです。 そのときに何が起きるか教えてください。そのうえで、次の順に段階的に落ちるようにしてください。 1. 字幕が取れたら、字幕を要約する 2. 取れなければ、タイトルと説明文だけで紹介文を書く 3. それも失敗したら、その動画はスキップする(空の要約を載せない)
字幕が取れないときの3段階のフォールバック。1段目は字幕を要約する。取れなければ2段目としてタイトルと説明文だけで紹介文を書かせるが、AIは中身を見ていないので慎重な表現をプロンプトで強制する。それも失敗したら3段目としてその動画をスキップする。
2段目に落ちたときが問題です。AIは中身を見ていないのに、見てきたような要約を書きます。

4. 嘘の要約を書かせない指示を入れさせる

上の2段目に落ちたとき、そのままだと読者は「AIが動画を見て要約した」と誤解します。要約させる指示文そのものに、縛りを入れてもらいます。

2段目(タイトルと説明文だけで書く)のとき、要約を作らせる指示文に、次の縛りを必ず入れてください。 - 動画本編は未視聴である前提で書くこと - 「〜と思われる」「〜の可能性がある」「〜について解説していると見られる」のような慎重な表現を使うこと - タイトルや説明文に書かれていない情報を作らないこと また、ページを見た人が「これは動画を見た要約ではない」と分かるように表示してください。

自分だけが読むなら害は小さいですが、公開するなら必須です。見ていないものを見たように書いた文章を配るのは、それ自体が問題になります。

5. 出力の形を固定させる

要約の出力形式を固定してください。 3行サマリー: - (1行目: 動画の核心) - (2行目: 具体的なデータや数字) - (3行目: 自分にとっての示唆) 重要トピック: - (箇条書きで3〜5個) あわせて、この形式で返ってこなかったときにページが崩れないよう、受け取る側にも備えを入れてください。

後半が効きます。指示は「お願い」であって「保証」ではありません。形式が守られなかったときの受け皿が無いと、ある日ページが真っ白になります。

6. 動かす前に確認させる

実行する前に教えてください。 1. 私がこれから手でやる作業を、番号を振って書いてください 2. 各ステップで、うまくいったときに画面に何が出れば正解ですか 3. 1日あたりいくらくらいかかりますか

うまくいかないときの言い直し方

短い動画(Shorts)まで要約されてしまう

Shorts が混ざってしまいます。除外してください。 ただし「60秒以下」で判定しないでください。Shorts は最長180秒まで伸びています。再生時間と、タイトルのハッシュタグの数と、説明文のマーカーを組み合わせて判定してください。
Shortsの判定条件の図。90秒以下ならほぼ確実にShorts、180秒以下でタイトルにハッシュタグが3個以上ならShortsの可能性が高い、タイトルや説明文に #shorts などのマーカーがあればShorts、の3段で判定する。再生時間はYouTube Data APIのcontentDetails.durationから取る。RSSでは再生時間が取れない。
「60秒」で切ると素通りします。時間だけでは決まらないので3段で見ます。

「60秒以下で判定しないでください」と先に言ってください。言わないと、ほぼ確実に60秒で作ります(昔はそれが正解だったためです)。

要約の中身が薄い/的外れ

要約が薄いです。実際に生成された要約を3件見せてください。そのうえで、指示文のどこを直せば良くなるか案を出してください。いきなり直さず、案を見せてください。

実物を見せさせてから直させるのがコツです。見ずに直させると、当てずっぽうで指示文が長くなるだけです。

突然、全部失敗するようになった

昨日まで動いていたのに、今日から全部失敗します。エラーの内容を見て、原因を教えてください。 使っているAIのモデル名が変わった可能性はありますか。あるなら、モデル名が変わっても止まらないように、候補を順に試す形にしてください。

AIのモデル名は消えます。半年前に動いていた名前が、ある日エラーになります。1つの名前を決め打ちにすると、その日から全滅します。

文字化けした記号が混ざる

要約の中に や ## がそのまま表示されています。装飾の記号を使わないよう指示していても混ざるようなので、受け取った側でも取り除くようにしてください。

毎日同じ動画が要約される

同じ動画が毎日要約されています。一度要約したものを記録して、次回以降はスキップするようにしてください。 あわせて、古い記録が溜まり続けないよう、何日分を残すか決めてください。

応用・次の一手

要約の出力先は変えられます。

要約の結果を、ページではなくメールで毎晩受け取りたいです。要約を作る部分は触らず、出す部分だけ差し替えてください。

チャンネル以外にも同じ形が使えます。

同じ仕組みで、YouTubeではなくニュースサイトの新着記事を要約させたいです。いまの仕組みのうち、どこを変えれば流用できますか。

「新着を取る → 中身を取る → 要約させる → 保存する」の4段は共通なので、取ってくる先を差し替えるだけです。

そして、この手の自動化は必ず静かに壊れます。外部サービスの仕様変更、字幕が取れなくなる、モデル名が消える。エラーは出ないのに中身が空のまま更新され続ける、が一番怖い壊れ方です。対策は サービスが静かに壊れたのを見つけさせる に書きました。