📝

DifyでYoutube字幕と連携するワークフローを作る

2024/06/14に公開

概要

Dify v.0.6.10でYoutubeの字幕を取得する機能が追加されました!
今回は、この機能を使ったワークフローの作成方法を紹介します

https://x.com/gijigae/status/1798733876812202064

前提

  • Difyのインストールやモデルの設定は済んでいるものとします
  • Difyのバージョンが v.0.6.10以上

ワークフロー作成

Youtubeの英語字幕を日本語に翻訳するワークフローの作成方法を紹介します

ワークフローの新規作成

赤枠で囲まれた「最初から作成」を選択した後に、「ワークフロー」を選択し、名前や説明を記入します
最後に、「作成する」ボタンを押せばワークフローの編集ページに遷移します

入力フィールドの追加

「開始」を選択すると表示されるモーダルの「+」を選択し、入力フィールドを追加します。
ここでは、Youtubeの動画のIDを示す「video_id」を追加します。
最後に、「保存」ボタンを教えて下さい

Youtube字幕取得ツールを追加

「開始」ブロックの右端にある「+」を選択し、「ツール」を選択します
ツール一覧の中から「Youtube Transcripts API」を選択します。これが今回新しく追加されたYoutubeの字幕を取得するツールになります。
これで、「開始」ブロックと「Youtube Transcripts API」が繋がりました

API Keyの取得

まだこのツールは使えません。API Keyを発行し、設定しなければいけません。
「承認するには」ボタンを選択し、API Key入力モーダルを表示します。

ここで、「取得方法」のリンクがあるので遷移します。アカウント登録を行えば無料で月100リクエストまで利用できます。

SearchApiのページが表示されるので、「Get 100 Free Requests」を選択しアカウント登録を行ってAPI Keyを発行してください。

登録後、赤枠で囲まれたものが発行されます。これが「API Key」です。これをDifyの先程の欄にコピペして保存します。

YouTube Transcripts APIの設定

まだこのままではツールを利用できません。このツールを利用するためには、2つの入力変数「video_id」と「language」を設定する必要があります。

欄に、/を入力すると、いくつか候補が表示されるので、video_idを選択します。
このvideo_idは、「開始」ブロックで追加したものです。

あとは、「language」には、字幕の言語として英語を表す「en」を入力します。
その他対応している言語ごとの文字列は以下のドキュメントを参照してください。
https://developers.google.com/custom-search/docs/ref_languages?hl=ja

字幕データをLLMで翻訳

次に、「Youtube Transcripts API」の右端の「+」を選択して、ブロック一覧から「LLM」ブロックを選択します

「LLM」ブロックが追加されたら、設定をいくつか行います。
「モデル」は、お好きなモデルを選択してください。今回は「gpt-4o」を設定します

「コンテキスト」は、選択するといくつか候補が表示されるので、「YOUTUBE TRANSCRIPTS API」の「text」を選択します。これでLLM上でYoutubeの字幕が扱えるようになりました。

「SYSTEM」にはコンテキスト(Youtubeの字幕を指定した)を含むプロンプトを記載します。

以下は「SYSTEM」の記入例です
{{コンテキスト}}には、/を入力して表示される一覧の中から「コンテキスト」を選択して置き換えてください

下記は、Youtubeの動画の字幕データです。わかりやすく必ず日本語で翻訳してください。
===========
{{コンテキスト}}

結果の表示

「LLM」ブロックからはtextが出力されます。
最後に、これを表示する「終了」ブロックを「LLM」ブロックの右端の「+」を選択して追加します。

次に「終了」ブロックの設定を行います。
出力変数の「+」を選択して、変数を設定から「LLM」のtextを選択します。

以上で、ワークフローは完成です

実行

それでは作成したワークフローを実行してみましょう

利用する動画はDify公式のv.0.6.9の紹介動画を翻訳してみましょう
この動画のvideo_idv=の値です。これをコピーしましょう。
https://www.youtube.com/watch?v=xxFOOMYnj_g

右上にある「実行」ボタンを押します。Test Runと書かれたモーダルが表示されるので、先程コピーした「video_id」を貼り付け「実行を開始」するとワークフローが実行します。

もしエラーになったら?

もしエラーになった場合は、API Keyや入力フィールドや出力変数がそれぞれのブロックで意図したものが設定されているかを見直してください

実行結果

結果は下記のようになりました

最新バージョン0.6.0の更新により、さらに多くのシナリオでの体験を簡略化するための新機能が追加されました。ワークフローに関する新しい機能を紹介します。

まず、ワークフローをツールとして公開できるようになりました。これにより、エージェントが自動的にワークフローをツールとして呼び出すことが可能になり、またワークフロー内にワークフローを組み込むこともできます。

