こんにちは。
AIを使って、
YouTubeのDIY・修理動画を自動収集し、修理ナレッジとしてまとめるサイトを作りました。
従来のブログ型サイトをやめて、「動画 → AI解析 → 修理ページ生成」という自動生成型の構成に変更しています。
なぜ作ったのか
趣味の話ですが、YouTubeで修理動画を見るのが好きです。
ただ、修理方法を調べると情報が動画ごとに分散していて探しにくいことが多く、
「修理方法がまとまったサイトがあれば便利だな」と思っていました。
自分で修理するときにも、
修理方法が整理されていると理解しやすいです。
そこで、修理情報サイトとして有名な iFixit を参考にしました。
iFixitのように修理情報を体系化したサイトを目指しています。
差別化ポイントは、「AIで修理ページを自動生成する」仕組みです。
システム構成
簡単に構成図を説明します。
- YouTube APIでDIY修理動画を収集
- Whisperで音声文字起こし
- OpenAIで動画要約
- AIで修理カテゴリ分類
- 修理ページ自動生成
YouTube動画 → 修理ナレッジDB化
というパイプラインを作っています。
DB設計
DBは MongoDB Atlas を使用しています。
動画データやAI解析データはスキーマが変化しやすいため、柔軟に構造を変更できる NoSQL を採用しました。
ただしNoSQLでもN+1問題のような取得パターンによってはパフォーマンスが落ちるため注意が必要でした。
インデックスも付与できるので、検索するキーに設定しています。(videosならvideo_idなど)
AIで解析したデータは、後から再利用できるようにすべて保持するコレクション(transcripts)も用意しています。transcript_summariesは要約を格納します。
データを保持しておけば、後から分類ロジックを変更することも可能になります。
channels
devices
videos
repair_pages
repair_topic_videos
repair_topics
transcript_summaries
transcripts
AIの使い方
動画から音声を抽出して要約する
OpenAIが提供している、Whisperを使って動画の音声を解析します。
WhisperはCPUでも動作します。
ただ、動画の解析速度を考えると
GPUがあるとかなり快適です。
私の環境では
NVIDIA GeForce RTX 3060 (VRAM 12GB) を使用しています。
参考:
Whisper large モデルでも動作するため、
ローカル環境での動画解析にかなり重宝しています。
他にもGoogle ColabやVastでGPUをレンタルしたりなどで代用できます。
解析処理は独立したサービスとして動かすため、DockerでWhisper APIを用意しました。
動画IDを受け取って、音声抽出し、OpenAIで要約をしてもらう流れになります
そのまま要約させると存在しない作業内容を生成する
「ハルシネーション」が発生しました。
対策として
・音声がある場合 → transcriptを要約
・音声がない場合 → タイトル + 説明から推測
という分岐処理を入れています。
指示プロンプトは、こんな感じにすると、必ずJSON形式で返るようになります。
const prompt = `\
以下はDIY・修理系 YouTube 動画のメタデータです。
音声データが取得できなかったため、この情報だけから動画の内容を推測し、JSON で出力してください。
タイトル: ${video.title}
説明文: ${descriptionSnippet}
タグ: ${tagsStr}
出力形式(JSON のみ、余分なテキスト不要):
{
"summary": "動画の内容の推測要約(3〜5文、日本語)。冒頭に「※音声なしのため説明文をもとに生成した要約です。」と記載すること",
"keywords": ["キーワード1", "キーワード2", ...],
"products": [{ "name": "商品名または工具名", "reason": "必要な理由" }]
}
注意:
- products は説明文やタイトルから読み取れる工具・部品・材料のみ。不明なら空配列
- keywords は修理対象・作業内容・使用ツールを中心に 5〜10 個
`;
苦労したところ
-
コレクション設計
Claude Codeで瞬時に作成できるのは便利なのですが、あらかじめコレクション設計はしておいたほうがいいです。繋がりがわからなくなりました。
コレクション同士の繋がりは、slug管理を最初からするべきでした。 -
検索条件
あとは、データの取得方法(絞り込み条件)は、同時にドキュメントを残すように指示するべきでした。
想定しているデータが取得できていない時に、何度もAIに聞き直すことになってしまいます。 -
Whisper処理時間
動画の再生時間が長いものは、解析に時間がかかります。
タイムアウトが発生するので、1時間以上のものはスキップするなど、対処が必要でした。 -
画面のデザイン
Claude Codeで画面を生成してもらうと、AIぽいデザインになるので、Figma Makeを使いました。
画面に表示したい内容を指示すれば、素敵なデザインを作ってくれます。
無料だとクレジットが少ないので一発で生成できる内容を指示すると無駄がなかったです。 -
YouTube APIの上限
1日あたり10,000ユニットで使えます。
上限に達しないように、AIに設計を伝えておく必要がありました。
API別のクォータコスト参考
- search.list: 100ユニット/リクエスト
- videos.list: 1ユニット/リクエスト
- AIの出力フォーマット
AIにJSON形式で出力させないと後続処理が壊れてしまうため、プロンプトの設計にかなり時間を使いました。
課題
画像の設定は手動です。
AI生成画像はどうみてもおかしな画像が出来上がります。文字が入ってくるとなおさらです。
管理画面を作って画像設定してますので、ここも自動化できればかなり強いと思います。
作ってみて思ったこと
AIを使えば「記事を書く」こと自体はかなり自動化できますが、システム構成やデータ構造の設計は、人が関与するべき部分だと感じました。
AIにたたき台を作らせたうえで、人間が精査していくスタイルが一番効率が良いと思います。
また、ドキュメントも同時に生成しておけば、作られたもののレビューもしやすくなります。
最終チェックは人が行う必要がありますが、アイデアさえあればAIでかなりの部分を実装できるので、開発スピードは大きく向上しました。
サイト
実際に作ったサイトはこちらです。
まだ試作段階ですが、
AIで修理ナレッジを自動生成する仕組みとして運用しています。
※記事内にAmazonアフィリエイトリンクを含みます