次に、新しい反復ノードが追加され、より柔軟なマルチステップ生成が可能となりました。三つ目は、パラメータ抽出ノードで、非構造化情報(自然言語など)から構造化パラメータを抽出することができます。これにより、ワークフロー内でのツール呼び出しがより自然になります。

最後に、変数アグリゲータ(以前は変数アサイナーと呼ばれていました)など、さまざまなノードの機能が強化されました。これらの機能を実際の使用例を通して紹介します。今回は、これらのノードを使って自動メール返信ツールを作成する方法をお見せします。

このワークフローは、メール返信の自動化を行います。まず、メールと受信トレイから取得したい最大メール数を設定します。次に、Gmail APIを使用して受信トレイから指定された数のメールを取得し、反復ノードを使ってこれらのメールを一つずつ処理します。それぞれのメールに異なるスタイルで返信されます。

反復処理の中で、まずGmail APIを使用してメッセージの本文を取得します。次に、いくつかのコードノードを使用して関連情報(メール本文、受信者のメールアドレス、送信者のメールアドレス、件名など)を抽出し、それらを配列に格納します。そして、メールの内容に基づいて質問を分類し、異なるLMS(学習管理システム)に振り分けます。例えば、技術的な質問に関するメールであれば、特定のLMSに振り分けられ、そうでなければ別のLMSに振り分けられます。その他の質問がある場合は、「申し訳ありませんが、それについてはお答えできません」という返信を送ります。

その後、新しい強化された変数アグリゲータノードを使用して、これらの異なる分岐を一つにまとめ、管理しやすくします。メールのエンコードや関連情報(受信者のメールアドレス、送信者のメールアドレス、メール本文など)をテンプレートにまとめた後、このワークフローはGmail APIを使用して返信の下書きを作成します。メールはすぐには送信されず、下書きフォルダで内容を確認・修正することができます。

これらのノードは、LM(言語モデル)が返信する内容をデバッグおよびプレビューウィンドウで表示し、メッセージがここに表示されます。このワークフローを試すために、メールを設定し、取得する最大メール数を1に設定します。このワークフローは、たとえば100件や200件のメールを一度に取得しようとすると、当然ながら時間がかかります。ワークフローを実行すると、下書きフォルダにAIが生成したメールが表示されるでしょう。

期待通り、翻訳した結果が得られました。

応用編:動画の内容を要約してほしい

動画が長尺になると、要約してほしいケースがあると思います。
そういった場合も簡単に変更できるのがDifyのいいところです

変更箇所

「LLM」ブロックで設定した「SYSTEM」のプロンプトを下記の様に変えるだけです

下記は、Youtubeの動画の字幕データです。わかりやすく要約し、必ず日本語で翻訳してください。
===========
{{コンテキスト}}

結果

先ほどに比べ要約した結果が返ってきました。(もう少しプロンプトを工夫すればもっと要約されそうですが)

Defの最新アップデートバージョン0.6.0では、さらに多くのシナリオでユーザー体験を向上させるための新機能が追加されました。主な変更点は以下の通りです。

1. ワークフローをツールとして公開できるようになりました。これにより、エージェントが自動的にワークフローをツールとして利用できるほか、ワークフロー内にさらにワークフローを組み込むことが可能です。
2. 新しいイテレーションノードが追加され、より柔軟な多段階生成が可能になりました。
3. パラメータ抽出ノードが追加され、非構造化情報(自然言語など)から構造化パラメータを抽出することができ、より自然なツール呼び出し体験を提供します。
4. 変数アグリゲーター(以前は変数アサイナーと呼ばれていた)など、さまざまなノードの機能が強化されました。

これらの機能を用いたユースケースとして、自動メール返信機能の作成方法を紹介します。このワークフローは、指定された最大数のメールをGmail APIで取得し、それぞれのメールを個別に処理します。各メールの本文やメタデータ(受信者メール、送信者メール、件名など)を抽出し、内容に応じて異なるLMS(学習管理システム)にルーティングします。例えば、技術的な質問に関するメールは特定のLMSに送られ、その他の質問には「お答えできません」という定型文で返信します。

この後、強化された変数アグリゲーターを使用して、異なる分岐を一つにまとめます。最終的にはメールの内容をテンプレートにまとめ、Gmail APIを使って返信のドラフトを作成します。メールはすぐには送信されず、ドラフト内で内容を確認し、必要に応じて修正することができます。

このワークフローを実行すると、AI生成のメールがドラフトに表示されるようになります。最大取得メール数を1件に設定してテストを行うと、短時間で結果が確認できます。

Discussion